TownieuseCreateBranch.tsx1 match
4const ENDPOINT = "/api/create-branch";
56export function useCreateBranch (projectId: string) {
7const { token } = useAuth();
8const [data, setData] = useState<any>(null);
TownieuseChatLogic.ts1 match
13}
1415export function useChatLogic({
16project,
17branchId,
TownieuseBranches.tsx1 match
4const ENDPOINT = "/api/project-branches";
56export function useBranches (projectId: string) {
7const { token } = useAuth();
8const [data, setData] = useState<any>(null);
TownieuseAuth.tsx1 match
5const ANTHROPIC_KEY = "anthropic_api_key";
67export function useAuth () {
8const [token, setToken, removeToken] = useLocalStorage(TOKEN_KEY, "");
9const [anthropicApiKey, setAnthropicApiKey, removeAnthropicApiKey] = useLocalStorage(ANTHROPIC_KEY, "");
Townietext-editor.ts7 matches
3import fileWithLinesNumbers from "../utils/fileWithLinesNumbers.ts";
45function printFileType(file: any){
6if (file.type === "interval")
7return " (cron)"
14* View a file or directory in a Val Town project
15*/
16async function view(
17vt: ValTown,
18project: any,
71* Replace a string in a file in a Val Town project
72*/
73async function str_replace(
74vt: ValTown,
75project: any,
133* Create a new file in a Val Town project
134*/
135async function create(vt: ValTown, project: any, branch_id: string | undefined, path: string, file_text?: string) {
136let type_: "file" | "http" | "script";
137if (path.includes("backend/index.ts")) type_ = "http";
167* Insert a string at a specific line in a file in a Val Town project
168*/
169async function insert(
170vt: ValTown,
171project: any,
210* Undo the last edit to a file in a Val Town project (not implemented)
211*/
212async function undo_edit(vt: ValTown, project: any, branch_id: string | undefined) {
213return {
214type: "error",
220* Creates a text editor tool for editing files in a Val Town project
221*/
222export function getTextEditorTool(bearerToken: string, project: any, branch_id: string | undefined) {
223const vt = new ValTown({ bearerToken });
224return anthropic.tools.textEditor_20250124({
Towniesystem_prompt.txt12 matches
45- Ask clarifying questions when requirements are ambiguous
6- Provide complete, functional solutions rather than skeleton implementations
7- Test your logic against edge cases before presenting the final solution
8- Ensure all code follows Val Town's specific platform requirements
17- **Never bake in secrets into the code** - always use environment variables
18- Include comments explaining complex logic (avoid commenting obvious operations)
19- Follow modern ES6+ conventions and functional programming practices if possible
2021## Types of triggers
2829```ts
30export default async function (req: Request) {
31return new Response("Hello World");
32}
4041```ts
42export default async function () {
43// Scheduled task code
44}
5253```ts
54export default async function (email: Email) {
55// Process email
56}
60## Val Town Standard Libraries
6162Val Town provides several hosted services and utility functions.
6364### Blob Storage
114```
115116## Val Town Utility Functions
117118Val Town provides several utility functions to help with common project tasks.
119120### Importing Utilities
194โ โโโ database/
195โ โ โโโ migrations.ts # Schema definitions
196โ โ โโโ queries.ts # DB query functions
197โ โ โโโ README.md
198โ โโโ routes/ # Route modules
213โโโ shared/
214โโโ README.md
215โโโ utils.ts # Shared types and functions
216```
217220- Hono is the recommended API framework
221- Main entry point should be `backend/index.ts`
222- **Static asset serving:** Use the utility functions to read and serve project files:
223```ts
224import { readFile, serveFile } from "https://esm.town/v/std/utils@85-main/index.ts";
254- Run migrations on startup or comment out for performance
255- Change table names when modifying schemas rather than altering
256- Export clear query functions with proper TypeScript typing
257258## Common Gotchas and Solutions
Towniestyles.css2 matches
160transition-property: background-color;
161transition-duration: 400ms;
162transition-timing-function: linear;
163}
164769transition-property: color, background-color, border-color, opacity;
770transition-duration: 200ms;
771transition-timing-function: ease-in-out;
772}
773
TowniesoundEffects.ts3 matches
1/**
2* Sound effects utility functions for the application
3*/
47* @returns A Promise that resolves when the sound has started playing
8*/
9export function playBellSound(): Promise<void> {
10return new Promise((resolve) => {
11try {
69* @returns A Promise that resolves when the sound has started playing
70*/
71export function playSimpleNotification(): Promise<void> {
72return new Promise((resolve) => {
73try {
TownieRequireAuthRoute.tsx1 match
7import { useAuth } from "../hooks/useAuth.tsx";
89export function RequireAuthRoute () {
10const location = useLocation();
11const { isAuthenticated } = useAuth();
TownieProjectsRoute.tsx3 matches
4import { Loading } from "./Loading.tsx";
56export function ProjectsRoute () {
7const projects = useProjects();
842}
4344function ProjectCard ({
45user,
46project,
81}
8283function Privacy ({ privacy }: {
84privacy: "public"|"unlisted"|"private";
85}) {