@standardagents/builder 0.10.1-dev.b8746e9 → 0.10.1-dev.d2d335e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.mjs","../src/router/index.ts","../src/api/index.post.ts","../src/api/agents.get.ts","../src/utils/auth.ts","../src/middleware/auth.ts","../src/api/api-keys/index.get.ts","../src/api/api-keys/index.post.ts","../src/api/config.get.ts","../src/api/diagnostics.get.ts","../src/api/events.get.ts","../src/api/models.get.ts","../src/api/new-test.get.ts","../src/api/prompts.get.ts","../src/api/providers.get.ts","../src/api/threads/index.post.ts","../src/api/threads/index.ts","../src/api/tools.get.ts","../src/api/users/index.get.ts","../src/api/users/index.post.ts","../src/api/agents/%5Bname%5D.get.ts","../src/api/api-keys/%5Bid%5D.delete.ts","../src/api/prompts/%5Bname%5D.get.ts","../src/api/threads/%5Bid%5D.delete.ts","../src/api/threads/%5Bid%5D.patch.ts","../src/api/threads/%5Bid%5D.ts","../src/api/tools/%5Bname%5D.get.ts","../src/api/users/%5Bid%5D.delete.ts","../src/api/users/%5Bid%5D.put.ts","../src/api/auth/config.get.ts","../src/api/auth/login.post.ts","../src/api/auth/logout.post.ts","../src/api/auth/me.get.ts","../src/api/models/available.post.ts","../src/api/models/endpoints.post.ts","../src/api/threads/%5Bid%5D/cost.get.ts","../src/api/threads/%5Bid%5D/fs/index.ts","../src/api/threads/%5Bid%5D/logs.get.ts","../src/api/threads/%5Bid%5D/messages.post.ts","../src/api/threads/%5Bid%5D/messages.get.ts","../src/api/threads/%5Bid%5D/rpc.post.ts","../src/api/threads/%5Bid%5D/stop.post.ts","../src/api/threads/%5Bid%5D/stream.ts","../src/api/threads/%5Bid%5D/fs/%5B...path%5D.ts","../src/api/threads/%5Bid%5D/logs/%5BlogId%5D.get.ts","../src/api/threads/%5Bid%5D/messages/%5BmessageId%5D.delete.ts","../src/api/threads/%5Bid%5D/messages/%5BmessageId%5D.patch.ts","../src/built-in-routes.ts"],"names":["index_post_default","toJSONSchema","z","result","index_get_default","loader","normalizePromptContent","name_get_default","id_delete_default","resolveIconUrl","config_get_default","token","durableId","stub","binary","bytes"],"mappings":"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","file":"built-in-routes.js","sourcesContent":["const NullProtoObj = /* @__PURE__ */ (() => {\n\tconst e = function() {};\n\treturn e.prototype = Object.create(null), Object.freeze(e.prototype), e;\n})();\n\n/**\n* Create a new router context.\n*/\nfunction createRouter() {\n\treturn {\n\t\troot: { key: \"\" },\n\t\tstatic: new NullProtoObj()\n\t};\n}\n\nfunction splitPath(path) {\n\tconst [_, ...s] = path.split(\"/\");\n\treturn s[s.length - 1] === \"\" ? s.slice(0, -1) : s;\n}\nfunction getMatchParams(segments, paramsMap) {\n\tconst params = new NullProtoObj();\n\tfor (const [index, name] of paramsMap) {\n\t\tconst segment = index < 0 ? segments.slice(-1 * index).join(\"/\") : segments[index];\n\t\tif (typeof name === \"string\") params[name] = segment;\n\t\telse {\n\t\t\tconst match = segment.match(name);\n\t\t\tif (match) for (const key in match.groups) params[key] = match.groups[key];\n\t\t}\n\t}\n\treturn params;\n}\n\n/**\n* Add a route to the router context.\n*/\nfunction addRoute(ctx, method = \"\", path, data) {\n\tmethod = method.toUpperCase();\n\tif (path.charCodeAt(0) !== 47) path = `/${path}`;\n\tconst segments = splitPath(path);\n\tlet node = ctx.root;\n\tlet _unnamedParamIndex = 0;\n\tconst paramsMap = [];\n\tconst paramsRegexp = [];\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tconst segment = segments[i];\n\t\tif (segment.startsWith(\"**\")) {\n\t\t\tif (!node.wildcard) node.wildcard = { key: \"**\" };\n\t\t\tnode = node.wildcard;\n\t\t\tparamsMap.push([\n\t\t\t\t-i,\n\t\t\t\tsegment.split(\":\")[1] || \"_\",\n\t\t\t\tsegment.length === 2\n\t\t\t]);\n\t\t\tbreak;\n\t\t}\n\t\tif (segment === \"*\" || segment.includes(\":\")) {\n\t\t\tif (!node.param) node.param = { key: \"*\" };\n\t\t\tnode = node.param;\n\t\t\tif (segment === \"*\") paramsMap.push([\n\t\t\t\ti,\n\t\t\t\t`_${_unnamedParamIndex++}`,\n\t\t\t\ttrue\n\t\t\t]);\n\t\t\telse if (segment.includes(\":\", 1)) {\n\t\t\t\tconst regexp = getParamRegexp(segment);\n\t\t\t\tparamsRegexp[i] = regexp;\n\t\t\t\tnode.hasRegexParam = true;\n\t\t\t\tparamsMap.push([\n\t\t\t\t\ti,\n\t\t\t\t\tregexp,\n\t\t\t\t\tfalse\n\t\t\t\t]);\n\t\t\t} else paramsMap.push([\n\t\t\t\ti,\n\t\t\t\tsegment.slice(1),\n\t\t\t\tfalse\n\t\t\t]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = node.static?.[segment];\n\t\tif (child) node = child;\n\t\telse {\n\t\t\tconst staticNode = { key: segment };\n\t\t\tif (!node.static) node.static = new NullProtoObj();\n\t\t\tnode.static[segment] = staticNode;\n\t\t\tnode = staticNode;\n\t\t}\n\t}\n\tconst hasParams = paramsMap.length > 0;\n\tif (!node.methods) node.methods = new NullProtoObj();\n\tnode.methods[method] ??= [];\n\tnode.methods[method].push({\n\t\tdata: data || null,\n\t\tparamsRegexp,\n\t\tparamsMap: hasParams ? paramsMap : void 0\n\t});\n\tif (!hasParams) ctx.static[path] = node;\n}\nfunction getParamRegexp(segment) {\n\tconst regex = segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\");\n\treturn /* @__PURE__ */ new RegExp(`^${regex}$`);\n}\n\n/**\n* Find a route by path.\n*/\nfunction findRoute(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst staticNode = ctx.static[path];\n\tif (staticNode && staticNode.methods) {\n\t\tconst staticMatch = staticNode.methods[method] || staticNode.methods[\"\"];\n\t\tif (staticMatch !== void 0) return staticMatch[0];\n\t}\n\tconst segments = splitPath(path);\n\tconst match = _lookupTree(ctx, ctx.root, method, segments, 0)?.[0];\n\tif (match === void 0) return;\n\tif (opts?.params === false) return match;\n\treturn {\n\t\tdata: match.data,\n\t\tparams: match.paramsMap ? getMatchParams(segments, match.paramsMap) : void 0\n\t};\n}\nfunction _lookupTree(ctx, node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods) {\n\t\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\t\tif (match) return match;\n\t\t}\n\t\tif (node.param && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\tif (node.wildcard && node.wildcard.methods) {\n\t\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (node.static) {\n\t\tconst staticChild = node.static[segment];\n\t\tif (staticChild) {\n\t\t\tconst match = _lookupTree(ctx, staticChild, method, segments, index + 1);\n\t\t\tif (match) return match;\n\t\t}\n\t}\n\tif (node.param) {\n\t\tconst match = _lookupTree(ctx, node.param, method, segments, index + 1);\n\t\tif (match) {\n\t\t\tif (node.param.hasRegexParam) {\n\t\t\t\tconst exactMatch = match.find((m) => m.paramsRegexp[index]?.test(segment)) || match.find((m) => !m.paramsRegexp[index]);\n\t\t\t\treturn exactMatch ? [exactMatch] : void 0;\n\t\t\t}\n\t\t\treturn match;\n\t\t}\n\t}\n\tif (node.wildcard && node.wildcard.methods) return node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n}\n\n/**\n* Remove a route from the router context.\n*/\nfunction removeRoute(ctx, method, path) {\n\tconst segments = splitPath(path);\n\treturn _remove(ctx.root, method || \"\", segments, 0);\n}\nfunction _remove(node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods && method in node.methods) {\n\t\t\tdelete node.methods[method];\n\t\t\tif (Object.keys(node.methods).length === 0) node.methods = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (segment === \"*\") {\n\t\tif (node.param) {\n\t\t\t_remove(node.param, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.param)) node.param = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tif (segment.startsWith(\"**\")) {\n\t\tif (node.wildcard) {\n\t\t\t_remove(node.wildcard, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.wildcard)) node.wildcard = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst childNode = node.static?.[segment];\n\tif (childNode) {\n\t\t_remove(childNode, method, segments, index + 1);\n\t\tif (_isEmptyNode(childNode)) {\n\t\t\tdelete node.static[segment];\n\t\t\tif (Object.keys(node.static).length === 0) node.static = void 0;\n\t\t}\n\t}\n}\nfunction _isEmptyNode(node) {\n\treturn node.methods === void 0 && node.static === void 0 && node.param === void 0 && node.wildcard === void 0;\n}\n\n/**\n* Find all route patterns that match the given path.\n*/\nfunction findAllRoutes(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst segments = splitPath(path);\n\tconst matches = _findAll(ctx, ctx.root, method, segments, 0);\n\tif (opts?.params === false) return matches;\n\treturn matches.map((m) => {\n\t\treturn {\n\t\t\tdata: m.data,\n\t\t\tparams: m.paramsMap ? getMatchParams(segments, m.paramsMap) : void 0\n\t\t};\n\t});\n}\nfunction _findAll(ctx, node, method, segments, index, matches = []) {\n\tconst segment = segments[index];\n\tif (node.wildcard && node.wildcard.methods) {\n\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\tif (node.param) {\n\t\t_findAll(ctx, node.param, method, segments, index + 1, matches);\n\t\tif (index === segments.length && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) matches.push(...match);\n\t\t\t}\n\t\t}\n\t}\n\tconst staticChild = node.static?.[segment];\n\tif (staticChild) _findAll(ctx, staticChild, method, segments, index + 1, matches);\n\tif (index === segments.length && node.methods) {\n\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\treturn matches;\n}\n\nfunction routeToRegExp(route = \"/\") {\n\tconst reSegments = [];\n\tlet idCtr = 0;\n\tfor (const segment of route.split(\"/\")) {\n\t\tif (!segment) continue;\n\t\tif (segment === \"*\") reSegments.push(`(?<_${idCtr++}>[^/]*)`);\n\t\telse if (segment.startsWith(\"**\")) reSegments.push(segment === \"**\" ? \"?(?<_>.*)\" : `?(?<${segment.slice(3)}>.+)`);\n\t\telse if (segment.includes(\":\")) reSegments.push(segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\"));\n\t\telse reSegments.push(segment);\n\t}\n\treturn /* @__PURE__ */ new RegExp(`^/${reSegments.join(\"/\")}/?$`);\n}\n\nexport { NullProtoObj, addRoute, createRouter, findAllRoutes, findRoute, removeRoute, routeToRegExp };","import { createRouter, findRoute } from \"rou3\";\nimport type { ThreadInstance, ThreadMetadata } from \"../agents/types.js\";\n\n/**\n * Minimum required environment bindings for thread endpoints.\n * User's Env interface should extend this.\n *\n * Uses Rpc.DurableObjectBranded to allow users to specify their own\n * Durable Object types that extend DurableThread/DurableAgentBuilder.\n */\nexport interface ThreadEnv {\n AGENT_BUILDER_THREAD: DurableObjectNamespace<Rpc.DurableObjectBranded>;\n AGENT_BUILDER: DurableObjectNamespace<Rpc.DurableObjectBranded>; // Root DO for thread/config lookups\n // Allow additional bindings from user\n [key: string]: unknown;\n}\n\n/**\n * Virtual module registry types (injected at runtime by plugin)\n */\nexport type VirtualModuleLoader<T> = () => Promise<T>;\nexport type VirtualModuleRegistry<T> = Record<string, VirtualModuleLoader<T>>;\n\n/**\n * Controller context passed to route handlers.\n * Includes optional virtual module registries that are injected at runtime.\n */\nexport interface ControllerContext<Env = any> {\n req: Request;\n params: Record<string, string>;\n env: Env;\n url: URL;\n\n // Virtual module registries (injected at runtime)\n agents?: VirtualModuleRegistry<unknown>;\n agentNames?: string[];\n prompts?: VirtualModuleRegistry<unknown>;\n promptNames?: string[];\n models?: VirtualModuleRegistry<unknown>;\n modelNames?: string[];\n tools?: VirtualModuleRegistry<unknown>;\n hooks?: VirtualModuleRegistry<unknown>;\n config?: Record<string, unknown>;\n}\n\nexport type Controller<Env = any> = (\n context: ControllerContext<Env>\n) =>\n | string\n | Promise<string>\n | Response\n | Promise<Response>\n | ReadableStream\n | Promise<ReadableStream>\n | null\n | Promise<null>\n | void\n | Promise<void>\n | Promise<object>\n | object;\n\nexport interface ThreadEndpointContext {\n req: Request;\n thread: {\n instance: ThreadInstance;\n metadata: ThreadMetadata;\n };\n}\n\nexport async function route<Env = any>(\n url: URL,\n request: Request,\n env: Env\n): Promise<Response | null> {\n const router = createRouter<() => Promise<Controller>>();\n // @ts-ignore-next-line\n const routesLoader = await import(\"virtual:@standardagents-routes\");\n routesLoader.default(router);\n\n // Check for API routes first\n const route = findRoute<() => Promise<Controller>>(\n router,\n request.method.toUpperCase(),\n url.pathname\n );\n\n if (route) {\n const controller = await route.data();\n const context: ControllerContext = {\n req: request,\n params: route.params || {},\n env: env,\n url: url,\n };\n const result = await controller(context);\n\n if (result instanceof Response) {\n return result;\n }\n if (typeof result === \"string\") {\n return new Response(result, {\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n });\n }\n return Response.json(result);\n }\n\n // No API route found - not handled by this router\n // Static assets and SPA routing are handled by Cloudflare Workers Assets binding\n // configured in wrangler.jsonc\n return null;\n}\n\nexport function defineController<Env = any>(controller: Controller<Env>): Controller<Env> {\n return controller;\n}\n\n/**\n * Define a thread-specific endpoint that has access to the thread's DurableObject instance and metadata.\n * This wraps defineController and automatically looks up the thread by ID from the URL params.\n *\n * @param handler - Function that receives the request and thread context\n * @returns A Controller that can be used with the router\n *\n * @example\n * // agentbuilder/api/status.ts\n * export default defineThreadEndpoint(async (req, { thread }) => {\n * const messages = await thread.instance.getMessages();\n * return Response.json({ status: \"ok\", messageCount: messages.length });\n * });\n */\nexport function defineThreadEndpoint<Env extends ThreadEnv = ThreadEnv>(\n handler: (\n req: Request,\n context: ThreadEndpointContext[\"thread\"]\n ) => Response | Promise<Response>\n): Controller<Env> {\n return defineController<Env>(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Get thread metadata from DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const metadata = await agentBuilder.getThread(threadId) as ThreadMetadata | null;\n\n if (!metadata) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Create ThreadInstance reference\n // Note: We can't access ctx and env directly, but we can call RPC methods\n const instance = stub as unknown as ThreadInstance;\n\n // Call handler with thread context\n return await handler(req, {\n instance,\n metadata,\n });\n } catch (error: any) {\n console.error(`Error in thread endpoint for ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Internal server error\" },\n { status: 500 }\n );\n }\n });\n}\n","import { defineController } from \"../router/index\";\n\nexport default defineController(() => {\n const stream = new ReadableStream({\n start(controller) {\n const text = \"hello world\";\n let index = 0;\n const next = () => {\n if (index < text.length) {\n controller.enqueue(new TextEncoder().encode(text[index]));\n index++;\n setTimeout(next, 100);\n } else {\n controller.close();\n }\n };\n next();\n },\n });\n return new Response(stream);\n});\n","import { defineController } from '../router/index.js';\nimport type { AgentDefinition } from '../sdk/defineAgent.js';\n\n/**\n * GET /api/agents\n *\n * List all defined agents from the agentbuilder/agents directory.\n * Returns agent configuration data loaded from TypeScript files.\n *\n * Returns:\n * - HTTP 200: { agents: Array<{ id, title, type, sideA, sideB, ... }> }\n */\nexport default defineController(async ({ agents, agentNames, prompts, promptNames }) => {\n if (!agents || !agentNames) {\n return Response.json({ agents: [] });\n }\n\n // Build a map of prompts for quick lookup\n const promptMap: Record<string, any> = {};\n if (prompts && promptNames) {\n await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (loader) {\n promptMap[name] = await loader();\n }\n } catch (error) {\n // Skip failed prompts\n }\n })\n );\n }\n\n const agentList = await Promise.all(\n agentNames.map(async (name: string) => {\n try {\n const loader = agents[name];\n if (!loader) {\n return null;\n }\n const definition = await loader() as AgentDefinition;\n\n // Get prompt names for sides\n const sideAPrompt = promptMap[definition.sideA?.prompt];\n const sideBPrompt = definition.sideB\n ? promptMap[definition.sideB?.prompt]\n : null;\n\n return {\n id: definition.name,\n name: definition.name,\n title: definition.title,\n type: definition.type || 'ai_human',\n\n // Side A configuration\n side_a_label: definition.sideA?.label || null,\n side_a_agent_prompt: definition.sideA?.prompt,\n side_a_agent_prompt_name: sideAPrompt?.name || definition.sideA?.prompt,\n side_a_stop_on_response:\n definition.sideA?.stopOnResponse !== undefined\n ? definition.sideA.stopOnResponse\n : true,\n side_a_stop_tool: definition.sideA?.stopTool || null,\n side_a_stop_tool_response_property:\n definition.sideA?.stopToolResponseProperty || null,\n side_a_max_turns: definition.sideA?.maxTurns || null,\n side_a_end_conversation_tool:\n definition.sideA?.endConversationTool || null,\n side_a_manual_stop_condition:\n definition.sideA?.manualStopCondition || false,\n\n // Side B configuration (if dual_ai)\n side_b_label: definition.sideB?.label || null,\n side_b_agent_prompt: definition.sideB?.prompt || null,\n side_b_agent_prompt_name: sideBPrompt?.name || definition.sideB?.prompt || null,\n side_b_stop_on_response:\n definition.sideB?.stopOnResponse !== undefined\n ? definition.sideB.stopOnResponse\n : true,\n side_b_stop_tool: definition.sideB?.stopTool || null,\n side_b_stop_tool_response_property:\n definition.sideB?.stopToolResponseProperty || null,\n side_b_max_turns: definition.sideB?.maxTurns || null,\n side_b_end_conversation_tool:\n definition.sideB?.endConversationTool || null,\n side_b_manual_stop_condition:\n definition.sideB?.manualStopCondition || false,\n\n // Session configuration\n max_session_turns: definition.maxSessionTurns || null,\n\n // Tool exposure\n expose_as_tool: definition.exposeAsTool || false,\n tool_description: definition.toolDescription || null,\n\n // Tags\n tags: definition.tags || [],\n\n created_at: Math.floor(Date.now() / 1000),\n };\n } catch (error) {\n console.error(`Error loading agent ${name}:`, error);\n return null;\n }\n })\n );\n\n // Filter out any null entries from failed loads\n const validAgents = agentList.filter(Boolean);\n\n return Response.json({ agents: validAgents });\n});\n","/**\n * Authentication utilities for user sessions, API keys, and password hashing\n */\n\n/**\n * Generate a cryptographically secure random string\n */\nexport function generateSecureToken(length: number = 32): string {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate a user session token with prefix\n */\nexport function generateUserToken(): string {\n return `agtuser_${generateSecureToken(32)}`;\n}\n\n/**\n * Generate an API key with prefix\n */\nexport function generateApiKey(): string {\n return `agtbldr_${generateSecureToken(32)}`;\n}\n\n/**\n * Hash a password using PBKDF2\n */\nexport async function hashPassword(password: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(password);\n\n // Generate a random salt\n const salt = crypto.getRandomValues(new Uint8Array(16));\n\n // Import the password as a key\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n data,\n { name: 'PBKDF2' },\n false,\n ['deriveBits']\n );\n\n // Derive bits using PBKDF2\n const derivedBits = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100000,\n hash: 'SHA-256'\n },\n keyMaterial,\n 256\n );\n\n // Combine salt and hash\n const hashArray = new Uint8Array(derivedBits);\n const combined = new Uint8Array(salt.length + hashArray.length);\n combined.set(salt);\n combined.set(hashArray, salt.length);\n\n // Return as base64\n return bufferToBase64(combined);\n}\n\n/**\n * Verify a password against its hash\n */\nexport async function verifyPassword(password: string, hash: string): Promise<boolean> {\n try {\n const combined = base64ToBuffer(hash);\n\n // Extract salt and hash\n const salt = combined.slice(0, 16);\n const storedHash = combined.slice(16);\n\n const encoder = new TextEncoder();\n const data = encoder.encode(password);\n\n // Import the password as a key\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n data,\n { name: 'PBKDF2' },\n false,\n ['deriveBits']\n );\n\n // Derive bits using the same salt\n const derivedBits = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100000,\n hash: 'SHA-256'\n },\n keyMaterial,\n 256\n );\n\n const derivedHash = new Uint8Array(derivedBits);\n\n // Compare hashes\n if (derivedHash.length !== storedHash.length) {\n return false;\n }\n\n let matches = true;\n for (let i = 0; i < derivedHash.length; i++) {\n if (derivedHash[i] !== storedHash[i]) {\n matches = false;\n }\n }\n\n return matches;\n } catch (error) {\n console.error('Error verifying password:', error);\n return false;\n }\n}\n\n/**\n * Hash a token or API key using SHA-256\n */\nexport async function hashToken(token: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(token);\n\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = new Uint8Array(hashBuffer);\n\n return Array.from(hashArray, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Extract the last N characters from a string\n */\nexport function getLastChars(str: string, count: number = 5): string {\n return str.slice(-count);\n}\n\n/**\n * Extract the prefix from a token (e.g., \"agtuser_\" or \"agtbldr_\")\n */\nexport function getTokenPrefix(token: string): string {\n const match = token.match(/^([^_]+_)/);\n return match ? match[1] : '';\n}\n\n/**\n * Validate token format\n */\nexport function isValidUserToken(token: string): boolean {\n return token.startsWith('agtuser_') && token.length > 10;\n}\n\n/**\n * Validate API key format\n */\nexport function isValidApiKey(key: string): boolean {\n return key.startsWith('agtbldr_') && key.length > 10;\n}\n\n/**\n * Generate a UUID v4\n */\nexport function generateId(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Sign a token payload using HMAC-SHA256 with the encryption key\n * Returns a signed token in the format: base64(payload).base64(signature)\n */\nexport async function signToken(payload: string, encryptionKey: string): Promise<string> {\n const encoder = new TextEncoder();\n\n // Import the encryption key for HMAC\n const keyData = encoder.encode(encryptionKey);\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n // Sign the payload\n const payloadData = encoder.encode(payload);\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, payloadData);\n\n // Convert to base64\n const payloadB64 = bufferToBase64(new Uint8Array(payloadData));\n const signatureB64 = bufferToBase64(new Uint8Array(signature));\n\n return `${payloadB64}.${signatureB64}`;\n}\n\n/**\n * Verify a signed token and extract its payload\n * Returns the payload if valid, null if invalid\n */\nexport async function verifySignedToken(signedToken: string, encryptionKey: string): Promise<string | null> {\n try {\n const parts = signedToken.split('.');\n if (parts.length !== 2) {\n return null;\n }\n\n const [payloadB64, signatureB64] = parts;\n const encoder = new TextEncoder();\n\n // Import the encryption key for HMAC\n const keyData = encoder.encode(encryptionKey);\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify']\n );\n\n // Decode the payload and signature\n const payloadData = base64ToBuffer(payloadB64);\n const signature = base64ToBuffer(signatureB64);\n\n // Verify the signature\n const isValid = await crypto.subtle.verify('HMAC', cryptoKey, signature, payloadData);\n\n if (!isValid) {\n return null;\n }\n\n // Decode payload to string\n const decoder = new TextDecoder();\n return decoder.decode(payloadData);\n } catch (error) {\n console.error('Error verifying signed token:', error);\n return null;\n }\n}\n\n/**\n * Generate a signed super admin token\n * Payload format: super_admin:timestamp:nonce\n */\nexport async function generateSuperAdminToken(encryptionKey: string): Promise<string> {\n const timestamp = Date.now();\n const nonce = generateSecureToken(16);\n const payload = `super_admin:${timestamp}:${nonce}`;\n return await signToken(payload, encryptionKey);\n}\n\n/**\n * Verify a super admin token\n * Returns true if valid, false otherwise\n */\nexport async function verifySuperAdminToken(token: string, encryptionKey: string): Promise<boolean> {\n const payload = await verifySignedToken(token, encryptionKey);\n if (!payload) {\n return false;\n }\n\n // Check payload format\n const parts = payload.split(':');\n if (parts.length !== 3 || parts[0] !== 'super_admin') {\n return false;\n }\n\n // Optionally check timestamp for expiration (30 days)\n const timestamp = parseInt(parts[1], 10);\n const age = Date.now() - timestamp;\n const maxAge = 30 * 24 * 60 * 60 * 1000; // 30 days\n\n if (age > maxAge) {\n return false;\n }\n\n return true;\n}\n\n// Helper functions\nfunction bufferToBase64(buffer: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < buffer.byteLength; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToBuffer(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","/**\n * Authentication middleware for protecting API routes\n *\n * Supports multiple authentication types:\n * - Super admin token (signed with ENCRYPTION_KEY)\n * - User session token (validated against DurableAgentBuilder)\n * - API key (validated against DurableAgentBuilder)\n */\n\nimport {\n verifySuperAdminToken,\n hashToken,\n isValidUserToken,\n isValidApiKey,\n} from '../utils/auth.js';\n\nexport interface AuthUser {\n id: string;\n username: string;\n role: string;\n}\n\nexport interface AuthContext {\n user: AuthUser;\n authType: 'super_admin' | 'session' | 'api_key';\n}\n\n/**\n * Extract bearer token from Authorization header or query parameter (for WebSockets)\n */\nfunction extractBearerToken(request: Request): string | null {\n // First try Authorization header\n const authHeader = request.headers.get('Authorization');\n if (authHeader && authHeader.startsWith('Bearer ')) {\n return authHeader.substring(7);\n }\n\n // For WebSocket upgrade requests, check query parameter\n const isWebSocket =\n request.headers.get('upgrade')?.toLowerCase() === 'websocket';\n if (isWebSocket) {\n try {\n const url = new URL(request.url);\n const token = url.searchParams.get('token');\n if (token) {\n return token;\n }\n } catch (err) {\n // Invalid URL, continue\n }\n }\n\n return null;\n}\n\n/**\n * Get DurableAgentBuilder singleton stub\n */\nfunction getAgentBuilder(env: any): any {\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n return env.AGENT_BUILDER.get(agentBuilderId);\n}\n\n/**\n * Authenticate a request using various token types\n */\nexport async function authenticate(\n request: Request,\n env: any\n): Promise<AuthContext | null> {\n const token = extractBearerToken(request);\n\n if (!token) {\n return null;\n }\n\n // Check if it's a signed super admin token (if super admin is configured)\n if (env.SUPER_ADMIN_PASSWORD && env.ENCRYPTION_KEY) {\n // Token contains a dot, might be a signed token\n if (token.includes('.')) {\n const isValidSuperAdmin = await verifySuperAdminToken(\n token,\n env.ENCRYPTION_KEY\n );\n if (isValidSuperAdmin) {\n return {\n user: {\n id: 'super_admin',\n username: 'admin',\n role: 'admin',\n },\n authType: 'super_admin',\n };\n }\n }\n }\n\n // Check if it's a user session token\n if (isValidUserToken(token)) {\n const tokenHash = await hashToken(token);\n const agentBuilder = getAgentBuilder(env);\n\n const session = await agentBuilder.validateSession(tokenHash);\n if (session) {\n // Get user details\n const user = await agentBuilder.getUserById(session.user_id);\n if (user) {\n return {\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n },\n authType: 'session',\n };\n }\n }\n }\n\n // Check if it's an API key\n if (isValidApiKey(token)) {\n const keyHash = await hashToken(token);\n const agentBuilder = getAgentBuilder(env);\n\n const apiKey = await agentBuilder.validateApiKey(keyHash);\n if (apiKey) {\n // Get user details\n const user = await agentBuilder.getUserById(apiKey.user_id);\n if (user) {\n return {\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n },\n authType: 'api_key',\n };\n }\n }\n }\n\n return null;\n}\n\n/**\n * Middleware to require authentication\n * Returns 401 if not authenticated\n */\nexport async function requireAuth(\n request: Request,\n env: any\n): Promise<AuthContext | Response> {\n const authContext = await authenticate(request, env);\n\n if (!authContext) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n return authContext;\n}\n\n/**\n * Middleware to require admin role\n * Returns 401 if not authenticated, 403 if not admin\n */\nexport async function requireAdmin(\n request: Request,\n env: any\n): Promise<AuthContext | Response> {\n const result = await requireAuth(request, env);\n\n if (result instanceof Response) {\n return result;\n }\n\n if (result.user.role !== 'admin') {\n return new Response(\n JSON.stringify({ error: 'Forbidden: Admin access required' }),\n {\n status: 403,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n }\n\n return result;\n}\n","import { defineController } from '../../router/index.js';\nimport { requireAuth } from '../../middleware/auth.js';\n\n/**\n * GET /api/api-keys\n *\n * List API keys for the authenticated user.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { keys: [{ id, name, key_prefix, last_five, created_at, last_used_at }] }\n * - HTTP 401: Not authenticated\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAuth(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Super admin has no API keys - they need to create a user first\n if (authResult.authType === 'super_admin') {\n return Response.json({ keys: [], message: 'Super admin has no API keys. Create a user account to manage API keys.' });\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n const keys = await agentBuilder.listApiKeys(authResult.user.id);\n\n return Response.json({ keys });\n } catch (error: any) {\n console.error('List API keys error:', error);\n return Response.json(\n { error: error.message || 'Failed to list API keys' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAuth } from '../../middleware/auth.js';\nimport { generateApiKey, hashToken, getLastChars, getTokenPrefix } from '../../utils/auth.js';\n\n/**\n * POST /api/api-keys\n *\n * Create a new API key for the authenticated user.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Body:\n * - name: string (name/description for the API key)\n *\n * Returns:\n * - HTTP 201: { key: <full_api_key>, id, name, key_prefix, last_five, created_at }\n * NOTE: The full key is only returned once on creation\n * - HTTP 400: Missing required fields\n * - HTTP 401: Not authenticated\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAuth(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Super admin cannot create API keys - they need to create a user first\n if (authResult.authType === 'super_admin') {\n return Response.json(\n { error: 'Super admin cannot create API keys. Please create a user account first.' },\n { status: 400 }\n );\n }\n\n const body = await req.json() as { name?: string };\n const { name } = body;\n\n if (!name || typeof name !== 'string') {\n return Response.json(\n { error: 'Name is required' },\n { status: 400 }\n );\n }\n\n if (name.length < 1 || name.length > 100) {\n return Response.json(\n { error: 'Name must be between 1 and 100 characters' },\n { status: 400 }\n );\n }\n\n // Generate the API key\n const apiKey = generateApiKey();\n const keyHash = await hashToken(apiKey);\n const keyPrefix = getTokenPrefix(apiKey);\n const lastFive = getLastChars(apiKey, 5);\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n const id = await agentBuilder.createApiKey({\n name,\n key_hash: keyHash,\n key_prefix: keyPrefix,\n last_five: lastFive,\n user_id: authResult.user.id,\n });\n\n const now = Math.floor(Date.now() / 1000);\n\n return Response.json({\n key: apiKey, // Only returned once on creation\n id,\n name,\n key_prefix: keyPrefix,\n last_five: lastFive,\n created_at: now,\n }, { status: 201 });\n } catch (error: any) {\n console.error('Create API key error:', error);\n return Response.json(\n { error: error.message || 'Failed to create API key' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../router/index\";\n\nexport default defineController(async ({ config }) => {\n return Response.json(config);\n});\n","import { defineController } from '../router/index.js';\nimport type { AgentDefinition } from '../sdk/defineAgent.js';\n\n/**\n * GET /api/diagnostics\n *\n * Returns diagnostic warnings about the current configuration.\n * This includes:\n * - Duplicate tool names (filesystem tools, prompts, agents with same name)\n *\n * Returns:\n * - HTTP 200: { warnings: Array<{ type, message, details }> }\n */\nexport default defineController(async ({ tools, prompts, promptNames, agents, agentNames }) => {\n const warnings: Array<{ type: string; message: string; details: any }> = [];\n\n // Track tool names and their sources\n const toolNameSources = new Map<string, Set<string>>();\n\n // Check filesystem tools\n if (tools) {\n const toolNames = Object.keys(tools);\n for (const name of toolNames) {\n const sources = toolNameSources.get(name) || new Set();\n sources.add('native tool');\n toolNameSources.set(name, sources);\n }\n }\n\n // Check prompts (all prompts are exposed as tools)\n if (prompts && promptNames) {\n for (const name of promptNames) {\n const sources = toolNameSources.get(name) || new Set();\n sources.add('prompt');\n toolNameSources.set(name, sources);\n }\n }\n\n // Check agents exposed as tools\n if (agents && agentNames) {\n for (const name of agentNames) {\n try {\n const loader = agents[name];\n if (loader) {\n const definition = await loader() as AgentDefinition;\n if (definition.exposeAsTool) {\n const sources = toolNameSources.get(name) || new Set();\n sources.add('agent');\n toolNameSources.set(name, sources);\n }\n }\n } catch {\n // Skip agents that fail to load\n }\n }\n }\n\n // Find duplicates\n for (const [name, sources] of toolNameSources) {\n if (sources.size > 1) {\n warnings.push({\n type: 'duplicate_tool_name',\n message: `Duplicate tool name \"${name}\" detected`,\n details: {\n name,\n sources: [...sources],\n },\n });\n }\n }\n\n return Response.json({ warnings });\n});\n","import { defineController } from '../router/index.js';\n\n/**\n * GET /api/events\n *\n * WebSocket endpoint for real-time events from the AgentBuilder system.\n *\n * Events:\n * - thread_created: { type: 'thread_created', thread: ThreadRegistryEntry }\n * - thread_deleted: { type: 'thread_deleted', threadId: string }\n *\n * Usage:\n * Connect via WebSocket to receive real-time updates when threads are\n * created or deleted in the system.\n */\nexport default defineController(async ({ req, env }) => {\n // Only handle WebSocket upgrade requests\n if (req.headers.get('upgrade')?.toLowerCase() !== 'websocket') {\n return Response.json(\n { error: 'This endpoint requires a WebSocket connection' },\n { status: 400 }\n );\n }\n\n try {\n // Forward the WebSocket upgrade to the DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const stub = env.AGENT_BUILDER.get(agentBuilderId);\n return await stub.fetch(req);\n } catch (error: any) {\n console.error('Error establishing events WebSocket:', error);\n return Response.json(\n { error: error.message || 'Failed to establish WebSocket connection' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../router/index.js';\nimport type { ModelDefinition } from '../sdk/defineModel.js';\n\n/**\n * GET /api/models\n *\n * List all defined models from the agentbuilder/models directory.\n * Returns model configuration data loaded from TypeScript files.\n *\n * Returns:\n * - HTTP 200: { models: Array<{ id, name, provider, model, fallbacks, ... }> }\n */\nexport default defineController(async ({ models, modelNames }) => {\n if (!models || !modelNames) {\n return Response.json({ models: [] });\n }\n\n const modelList = await Promise.all(\n modelNames.map(async (name: string) => {\n try {\n const loader = models[name];\n if (!loader) {\n return null;\n }\n const definition = await loader() as ModelDefinition;\n\n // Build fallback objects for display\n const fallbackObjects = (definition.fallbacks || []).map(\n (fallbackName: string, index: number) => ({\n id: fallbackName,\n name: fallbackName,\n order: index,\n })\n );\n\n return {\n id: definition.name,\n name: definition.name,\n provider: definition.provider,\n model: definition.model,\n input_price: definition.inputPrice,\n output_price: definition.outputPrice,\n cached_price: definition.cachedPrice,\n included_providers: definition.includedProviders,\n fallbacks: fallbackObjects,\n created_at: Math.floor(Date.now() / 1000), // Not persisted, use current time\n };\n } catch (error) {\n console.error(`Error loading model ${name}:`, error);\n return null;\n }\n })\n );\n\n // Filter out any null entries from failed loads\n const validModels = modelList.filter(Boolean);\n\n return Response.json({ models: validModels });\n});\n","import { defineController } from '../router'\n\nexport default defineController(async ({ req, params, env }) => {\n return { message: 'Modified new test API route', timestamp: new Date().toISOString() }\n})","import { defineController } from '../router/index.js';\nimport { z } from 'zod';\nimport type { PromptDefinition } from '../sdk/definePrompt.js';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || '_def' in schema)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n}\n\n/**\n * Normalize prompt content for API response.\n * - Arrays (StructuredPrompt) are serialized to JSON strings for backward compatibility\n * - Plain strings are returned as-is\n */\nfunction normalizePromptContent(prompt: string | any[] | undefined): string {\n if (!prompt) return '';\n // If it's an array (StructuredPrompt), serialize to JSON\n if (Array.isArray(prompt)) {\n return JSON.stringify(prompt);\n }\n // Plain string, return as-is\n return prompt;\n}\n\n/**\n * GET /api/prompts\n *\n * List all defined prompts from the agentbuilder/prompts directory.\n * Returns prompt configuration data loaded from TypeScript files.\n *\n * Returns:\n * - HTTP 200: { prompts: Array<{ id, name, tool_description, prompt, model, ... }> }\n */\nexport default defineController(async ({ prompts, promptNames, models, modelNames }) => {\n if (!prompts || !promptNames) {\n return Response.json({ prompts: [] });\n }\n\n // Build a map of models for quick lookup\n const modelMap: Record<string, any> = {};\n if (models && modelNames) {\n await Promise.all(\n modelNames.map(async (name: string) => {\n try {\n const loader = models[name];\n if (loader) {\n modelMap[name] = await loader();\n }\n } catch (error) {\n // Skip failed models\n }\n })\n );\n }\n\n const promptList = await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (!loader) {\n return null;\n }\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n // Extract tool names from tools array\n const tools = (definition.tools || []).map((tool: string | { name: string }) =>\n typeof tool === 'string' ? tool : tool.name\n );\n\n return {\n id: definition.name,\n name: definition.name,\n tool_description: definition.toolDescription,\n prompt: normalizePromptContent(definition.prompt),\n required_schema: toJSONSchema(definition.requiredSchema),\n model_id: definition.model,\n model_name: modelDef?.name || definition.model,\n model_provider: modelDef?.provider || 'unknown',\n include_chat: definition.includeChat || false,\n include_past_tools: definition.includePastTools || false,\n parallel_tool_calls: definition.parallelToolCalls || false,\n tool_choice: definition.toolChoice || 'auto',\n before_tool: definition.beforeTool || null,\n after_tool: definition.afterTool || null,\n tools: tools,\n prompts: definition.handoffAgents || [],\n reasoning: definition.reasoning || null,\n created_at: Math.floor(Date.now() / 1000),\n };\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n return null;\n }\n })\n );\n\n // Filter out any null entries from failed loads\n const validPrompts = promptList.filter(Boolean);\n\n return Response.json({ prompts: validPrompts });\n});\n","import { defineController } from '../router/index.js';\n\n/**\n * Supported provider configurations.\n * Each provider has specific SDK type and API key environment variable.\n */\nconst SUPPORTED_PROVIDERS = [\n {\n name: 'openai',\n sdk: 'openai',\n label: 'OpenAI',\n envKey: 'OPENAI_API_KEY',\n },\n {\n name: 'openrouter',\n sdk: 'openrouter',\n label: 'OpenRouter',\n envKey: 'OPENROUTER_API_KEY',\n },\n];\n\n/**\n * GET /api/providers\n *\n * List all supported providers and their configuration status.\n * Providers are detected based on environment variables.\n *\n * Returns:\n * - HTTP 200: { providers: Array<{ name, sdk, hasApiKey }> }\n */\nexport default defineController(async ({ env }) => {\n const providers = SUPPORTED_PROVIDERS.map((provider) => ({\n name: provider.name,\n sdk: provider.sdk,\n label: provider.label,\n hasApiKey: Boolean(env[provider.envKey]),\n }));\n\n return Response.json({ providers });\n});\n","import { defineController } from \"../../router/index\";\nimport type { Message } from \"../../agents/types\";\nimport type { DurableAgentBuilder } from \"../../durable-objects/DurableAgentBuilder\";\n\n/**\n * POST /api/threads\n *\n * Create a new thread and start execution\n *\n * Request body:\n * {\n * agent_id: string, // Required: Agent name (from TypeScript config)\n * user_id?: string, // Optional: User identifier\n * initial_messages: Message[], // Optional: Initial conversation messages\n * data?: Record<string, any>, // Optional: Additional context data\n * tags?: string[] // Optional: Tags for searching/filtering threads\n * }\n *\n * Returns:\n * - HTTP 200: Thread created successfully\n * - HTTP 400: Validation error\n * - HTTP 404: Agent not found\n * - HTTP 500: Execution error\n *\n * WebSocket upgrade available for real-time telemetry\n */\nexport default defineController(async ({ req, env }) => {\n // Parse request body\n let body: {\n agent_id?: string;\n user_id?: string;\n initial_messages?: Message[];\n data?: Record<string, any>;\n tags?: string[];\n };\n\n try {\n body = await req.json();\n } catch (error) {\n return Response.json(\n { error: \"Invalid JSON in request body\" },\n { status: 400 }\n );\n }\n\n const { agent_id, user_id, initial_messages, data, tags } = body;\n\n // Validate required fields\n if (!agent_id) {\n return Response.json(\n { error: \"Missing required field: agent_id\" },\n { status: 400 }\n );\n }\n\n // initial_messages is now optional - if not provided, thread starts with no messages\n if (initial_messages !== undefined && initial_messages !== null) {\n if (!Array.isArray(initial_messages)) {\n return Response.json(\n { error: \"initial_messages must be an array\" },\n { status: 400 }\n );\n }\n }\n\n // Validate tags if provided\n if (tags !== undefined && tags !== null) {\n if (!Array.isArray(tags)) {\n return Response.json(\n { error: \"tags must be an array of strings\" },\n { status: 400 }\n );\n }\n if (!tags.every((tag) => typeof tag === \"string\")) {\n return Response.json(\n { error: \"All tags must be strings\" },\n { status: 400 }\n );\n }\n }\n\n // Get the root AgentBuilder DO\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as DurableObjectStub<DurableAgentBuilder>;\n\n // Validate agent exists by trying to load it\n try {\n // @ts-expect-error - DurableObjectStub type instantiation is too deep\n await agentBuilder.loadAgent(agent_id);\n } catch (error) {\n return Response.json(\n { error: `Agent not found: ${agent_id}` },\n { status: 404 }\n );\n }\n\n try {\n // Create thread in DurableAgentBuilder\n const thread = await agentBuilder.createThread({\n agent_name: agent_id,\n user_id: user_id,\n tags: tags,\n });\n\n // Return thread ID immediately\n // Note: initial_messages and data are accepted but not stored here\n // They will be stored when execution is triggered (e.g., via POST /api/threads/:id/execute)\n return Response.json({\n threadId: thread.id,\n agent_id: thread.agent_name,\n message: \"Thread created successfully\",\n });\n } catch (error: any) {\n console.error(`Error creating thread:`, error);\n\n return Response.json(\n {\n error: error.message || \"Failed to create thread\",\n },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\nimport type { DurableAgentBuilder } from \"../../durable-objects/DurableAgentBuilder\";\n\n/**\n * Resolve an icon path to a full URL if it's an absolute path.\n * URLs are returned as-is, absolute paths get the origin prepended.\n */\nfunction resolveIconUrl(icon: string | undefined, origin: string): string | undefined {\n if (!icon) return undefined;\n // If it's already a URL (http/https), return as-is\n if (icon.startsWith('http://') || icon.startsWith('https://')) {\n return icon;\n }\n // If it's an absolute path, prepend the origin\n if (icon.startsWith('/')) {\n return `${origin}${icon}`;\n }\n // Otherwise return as-is (shouldn't happen with valid input)\n return icon;\n}\n\n/**\n * GET /api/threads\n * List all threads with optional filtering\n *\n * Query parameters:\n * - limit: number (default: 50)\n * - offset: number (default: 0)\n * - agent_id: string (optional filter by agent name)\n * - user_id: string (optional filter by user)\n *\n * Returns:\n * - HTTP 200: List of threads with metadata\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, env }) => {\n if (req.method !== \"GET\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n try {\n const url = new URL(req.url);\n const origin = url.origin;\n const limit = parseInt(url.searchParams.get(\"limit\") || \"50\", 10);\n const offset = parseInt(url.searchParams.get(\"offset\") || \"0\", 10);\n const agentName = url.searchParams.get(\"agent_id\");\n const userId = url.searchParams.get(\"user_id\");\n\n // Get the root AgentBuilder DO\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as DurableObjectStub<DurableAgentBuilder>;\n\n // List threads from DurableAgentBuilder\n const result = await agentBuilder.listThreads({\n agent_name: agentName || undefined,\n user_id: userId || undefined,\n limit,\n offset,\n });\n\n // Enrich with agent details from TypeScript definitions\n const threads = await Promise.all(\n result.threads.map(async (thread) => {\n let agentDetails: {\n name: string;\n title: string;\n type: string;\n description?: string;\n icon?: string;\n } | null = null;\n try {\n const agentDef = await agentBuilder.loadAgent(thread.agent_name);\n agentDetails = {\n name: thread.agent_name,\n title: agentDef.title || thread.agent_name,\n type: agentDef.type || 'ai_human',\n description: agentDef.description,\n icon: resolveIconUrl(agentDef.icon, origin),\n };\n } catch {\n // Agent definition might have been removed\n agentDetails = { name: thread.agent_name, title: thread.agent_name, type: 'unknown' };\n }\n\n return {\n id: thread.id,\n agent_id: thread.agent_name,\n user_id: thread.user_id,\n tags: thread.tags || [],\n created_at: thread.created_at,\n agent: agentDetails,\n };\n })\n );\n\n return Response.json({\n threads,\n total: result.total,\n hasMore: offset + threads.length < result.total,\n });\n } catch (error: any) {\n console.error(\"Error fetching threads:\", error);\n return Response.json(\n { error: error.message || \"Failed to fetch threads\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../router/index.js';\nimport { z } from 'zod';\nimport type { PromptDefinition } from '../sdk/definePrompt.js';\nimport type { AgentDefinition } from '../sdk/defineAgent.js';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n try {\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || schema._def)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n } catch {\n return null;\n }\n}\n\n/**\n * GET /api/tools\n *\n * List all available tools including filesystem tools, prompts (all prompts are tools), and MCP tools.\n *\n * Query Parameters:\n * - type: 'tools' (default, includes all) | 'prompts' | 'agents'\n * - schema: 'true' to include schema data\n *\n * Returns:\n * - HTTP 200: { [name]: { description, schema?, hasError?, error?, type?, model? } }\n */\nexport default defineController(async ({ url, tools, prompts, promptNames, agents, agentNames, models, modelNames }) => {\n const type = url.searchParams.get('type');\n const includeSchema = url.searchParams.get('schema') === 'true';\n\n // Build a map of models for quick lookup\n const modelMap: Record<string, any> = {};\n if (models && modelNames) {\n await Promise.all(\n modelNames.map(async (name: string) => {\n try {\n const loader = models[name];\n if (loader) {\n modelMap[name] = await loader();\n }\n } catch (error) {\n // Skip failed models\n }\n })\n );\n }\n\n if (type === 'prompts') {\n // Return all prompts (all prompts are exposed as tools)\n if (!prompts || !promptNames) {\n return Response.json({});\n }\n\n const result: Record<string, any> = {};\n\n await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (!loader) return;\n\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n result[name] = {\n description: definition.toolDescription || '',\n schema: includeSchema && definition.requiredSchema\n ? toJSONSchema(definition.requiredSchema)\n : null,\n hasError: false,\n type: 'prompt',\n model: modelDef?.name || definition.model,\n };\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n }\n })\n );\n\n return Response.json(result);\n }\n\n if (type === 'agents') {\n // Return agents that are exposed as tools\n if (!agents || !agentNames) {\n return Response.json({});\n }\n\n const result: Record<string, any> = {};\n\n await Promise.all(\n agentNames.map(async (name: string) => {\n try {\n const loader = agents[name];\n if (!loader) return;\n\n const definition = await loader() as AgentDefinition;\n\n // Only include agents exposed as tools\n if (!definition.exposeAsTool) return;\n\n result[name] = {\n description: definition.toolDescription || definition.title || '',\n schema: null, // Agents don't have schemas\n hasError: false,\n type: 'agent',\n };\n } catch (error) {\n console.error(`Error loading agent ${name}:`, error);\n }\n })\n );\n\n return Response.json(result);\n }\n\n // Default: return all tools (filesystem tools + prompts)\n const result: Record<string, any> = {};\n\n // Add filesystem tools\n if (tools) {\n const toolNames = Object.keys(tools);\n\n await Promise.all(\n toolNames.map(async (name: string) => {\n try {\n const loader = tools[name];\n if (!loader) return;\n\n // Tool loaders return [description, schema, handler] tuple\n const toolResult = await loader() as [string, unknown, unknown];\n\n // Handle error case where result is an error array\n if (Array.isArray(toolResult) && typeof toolResult[0] === 'string' && toolResult[0].includes('error')) {\n result[name] = {\n description: '',\n schema: null,\n hasError: true,\n error: toolResult[0],\n type: 'tool',\n };\n return;\n }\n\n // Normal case: [description, schema, handler]\n const [description, schema] = toolResult;\n\n result[name] = {\n description: description || '',\n schema: includeSchema && schema ? toJSONSchema(schema) : null,\n hasError: false,\n type: 'tool',\n };\n } catch (error) {\n console.error(`Error loading tool ${name}:`, error);\n result[name] = {\n description: '',\n schema: null,\n hasError: true,\n error: `Error loading tool: ${error}`,\n type: 'tool',\n };\n }\n })\n );\n }\n\n // Add all prompts as tools (all prompts are exposed as tools)\n if (prompts && promptNames) {\n await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (!loader) return;\n\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n result[name] = {\n description: definition.toolDescription || '',\n schema: includeSchema && definition.requiredSchema\n ? toJSONSchema(definition.requiredSchema)\n : null,\n hasError: false,\n type: 'prompt',\n model: modelDef?.name || definition.model,\n };\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n }\n })\n );\n }\n\n return Response.json(result);\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\n\n/**\n * GET /api/users\n *\n * List all users (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { users: [{ id, username, role, created_at, updated_at }] }\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n const users = await agentBuilder.listUsers();\n\n return Response.json({ users });\n } catch (error: any) {\n console.error('List users error:', error);\n return Response.json(\n { error: error.message || 'Failed to list users' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\nimport { hashPassword } from '../../utils/auth.js';\n\n/**\n * POST /api/users\n *\n * Create a new user (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Body:\n * - username: string\n * - password: string\n * - role?: 'admin' (defaults to 'admin')\n *\n * Returns:\n * - HTTP 201: { user: { id, username, role, created_at, updated_at } }\n * - HTTP 400: Missing required fields or user already exists\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n const body = await req.json() as { username?: string; password?: string; role?: string };\n const { username, password, role = 'admin' } = body;\n\n if (!username || !password) {\n return Response.json(\n { error: 'Username and password are required' },\n { status: 400 }\n );\n }\n\n // Validate username format\n if (!/^[a-zA-Z0-9_-]+$/.test(username)) {\n return Response.json(\n { error: 'Username can only contain letters, numbers, underscores, and hyphens' },\n { status: 400 }\n );\n }\n\n if (username.length < 3 || username.length > 50) {\n return Response.json(\n { error: 'Username must be between 3 and 50 characters' },\n { status: 400 }\n );\n }\n\n if (password.length < 8) {\n return Response.json(\n { error: 'Password must be at least 8 characters' },\n { status: 400 }\n );\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if username already exists\n const existingUser = await agentBuilder.getUserByUsername(username);\n if (existingUser) {\n return Response.json(\n { error: 'Username already exists' },\n { status: 400 }\n );\n }\n\n // Hash the password\n const password_hash = await hashPassword(password);\n\n // Create the user\n const user = await agentBuilder.createUser({\n username,\n password_hash,\n role,\n });\n\n // Return user without password hash\n return Response.json({\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n created_at: user.created_at,\n updated_at: user.updated_at,\n },\n }, { status: 201 });\n } catch (error: any) {\n console.error('Create user error:', error);\n return Response.json(\n { error: error.message || 'Failed to create user' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport type { AgentDefinition } from '../../sdk/defineAgent.js';\n\n/**\n * GET /api/agents/:name\n *\n * Get details for a specific agent.\n *\n * Returns:\n * - HTTP 200: { agent: { id, name, type, sideA, sideB, ... } }\n * - HTTP 404: Agent not found\n */\nexport default defineController(async ({ params, agents, prompts, promptNames }) => {\n const { name } = params;\n\n if (!agents || !agents[name]) {\n return Response.json({ error: 'Agent not found' }, { status: 404 });\n }\n\n try {\n // Build a map of prompts for quick lookup\n const promptMap: Record<string, any> = {};\n if (prompts && promptNames) {\n await Promise.all(\n promptNames.map(async (promptName: string) => {\n try {\n const loader = prompts[promptName];\n if (loader) {\n promptMap[promptName] = await loader();\n }\n } catch (error) {\n // Skip failed prompts\n }\n })\n );\n }\n\n const loader = agents[name];\n const definition = await loader() as AgentDefinition;\n\n // Get prompt names for sides\n const sideAPrompt = promptMap[definition.sideA?.prompt];\n const sideBPrompt = definition.sideB\n ? promptMap[definition.sideB?.prompt]\n : null;\n\n const agent = {\n id: definition.name,\n name: definition.name,\n // title is deprecated - include for backward compatibility but prefer name\n title: definition.title || definition.name,\n type: definition.type || 'ai_human',\n\n // Side A configuration\n side_a_label: definition.sideA?.label || null,\n side_a_agent_prompt: definition.sideA?.prompt,\n side_a_agent_prompt_name: sideAPrompt?.name || definition.sideA?.prompt,\n side_a_stop_on_response:\n definition.sideA?.stopOnResponse !== undefined\n ? definition.sideA.stopOnResponse\n : true,\n side_a_stop_tool: definition.sideA?.stopTool || null,\n side_a_stop_tool_response_property:\n definition.sideA?.stopToolResponseProperty || null,\n side_a_max_turns: definition.sideA?.maxTurns || null,\n side_a_end_conversation_tool:\n definition.sideA?.endConversationTool || null,\n side_a_manual_stop_condition:\n definition.sideA?.manualStopCondition || false,\n\n // Side B configuration (if dual_ai)\n side_b_label: definition.sideB?.label || null,\n side_b_agent_prompt: definition.sideB?.prompt || null,\n side_b_agent_prompt_name: sideBPrompt?.name || definition.sideB?.prompt || null,\n side_b_stop_on_response:\n definition.sideB?.stopOnResponse !== undefined\n ? definition.sideB.stopOnResponse\n : true,\n side_b_stop_tool: definition.sideB?.stopTool || null,\n side_b_stop_tool_response_property:\n definition.sideB?.stopToolResponseProperty || null,\n side_b_max_turns: definition.sideB?.maxTurns || null,\n side_b_end_conversation_tool:\n definition.sideB?.endConversationTool || null,\n side_b_manual_stop_condition:\n definition.sideB?.manualStopCondition || false,\n\n // Session configuration\n max_session_turns: definition.maxSessionTurns || null,\n\n // Tool exposure\n expose_as_tool: definition.exposeAsTool || false,\n tool_description: definition.toolDescription || null,\n\n // Tags\n tags: definition.tags || [],\n\n created_at: Math.floor(Date.now() / 1000),\n };\n\n return Response.json({ agent });\n } catch (error) {\n console.error(`Error loading agent ${name}:`, error);\n return Response.json(\n { error: `Error loading agent: ${error}` },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAuth } from '../../middleware/auth.js';\n\n/**\n * DELETE /api/api-keys/:id\n *\n * Delete an API key for the authenticated user.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 401: Not authenticated\n * - HTTP 404: API key not found\n */\nexport default defineController(async ({ req, env, params }) => {\n try {\n const authResult = await requireAuth(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Super admin has no API keys\n if (authResult.authType === 'super_admin') {\n return Response.json(\n { error: 'Super admin has no API keys to delete.' },\n { status: 400 }\n );\n }\n\n const keyId = params.id;\n if (!keyId) {\n return Response.json(\n { error: 'API key ID is required' },\n { status: 400 }\n );\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n await agentBuilder.deleteApiKey(keyId, authResult.user.id);\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error('Delete API key error:', error);\n return Response.json(\n { error: error.message || 'Failed to delete API key' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { z } from 'zod';\nimport type { PromptDefinition } from '../../sdk/definePrompt.js';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || '_def' in schema)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n}\n\n/**\n * Normalize prompt content for API response.\n * - Arrays (StructuredPrompt) are serialized to JSON strings for backward compatibility\n * - Plain strings are returned as-is\n */\nfunction normalizePromptContent(prompt: string | any[] | undefined): string {\n if (!prompt) return '';\n // If it's an array (StructuredPrompt), serialize to JSON\n if (Array.isArray(prompt)) {\n return JSON.stringify(prompt);\n }\n // Plain string, return as-is\n return prompt;\n}\n\n/**\n * GET /api/prompts/:name\n *\n * Get details for a specific prompt.\n *\n * Returns:\n * - HTTP 200: { prompt: { id, name, tool_description, prompt, model, ... } }\n * - HTTP 404: Prompt not found\n */\nexport default defineController(async ({ params, prompts, models, modelNames }) => {\n const { name } = params;\n\n if (!prompts || !prompts[name]) {\n return Response.json({ error: 'Prompt not found' }, { status: 404 });\n }\n\n try {\n // Build a map of models for quick lookup\n const modelMap: Record<string, any> = {};\n if (models && modelNames) {\n await Promise.all(\n modelNames.map(async (modelName: string) => {\n try {\n const loader = models[modelName];\n if (loader) {\n modelMap[modelName] = await loader();\n }\n } catch (error) {\n // Skip failed models\n }\n })\n );\n }\n\n const loader = prompts[name];\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n // Extract tools with their full config (convert camelCase to snake_case for UI)\n const tools = (definition.tools || []).map((tool: string | Record<string, any>) => {\n if (typeof tool === 'string') {\n // Simple tool name - return with default options\n return {\n name: tool,\n include_text_response: true,\n include_tool_calls: true,\n include_errors: true,\n init_user_message_property: null\n };\n }\n // Tool config object - convert camelCase to snake_case\n return {\n name: tool.name,\n include_text_response: tool.includeTextResponse !== undefined ? tool.includeTextResponse : true,\n include_tool_calls: tool.includeToolCalls !== undefined ? tool.includeToolCalls : true,\n include_errors: tool.includeErrors !== undefined ? tool.includeErrors : true,\n init_user_message_property: tool.initUserMessageProperty || null\n };\n });\n\n const prompt = {\n id: definition.name,\n name: definition.name,\n tool_description: definition.toolDescription,\n prompt: normalizePromptContent(definition.prompt),\n required_schema: toJSONSchema(definition.requiredSchema),\n model_id: definition.model,\n model_name: modelDef?.name || definition.model,\n model_provider: modelDef?.provider || 'unknown',\n include_chat: definition.includeChat || false,\n include_past_tools: definition.includePastTools || false,\n parallel_tool_calls: definition.parallelToolCalls || false,\n tool_choice: definition.toolChoice || 'auto',\n before_tool: definition.beforeTool || null,\n after_tool: definition.afterTool || null,\n tools: tools,\n prompts: definition.handoffAgents || [],\n reasoning: definition.reasoning || null,\n created_at: Math.floor(Date.now() / 1000),\n };\n\n return Response.json({ prompt });\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n return Response.json(\n { error: `Error loading prompt: ${error}` },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\nimport type { DurableAgentBuilder } from \"../../durable-objects/DurableAgentBuilder\";\n\n/**\n * DELETE /api/threads/:id\n *\n * Delete a thread and all its associated data\n *\n * Returns:\n * - HTTP 200: { success: true, threadId: string }\n * - HTTP 404: Thread not found\n * - HTTP 500: Deletion error\n *\n * Note: This deletes:\n * - Thread record from DurableAgentBuilder\n * - All messages, tool calls, and logs from DurableThread storage\n * - The DurableThread instance itself is marked for deletion\n */\nexport default defineController(async ({ req, env, params }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Missing thread ID\" }, { status: 400 });\n }\n\n // Get the root AgentBuilder DO\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as DurableObjectStub<DurableAgentBuilder>;\n\n // Check if thread exists\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n try {\n // Delete thread record from DurableAgentBuilder\n await agentBuilder.deleteThread(threadId);\n\n // Get DurableThread instance and call via RPC to delete its data\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method to delete DurableObject data\n await stub.deleteThread();\n\n return Response.json({\n success: true,\n threadId,\n message: \"Thread deleted successfully\",\n });\n } catch (error: any) {\n console.error(`Error deleting thread ${threadId}:`, error);\n\n return Response.json(\n {\n error: error.message || \"Failed to delete thread\",\n threadId,\n },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\n\n/**\n * PATCH /api/threads/:id\n * Update thread metadata (e.g., tags, agent assignment)\n */\nexport default defineController(async ({ req, env, params }) => {\n if (req.method !== \"PATCH\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n const threadId = params?.id as string;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n const body = await req.json() as { tags?: string[]; agent_id?: string };\n const { tags, agent_id } = body;\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if thread exists\n const existingThread = await agentBuilder.getThread(threadId);\n if (!existingThread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Build update data\n const updates: Record<string, any> = {};\n\n if (tags !== undefined) {\n if (!Array.isArray(tags)) {\n return Response.json(\n { error: \"tags must be an array of strings\" },\n { status: 400 }\n );\n }\n\n // Verify all tags are strings\n if (!tags.every((tag) => typeof tag === \"string\")) {\n return Response.json(\n { error: \"All tags must be strings\" },\n { status: 400 }\n );\n }\n\n updates.tags = tags;\n }\n\n if (agent_id !== undefined) {\n if (typeof agent_id !== \"string\") {\n return Response.json(\n { error: \"agent_id must be a string\" },\n { status: 400 }\n );\n }\n\n // Verify agent exists in TypeScript config via DurableThread\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n try {\n const agentDef = await stub.loadAgent(agent_id);\n if (!agentDef) {\n return Response.json(\n { error: `Agent not found: ${agent_id}` },\n { status: 404 }\n );\n }\n\n if (agentDef.type !== \"ai_human\") {\n return Response.json(\n { error: \"Only ai_human agents can be assigned to threads\" },\n { status: 400 }\n );\n }\n } catch (e) {\n return Response.json(\n { error: `Agent not found: ${agent_id}` },\n { status: 404 }\n );\n }\n\n updates.agent_name = agent_id;\n }\n\n if (Object.keys(updates).length === 0) {\n return Response.json(\n { error: \"No valid fields to update\" },\n { status: 400 }\n );\n }\n\n // Update thread in DurableAgentBuilder\n const updatedThread = await agentBuilder.updateThread(threadId, updates);\n\n return Response.json({\n id: updatedThread.id,\n agent_id: updatedThread.agent_name, // Map agent_name back to agent_id for API compat\n user_id: updatedThread.user_id,\n tags: updatedThread.tags || [],\n created_at: updatedThread.created_at,\n });\n } catch (error: any) {\n console.error(\"Error updating thread:\", error);\n return Response.json(\n { error: error.message || \"Failed to update thread\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\n\n/**\n * Resolve an icon path to a full URL if it's an absolute path.\n * URLs are returned as-is, absolute paths get the origin prepended.\n */\nfunction resolveIconUrl(icon: string | undefined, origin: string): string | undefined {\n if (!icon) return undefined;\n // If it's already a URL (http/https), return as-is\n if (icon.startsWith('http://') || icon.startsWith('https://')) {\n return icon;\n }\n // If it's an absolute path, prepend the origin\n if (icon.startsWith('/')) {\n return `${origin}${icon}`;\n }\n // Otherwise return as-is (shouldn't happen with valid input)\n return icon;\n}\n\n/**\n * GET /api/threads/:id\n *\n * Get thread metadata from DurableAgentBuilder and stats from DurableObject\n *\n * Returns:\n * - HTTP 200: { thread, agent, stats }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly - getThreadMeta already returns thread, agent, and stats\n const doData = await stub.getThreadMeta(threadId);\n\n if (!doData) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Resolve agent icon URL if it's an absolute path\n if (doData.agent?.icon) {\n const origin = new URL(req.url).origin;\n doData.agent.icon = resolveIconUrl(doData.agent.icon, origin);\n }\n\n return Response.json(doData);\n } catch (error: any) {\n console.error(`Error fetching thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to fetch thread\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { z } from 'zod';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n try {\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || schema._def)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n } catch {\n return null;\n }\n}\n\n/**\n * GET /api/tools/:name\n *\n * Get details and schema for a specific tool.\n *\n * Returns:\n * - HTTP 200: { name, description, schema }\n * - HTTP 404: Tool not found\n */\nexport default defineController(async ({ params, tools }) => {\n const { name } = params;\n\n if (!tools || !tools[name]) {\n return Response.json({ error: 'Tool not found' }, { status: 404 });\n }\n\n try {\n const loader = tools[name];\n const toolResult = await loader() as [string, unknown, unknown];\n\n // Handle error case\n if (Array.isArray(toolResult) && typeof toolResult[0] === 'string' && toolResult[0].includes('error')) {\n return Response.json({\n name,\n description: '',\n schema: null,\n hasError: true,\n error: toolResult[0],\n });\n }\n\n // Normal case: [description, schema, handler]\n const [description, schema] = toolResult;\n\n return Response.json({\n name,\n description: description || '',\n schema: toJSONSchema(schema),\n hasError: false,\n });\n } catch (error) {\n console.error(`Error loading tool ${name}:`, error);\n return Response.json({\n name,\n description: '',\n schema: null,\n hasError: true,\n error: `Error loading tool: ${error}`,\n });\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\n\n/**\n * DELETE /api/users/:id\n *\n * Delete a user (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n * - HTTP 404: User not found\n */\nexport default defineController(async ({ req, env, params }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n const { id } = params;\n\n if (!id) {\n return Response.json({ error: 'User ID is required' }, { status: 400 });\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if user exists\n const user = await agentBuilder.getUserById(id);\n if (!user) {\n return Response.json({ error: 'User not found' }, { status: 404 });\n }\n\n await agentBuilder.deleteUser(id);\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error('Delete user error:', error);\n return Response.json(\n { error: error.message || 'Failed to delete user' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\nimport { hashPassword } from '../../utils/auth.js';\n\n/**\n * PUT /api/users/:id\n *\n * Update a user (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Body:\n * - username?: string\n * - password?: string (will be hashed)\n * - role?: string\n *\n * Returns:\n * - HTTP 200: { user: { id, username, role, created_at, updated_at } }\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n * - HTTP 404: User not found\n * - HTTP 409: Username already taken\n */\nexport default defineController(async ({ req, env, params }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n const { id } = params;\n\n if (!id) {\n return Response.json({ error: 'User ID is required' }, { status: 400 });\n }\n\n const body = await req.json() as { username?: string; password?: string; role?: string };\n const { username, password, role } = body;\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if user exists\n const existingUser = await agentBuilder.getUserById(id);\n if (!existingUser) {\n return Response.json({ error: 'User not found' }, { status: 404 });\n }\n\n // If changing username, check it's not taken by another user\n if (username && username !== existingUser.username) {\n const userWithUsername = await agentBuilder.getUserByUsername(username);\n if (userWithUsername && userWithUsername.id !== id) {\n return Response.json(\n { error: 'Username already taken' },\n { status: 409 }\n );\n }\n }\n\n // Build update params\n const updateParams: {\n username?: string;\n password_hash?: string;\n role?: 'admin';\n } = {};\n\n if (username) {\n updateParams.username = username;\n }\n if (password) {\n updateParams.password_hash = await hashPassword(password);\n }\n if (role) {\n updateParams.role = role as 'admin';\n }\n\n const updatedUser = await agentBuilder.updateUser(id, updateParams);\n\n return Response.json({\n user: {\n id: updatedUser.id,\n username: updatedUser.username,\n role: updatedUser.role,\n created_at: updatedUser.created_at,\n updated_at: updatedUser.updated_at,\n },\n });\n } catch (error: any) {\n console.error('Update user error:', error);\n return Response.json(\n { error: error.message || 'Failed to update user' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router';\n\n/**\n * GET /api/auth/config\n * Returns which authentication providers are configured\n */\nexport default defineController(async ({ env }) => {\n // Check which OAuth providers are configured by looking for their env vars\n const githubConfigured = !!(env.GITHUB_CLIENT_ID && env.GITHUB_CLIENT_SECRET);\n const googleConfigured = !!(env.GOOGLE_CLIENT_ID && env.GOOGLE_CLIENT_SECRET);\n\n return {\n github: githubConfigured,\n google: googleConfigured,\n };\n});\n","import { defineController } from '../../router/index.js';\nimport {\n verifyPassword,\n generateUserToken,\n hashToken,\n generateSuperAdminToken,\n} from '../../utils/auth.js';\n\n/**\n * POST /api/auth/login\n *\n * Authenticate a user with username/password or super admin password.\n *\n * Body:\n * - username: string (optional if using super admin)\n * - password: string\n *\n * Returns:\n * - HTTP 200: { token, user: { id, username, role } }\n * - HTTP 401: Invalid credentials\n * - HTTP 400: Missing required fields\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const body = await req.json() as { username?: string; password?: string };\n const { username, password } = body;\n\n if (!password) {\n return Response.json(\n { error: 'Password is required' },\n { status: 400 }\n );\n }\n\n // Check for super admin login\n if (env.SUPER_ADMIN_PASSWORD && password === env.SUPER_ADMIN_PASSWORD) {\n // Generate a signed super admin token\n if (!env.ENCRYPTION_KEY) {\n return Response.json(\n { error: 'Server misconfigured: ENCRYPTION_KEY required for super admin' },\n { status: 500 }\n );\n }\n\n const token = await generateSuperAdminToken(env.ENCRYPTION_KEY);\n\n return Response.json({\n token,\n user: {\n id: 'super_admin',\n username: 'admin',\n role: 'admin',\n },\n });\n }\n\n // Regular user login requires username\n if (!username) {\n return Response.json(\n { error: 'Username is required' },\n { status: 400 }\n );\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Look up user\n const user = await agentBuilder.getUserByUsername(username);\n\n if (!user) {\n return Response.json(\n { error: 'Invalid username or password' },\n { status: 401 }\n );\n }\n\n // Verify password\n const isValid = await verifyPassword(password, user.password_hash);\n\n if (!isValid) {\n return Response.json(\n { error: 'Invalid username or password' },\n { status: 401 }\n );\n }\n\n // Generate session token\n const token = generateUserToken();\n const tokenHash = await hashToken(token);\n\n // Create session (expires in 30 days)\n const expiresAt = Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60;\n await agentBuilder.createSession({\n user_id: user.id,\n token_hash: tokenHash,\n expires_at: expiresAt,\n });\n\n return Response.json({\n token,\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n },\n });\n } catch (error: any) {\n console.error('Login error:', error);\n return Response.json(\n { error: error.message || 'Login failed' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { hashToken, isValidUserToken } from '../../utils/auth.js';\n\n/**\n * POST /api/auth/logout\n *\n * Log out the current user by invalidating their session.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 401: Invalid or missing token\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authHeader = req.headers.get('Authorization');\n\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 });\n }\n\n const token = authHeader.substring(7);\n\n // Super admin tokens don't have sessions to delete\n if (token.includes('.')) {\n // It's a signed token (super admin), just return success\n return Response.json({ success: true });\n }\n\n // Regular user token - delete session\n if (isValidUserToken(token)) {\n const tokenHash = await hashToken(token);\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n await agentBuilder.deleteSession(tokenHash);\n }\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error('Logout error:', error);\n return Response.json(\n { error: error.message || 'Logout failed' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { authenticate } from '../../middleware/auth.js';\n\n/**\n * GET /api/auth/me\n *\n * Get the current authenticated user's information.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { user: { id, username, role }, authType }\n * - HTTP 401: Not authenticated\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authContext = await authenticate(req, env);\n\n if (!authContext) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 });\n }\n\n return Response.json({\n user: authContext.user,\n authType: authContext.authType,\n });\n } catch (error: any) {\n console.error('Auth check error:', error);\n return Response.json(\n { error: error.message || 'Authentication check failed' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\n\n/**\n * Provider configurations with their API endpoints\n */\nconst PROVIDER_CONFIGS: Record<\n string,\n {\n sdk: string;\n modelsEndpoint: string;\n envKey: string;\n headers: (apiKey: string) => Record<string, string>;\n parseResponse: (data: any) => Array<{\n value: string;\n label: string;\n description: string;\n slug?: string;\n iconId?: string;\n }>;\n }\n> = {\n openai: {\n sdk: 'openai',\n modelsEndpoint: 'https://api.openai.com/v1/models',\n envKey: 'OPENAI_API_KEY',\n headers: (apiKey) => ({\n Authorization: `Bearer ${apiKey}`,\n }),\n parseResponse: (data) => {\n // Filter to only include common chat models, not fine-tuned or deprecated ones\n const chatModelPrefixes = [\n 'gpt-4',\n 'gpt-3.5',\n 'o1',\n 'o3',\n 'chatgpt',\n ];\n\n return data.data\n .filter((model: any) => {\n const id = model.id.toLowerCase();\n return chatModelPrefixes.some((prefix) => id.startsWith(prefix));\n })\n .map((model: any) => ({\n value: model.id,\n label: model.id,\n description: `Owned by ${model.owned_by}`,\n iconId: 'openai',\n }))\n .sort((a: any, b: any) => a.label.localeCompare(b.label));\n },\n },\n openrouter: {\n sdk: 'openrouter',\n modelsEndpoint: 'https://openrouter.ai/api/v1/models',\n envKey: 'OPENROUTER_API_KEY',\n headers: () => ({}), // OpenRouter models endpoint doesn't require auth\n parseResponse: (data) => {\n return data.data\n .map((model: any) => ({\n value: model.id,\n label: model.name || model.id,\n description: model.description?.slice(0, 150) + (model.description?.length > 150 ? '...' : '') || '',\n slug: model.canonical_slug || model.id,\n iconId: model.id.split('/')[0], // e.g., \"anthropic\" from \"anthropic/claude-3\"\n }))\n .sort((a: any, b: any) => a.label.localeCompare(b.label));\n },\n },\n};\n\n/**\n * POST /api/models/available\n *\n * Fetch available models from a provider's API.\n *\n * Request body:\n * - provider: string - The provider name (e.g., \"openai\", \"openrouter\")\n *\n * Returns:\n * - HTTP 200: { models: Array<{ value, label, description, slug?, iconId? }> }\n * - HTTP 400: { error: string } - Missing or invalid provider\n * - HTTP 401: { error: string } - Missing API key for provider\n * - HTTP 500: { error: string } - Failed to fetch models\n */\nexport default defineController(async ({ req, env }) => {\n const body = await req.json().catch(() => ({}));\n const { provider } = body as { provider?: string };\n\n if (!provider) {\n return Response.json({ error: 'Provider is required' }, { status: 400 });\n }\n\n const config = PROVIDER_CONFIGS[provider];\n if (!config) {\n return Response.json(\n { error: `Unknown provider: ${provider}. Supported: ${Object.keys(PROVIDER_CONFIGS).join(', ')}` },\n { status: 400 }\n );\n }\n\n const apiKey = env[config.envKey] as string | undefined;\n\n // OpenRouter doesn't require API key for listing models\n if (!apiKey && config.sdk !== 'openrouter') {\n return Response.json(\n { error: `API key not configured for ${provider}. Set ${config.envKey} environment variable.` },\n { status: 401 }\n );\n }\n\n try {\n const response = await fetch(config.modelsEndpoint, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers(apiKey || ''),\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(`Failed to fetch models from ${provider}:`, errorText);\n return Response.json(\n { error: `Failed to fetch models from ${provider}: ${response.statusText}` },\n { status: response.status }\n );\n }\n\n const data = await response.json();\n const models = config.parseResponse(data);\n\n return Response.json({ models });\n } catch (error: any) {\n console.error(`Error fetching models from ${provider}:`, error);\n return Response.json(\n { error: `Failed to fetch models: ${error.message}` },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\n\n/**\n * POST /api/models/endpoints\n *\n * Fetch available provider endpoints for a specific OpenRouter model.\n * This allows users to select which providers can serve a particular model.\n *\n * Request body:\n * - provider: string - The provider name (must be OpenRouter)\n * - modelSlug: string - The model slug (e.g., \"anthropic/claude-3-opus\")\n *\n * Returns:\n * - HTTP 200: { endpoints: Array<{ id, name, pricing, quantization?, maxPromptTokens?, maxCompletionTokens? }> }\n * - HTTP 400: { error: string } - Missing parameters or non-OpenRouter provider\n * - HTTP 404: { error: string } - Model not found\n * - HTTP 500: { error: string } - Failed to fetch endpoints\n */\nexport default defineController(async ({ req, env }) => {\n const body = await req.json().catch(() => ({}));\n const { provider, modelSlug } = body as { provider?: string; modelSlug?: string };\n\n if (!provider || !modelSlug) {\n return Response.json(\n { error: 'Provider and modelSlug are required' },\n { status: 400 }\n );\n }\n\n // This endpoint only works for OpenRouter\n if (provider !== 'openrouter') {\n return Response.json(\n { error: 'Endpoints are only available for OpenRouter provider' },\n { status: 400 }\n );\n }\n\n // Parse the model slug into author/slug format\n // e.g., \"deepseek/deepseek-r1\" -> author: \"deepseek\", slug: \"deepseek-r1\"\n const slashIndex = modelSlug.indexOf('/');\n if (slashIndex === -1) {\n return Response.json(\n { error: `Invalid model slug format: ${modelSlug}. Expected format: author/model-name` },\n { status: 400 }\n );\n }\n\n const author = modelSlug.substring(0, slashIndex);\n const slug = modelSlug.substring(slashIndex + 1);\n\n try {\n // Fetch endpoints from OpenRouter using their dedicated endpoints API\n // GET /api/v1/models/:author/:slug/endpoints\n const response = await fetch(`https://openrouter.ai/api/v1/models/${author}/${slug}/endpoints`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return Response.json(\n { error: `Model not found: ${modelSlug}` },\n { status: 404 }\n );\n }\n const errorText = await response.text();\n console.error(`Failed to fetch endpoints from OpenRouter:`, errorText);\n return Response.json(\n { error: `Failed to fetch endpoints: ${response.statusText}` },\n { status: response.status }\n );\n }\n\n const data = await response.json();\n\n // Parse the endpoint data from the response\n const endpoints = parseOpenRouterEndpoints(data);\n\n return Response.json({ endpoints });\n } catch (error: any) {\n console.error(`Error fetching endpoints for ${modelSlug}:`, error);\n return Response.json(\n { error: `Failed to fetch endpoints: ${error.message}` },\n { status: 500 }\n );\n }\n});\n\n/**\n * Parse OpenRouter endpoints response to extract provider information\n */\nfunction parseOpenRouterEndpoints(data: any): Array<{\n id: string;\n name: string;\n pricing: { prompt: number; completion: number };\n quantization?: string;\n maxPromptTokens?: number;\n maxCompletionTokens?: number;\n}> {\n // Response structure: { data: { endpoints: [...] } }\n const model = data.data || data;\n const endpointsArray = model.endpoints || [];\n\n if (!Array.isArray(endpointsArray) || endpointsArray.length === 0) {\n return [];\n }\n\n return endpointsArray.map((endpoint: any) => ({\n // Use 'tag' as the ID since it's the provider identifier used for routing\n id: endpoint.tag || endpoint.provider_name || endpoint.name,\n name: endpoint.name || endpoint.provider_name || endpoint.tag,\n pricing: {\n // Pricing values come as strings, convert to numbers\n prompt: parseFloat(endpoint.pricing?.prompt) || 0,\n completion: parseFloat(endpoint.pricing?.completion) || 0,\n },\n quantization: endpoint.quantization,\n maxPromptTokens: endpoint.max_prompt_tokens || endpoint.context_length,\n maxCompletionTokens: endpoint.max_completion_tokens,\n }));\n}\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/cost\n *\n * Get cost breakdown for a thread, including:\n * - Total cost across all logs\n * - Cost breakdown by model\n * - Average cost per message\n * - Average cost per message per model\n *\n * Returns:\n * - HTTP 200: { totalCost, modelBreakdown, avgCostPerMessage, avgCostPerMessageByModel }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Get all logs with cost data (no pagination)\n const logsResult = await stub.getLogs(10000, 0, \"ASC\");\n const logs = logsResult.logs || [];\n\n // Calculate total cost and group by model name\n let totalCost = 0;\n const modelCosts: Record<\n string,\n { totalCost: number; count: number }\n > = {};\n\n // Count unique messages for average calculation\n const uniqueMessages = new Set<string>();\n\n for (const log of logs) {\n const cost = log.cost_total;\n if (cost !== null && cost !== undefined && !isNaN(cost)) {\n totalCost += cost;\n\n // Track unique messages\n if (log.message_id) {\n uniqueMessages.add(log.message_id);\n }\n\n // Group by model name (not ID)\n const modelKey = log.model_name || log.model || \"unknown\";\n if (!modelCosts[modelKey]) {\n modelCosts[modelKey] = {\n totalCost: 0,\n count: 0,\n };\n }\n modelCosts[modelKey].totalCost += cost;\n modelCosts[modelKey].count += 1;\n }\n }\n\n // Calculate averages\n const messageCount = uniqueMessages.size;\n const avgCostPerMessage = messageCount > 0 ? totalCost / messageCount : 0;\n\n // Calculate average per message per model\n const avgCostPerMessageByModel: Record<\n string,\n { avgCost: number; messageCount: number }\n > = {};\n\n for (const [modelName, data] of Object.entries(modelCosts)) {\n avgCostPerMessageByModel[modelName] = {\n avgCost: data.count > 0 ? data.totalCost / data.count : 0,\n messageCount: data.count,\n };\n }\n\n // Format model breakdown for response\n const modelBreakdown = Object.entries(modelCosts).map(([modelName, data]) => ({\n modelName,\n totalCost: data.totalCost,\n requestCount: data.count,\n avgCostPerRequest: data.count > 0 ? data.totalCost / data.count : 0,\n }));\n\n return Response.json({\n totalCost,\n messageCount,\n avgCostPerMessage,\n modelBreakdown,\n avgCostPerMessageByModel,\n });\n } catch (error: any) {\n console.error(`Error calculating cost for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to calculate costs\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * File System Root API\n *\n * Routes:\n * - GET /api/threads/:id/fs?stats=1 - Get storage statistics\n * - GET /api/threads/:id/fs?grep=pattern - Search file contents\n * - GET /api/threads/:id/fs?find=pattern - Find files by path pattern\n * - GET /api/threads/:id/fs - List root directory\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (req.method !== \"GET\") {\n return Response.json(\n { error: `Method ${req.method} not allowed` },\n { status: 405 }\n );\n }\n\n const url = new URL(req.url);\n\n try {\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n // Storage stats\n if (url.searchParams.has(\"stats\")) {\n const result = await stub.getFileStats();\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json(result.stats);\n }\n\n // Full-text search (grep)\n const grepPattern = url.searchParams.get(\"grep\");\n if (grepPattern) {\n const path = url.searchParams.get(\"path\") || undefined;\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n\n const result = await stub.grepFiles(grepPattern, { path, limit });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ results: result.results, pattern: grepPattern });\n }\n\n // Find by path pattern\n const findPattern = url.searchParams.get(\"find\");\n if (findPattern) {\n const type = url.searchParams.get(\"type\") as \"file\" | \"directory\" | \"all\" | null;\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n\n const result = await stub.findFiles(findPattern, {\n type: type || \"all\",\n limit,\n });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ files: result.files, pattern: findPattern });\n }\n\n // Default: list root directory\n const result = await stub.readdirFile(\"/\");\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ files: result.files, path: \"/\" });\n } catch (error: any) {\n console.error(`Error in fs root API for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"File operation failed\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/logs\n *\n * Get logs from a thread's DurableObject\n *\n * Query parameters:\n * - limit: number (default: 100)\n * - offset: number (default: 0)\n * - order: \"asc\" | \"desc\" (default: \"desc\")\n *\n * Returns:\n * - HTTP 200: { logs: Log[], total: number, hasMore: boolean }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const url = new URL(req.url);\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Parse query parameters\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n const offset = parseInt(url.searchParams.get(\"offset\") || \"0\", 10);\n const order = url.searchParams.get(\"order\") === \"desc\" ? \"DESC\" : \"ASC\";\n\n // WebSocket upgrade for live log streaming\n if (req.headers.get(\"upgrade\")?.toLowerCase() === \"websocket\") {\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n // Forward the original upgrade request to the DurableObject\n return await stub.fetch(req);\n }\n\n // Get DurableObject instance and call via RPC for initial logs\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.getLogs(limit, offset, order);\n\n return Response.json(result);\n } catch (error: any) {\n console.error(`Error fetching logs for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to fetch logs\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\nimport type { AttachmentRef } from \"../../../agents/types\";\n\n// Helper to check if image needs processing (>2MB or unsupported format)\nfunction needsProcessing(base64Data: string, mimeType: string): boolean {\n // Estimate binary size from base64 (base64 is ~4/3 of binary size)\n const binarySize = Math.ceil(base64Data.length * 3 / 4);\n const MAX_SIZE = 2 * 1024 * 1024; // 2MB\n\n // Process if over 2MB\n if (binarySize > MAX_SIZE) {\n return true;\n }\n\n // Process if not JPEG or PNG (convert to JPEG)\n if (mimeType !== \"image/jpeg\" && mimeType !== \"image/png\") {\n return true;\n }\n\n return false;\n}\n\n/**\n * Attachment in request body\n */\ninterface AttachmentPayload {\n name: string;\n mimeType: string;\n data: string; // base64 encoded\n width?: number; // For images\n height?: number; // For images\n thumbnail?: string; // base64 encoded thumbnail\n}\n\n/**\n * Request body type\n */\ninterface MessagePayload {\n content: string;\n role: \"user\" | \"assistant\" | \"system\";\n attachments?: AttachmentPayload[];\n silent?: boolean;\n}\n\n/**\n * POST /api/threads/:id/messages\n *\n * Send a new message to the thread and trigger agent execution\n *\n * Body:\n * - content: string (message content)\n * - role: \"user\" | \"assistant\" | \"system\" (which side is sending)\n * - attachments?: Array of file attachments\n * - name: string (filename)\n * - mimeType: string\n * - data: string (base64 encoded)\n * - width?: number (for images)\n * - height?: number (for images)\n * - thumbnail?: string (base64 encoded thumbnail)\n * - silent?: boolean (hide from LLM context)\n *\n * Returns:\n * - HTTP 202: Message queued for processing\n * - HTTP 404: Thread not found\n * - HTTP 400: Invalid request\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Parse request body\n const body = (await req.json()) as MessagePayload;\n const { content = \"\", role, attachments, silent } = body;\n\n // Require either content or attachments\n const hasContent = content && typeof content === \"string\" && content.trim().length > 0;\n const hasAttachments = attachments && Array.isArray(attachments) && attachments.length > 0;\n\n if (!hasContent && !hasAttachments) {\n return Response.json(\n { error: \"Message content or attachments required\" },\n { status: 400 }\n );\n }\n\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n // Process attachments if present\n let attachmentRefs: AttachmentRef[] | undefined;\n\n if (attachments && attachments.length > 0) {\n attachmentRefs = [];\n\n for (const attachment of attachments) {\n // Generate unique ID and path for attachment\n const attachmentId = crypto.randomUUID();\n const timestamp = Date.now();\n\n // Start with original values\n let fileData = attachment.data;\n let mimeType = attachment.mimeType;\n let width = attachment.width;\n let height = attachment.height;\n\n // Process images if needed (>2MB or unsupported format)\n // Processing happens inside the DurableObject where WASM is initialized\n if (mimeType.startsWith(\"image/\") && needsProcessing(fileData, mimeType)) {\n try {\n const originalSize = Math.ceil(fileData.length * 3 / 4);\n const processed = await stub.processImage(fileData, mimeType);\n\n if (processed.success && processed.data) {\n fileData = processed.data;\n mimeType = processed.mimeType!;\n width = processed.width;\n height = processed.height;\n\n const newSize = Math.ceil(fileData.length * 3 / 4);\n console.log(\n `[image-processing] Processed ${attachment.name}: ` +\n `${(originalSize / 1024 / 1024).toFixed(2)}MB → ${(newSize / 1024 / 1024).toFixed(2)}MB, ` +\n `${processed.width}x${processed.height}, ${processed.mimeType}`\n );\n } else {\n console.error(`[image-processing] Failed to process ${attachment.name}:`, processed.error);\n // Continue with original data if processing fails\n }\n } catch (err) {\n console.error(`[image-processing] Failed to process ${attachment.name}:`, err);\n // Continue with original data if processing fails\n }\n }\n\n // Determine file extension based on (potentially updated) mimeType\n const ext = mimeType === \"image/png\" ? \"png\" :\n mimeType === \"image/jpeg\" ? \"jpg\" :\n attachment.name.split(\".\").pop() || \"bin\";\n const path = `/attachments/${timestamp}-${attachmentId}.${ext}`;\n\n // Build metadata\n const metadata: Record<string, unknown> = {};\n if (width) metadata.width = width;\n if (height) metadata.height = height;\n\n // Store file in thread's file system\n const base64Size = fileData.length;\n const binarySize = Math.ceil(base64Size * 3 / 4);\n console.log(`[writeFile] Storing ${attachment.name}: ${(binarySize / 1024 / 1024).toFixed(2)}MB binary (${(base64Size / 1024 / 1024).toFixed(2)}MB base64) to ${path}`);\n\n const result = await stub.writeFile(\n path,\n fileData,\n mimeType,\n {\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n thumbnail: attachment.thumbnail,\n }\n );\n\n console.log(`[writeFile] Result:`, result.success ? 'success' : result.error);\n\n if (!result.success) {\n console.error(`Failed to store attachment ${attachment.name}:`, result.error);\n continue;\n }\n\n // Create attachment reference\n const ref: AttachmentRef = {\n id: attachmentId,\n type: \"file\",\n path,\n name: attachment.name,\n mimeType: mimeType,\n };\n\n if (width) ref.width = width;\n if (height) ref.height = height;\n\n attachmentRefs.push(ref);\n }\n }\n\n // Send message with attachments\n const attachmentsJson = attachmentRefs && attachmentRefs.length > 0\n ? JSON.stringify(attachmentRefs)\n : undefined;\n return await stub.sendMessage(threadId, content, role, attachmentsJson);\n } catch (error: any) {\n console.error(`Error sending message to thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to send message\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/messages\n *\n * Get messages from a thread's DurableObject\n *\n * By default, returns the newest messages (when truncating) in chronological order\n * (oldest first in array, newest last). This is ideal for chat UIs where you append\n * messages and scroll to the bottom.\n *\n * Query parameters:\n * - limit: number (default: 100) - Number of messages to return\n * - offset: number (default: 0) - Number of newest messages to skip (for scrolling up)\n * - order: \"asc\" | \"desc\" (default: \"desc\") - Internal fetch order (affects truncation)\n * - includeSilent: \"true\" | \"false\" (default: \"false\") - Include silent messages (UI-only)\n * - depth: number (default: 0) - Maximum depth to include (0 = top-level only, 1+ = include sub-prompts)\n *\n * Examples:\n * - GET /api/threads/:id/messages?limit=10\n * Returns newest 10 messages in chronological order [oldest...newest]\n *\n * - GET /api/threads/:id/messages?limit=10&offset=10\n * Skips newest 10, returns next 10 older messages in chronological order\n * (for scrolling up to view history)\n *\n * - GET /api/threads/:id/messages?order=asc\n * Returns oldest messages first (different truncation behavior)\n *\n * - GET /api/threads/:id/messages?includeSilent=true\n * Includes silent messages (hidden from LLM, visible in UI)\n *\n * - GET /api/threads/:id/messages?depth=1\n * Includes messages up to depth 1 (top-level + first level of sub-prompts)\n *\n * Returns:\n * - HTTP 200: { messages: Message[], total: number, hasMore: boolean }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const url = new URL(req.url);\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Parse query parameters\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n const offset = parseInt(url.searchParams.get(\"offset\") || \"0\", 10);\n const order = url.searchParams.get(\"order\") === \"asc\" ? \"ASC\" : \"DESC\";\n const includeSilent = url.searchParams.get(\"includeSilent\") === \"true\";\n const maxDepth = parseInt(url.searchParams.get(\"depth\") || \"0\", 10);\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.getMessages(\n limit,\n offset,\n order,\n includeSilent,\n maxDepth\n );\n\n return Response.json(result);\n } catch (error: any) {\n console.error(`Error fetching messages for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to fetch messages\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * RPC endpoint for calling DurableThread methods\n * Used primarily for testing\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n // Parse request body\n const body = await req.json() as { method?: string; args?: unknown[] };\n const { method, args = [] } = body;\n\n if (!method) {\n return Response.json({ error: \"Method required\" }, { status: 400 });\n }\n\n try {\n // Get the DurableThread instance\n const id = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const thread = env.AGENT_BUILDER_THREAD.get(id);\n\n // Call the method via RPC\n // @ts-ignore - Dynamic RPC call\n const result = await thread[method](...args);\n\n // If result is a Response, return it directly\n if (result instanceof Response) {\n return result;\n }\n\n // Otherwise wrap in JSON response\n return Response.json(result);\n } catch (error: any) {\n console.error(`RPC call to ${method} failed:`, error);\n return Response.json(\n { error: error.message || \"RPC call failed\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * POST /api/threads/:id/stop\n *\n * Stop the currently executing thread\n *\n * Returns:\n * - HTTP 200: Thread stopped successfully or not currently running\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n return await stub.stop();\n } catch (error: any) {\n console.error(`Error stopping thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to stop thread\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/stream\n *\n * WebSocket endpoint for real-time message streaming\n *\n * This endpoint is specifically for message updates and should be used\n * by applications that want to receive real-time message data without\n * getting internal log/telemetry information.\n *\n * Returns:\n * - HTTP 101: WebSocket upgrade for message streaming\n * - HTTP 400: Not a WebSocket upgrade request\n * - HTTP 404: Thread not found\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n // Only handle WebSocket upgrades\n if (req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") {\n return Response.json(\n { error: \"This endpoint only supports WebSocket connections\" },\n { status: 400 }\n );\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Forward WebSocket upgrade to DurableObject\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n return await stub.fetch(req);\n } catch (error: any) {\n console.error(`Error handling message stream for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to establish message stream\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\nimport type { FileRecord } from \"../../../../agents/types.js\";\n\n/**\n * Convert FileRecord to AttachmentRef format for client consumption\n */\nfunction toAttachmentRef(file: FileRecord): {\n id: string;\n type: \"file\";\n path: string;\n name: string;\n mimeType: string;\n size: number;\n width?: number;\n height?: number;\n} {\n const metadata = file.metadata as { width?: number; height?: number } | null;\n return {\n id: file.path, // Use path as unique ID\n type: \"file\",\n path: file.path,\n name: file.name,\n mimeType: file.mimeType,\n size: file.size,\n ...(metadata?.width && { width: metadata.width }),\n ...(metadata?.height && { height: metadata.height }),\n };\n}\n\n/**\n * File System API for DurableThread\n *\n * Routes:\n * - GET /api/threads/:id/fs/*path - Get file data or list directory\n * - GET /api/threads/:id/fs/*path?thumbnail=1 - Get thumbnail (images only)\n * - GET /api/threads/:id/fs?stats=1 - Get storage stats\n * - PUT /api/threads/:id/fs/*path - Write file\n * - DELETE /api/threads/:id/fs/*path - Delete file or empty directory\n *\n * Path is a catch-all parameter, e.g.:\n * - /api/threads/abc/fs/images/photo.jpg -> path = \"images/photo.jpg\"\n * - /api/threads/abc/fs/docs/2024/report.pdf -> path = \"docs/2024/report.pdf\"\n */\nexport default defineController(async ({ req, params, env }) => {\n console.log('[fs] params received:', JSON.stringify(params));\n\n const threadId = params.id;\n // rou3 uses \"_\" for catch-all wildcard params, or check for \"path\" or \"*\"\n const pathParam = params._ || params.path || params['*'] || '';\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n console.log('[fs] threadId:', threadId, 'pathParam:', pathParam);\n\n // Normalize path - ensure it starts with /\n const path = pathParam ? `/${pathParam}` : \"/\";\n const url = new URL(req.url);\n\n try {\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n // Handle based on HTTP method\n switch (req.method) {\n case \"GET\":\n return handleGet(stub, path, url);\n case \"PUT\":\n return handlePut(stub, path, req);\n case \"DELETE\":\n return handleDelete(stub, path);\n default:\n return Response.json(\n { error: `Method ${req.method} not allowed` },\n { status: 405 }\n );\n }\n } catch (error: any) {\n console.error(`Error in fs API for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"File operation failed\" },\n { status: 500 }\n );\n }\n});\n\n/**\n * Handle GET requests - fetch file data, directory listing, or stats\n */\nasync function handleGet(stub: any, path: string, url: URL): Promise<Response> {\n // Check for stats request\n if (url.searchParams.has(\"stats\")) {\n const result = await stub.getFileStats();\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json(result.stats);\n }\n\n // Check for thumbnail request\n if (url.searchParams.has(\"thumbnail\")) {\n const result = await stub.getFileThumbnail(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 404 });\n }\n\n // Return binary thumbnail data\n const binary = atob(result.data);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return new Response(bytes, {\n headers: {\n \"Content-Type\": \"image/jpeg\", // Thumbnails are typically JPEG\n \"Cache-Control\": \"public, max-age=31536000\", // Cache for 1 year\n },\n });\n }\n\n // Get file info first\n const statResult = await stub.statFile(path);\n\n if (!statResult.success) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n\n const file = statResult.file;\n\n // If it's a directory, list contents\n if (file.isDirectory) {\n const result = await stub.readdirFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ files: result.files, path });\n }\n\n // If it's an external file, return metadata only\n if (file.storage !== \"local\") {\n return Response.json({\n file,\n external: true,\n location: file.location,\n });\n }\n\n // For local files, check if client wants JSON metadata or raw data\n const acceptHeader = url.searchParams.get(\"format\") || \"auto\";\n\n if (acceptHeader === \"json\") {\n // Return file metadata as JSON\n return Response.json({ file });\n }\n\n // Return raw file data with appropriate content type\n const result = await stub.readFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 404 });\n }\n\n // Convert base64 to binary\n const binary = atob(result.data);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return new Response(bytes, {\n headers: {\n \"Content-Type\": file.mimeType,\n \"Content-Length\": String(file.size),\n \"Content-Disposition\": `inline; filename=\"${file.name}\"`,\n },\n });\n}\n\n/**\n * Handle PUT requests - write file or create directory\n */\nasync function handlePut(stub: any, path: string, req: Request): Promise<Response> {\n const contentType = req.headers.get(\"Content-Type\") || \"\";\n\n // Check if it's a directory creation request\n if (contentType.includes(\"application/json\")) {\n const body = await req.json() as any;\n\n // Directory creation\n if (body.type === \"directory\") {\n const result = await stub.mkdirFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n return Response.json({ directory: result.directory }, { status: 201 });\n }\n\n // External file link\n if (body.location) {\n const result = await stub.linkFile(path, body.location, {\n mimeType: body.mimeType,\n size: body.size,\n metadata: body.metadata,\n });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n return Response.json(toAttachmentRef(result.file), { status: 201 });\n }\n\n // File upload with base64 data\n if (body.data) {\n const result = await stub.writeFile(path, body.data, body.mimeType || \"application/octet-stream\", {\n metadata: body.metadata,\n thumbnail: body.thumbnail,\n });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n return Response.json(toAttachmentRef(result.file), { status: 201 });\n }\n\n return Response.json({ error: \"Invalid request body\" }, { status: 400 });\n }\n\n // Handle raw binary upload\n const data = await req.arrayBuffer();\n const mimeType = contentType.split(\";\")[0].trim() || \"application/octet-stream\";\n\n // Convert to base64\n const bytes = new Uint8Array(data);\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n const base64 = btoa(binary);\n\n const result = await stub.writeFile(path, base64, mimeType, {});\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n\n // Return AttachmentRef format for client consumption\n return Response.json(toAttachmentRef(result.file), { status: 201 });\n}\n\n/**\n * Handle DELETE requests - remove file or empty directory\n */\nasync function handleDelete(stub: any, path: string): Promise<Response> {\n // Try to get file info first\n const statResult = await stub.statFile(path);\n\n if (!statResult.success) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n\n const file = statResult.file;\n\n if (file.isDirectory) {\n // Remove directory\n const result = await stub.rmdirFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n } else {\n // Remove file\n const result = await stub.unlinkFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n }\n\n return new Response(null, { status: 204 });\n}\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * GET /api/threads/:id/logs/:logId\n *\n * Get detailed information for a single log from a thread's DurableObject\n *\n * Returns:\n * - HTTP 200: Full log details object\n * - HTTP 404: Thread or log not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n const logId = params.logId;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (!logId) {\n return Response.json({ error: \"Log ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call RPC method\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const logDetails = await stub.getLogDetails(logId);\n\n return Response.json(logDetails);\n } catch (error: any) {\n console.error(`Error fetching log details for ${logId}:`, error);\n\n if (error.message?.includes(\"not found\")) {\n return Response.json(\n { error: error.message },\n { status: 404 }\n );\n }\n\n return Response.json(\n { error: error.message || \"Failed to fetch log details\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * DELETE /api/threads/:id/messages/:messageId\n *\n * Delete a message from a thread's DurableObject\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 404: Thread or message not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n const messageId = params.messageId;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (!messageId) {\n return Response.json({ error: \"Message ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.deleteMessage(messageId);\n\n if (!result.success) {\n return Response.json(\n { error: result.error || \"Failed to delete message\" },\n { status: 404 }\n );\n }\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error(`Error deleting message ${messageId} from thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to delete message\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * PATCH /api/threads/:id/messages/:messageId\n *\n * Update a message's content in a thread's DurableObject\n *\n * Body:\n * - content: string (required) - The new message content\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 400: Missing required fields\n * - HTTP 404: Thread or message not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n const messageId = params.messageId;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (!messageId) {\n return Response.json({ error: \"Message ID required\" }, { status: 400 });\n }\n\n // Parse request body\n let body: { content?: string };\n try {\n body = await req.json();\n } catch {\n return Response.json({ error: \"Invalid JSON body\" }, { status: 400 });\n }\n\n if (typeof body.content !== \"string\") {\n return Response.json({ error: \"Content is required and must be a string\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.updateMessageContent(messageId, body.content);\n\n if (!result.success) {\n return Response.json(\n { error: result.error || \"Failed to update message\" },\n { status: 404 }\n );\n }\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error(`Error updating message ${messageId} in thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to update message\" },\n { status: 500 }\n );\n }\n});\n","// Auto-generated file - do not edit manually\n// Generated by scripts/generate-built-in-routes.ts\n\nimport { addRoute } from 'rou3';\n\n// Import all route handlers\nimport handler0 from './api/index.post';\nimport handler1 from './api/agents.get';\nimport handler2 from './api/api-keys/index.get';\nimport handler3 from './api/api-keys/index.post';\nimport handler4 from './api/config.get';\nimport handler5 from './api/diagnostics.get';\nimport handler6 from './api/events.get';\nimport handler7 from './api/models.get';\nimport handler8 from './api/new-test.get';\nimport handler9 from './api/prompts.get';\nimport handler10 from './api/providers.get';\nimport handler11 from './api/threads/index.post';\nimport handler12 from './api/threads/index';\nimport handler13 from './api/tools.get';\nimport handler14 from './api/users/index.get';\nimport handler15 from './api/users/index.post';\nimport handler16 from './api/agents/[name].get';\nimport handler17 from './api/api-keys/[id].delete';\nimport handler18 from './api/prompts/[name].get';\nimport handler19 from './api/threads/[id].delete';\nimport handler20 from './api/threads/[id].patch';\nimport handler21 from './api/threads/[id]';\nimport handler22 from './api/tools/[name].get';\nimport handler23 from './api/users/[id].delete';\nimport handler24 from './api/users/[id].put';\nimport handler25 from './api/auth/config.get';\nimport handler26 from './api/auth/login.post';\nimport handler27 from './api/auth/logout.post';\nimport handler28 from './api/auth/me.get';\nimport handler29 from './api/models/available.post';\nimport handler30 from './api/models/endpoints.post';\nimport handler31 from './api/threads/[id]/cost.get';\nimport handler32 from './api/threads/[id]/fs/index';\nimport handler33 from './api/threads/[id]/logs.get';\nimport handler34 from './api/threads/[id]/messages.post';\nimport handler35 from './api/threads/[id]/messages.get';\nimport handler36 from './api/threads/[id]/rpc.post';\nimport handler37 from './api/threads/[id]/stop.post';\nimport handler38 from './api/threads/[id]/stream';\nimport handler39 from './api/threads/[id]/fs/[...path]';\nimport handler40 from './api/threads/[id]/logs/[logId].get';\nimport handler41 from './api/threads/[id]/messages/[messageId].delete';\nimport handler42 from './api/threads/[id]/messages/[messageId].patch';\n\nconst routeHandlers: Record<string, any> = {\n 'POST:/': handler0,\n 'GET:/agents': handler1,\n 'GET:/api-keys': handler2,\n 'POST:/api-keys': handler3,\n 'GET:/config': handler4,\n 'GET:/diagnostics': handler5,\n 'GET:/events': handler6,\n 'GET:/models': handler7,\n 'GET:/new-test': handler8,\n 'GET:/prompts': handler9,\n 'GET:/providers': handler10,\n 'POST:/threads': handler11,\n 'GET:/threads': handler12,\n 'GET:/tools': handler13,\n 'GET:/users': handler14,\n 'POST:/users': handler15,\n 'GET:/agents/:name': handler16,\n 'DELETE:/api-keys/:id': handler17,\n 'GET:/prompts/:name': handler18,\n 'DELETE:/threads/:id': handler19,\n 'PATCH:/threads/:id': handler20,\n 'GET:/threads/:id': handler21,\n 'GET:/tools/:name': handler22,\n 'DELETE:/users/:id': handler23,\n 'PUT:/users/:id': handler24,\n 'GET:/auth/config': handler25,\n 'POST:/auth/login': handler26,\n 'POST:/auth/logout': handler27,\n 'GET:/auth/me': handler28,\n 'POST:/models/available': handler29,\n 'POST:/models/endpoints': handler30,\n 'GET:/threads/:id/cost': handler31,\n 'GET:/threads/:id/fs': handler32,\n 'GET:/threads/:id/logs': handler33,\n 'POST:/threads/:id/messages': handler34,\n 'GET:/threads/:id/messages': handler35,\n 'POST:/threads/:id/rpc': handler36,\n 'POST:/threads/:id/stop': handler37,\n 'GET:/threads/:id/stream': handler38,\n 'GET:/threads/:id/fs/**': handler39,\n 'GET:/threads/:id/logs/:logId': handler40,\n 'DELETE:/threads/:id/messages/:messageId': handler41,\n 'PATCH:/threads/:id/messages/:messageId': handler42,\n};\n\nexport interface RuntimeData {\n config?: any;\n tools?: any;\n models?: Record<string, () => Promise<any>>;\n modelNames?: string[];\n prompts?: Record<string, () => Promise<any>>;\n promptNames?: string[];\n agents?: Record<string, () => Promise<any>>;\n agentNames?: string[];\n}\n\nexport function registerBuiltInRoutes(router: any, runtimeData?: RuntimeData) {\n for (const [key, handler] of Object.entries(routeHandlers)) {\n const [method, ...routeParts] = key.split(':');\n const route = routeParts.join(':');\n const apiRoute = `/api${route}`;\n // Wrap handler to inject runtime data into context\n const wrappedHandler = async (context: any) => {\n // Add runtime data to context if provided\n const enhancedContext = {\n ...context,\n ...(runtimeData?.config && { config: runtimeData.config }),\n ...(runtimeData?.tools && { tools: runtimeData.tools }),\n ...(runtimeData?.models && { models: runtimeData.models }),\n ...(runtimeData?.modelNames && { modelNames: runtimeData.modelNames }),\n ...(runtimeData?.prompts && { prompts: runtimeData.prompts }),\n ...(runtimeData?.promptNames && { promptNames: runtimeData.promptNames }),\n ...(runtimeData?.agents && { agents: runtimeData.agents }),\n ...(runtimeData?.agentNames && { agentNames: runtimeData.agentNames }),\n };\n return handler(enhancedContext);\n };\n addRoute(router, method, apiRoute, async () => wrappedHandler);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.mjs","../src/router/index.ts","../src/api/index.post.ts","../src/api/agents.get.ts","../src/utils/auth.ts","../src/middleware/auth.ts","../src/api/api-keys/index.get.ts","../src/api/api-keys/index.post.ts","../src/api/config.get.ts","../src/api/diagnostics.get.ts","../src/api/events.get.ts","../src/api/models.get.ts","../src/api/new-test.get.ts","../src/api/prompts.get.ts","../src/api/providers.get.ts","../src/api/threads/index.post.ts","../src/api/threads/index.ts","../src/api/tools.get.ts","../src/api/users/index.get.ts","../src/api/users/index.post.ts","../src/api/agents/%5Bname%5D.get.ts","../src/api/api-keys/%5Bid%5D.delete.ts","../src/api/prompts/%5Bname%5D.get.ts","../src/api/threads/%5Bid%5D.delete.ts","../src/api/threads/%5Bid%5D.patch.ts","../src/api/threads/%5Bid%5D.ts","../src/api/tools/%5Bname%5D.get.ts","../src/api/users/%5Bid%5D.delete.ts","../src/api/users/%5Bid%5D.put.ts","../src/api/auth/config.get.ts","../src/api/auth/login.post.ts","../src/api/auth/logout.post.ts","../src/api/auth/me.get.ts","../src/api/models/available.post.ts","../src/api/models/endpoints.post.ts","../src/api/threads/%5Bid%5D/cost.get.ts","../src/api/threads/%5Bid%5D/fs/index.ts","../src/api/threads/%5Bid%5D/logs.get.ts","../src/api/threads/%5Bid%5D/messages.post.ts","../src/api/threads/%5Bid%5D/messages.get.ts","../src/api/threads/%5Bid%5D/rpc.post.ts","../src/api/threads/%5Bid%5D/stop.post.ts","../src/api/threads/%5Bid%5D/stream.ts","../src/api/threads/%5Bid%5D/fs/%5B...path%5D.ts","../src/api/threads/%5Bid%5D/logs/%5BlogId%5D.get.ts","../src/api/threads/%5Bid%5D/messages/%5BmessageId%5D.delete.ts","../src/api/threads/%5Bid%5D/messages/%5BmessageId%5D.patch.ts","../src/built-in-routes.ts"],"names":["index_post_default","toJSONSchema","z","result","index_get_default","loader","normalizePromptContent","name_get_default","id_delete_default","resolveIconUrl","config_get_default","token","durableId","stub","binary","bytes"],"mappings":"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","file":"built-in-routes.js","sourcesContent":["const NullProtoObj = /* @__PURE__ */ (() => {\n\tconst e = function() {};\n\treturn e.prototype = Object.create(null), Object.freeze(e.prototype), e;\n})();\n\n/**\n* Create a new router context.\n*/\nfunction createRouter() {\n\treturn {\n\t\troot: { key: \"\" },\n\t\tstatic: new NullProtoObj()\n\t};\n}\n\nfunction splitPath(path) {\n\tconst [_, ...s] = path.split(\"/\");\n\treturn s[s.length - 1] === \"\" ? s.slice(0, -1) : s;\n}\nfunction getMatchParams(segments, paramsMap) {\n\tconst params = new NullProtoObj();\n\tfor (const [index, name] of paramsMap) {\n\t\tconst segment = index < 0 ? segments.slice(-1 * index).join(\"/\") : segments[index];\n\t\tif (typeof name === \"string\") params[name] = segment;\n\t\telse {\n\t\t\tconst match = segment.match(name);\n\t\t\tif (match) for (const key in match.groups) params[key] = match.groups[key];\n\t\t}\n\t}\n\treturn params;\n}\n\n/**\n* Add a route to the router context.\n*/\nfunction addRoute(ctx, method = \"\", path, data) {\n\tmethod = method.toUpperCase();\n\tif (path.charCodeAt(0) !== 47) path = `/${path}`;\n\tconst segments = splitPath(path);\n\tlet node = ctx.root;\n\tlet _unnamedParamIndex = 0;\n\tconst paramsMap = [];\n\tconst paramsRegexp = [];\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tconst segment = segments[i];\n\t\tif (segment.startsWith(\"**\")) {\n\t\t\tif (!node.wildcard) node.wildcard = { key: \"**\" };\n\t\t\tnode = node.wildcard;\n\t\t\tparamsMap.push([\n\t\t\t\t-i,\n\t\t\t\tsegment.split(\":\")[1] || \"_\",\n\t\t\t\tsegment.length === 2\n\t\t\t]);\n\t\t\tbreak;\n\t\t}\n\t\tif (segment === \"*\" || segment.includes(\":\")) {\n\t\t\tif (!node.param) node.param = { key: \"*\" };\n\t\t\tnode = node.param;\n\t\t\tif (segment === \"*\") paramsMap.push([\n\t\t\t\ti,\n\t\t\t\t`_${_unnamedParamIndex++}`,\n\t\t\t\ttrue\n\t\t\t]);\n\t\t\telse if (segment.includes(\":\", 1)) {\n\t\t\t\tconst regexp = getParamRegexp(segment);\n\t\t\t\tparamsRegexp[i] = regexp;\n\t\t\t\tnode.hasRegexParam = true;\n\t\t\t\tparamsMap.push([\n\t\t\t\t\ti,\n\t\t\t\t\tregexp,\n\t\t\t\t\tfalse\n\t\t\t\t]);\n\t\t\t} else paramsMap.push([\n\t\t\t\ti,\n\t\t\t\tsegment.slice(1),\n\t\t\t\tfalse\n\t\t\t]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = node.static?.[segment];\n\t\tif (child) node = child;\n\t\telse {\n\t\t\tconst staticNode = { key: segment };\n\t\t\tif (!node.static) node.static = new NullProtoObj();\n\t\t\tnode.static[segment] = staticNode;\n\t\t\tnode = staticNode;\n\t\t}\n\t}\n\tconst hasParams = paramsMap.length > 0;\n\tif (!node.methods) node.methods = new NullProtoObj();\n\tnode.methods[method] ??= [];\n\tnode.methods[method].push({\n\t\tdata: data || null,\n\t\tparamsRegexp,\n\t\tparamsMap: hasParams ? paramsMap : void 0\n\t});\n\tif (!hasParams) ctx.static[path] = node;\n}\nfunction getParamRegexp(segment) {\n\tconst regex = segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\");\n\treturn /* @__PURE__ */ new RegExp(`^${regex}$`);\n}\n\n/**\n* Find a route by path.\n*/\nfunction findRoute(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst staticNode = ctx.static[path];\n\tif (staticNode && staticNode.methods) {\n\t\tconst staticMatch = staticNode.methods[method] || staticNode.methods[\"\"];\n\t\tif (staticMatch !== void 0) return staticMatch[0];\n\t}\n\tconst segments = splitPath(path);\n\tconst match = _lookupTree(ctx, ctx.root, method, segments, 0)?.[0];\n\tif (match === void 0) return;\n\tif (opts?.params === false) return match;\n\treturn {\n\t\tdata: match.data,\n\t\tparams: match.paramsMap ? getMatchParams(segments, match.paramsMap) : void 0\n\t};\n}\nfunction _lookupTree(ctx, node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods) {\n\t\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\t\tif (match) return match;\n\t\t}\n\t\tif (node.param && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\tif (node.wildcard && node.wildcard.methods) {\n\t\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (node.static) {\n\t\tconst staticChild = node.static[segment];\n\t\tif (staticChild) {\n\t\t\tconst match = _lookupTree(ctx, staticChild, method, segments, index + 1);\n\t\t\tif (match) return match;\n\t\t}\n\t}\n\tif (node.param) {\n\t\tconst match = _lookupTree(ctx, node.param, method, segments, index + 1);\n\t\tif (match) {\n\t\t\tif (node.param.hasRegexParam) {\n\t\t\t\tconst exactMatch = match.find((m) => m.paramsRegexp[index]?.test(segment)) || match.find((m) => !m.paramsRegexp[index]);\n\t\t\t\treturn exactMatch ? [exactMatch] : void 0;\n\t\t\t}\n\t\t\treturn match;\n\t\t}\n\t}\n\tif (node.wildcard && node.wildcard.methods) return node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n}\n\n/**\n* Remove a route from the router context.\n*/\nfunction removeRoute(ctx, method, path) {\n\tconst segments = splitPath(path);\n\treturn _remove(ctx.root, method || \"\", segments, 0);\n}\nfunction _remove(node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods && method in node.methods) {\n\t\t\tdelete node.methods[method];\n\t\t\tif (Object.keys(node.methods).length === 0) node.methods = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (segment === \"*\") {\n\t\tif (node.param) {\n\t\t\t_remove(node.param, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.param)) node.param = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tif (segment.startsWith(\"**\")) {\n\t\tif (node.wildcard) {\n\t\t\t_remove(node.wildcard, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.wildcard)) node.wildcard = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst childNode = node.static?.[segment];\n\tif (childNode) {\n\t\t_remove(childNode, method, segments, index + 1);\n\t\tif (_isEmptyNode(childNode)) {\n\t\t\tdelete node.static[segment];\n\t\t\tif (Object.keys(node.static).length === 0) node.static = void 0;\n\t\t}\n\t}\n}\nfunction _isEmptyNode(node) {\n\treturn node.methods === void 0 && node.static === void 0 && node.param === void 0 && node.wildcard === void 0;\n}\n\n/**\n* Find all route patterns that match the given path.\n*/\nfunction findAllRoutes(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst segments = splitPath(path);\n\tconst matches = _findAll(ctx, ctx.root, method, segments, 0);\n\tif (opts?.params === false) return matches;\n\treturn matches.map((m) => {\n\t\treturn {\n\t\t\tdata: m.data,\n\t\t\tparams: m.paramsMap ? getMatchParams(segments, m.paramsMap) : void 0\n\t\t};\n\t});\n}\nfunction _findAll(ctx, node, method, segments, index, matches = []) {\n\tconst segment = segments[index];\n\tif (node.wildcard && node.wildcard.methods) {\n\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\tif (node.param) {\n\t\t_findAll(ctx, node.param, method, segments, index + 1, matches);\n\t\tif (index === segments.length && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) matches.push(...match);\n\t\t\t}\n\t\t}\n\t}\n\tconst staticChild = node.static?.[segment];\n\tif (staticChild) _findAll(ctx, staticChild, method, segments, index + 1, matches);\n\tif (index === segments.length && node.methods) {\n\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\treturn matches;\n}\n\nfunction routeToRegExp(route = \"/\") {\n\tconst reSegments = [];\n\tlet idCtr = 0;\n\tfor (const segment of route.split(\"/\")) {\n\t\tif (!segment) continue;\n\t\tif (segment === \"*\") reSegments.push(`(?<_${idCtr++}>[^/]*)`);\n\t\telse if (segment.startsWith(\"**\")) reSegments.push(segment === \"**\" ? \"?(?<_>.*)\" : `?(?<${segment.slice(3)}>.+)`);\n\t\telse if (segment.includes(\":\")) reSegments.push(segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\"));\n\t\telse reSegments.push(segment);\n\t}\n\treturn /* @__PURE__ */ new RegExp(`^/${reSegments.join(\"/\")}/?$`);\n}\n\nexport { NullProtoObj, addRoute, createRouter, findAllRoutes, findRoute, removeRoute, routeToRegExp };","import { createRouter, findRoute } from \"rou3\";\nimport type { ThreadInstance, ThreadMetadata } from \"../agents/types.js\";\n\n/**\n * Minimum required environment bindings for thread endpoints.\n * User's Env interface should extend this.\n *\n * Uses Rpc.DurableObjectBranded to allow users to specify their own\n * Durable Object types that extend DurableThread/DurableAgentBuilder.\n */\nexport interface ThreadEnv {\n AGENT_BUILDER_THREAD: DurableObjectNamespace<Rpc.DurableObjectBranded>;\n AGENT_BUILDER: DurableObjectNamespace<Rpc.DurableObjectBranded>; // Root DO for thread/config lookups\n // Allow additional bindings from user\n [key: string]: unknown;\n}\n\n/**\n * Virtual module registry types (injected at runtime by plugin)\n */\nexport type VirtualModuleLoader<T> = () => Promise<T>;\nexport type VirtualModuleRegistry<T> = Record<string, VirtualModuleLoader<T>>;\n\n/**\n * Controller context passed to route handlers.\n * Includes optional virtual module registries that are injected at runtime.\n */\nexport interface ControllerContext<Env = any> {\n req: Request;\n params: Record<string, string>;\n env: Env;\n url: URL;\n\n // Virtual module registries (injected at runtime)\n agents?: VirtualModuleRegistry<unknown>;\n agentNames?: string[];\n prompts?: VirtualModuleRegistry<unknown>;\n promptNames?: string[];\n models?: VirtualModuleRegistry<unknown>;\n modelNames?: string[];\n tools?: VirtualModuleRegistry<unknown>;\n hooks?: VirtualModuleRegistry<unknown>;\n config?: Record<string, unknown>;\n}\n\nexport type Controller<Env = any> = (\n context: ControllerContext<Env>\n) =>\n | string\n | Promise<string>\n | Response\n | Promise<Response>\n | ReadableStream\n | Promise<ReadableStream>\n | null\n | Promise<null>\n | void\n | Promise<void>\n | Promise<object>\n | object;\n\nexport interface ThreadEndpointContext {\n req: Request;\n thread: {\n instance: ThreadInstance;\n metadata: ThreadMetadata;\n };\n}\n\nexport async function route<Env = any>(\n url: URL,\n request: Request,\n env: Env\n): Promise<Response | null> {\n const router = createRouter<() => Promise<Controller>>();\n // @ts-ignore-next-line\n const routesLoader = await import(\"virtual:@standardagents-routes\");\n routesLoader.default(router);\n\n // Check for API routes first\n const route = findRoute<() => Promise<Controller>>(\n router,\n request.method.toUpperCase(),\n url.pathname\n );\n\n if (route) {\n const controller = await route.data();\n const context: ControllerContext = {\n req: request,\n params: route.params || {},\n env: env,\n url: url,\n };\n const result = await controller(context);\n\n if (result instanceof Response) {\n return result;\n }\n if (typeof result === \"string\") {\n return new Response(result, {\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n });\n }\n return Response.json(result);\n }\n\n // No API route found - not handled by this router\n // Static assets and SPA routing are handled by Cloudflare Workers Assets binding\n // configured in wrangler.jsonc\n return null;\n}\n\nexport function defineController<Env = any>(controller: Controller<Env>): Controller<Env> {\n return controller;\n}\n\n/**\n * Define a thread-specific endpoint that has access to the thread's DurableObject instance and metadata.\n * This wraps defineController and automatically looks up the thread by ID from the URL params.\n *\n * @param handler - Function that receives the request and thread context\n * @returns A Controller that can be used with the router\n *\n * @example\n * // agentbuilder/api/status.ts\n * export default defineThreadEndpoint(async (req, { thread }) => {\n * const messages = await thread.instance.getMessages();\n * return Response.json({ status: \"ok\", messageCount: messages.length });\n * });\n */\nexport function defineThreadEndpoint<Env extends ThreadEnv = ThreadEnv>(\n handler: (\n req: Request,\n context: ThreadEndpointContext[\"thread\"]\n ) => Response | Promise<Response>\n): Controller<Env> {\n return defineController<Env>(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Get thread metadata from DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const metadata = await agentBuilder.getThread(threadId) as ThreadMetadata | null;\n\n if (!metadata) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Create ThreadInstance reference\n // Note: We can't access ctx and env directly, but we can call RPC methods\n const instance = stub as unknown as ThreadInstance;\n\n // Call handler with thread context\n return await handler(req, {\n instance,\n metadata,\n });\n } catch (error: any) {\n console.error(`Error in thread endpoint for ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Internal server error\" },\n { status: 500 }\n );\n }\n });\n}\n","import { defineController } from \"../router/index\";\n\nexport default defineController(() => {\n const stream = new ReadableStream({\n start(controller) {\n const text = \"hello world\";\n let index = 0;\n const next = () => {\n if (index < text.length) {\n controller.enqueue(new TextEncoder().encode(text[index]));\n index++;\n setTimeout(next, 100);\n } else {\n controller.close();\n }\n };\n next();\n },\n });\n return new Response(stream);\n});\n","import { defineController } from '../router/index.js';\nimport type { AgentDefinition } from '../sdk/defineAgent.js';\n\n/**\n * GET /api/agents\n *\n * List all defined agents from the agentbuilder/agents directory.\n * Returns agent configuration data loaded from TypeScript files.\n *\n * Returns:\n * - HTTP 200: { agents: Array<{ id, title, type, sideA, sideB, ... }> }\n */\nexport default defineController(async ({ agents, agentNames, prompts, promptNames }) => {\n if (!agents || !agentNames) {\n return Response.json({ agents: [] });\n }\n\n // Build a map of prompts for quick lookup\n const promptMap: Record<string, any> = {};\n if (prompts && promptNames) {\n await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (loader) {\n promptMap[name] = await loader();\n }\n } catch (error) {\n // Skip failed prompts\n }\n })\n );\n }\n\n const agentList = await Promise.all(\n agentNames.map(async (name: string) => {\n try {\n const loader = agents[name];\n if (!loader) {\n return null;\n }\n const definition = await loader() as AgentDefinition;\n\n // Get prompt names for sides\n const sideAPrompt = promptMap[definition.sideA?.prompt];\n const sideBPrompt = definition.sideB\n ? promptMap[definition.sideB?.prompt]\n : null;\n\n return {\n id: definition.name,\n name: definition.name,\n title: definition.title,\n type: definition.type || 'ai_human',\n\n // Side A configuration\n side_a_label: definition.sideA?.label || null,\n side_a_agent_prompt: definition.sideA?.prompt,\n side_a_agent_prompt_name: sideAPrompt?.name || definition.sideA?.prompt,\n side_a_stop_on_response:\n definition.sideA?.stopOnResponse !== undefined\n ? definition.sideA.stopOnResponse\n : true,\n side_a_stop_tool: definition.sideA?.stopTool || null,\n side_a_stop_tool_response_property:\n definition.sideA?.stopToolResponseProperty || null,\n side_a_max_turns: definition.sideA?.maxTurns || null,\n side_a_end_conversation_tool:\n definition.sideA?.endConversationTool || null,\n side_a_manual_stop_condition:\n definition.sideA?.manualStopCondition || false,\n\n // Side B configuration (if dual_ai)\n side_b_label: definition.sideB?.label || null,\n side_b_agent_prompt: definition.sideB?.prompt || null,\n side_b_agent_prompt_name: sideBPrompt?.name || definition.sideB?.prompt || null,\n side_b_stop_on_response:\n definition.sideB?.stopOnResponse !== undefined\n ? definition.sideB.stopOnResponse\n : true,\n side_b_stop_tool: definition.sideB?.stopTool || null,\n side_b_stop_tool_response_property:\n definition.sideB?.stopToolResponseProperty || null,\n side_b_max_turns: definition.sideB?.maxTurns || null,\n side_b_end_conversation_tool:\n definition.sideB?.endConversationTool || null,\n side_b_manual_stop_condition:\n definition.sideB?.manualStopCondition || false,\n\n // Session configuration\n max_session_turns: definition.maxSessionTurns || null,\n\n // Tool exposure\n expose_as_tool: definition.exposeAsTool || false,\n tool_description: definition.toolDescription || null,\n\n // Tags\n tags: definition.tags || [],\n\n created_at: Math.floor(Date.now() / 1000),\n };\n } catch (error) {\n console.error(`Error loading agent ${name}:`, error);\n return null;\n }\n })\n );\n\n // Filter out any null entries from failed loads\n const validAgents = agentList.filter(Boolean);\n\n return Response.json({ agents: validAgents });\n});\n","/**\n * Authentication utilities for user sessions, API keys, and password hashing\n */\n\n/**\n * Generate a cryptographically secure random string\n */\nexport function generateSecureToken(length: number = 32): string {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate a user session token with prefix\n */\nexport function generateUserToken(): string {\n return `agtuser_${generateSecureToken(32)}`;\n}\n\n/**\n * Generate an API key with prefix\n */\nexport function generateApiKey(): string {\n return `agtbldr_${generateSecureToken(32)}`;\n}\n\n/**\n * Hash a password using PBKDF2\n */\nexport async function hashPassword(password: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(password);\n\n // Generate a random salt\n const salt = crypto.getRandomValues(new Uint8Array(16));\n\n // Import the password as a key\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n data,\n { name: 'PBKDF2' },\n false,\n ['deriveBits']\n );\n\n // Derive bits using PBKDF2\n const derivedBits = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100000,\n hash: 'SHA-256'\n },\n keyMaterial,\n 256\n );\n\n // Combine salt and hash\n const hashArray = new Uint8Array(derivedBits);\n const combined = new Uint8Array(salt.length + hashArray.length);\n combined.set(salt);\n combined.set(hashArray, salt.length);\n\n // Return as base64\n return bufferToBase64(combined);\n}\n\n/**\n * Verify a password against its hash\n */\nexport async function verifyPassword(password: string, hash: string): Promise<boolean> {\n try {\n const combined = base64ToBuffer(hash);\n\n // Extract salt and hash\n const salt = combined.slice(0, 16);\n const storedHash = combined.slice(16);\n\n const encoder = new TextEncoder();\n const data = encoder.encode(password);\n\n // Import the password as a key\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n data,\n { name: 'PBKDF2' },\n false,\n ['deriveBits']\n );\n\n // Derive bits using the same salt\n const derivedBits = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100000,\n hash: 'SHA-256'\n },\n keyMaterial,\n 256\n );\n\n const derivedHash = new Uint8Array(derivedBits);\n\n // Compare hashes\n if (derivedHash.length !== storedHash.length) {\n return false;\n }\n\n let matches = true;\n for (let i = 0; i < derivedHash.length; i++) {\n if (derivedHash[i] !== storedHash[i]) {\n matches = false;\n }\n }\n\n return matches;\n } catch (error) {\n console.error('Error verifying password:', error);\n return false;\n }\n}\n\n/**\n * Hash a token or API key using SHA-256\n */\nexport async function hashToken(token: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(token);\n\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = new Uint8Array(hashBuffer);\n\n return Array.from(hashArray, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Extract the last N characters from a string\n */\nexport function getLastChars(str: string, count: number = 5): string {\n return str.slice(-count);\n}\n\n/**\n * Extract the prefix from a token (e.g., \"agtuser_\" or \"agtbldr_\")\n */\nexport function getTokenPrefix(token: string): string {\n const match = token.match(/^([^_]+_)/);\n return match ? match[1] : '';\n}\n\n/**\n * Validate token format\n */\nexport function isValidUserToken(token: string): boolean {\n return token.startsWith('agtuser_') && token.length > 10;\n}\n\n/**\n * Validate API key format\n */\nexport function isValidApiKey(key: string): boolean {\n return key.startsWith('agtbldr_') && key.length > 10;\n}\n\n/**\n * Generate a UUID v4\n */\nexport function generateId(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Sign a token payload using HMAC-SHA256 with the encryption key\n * Returns a signed token in the format: base64(payload).base64(signature)\n */\nexport async function signToken(payload: string, encryptionKey: string): Promise<string> {\n const encoder = new TextEncoder();\n\n // Import the encryption key for HMAC\n const keyData = encoder.encode(encryptionKey);\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n // Sign the payload\n const payloadData = encoder.encode(payload);\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, payloadData);\n\n // Convert to base64\n const payloadB64 = bufferToBase64(new Uint8Array(payloadData));\n const signatureB64 = bufferToBase64(new Uint8Array(signature));\n\n return `${payloadB64}.${signatureB64}`;\n}\n\n/**\n * Verify a signed token and extract its payload\n * Returns the payload if valid, null if invalid\n */\nexport async function verifySignedToken(signedToken: string, encryptionKey: string): Promise<string | null> {\n try {\n const parts = signedToken.split('.');\n if (parts.length !== 2) {\n return null;\n }\n\n const [payloadB64, signatureB64] = parts;\n const encoder = new TextEncoder();\n\n // Import the encryption key for HMAC\n const keyData = encoder.encode(encryptionKey);\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify']\n );\n\n // Decode the payload and signature\n const payloadData = base64ToBuffer(payloadB64);\n const signature = base64ToBuffer(signatureB64);\n\n // Verify the signature\n const isValid = await crypto.subtle.verify('HMAC', cryptoKey, signature, payloadData);\n\n if (!isValid) {\n return null;\n }\n\n // Decode payload to string\n const decoder = new TextDecoder();\n return decoder.decode(payloadData);\n } catch (error) {\n console.error('Error verifying signed token:', error);\n return null;\n }\n}\n\n/**\n * Generate a signed super admin token\n * Payload format: super_admin:timestamp:nonce\n */\nexport async function generateSuperAdminToken(encryptionKey: string): Promise<string> {\n const timestamp = Date.now();\n const nonce = generateSecureToken(16);\n const payload = `super_admin:${timestamp}:${nonce}`;\n return await signToken(payload, encryptionKey);\n}\n\n/**\n * Verify a super admin token\n * Returns true if valid, false otherwise\n */\nexport async function verifySuperAdminToken(token: string, encryptionKey: string): Promise<boolean> {\n const payload = await verifySignedToken(token, encryptionKey);\n if (!payload) {\n return false;\n }\n\n // Check payload format\n const parts = payload.split(':');\n if (parts.length !== 3 || parts[0] !== 'super_admin') {\n return false;\n }\n\n // Optionally check timestamp for expiration (30 days)\n const timestamp = parseInt(parts[1], 10);\n const age = Date.now() - timestamp;\n const maxAge = 30 * 24 * 60 * 60 * 1000; // 30 days\n\n if (age > maxAge) {\n return false;\n }\n\n return true;\n}\n\n// Helper functions\nfunction bufferToBase64(buffer: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < buffer.byteLength; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToBuffer(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","/**\n * Authentication middleware for protecting API routes\n *\n * Supports multiple authentication types:\n * - Super admin token (signed with ENCRYPTION_KEY)\n * - User session token (validated against DurableAgentBuilder)\n * - API key (validated against DurableAgentBuilder)\n */\n\nimport {\n verifySuperAdminToken,\n hashToken,\n isValidUserToken,\n isValidApiKey,\n} from '../utils/auth.js';\n\nexport interface AuthUser {\n id: string;\n username: string;\n role: string;\n}\n\nexport interface AuthContext {\n user: AuthUser;\n authType: 'super_admin' | 'session' | 'api_key';\n}\n\n/**\n * Extract bearer token from Authorization header or query parameter (for WebSockets)\n */\nfunction extractBearerToken(request: Request): string | null {\n // First try Authorization header\n const authHeader = request.headers.get('Authorization');\n if (authHeader && authHeader.startsWith('Bearer ')) {\n return authHeader.substring(7);\n }\n\n // For WebSocket upgrade requests, check query parameter\n const isWebSocket =\n request.headers.get('upgrade')?.toLowerCase() === 'websocket';\n if (isWebSocket) {\n try {\n const url = new URL(request.url);\n const token = url.searchParams.get('token');\n if (token) {\n return token;\n }\n } catch (err) {\n // Invalid URL, continue\n }\n }\n\n return null;\n}\n\n/**\n * Get DurableAgentBuilder singleton stub\n */\nfunction getAgentBuilder(env: any): any {\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n return env.AGENT_BUILDER.get(agentBuilderId);\n}\n\n/**\n * Authenticate a request using various token types\n */\nexport async function authenticate(\n request: Request,\n env: any\n): Promise<AuthContext | null> {\n const token = extractBearerToken(request);\n\n if (!token) {\n return null;\n }\n\n // Check if it's a signed super admin token (if super admin is configured)\n if (env.SUPER_ADMIN_PASSWORD && env.ENCRYPTION_KEY) {\n // Token contains a dot, might be a signed token\n if (token.includes('.')) {\n const isValidSuperAdmin = await verifySuperAdminToken(\n token,\n env.ENCRYPTION_KEY\n );\n if (isValidSuperAdmin) {\n return {\n user: {\n id: 'super_admin',\n username: 'admin',\n role: 'admin',\n },\n authType: 'super_admin',\n };\n }\n }\n }\n\n // Check if it's a user session token\n if (isValidUserToken(token)) {\n const tokenHash = await hashToken(token);\n const agentBuilder = getAgentBuilder(env);\n\n const session = await agentBuilder.validateSession(tokenHash);\n if (session) {\n // Get user details\n const user = await agentBuilder.getUserById(session.user_id);\n if (user) {\n return {\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n },\n authType: 'session',\n };\n }\n }\n }\n\n // Check if it's an API key\n if (isValidApiKey(token)) {\n const keyHash = await hashToken(token);\n const agentBuilder = getAgentBuilder(env);\n\n const apiKey = await agentBuilder.validateApiKey(keyHash);\n if (apiKey) {\n // Get user details\n const user = await agentBuilder.getUserById(apiKey.user_id);\n if (user) {\n return {\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n },\n authType: 'api_key',\n };\n }\n }\n }\n\n return null;\n}\n\n/**\n * Middleware to require authentication\n * Returns 401 if not authenticated\n */\nexport async function requireAuth(\n request: Request,\n env: any\n): Promise<AuthContext | Response> {\n const authContext = await authenticate(request, env);\n\n if (!authContext) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n return authContext;\n}\n\n/**\n * Middleware to require admin role\n * Returns 401 if not authenticated, 403 if not admin\n */\nexport async function requireAdmin(\n request: Request,\n env: any\n): Promise<AuthContext | Response> {\n const result = await requireAuth(request, env);\n\n if (result instanceof Response) {\n return result;\n }\n\n if (result.user.role !== 'admin') {\n return new Response(\n JSON.stringify({ error: 'Forbidden: Admin access required' }),\n {\n status: 403,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n }\n\n return result;\n}\n","import { defineController } from '../../router/index.js';\nimport { requireAuth } from '../../middleware/auth.js';\n\n/**\n * GET /api/api-keys\n *\n * List API keys for the authenticated user.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { keys: [{ id, name, key_prefix, last_five, created_at, last_used_at }] }\n * - HTTP 401: Not authenticated\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAuth(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Super admin has no API keys - they need to create a user first\n if (authResult.authType === 'super_admin') {\n return Response.json({ keys: [], message: 'Super admin has no API keys. Create a user account to manage API keys.' });\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n const keys = await agentBuilder.listApiKeys(authResult.user.id);\n\n return Response.json({ keys });\n } catch (error: any) {\n console.error('List API keys error:', error);\n return Response.json(\n { error: error.message || 'Failed to list API keys' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAuth } from '../../middleware/auth.js';\nimport { generateApiKey, hashToken, getLastChars, getTokenPrefix } from '../../utils/auth.js';\n\n/**\n * POST /api/api-keys\n *\n * Create a new API key for the authenticated user.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Body:\n * - name: string (name/description for the API key)\n *\n * Returns:\n * - HTTP 201: { key: <full_api_key>, id, name, key_prefix, last_five, created_at }\n * NOTE: The full key is only returned once on creation\n * - HTTP 400: Missing required fields\n * - HTTP 401: Not authenticated\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAuth(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Super admin cannot create API keys - they need to create a user first\n if (authResult.authType === 'super_admin') {\n return Response.json(\n { error: 'Super admin cannot create API keys. Please create a user account first.' },\n { status: 400 }\n );\n }\n\n const body = await req.json() as { name?: string };\n const { name } = body;\n\n if (!name || typeof name !== 'string') {\n return Response.json(\n { error: 'Name is required' },\n { status: 400 }\n );\n }\n\n if (name.length < 1 || name.length > 100) {\n return Response.json(\n { error: 'Name must be between 1 and 100 characters' },\n { status: 400 }\n );\n }\n\n // Generate the API key\n const apiKey = generateApiKey();\n const keyHash = await hashToken(apiKey);\n const keyPrefix = getTokenPrefix(apiKey);\n const lastFive = getLastChars(apiKey, 5);\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n const id = await agentBuilder.createApiKey({\n name,\n key_hash: keyHash,\n key_prefix: keyPrefix,\n last_five: lastFive,\n user_id: authResult.user.id,\n });\n\n const now = Math.floor(Date.now() / 1000);\n\n return Response.json({\n key: apiKey, // Only returned once on creation\n id,\n name,\n key_prefix: keyPrefix,\n last_five: lastFive,\n created_at: now,\n }, { status: 201 });\n } catch (error: any) {\n console.error('Create API key error:', error);\n return Response.json(\n { error: error.message || 'Failed to create API key' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../router/index\";\n\nexport default defineController(async ({ config }) => {\n return Response.json(config);\n});\n","import { defineController } from '../router/index.js';\nimport type { AgentDefinition } from '../sdk/defineAgent.js';\n\n/**\n * GET /api/diagnostics\n *\n * Returns diagnostic warnings about the current configuration.\n * This includes:\n * - Duplicate tool names (filesystem tools, prompts, agents with same name)\n *\n * Returns:\n * - HTTP 200: { warnings: Array<{ type, message, details }> }\n */\nexport default defineController(async ({ tools, prompts, promptNames, agents, agentNames }) => {\n const warnings: Array<{ type: string; message: string; details: any }> = [];\n\n // Track tool names and their sources\n const toolNameSources = new Map<string, Set<string>>();\n\n // Check filesystem tools\n if (tools) {\n const toolNames = Object.keys(tools);\n for (const name of toolNames) {\n const sources = toolNameSources.get(name) || new Set();\n sources.add('native tool');\n toolNameSources.set(name, sources);\n }\n }\n\n // Check prompts (all prompts are exposed as tools)\n if (prompts && promptNames) {\n for (const name of promptNames) {\n const sources = toolNameSources.get(name) || new Set();\n sources.add('prompt');\n toolNameSources.set(name, sources);\n }\n }\n\n // Check agents exposed as tools\n if (agents && agentNames) {\n for (const name of agentNames) {\n try {\n const loader = agents[name];\n if (loader) {\n const definition = await loader() as AgentDefinition;\n if (definition.exposeAsTool) {\n const sources = toolNameSources.get(name) || new Set();\n sources.add('agent');\n toolNameSources.set(name, sources);\n }\n }\n } catch {\n // Skip agents that fail to load\n }\n }\n }\n\n // Find duplicates\n for (const [name, sources] of toolNameSources) {\n if (sources.size > 1) {\n warnings.push({\n type: 'duplicate_tool_name',\n message: `Duplicate tool name \"${name}\" detected`,\n details: {\n name,\n sources: [...sources],\n },\n });\n }\n }\n\n return Response.json({ warnings });\n});\n","import { defineController } from '../router/index.js';\n\n/**\n * GET /api/events\n *\n * WebSocket endpoint for real-time events from the AgentBuilder system.\n *\n * Events:\n * - thread_created: { type: 'thread_created', thread: ThreadRegistryEntry }\n * - thread_deleted: { type: 'thread_deleted', threadId: string }\n *\n * Usage:\n * Connect via WebSocket to receive real-time updates when threads are\n * created or deleted in the system.\n */\nexport default defineController(async ({ req, env }) => {\n // Only handle WebSocket upgrade requests\n if (req.headers.get('upgrade')?.toLowerCase() !== 'websocket') {\n return Response.json(\n { error: 'This endpoint requires a WebSocket connection' },\n { status: 400 }\n );\n }\n\n try {\n // Forward the WebSocket upgrade to the DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const stub = env.AGENT_BUILDER.get(agentBuilderId);\n return await stub.fetch(req);\n } catch (error: any) {\n console.error('Error establishing events WebSocket:', error);\n return Response.json(\n { error: error.message || 'Failed to establish WebSocket connection' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../router/index.js';\nimport type { ModelDefinition } from '../sdk/defineModel.js';\n\n/**\n * GET /api/models\n *\n * List all defined models from the agentbuilder/models directory.\n * Returns model configuration data loaded from TypeScript files.\n *\n * Returns:\n * - HTTP 200: { models: Array<{ id, name, provider, model, fallbacks, ... }> }\n */\nexport default defineController(async ({ models, modelNames }) => {\n if (!models || !modelNames) {\n return Response.json({ models: [] });\n }\n\n const modelList = await Promise.all(\n modelNames.map(async (name: string) => {\n try {\n const loader = models[name];\n if (!loader) {\n return null;\n }\n const definition = await loader() as ModelDefinition;\n\n // Build fallback objects for display\n const fallbackObjects = (definition.fallbacks || []).map(\n (fallbackName: string, index: number) => ({\n id: fallbackName,\n name: fallbackName,\n order: index,\n })\n );\n\n return {\n id: definition.name,\n name: definition.name,\n provider: definition.provider,\n model: definition.model,\n input_price: definition.inputPrice,\n output_price: definition.outputPrice,\n cached_price: definition.cachedPrice,\n included_providers: definition.includedProviders,\n fallbacks: fallbackObjects,\n created_at: Math.floor(Date.now() / 1000), // Not persisted, use current time\n };\n } catch (error) {\n console.error(`Error loading model ${name}:`, error);\n return null;\n }\n })\n );\n\n // Filter out any null entries from failed loads\n const validModels = modelList.filter(Boolean);\n\n return Response.json({ models: validModels });\n});\n","import { defineController } from '../router'\n\nexport default defineController(async ({ req, params, env }) => {\n return { message: 'Modified new test API route', timestamp: new Date().toISOString() }\n})","import { defineController } from '../router/index.js';\nimport { z } from 'zod';\nimport type { PromptDefinition } from '../sdk/definePrompt.js';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || '_def' in schema)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n}\n\n/**\n * Normalize prompt content for API response.\n * - Arrays (StructuredPrompt) are serialized to JSON strings for backward compatibility\n * - Plain strings are returned as-is\n */\nfunction normalizePromptContent(prompt: string | any[] | undefined): string {\n if (!prompt) return '';\n // If it's an array (StructuredPrompt), serialize to JSON\n if (Array.isArray(prompt)) {\n return JSON.stringify(prompt);\n }\n // Plain string, return as-is\n return prompt;\n}\n\n/**\n * GET /api/prompts\n *\n * List all defined prompts from the agentbuilder/prompts directory.\n * Returns prompt configuration data loaded from TypeScript files.\n *\n * Returns:\n * - HTTP 200: { prompts: Array<{ id, name, tool_description, prompt, model, ... }> }\n */\nexport default defineController(async ({ prompts, promptNames, models, modelNames }) => {\n if (!prompts || !promptNames) {\n return Response.json({ prompts: [] });\n }\n\n // Build a map of models for quick lookup\n const modelMap: Record<string, any> = {};\n if (models && modelNames) {\n await Promise.all(\n modelNames.map(async (name: string) => {\n try {\n const loader = models[name];\n if (loader) {\n modelMap[name] = await loader();\n }\n } catch (error) {\n // Skip failed models\n }\n })\n );\n }\n\n const promptList = await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (!loader) {\n return null;\n }\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n // Extract tool names from tools array\n const tools = (definition.tools || []).map((tool: string | { name: string }) =>\n typeof tool === 'string' ? tool : tool.name\n );\n\n return {\n id: definition.name,\n name: definition.name,\n tool_description: definition.toolDescription,\n prompt: normalizePromptContent(definition.prompt),\n required_schema: toJSONSchema(definition.requiredSchema),\n model_id: definition.model,\n model_name: modelDef?.name || definition.model,\n model_provider: modelDef?.provider || 'unknown',\n include_chat: definition.includeChat || false,\n include_past_tools: definition.includePastTools || false,\n parallel_tool_calls: definition.parallelToolCalls || false,\n tool_choice: definition.toolChoice || 'auto',\n before_tool: definition.beforeTool || null,\n after_tool: definition.afterTool || null,\n tools: tools,\n prompts: definition.handoffAgents || [],\n reasoning: definition.reasoning || null,\n created_at: Math.floor(Date.now() / 1000),\n };\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n return null;\n }\n })\n );\n\n // Filter out any null entries from failed loads\n const validPrompts = promptList.filter(Boolean);\n\n return Response.json({ prompts: validPrompts });\n});\n","import { defineController } from '../router/index.js';\n\n/**\n * Supported provider configurations.\n * Each provider has specific SDK type and API key environment variable.\n */\nconst SUPPORTED_PROVIDERS = [\n {\n name: 'openai',\n sdk: 'openai',\n label: 'OpenAI',\n envKey: 'OPENAI_API_KEY',\n },\n {\n name: 'openrouter',\n sdk: 'openrouter',\n label: 'OpenRouter',\n envKey: 'OPENROUTER_API_KEY',\n },\n];\n\n/**\n * GET /api/providers\n *\n * List all supported providers and their configuration status.\n * Providers are detected based on environment variables.\n *\n * Returns:\n * - HTTP 200: { providers: Array<{ name, sdk, hasApiKey }> }\n */\nexport default defineController(async ({ env }) => {\n const providers = SUPPORTED_PROVIDERS.map((provider) => ({\n name: provider.name,\n sdk: provider.sdk,\n label: provider.label,\n hasApiKey: Boolean(env[provider.envKey]),\n }));\n\n return Response.json({ providers });\n});\n","import { defineController } from \"../../router/index\";\nimport type { Message } from \"../../agents/types\";\nimport type { DurableAgentBuilder } from \"../../durable-objects/DurableAgentBuilder\";\n\n/**\n * POST /api/threads\n *\n * Create a new thread and start execution\n *\n * Request body:\n * {\n * agent_id: string, // Required: Agent name (from TypeScript config)\n * user_id?: string, // Optional: User identifier\n * initial_messages: Message[], // Optional: Initial conversation messages\n * data?: Record<string, any>, // Optional: Additional context data\n * tags?: string[] // Optional: Tags for searching/filtering threads\n * }\n *\n * Returns:\n * - HTTP 200: Thread created successfully\n * - HTTP 400: Validation error\n * - HTTP 404: Agent not found\n * - HTTP 500: Execution error\n *\n * WebSocket upgrade available for real-time telemetry\n */\nexport default defineController(async ({ req, env }) => {\n // Parse request body\n let body: {\n agent_id?: string;\n user_id?: string;\n initial_messages?: Message[];\n data?: Record<string, any>;\n tags?: string[];\n };\n\n try {\n body = await req.json();\n } catch (error) {\n return Response.json(\n { error: \"Invalid JSON in request body\" },\n { status: 400 }\n );\n }\n\n const { agent_id, user_id, initial_messages, data, tags } = body;\n\n // Validate required fields\n if (!agent_id) {\n return Response.json(\n { error: \"Missing required field: agent_id\" },\n { status: 400 }\n );\n }\n\n // initial_messages is now optional - if not provided, thread starts with no messages\n if (initial_messages !== undefined && initial_messages !== null) {\n if (!Array.isArray(initial_messages)) {\n return Response.json(\n { error: \"initial_messages must be an array\" },\n { status: 400 }\n );\n }\n }\n\n // Validate tags if provided\n if (tags !== undefined && tags !== null) {\n if (!Array.isArray(tags)) {\n return Response.json(\n { error: \"tags must be an array of strings\" },\n { status: 400 }\n );\n }\n if (!tags.every((tag) => typeof tag === \"string\")) {\n return Response.json(\n { error: \"All tags must be strings\" },\n { status: 400 }\n );\n }\n }\n\n // Get the root AgentBuilder DO\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as DurableObjectStub<DurableAgentBuilder>;\n\n // Validate agent exists by trying to load it\n try {\n // @ts-expect-error - DurableObjectStub type instantiation is too deep\n await agentBuilder.loadAgent(agent_id);\n } catch (error) {\n return Response.json(\n { error: `Agent not found: ${agent_id}` },\n { status: 404 }\n );\n }\n\n try {\n // Create thread in DurableAgentBuilder\n const thread = await agentBuilder.createThread({\n agent_name: agent_id,\n user_id: user_id,\n tags: tags,\n });\n\n // Return thread ID immediately\n // Note: initial_messages and data are accepted but not stored here\n // They will be stored when execution is triggered (e.g., via POST /api/threads/:id/execute)\n return Response.json({\n threadId: thread.id,\n agent_id: thread.agent_name,\n message: \"Thread created successfully\",\n });\n } catch (error: any) {\n console.error(`Error creating thread:`, error);\n\n return Response.json(\n {\n error: error.message || \"Failed to create thread\",\n },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\nimport type { DurableAgentBuilder } from \"../../durable-objects/DurableAgentBuilder\";\n\n/**\n * Resolve an icon path to a full URL if it's an absolute path.\n * URLs are returned as-is, absolute paths get the origin prepended.\n */\nfunction resolveIconUrl(icon: string | undefined, origin: string): string | undefined {\n if (!icon) return undefined;\n // If it's already a URL (http/https), return as-is\n if (icon.startsWith('http://') || icon.startsWith('https://')) {\n return icon;\n }\n // If it's an absolute path, prepend the origin\n if (icon.startsWith('/')) {\n return `${origin}${icon}`;\n }\n // Otherwise return as-is (shouldn't happen with valid input)\n return icon;\n}\n\n/**\n * GET /api/threads\n * List all threads with optional filtering\n *\n * Query parameters:\n * - limit: number (default: 50)\n * - offset: number (default: 0)\n * - agent_id: string (optional filter by agent name)\n * - user_id: string (optional filter by user)\n *\n * Returns:\n * - HTTP 200: List of threads with metadata\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, env }) => {\n if (req.method !== \"GET\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n try {\n const url = new URL(req.url);\n const origin = url.origin;\n const limit = parseInt(url.searchParams.get(\"limit\") || \"50\", 10);\n const offset = parseInt(url.searchParams.get(\"offset\") || \"0\", 10);\n const agentName = url.searchParams.get(\"agent_id\");\n const userId = url.searchParams.get(\"user_id\");\n\n // Get the root AgentBuilder DO\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as DurableObjectStub<DurableAgentBuilder>;\n\n // List threads from DurableAgentBuilder\n const result = await agentBuilder.listThreads({\n agent_name: agentName || undefined,\n user_id: userId || undefined,\n limit,\n offset,\n });\n\n // Enrich with agent details from TypeScript definitions\n const threads = await Promise.all(\n result.threads.map(async (thread) => {\n let agentDetails: {\n name: string;\n title: string;\n type: string;\n description?: string;\n icon?: string;\n } | null = null;\n try {\n const agentDef = await agentBuilder.loadAgent(thread.agent_name);\n agentDetails = {\n name: thread.agent_name,\n title: agentDef.title || thread.agent_name,\n type: agentDef.type || 'ai_human',\n description: agentDef.description,\n icon: resolveIconUrl(agentDef.icon, origin),\n };\n } catch {\n // Agent definition might have been removed\n agentDetails = { name: thread.agent_name, title: thread.agent_name, type: 'unknown' };\n }\n\n return {\n id: thread.id,\n agent_id: thread.agent_name,\n user_id: thread.user_id,\n tags: thread.tags || [],\n created_at: thread.created_at,\n agent: agentDetails,\n };\n })\n );\n\n return Response.json({\n threads,\n total: result.total,\n hasMore: offset + threads.length < result.total,\n });\n } catch (error: any) {\n console.error(\"Error fetching threads:\", error);\n return Response.json(\n { error: error.message || \"Failed to fetch threads\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../router/index.js';\nimport { z } from 'zod';\nimport type { PromptDefinition } from '../sdk/definePrompt.js';\nimport type { AgentDefinition } from '../sdk/defineAgent.js';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n try {\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || schema._def)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n } catch {\n return null;\n }\n}\n\n/**\n * GET /api/tools\n *\n * List all available tools including filesystem tools, prompts (all prompts are tools), and MCP tools.\n *\n * Query Parameters:\n * - type: 'tools' (default, includes all) | 'prompts' | 'agents'\n * - schema: 'true' to include schema data\n *\n * Returns:\n * - HTTP 200: { [name]: { description, schema?, hasError?, error?, type?, model? } }\n */\nexport default defineController(async ({ url, tools, prompts, promptNames, agents, agentNames, models, modelNames }) => {\n const type = url.searchParams.get('type');\n const includeSchema = url.searchParams.get('schema') === 'true';\n\n // Build a map of models for quick lookup\n const modelMap: Record<string, any> = {};\n if (models && modelNames) {\n await Promise.all(\n modelNames.map(async (name: string) => {\n try {\n const loader = models[name];\n if (loader) {\n modelMap[name] = await loader();\n }\n } catch (error) {\n // Skip failed models\n }\n })\n );\n }\n\n if (type === 'prompts') {\n // Return all prompts (all prompts are exposed as tools)\n if (!prompts || !promptNames) {\n return Response.json({});\n }\n\n const result: Record<string, any> = {};\n\n await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (!loader) return;\n\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n result[name] = {\n description: definition.toolDescription || '',\n schema: includeSchema && definition.requiredSchema\n ? toJSONSchema(definition.requiredSchema)\n : null,\n hasError: false,\n type: 'prompt',\n model: modelDef?.name || definition.model,\n };\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n }\n })\n );\n\n return Response.json(result);\n }\n\n if (type === 'agents') {\n // Return agents that are exposed as tools\n if (!agents || !agentNames) {\n return Response.json({});\n }\n\n const result: Record<string, any> = {};\n\n await Promise.all(\n agentNames.map(async (name: string) => {\n try {\n const loader = agents[name];\n if (!loader) return;\n\n const definition = await loader() as AgentDefinition;\n\n // Only include agents exposed as tools\n if (!definition.exposeAsTool) return;\n\n result[name] = {\n description: definition.toolDescription || definition.title || '',\n schema: null, // Agents don't have schemas\n hasError: false,\n type: 'agent',\n };\n } catch (error) {\n console.error(`Error loading agent ${name}:`, error);\n }\n })\n );\n\n return Response.json(result);\n }\n\n // Default: return all tools (filesystem tools + prompts)\n const result: Record<string, any> = {};\n\n // Add filesystem tools\n if (tools) {\n const toolNames = Object.keys(tools);\n\n await Promise.all(\n toolNames.map(async (name: string) => {\n try {\n const loader = tools[name];\n if (!loader) return;\n\n // Tool loaders return [description, schema, handler] tuple\n const toolResult = await loader() as [string, unknown, unknown];\n\n // Handle error case where result is an error array\n if (Array.isArray(toolResult) && typeof toolResult[0] === 'string' && toolResult[0].includes('error')) {\n result[name] = {\n description: '',\n schema: null,\n hasError: true,\n error: toolResult[0],\n type: 'tool',\n };\n return;\n }\n\n // Normal case: [description, schema, handler]\n const [description, schema] = toolResult;\n\n result[name] = {\n description: description || '',\n schema: includeSchema && schema ? toJSONSchema(schema) : null,\n hasError: false,\n type: 'tool',\n };\n } catch (error) {\n console.error(`Error loading tool ${name}:`, error);\n result[name] = {\n description: '',\n schema: null,\n hasError: true,\n error: `Error loading tool: ${error}`,\n type: 'tool',\n };\n }\n })\n );\n }\n\n // Add all prompts as tools (all prompts are exposed as tools)\n if (prompts && promptNames) {\n await Promise.all(\n promptNames.map(async (name: string) => {\n try {\n const loader = prompts[name];\n if (!loader) return;\n\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n result[name] = {\n description: definition.toolDescription || '',\n schema: includeSchema && definition.requiredSchema\n ? toJSONSchema(definition.requiredSchema)\n : null,\n hasError: false,\n type: 'prompt',\n model: modelDef?.name || definition.model,\n };\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n }\n })\n );\n }\n\n return Response.json(result);\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\n\n/**\n * GET /api/users\n *\n * List all users (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { users: [{ id, username, role, created_at, updated_at }] }\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n const users = await agentBuilder.listUsers();\n\n return Response.json({ users });\n } catch (error: any) {\n console.error('List users error:', error);\n return Response.json(\n { error: error.message || 'Failed to list users' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\nimport { hashPassword } from '../../utils/auth.js';\n\n/**\n * POST /api/users\n *\n * Create a new user (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Body:\n * - username: string\n * - password: string\n * - role?: 'admin' (defaults to 'admin')\n *\n * Returns:\n * - HTTP 201: { user: { id, username, role, created_at, updated_at } }\n * - HTTP 400: Missing required fields or user already exists\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n const body = await req.json() as { username?: string; password?: string; role?: string };\n const { username, password, role = 'admin' } = body;\n\n if (!username || !password) {\n return Response.json(\n { error: 'Username and password are required' },\n { status: 400 }\n );\n }\n\n // Validate username format\n if (!/^[a-zA-Z0-9_-]+$/.test(username)) {\n return Response.json(\n { error: 'Username can only contain letters, numbers, underscores, and hyphens' },\n { status: 400 }\n );\n }\n\n if (username.length < 3 || username.length > 50) {\n return Response.json(\n { error: 'Username must be between 3 and 50 characters' },\n { status: 400 }\n );\n }\n\n if (password.length < 8) {\n return Response.json(\n { error: 'Password must be at least 8 characters' },\n { status: 400 }\n );\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if username already exists\n const existingUser = await agentBuilder.getUserByUsername(username);\n if (existingUser) {\n return Response.json(\n { error: 'Username already exists' },\n { status: 400 }\n );\n }\n\n // Hash the password\n const password_hash = await hashPassword(password);\n\n // Create the user\n const user = await agentBuilder.createUser({\n username,\n password_hash,\n role,\n });\n\n // Return user without password hash\n return Response.json({\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n created_at: user.created_at,\n updated_at: user.updated_at,\n },\n }, { status: 201 });\n } catch (error: any) {\n console.error('Create user error:', error);\n return Response.json(\n { error: error.message || 'Failed to create user' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport type { AgentDefinition } from '../../sdk/defineAgent.js';\n\n/**\n * GET /api/agents/:name\n *\n * Get details for a specific agent.\n *\n * Returns:\n * - HTTP 200: { agent: { id, name, type, sideA, sideB, ... } }\n * - HTTP 404: Agent not found\n */\nexport default defineController(async ({ params, agents, prompts, promptNames }) => {\n const { name } = params;\n\n if (!agents || !agents[name]) {\n return Response.json({ error: 'Agent not found' }, { status: 404 });\n }\n\n try {\n // Build a map of prompts for quick lookup\n const promptMap: Record<string, any> = {};\n if (prompts && promptNames) {\n await Promise.all(\n promptNames.map(async (promptName: string) => {\n try {\n const loader = prompts[promptName];\n if (loader) {\n promptMap[promptName] = await loader();\n }\n } catch (error) {\n // Skip failed prompts\n }\n })\n );\n }\n\n const loader = agents[name];\n const definition = await loader() as AgentDefinition;\n\n // Get prompt names for sides\n const sideAPrompt = promptMap[definition.sideA?.prompt];\n const sideBPrompt = definition.sideB\n ? promptMap[definition.sideB?.prompt]\n : null;\n\n const agent = {\n id: definition.name,\n name: definition.name,\n // title is deprecated - include for backward compatibility but prefer name\n title: definition.title || definition.name,\n type: definition.type || 'ai_human',\n\n // Side A configuration\n side_a_label: definition.sideA?.label || null,\n side_a_agent_prompt: definition.sideA?.prompt,\n side_a_agent_prompt_name: sideAPrompt?.name || definition.sideA?.prompt,\n side_a_stop_on_response:\n definition.sideA?.stopOnResponse !== undefined\n ? definition.sideA.stopOnResponse\n : true,\n side_a_stop_tool: definition.sideA?.stopTool || null,\n side_a_stop_tool_response_property:\n definition.sideA?.stopToolResponseProperty || null,\n side_a_max_turns: definition.sideA?.maxTurns || null,\n side_a_end_conversation_tool:\n definition.sideA?.endConversationTool || null,\n side_a_manual_stop_condition:\n definition.sideA?.manualStopCondition || false,\n\n // Side B configuration (if dual_ai)\n side_b_label: definition.sideB?.label || null,\n side_b_agent_prompt: definition.sideB?.prompt || null,\n side_b_agent_prompt_name: sideBPrompt?.name || definition.sideB?.prompt || null,\n side_b_stop_on_response:\n definition.sideB?.stopOnResponse !== undefined\n ? definition.sideB.stopOnResponse\n : true,\n side_b_stop_tool: definition.sideB?.stopTool || null,\n side_b_stop_tool_response_property:\n definition.sideB?.stopToolResponseProperty || null,\n side_b_max_turns: definition.sideB?.maxTurns || null,\n side_b_end_conversation_tool:\n definition.sideB?.endConversationTool || null,\n side_b_manual_stop_condition:\n definition.sideB?.manualStopCondition || false,\n\n // Session configuration\n max_session_turns: definition.maxSessionTurns || null,\n\n // Tool exposure\n expose_as_tool: definition.exposeAsTool || false,\n tool_description: definition.toolDescription || null,\n\n // Tags\n tags: definition.tags || [],\n\n created_at: Math.floor(Date.now() / 1000),\n };\n\n return Response.json({ agent });\n } catch (error) {\n console.error(`Error loading agent ${name}:`, error);\n return Response.json(\n { error: `Error loading agent: ${error}` },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAuth } from '../../middleware/auth.js';\n\n/**\n * DELETE /api/api-keys/:id\n *\n * Delete an API key for the authenticated user.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 401: Not authenticated\n * - HTTP 404: API key not found\n */\nexport default defineController(async ({ req, env, params }) => {\n try {\n const authResult = await requireAuth(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n // Super admin has no API keys\n if (authResult.authType === 'super_admin') {\n return Response.json(\n { error: 'Super admin has no API keys to delete.' },\n { status: 400 }\n );\n }\n\n const keyId = params.id;\n if (!keyId) {\n return Response.json(\n { error: 'API key ID is required' },\n { status: 400 }\n );\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n await agentBuilder.deleteApiKey(keyId, authResult.user.id);\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error('Delete API key error:', error);\n return Response.json(\n { error: error.message || 'Failed to delete API key' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { z } from 'zod';\nimport type { PromptDefinition } from '../../sdk/definePrompt.js';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || '_def' in schema)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n}\n\n/**\n * Normalize prompt content for API response.\n * - Arrays (StructuredPrompt) are serialized to JSON strings for backward compatibility\n * - Plain strings are returned as-is\n */\nfunction normalizePromptContent(prompt: string | any[] | undefined): string {\n if (!prompt) return '';\n // If it's an array (StructuredPrompt), serialize to JSON\n if (Array.isArray(prompt)) {\n return JSON.stringify(prompt);\n }\n // Plain string, return as-is\n return prompt;\n}\n\n/**\n * GET /api/prompts/:name\n *\n * Get details for a specific prompt.\n *\n * Returns:\n * - HTTP 200: { prompt: { id, name, tool_description, prompt, model, ... } }\n * - HTTP 404: Prompt not found\n */\nexport default defineController(async ({ params, prompts, models, modelNames }) => {\n const { name } = params;\n\n if (!prompts || !prompts[name]) {\n return Response.json({ error: 'Prompt not found' }, { status: 404 });\n }\n\n try {\n // Build a map of models for quick lookup\n const modelMap: Record<string, any> = {};\n if (models && modelNames) {\n await Promise.all(\n modelNames.map(async (modelName: string) => {\n try {\n const loader = models[modelName];\n if (loader) {\n modelMap[modelName] = await loader();\n }\n } catch (error) {\n // Skip failed models\n }\n })\n );\n }\n\n const loader = prompts[name];\n const definition = await loader() as PromptDefinition;\n const modelDef = modelMap[definition.model];\n\n // Extract tools with their full config (convert camelCase to snake_case for UI)\n const tools = (definition.tools || []).map((tool: string | Record<string, any>) => {\n if (typeof tool === 'string') {\n // Simple tool name - return with default options\n return {\n name: tool,\n include_text_response: true,\n include_tool_calls: true,\n include_errors: true,\n init_user_message_property: null\n };\n }\n // Tool config object - convert camelCase to snake_case\n return {\n name: tool.name,\n include_text_response: tool.includeTextResponse !== undefined ? tool.includeTextResponse : true,\n include_tool_calls: tool.includeToolCalls !== undefined ? tool.includeToolCalls : true,\n include_errors: tool.includeErrors !== undefined ? tool.includeErrors : true,\n init_user_message_property: tool.initUserMessageProperty || null\n };\n });\n\n const prompt = {\n id: definition.name,\n name: definition.name,\n tool_description: definition.toolDescription,\n prompt: normalizePromptContent(definition.prompt),\n required_schema: toJSONSchema(definition.requiredSchema),\n model_id: definition.model,\n model_name: modelDef?.name || definition.model,\n model_provider: modelDef?.provider || 'unknown',\n include_chat: definition.includeChat || false,\n include_past_tools: definition.includePastTools || false,\n parallel_tool_calls: definition.parallelToolCalls || false,\n tool_choice: definition.toolChoice || 'auto',\n before_tool: definition.beforeTool || null,\n after_tool: definition.afterTool || null,\n tools: tools,\n prompts: definition.handoffAgents || [],\n reasoning: definition.reasoning || null,\n created_at: Math.floor(Date.now() / 1000),\n };\n\n return Response.json({ prompt });\n } catch (error) {\n console.error(`Error loading prompt ${name}:`, error);\n return Response.json(\n { error: `Error loading prompt: ${error}` },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\nimport type { DurableAgentBuilder } from \"../../durable-objects/DurableAgentBuilder\";\n\n/**\n * DELETE /api/threads/:id\n *\n * Delete a thread and all its associated data\n *\n * Returns:\n * - HTTP 200: { success: true, threadId: string }\n * - HTTP 404: Thread not found\n * - HTTP 500: Deletion error\n *\n * Note: This deletes:\n * - Thread record from DurableAgentBuilder\n * - All messages, tool calls, and logs from DurableThread storage\n * - The DurableThread instance itself is marked for deletion\n */\nexport default defineController(async ({ req, env, params }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Missing thread ID\" }, { status: 400 });\n }\n\n // Get the root AgentBuilder DO\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as DurableObjectStub<DurableAgentBuilder>;\n\n // Check if thread exists\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n try {\n // Delete thread record from DurableAgentBuilder\n await agentBuilder.deleteThread(threadId);\n\n // Get DurableThread instance and call via RPC to delete its data\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method to delete DurableObject data\n await stub.deleteThread();\n\n return Response.json({\n success: true,\n threadId,\n message: \"Thread deleted successfully\",\n });\n } catch (error: any) {\n console.error(`Error deleting thread ${threadId}:`, error);\n\n return Response.json(\n {\n error: error.message || \"Failed to delete thread\",\n threadId,\n },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\n\n/**\n * PATCH /api/threads/:id\n * Update thread metadata (e.g., tags, agent assignment)\n */\nexport default defineController(async ({ req, env, params }) => {\n if (req.method !== \"PATCH\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n const threadId = params?.id as string;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n const body = await req.json() as { tags?: string[]; agent_id?: string };\n const { tags, agent_id } = body;\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if thread exists\n const existingThread = await agentBuilder.getThread(threadId);\n if (!existingThread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Build update data\n const updates: Record<string, any> = {};\n\n if (tags !== undefined) {\n if (!Array.isArray(tags)) {\n return Response.json(\n { error: \"tags must be an array of strings\" },\n { status: 400 }\n );\n }\n\n // Verify all tags are strings\n if (!tags.every((tag) => typeof tag === \"string\")) {\n return Response.json(\n { error: \"All tags must be strings\" },\n { status: 400 }\n );\n }\n\n updates.tags = tags;\n }\n\n if (agent_id !== undefined) {\n if (typeof agent_id !== \"string\") {\n return Response.json(\n { error: \"agent_id must be a string\" },\n { status: 400 }\n );\n }\n\n // Verify agent exists in TypeScript config via DurableThread\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n try {\n const agentDef = await stub.loadAgent(agent_id);\n if (!agentDef) {\n return Response.json(\n { error: `Agent not found: ${agent_id}` },\n { status: 404 }\n );\n }\n\n if (agentDef.type !== \"ai_human\") {\n return Response.json(\n { error: \"Only ai_human agents can be assigned to threads\" },\n { status: 400 }\n );\n }\n } catch (e) {\n return Response.json(\n { error: `Agent not found: ${agent_id}` },\n { status: 404 }\n );\n }\n\n updates.agent_name = agent_id;\n }\n\n if (Object.keys(updates).length === 0) {\n return Response.json(\n { error: \"No valid fields to update\" },\n { status: 400 }\n );\n }\n\n // Update thread in DurableAgentBuilder\n const updatedThread = await agentBuilder.updateThread(threadId, updates);\n\n return Response.json({\n id: updatedThread.id,\n agent_id: updatedThread.agent_name, // Map agent_name back to agent_id for API compat\n user_id: updatedThread.user_id,\n tags: updatedThread.tags || [],\n created_at: updatedThread.created_at,\n });\n } catch (error: any) {\n console.error(\"Error updating thread:\", error);\n return Response.json(\n { error: error.message || \"Failed to update thread\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../router/index\";\n\n/**\n * Resolve an icon path to a full URL if it's an absolute path.\n * URLs are returned as-is, absolute paths get the origin prepended.\n */\nfunction resolveIconUrl(icon: string | undefined, origin: string): string | undefined {\n if (!icon) return undefined;\n // If it's already a URL (http/https), return as-is\n if (icon.startsWith('http://') || icon.startsWith('https://')) {\n return icon;\n }\n // If it's an absolute path, prepend the origin\n if (icon.startsWith('/')) {\n return `${origin}${icon}`;\n }\n // Otherwise return as-is (shouldn't happen with valid input)\n return icon;\n}\n\n/**\n * GET /api/threads/:id\n *\n * Get thread metadata from DurableAgentBuilder and stats from DurableObject\n *\n * Returns:\n * - HTTP 200: { thread, agent, stats }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly - getThreadMeta already returns thread, agent, and stats\n const doData = await stub.getThreadMeta(threadId);\n\n if (!doData) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Resolve agent icon URL if it's an absolute path\n if (doData.agent?.icon) {\n const origin = new URL(req.url).origin;\n doData.agent.icon = resolveIconUrl(doData.agent.icon, origin);\n }\n\n return Response.json(doData);\n } catch (error: any) {\n console.error(`Error fetching thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to fetch thread\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { z } from 'zod';\n\n/**\n * Convert a Zod schema to JSON Schema format\n */\nfunction toJSONSchema(schema: any): any {\n if (!schema) return null;\n try {\n // If it's a Zod schema, convert it\n if (schema && typeof schema === 'object' && ('~standard' in schema || schema._def)) {\n return z.toJSONSchema(schema);\n }\n // Already JSON Schema or plain object\n return schema;\n } catch {\n return null;\n }\n}\n\n/**\n * GET /api/tools/:name\n *\n * Get details and schema for a specific tool.\n *\n * Returns:\n * - HTTP 200: { name, description, schema }\n * - HTTP 404: Tool not found\n */\nexport default defineController(async ({ params, tools }) => {\n const { name } = params;\n\n if (!tools || !tools[name]) {\n return Response.json({ error: 'Tool not found' }, { status: 404 });\n }\n\n try {\n const loader = tools[name];\n const toolResult = await loader() as [string, unknown, unknown];\n\n // Handle error case\n if (Array.isArray(toolResult) && typeof toolResult[0] === 'string' && toolResult[0].includes('error')) {\n return Response.json({\n name,\n description: '',\n schema: null,\n hasError: true,\n error: toolResult[0],\n });\n }\n\n // Normal case: [description, schema, handler]\n const [description, schema] = toolResult;\n\n return Response.json({\n name,\n description: description || '',\n schema: toJSONSchema(schema),\n hasError: false,\n });\n } catch (error) {\n console.error(`Error loading tool ${name}:`, error);\n return Response.json({\n name,\n description: '',\n schema: null,\n hasError: true,\n error: `Error loading tool: ${error}`,\n });\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\n\n/**\n * DELETE /api/users/:id\n *\n * Delete a user (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n * - HTTP 404: User not found\n */\nexport default defineController(async ({ req, env, params }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n const { id } = params;\n\n if (!id) {\n return Response.json({ error: 'User ID is required' }, { status: 400 });\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if user exists\n const user = await agentBuilder.getUserById(id);\n if (!user) {\n return Response.json({ error: 'User not found' }, { status: 404 });\n }\n\n await agentBuilder.deleteUser(id);\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error('Delete user error:', error);\n return Response.json(\n { error: error.message || 'Failed to delete user' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { requireAdmin } from '../../middleware/auth.js';\nimport { hashPassword } from '../../utils/auth.js';\n\n/**\n * PUT /api/users/:id\n *\n * Update a user (admin only).\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Body:\n * - username?: string\n * - password?: string (will be hashed)\n * - role?: string\n *\n * Returns:\n * - HTTP 200: { user: { id, username, role, created_at, updated_at } }\n * - HTTP 401: Not authenticated\n * - HTTP 403: Not admin\n * - HTTP 404: User not found\n * - HTTP 409: Username already taken\n */\nexport default defineController(async ({ req, env, params }) => {\n try {\n const authResult = await requireAdmin(req, env);\n if (authResult instanceof Response) {\n return authResult;\n }\n\n const { id } = params;\n\n if (!id) {\n return Response.json({ error: 'User ID is required' }, { status: 400 });\n }\n\n const body = await req.json() as { username?: string; password?: string; role?: string };\n const { username, password, role } = body;\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Check if user exists\n const existingUser = await agentBuilder.getUserById(id);\n if (!existingUser) {\n return Response.json({ error: 'User not found' }, { status: 404 });\n }\n\n // If changing username, check it's not taken by another user\n if (username && username !== existingUser.username) {\n const userWithUsername = await agentBuilder.getUserByUsername(username);\n if (userWithUsername && userWithUsername.id !== id) {\n return Response.json(\n { error: 'Username already taken' },\n { status: 409 }\n );\n }\n }\n\n // Build update params\n const updateParams: {\n username?: string;\n password_hash?: string;\n role?: 'admin';\n } = {};\n\n if (username) {\n updateParams.username = username;\n }\n if (password) {\n updateParams.password_hash = await hashPassword(password);\n }\n if (role) {\n updateParams.role = role as 'admin';\n }\n\n const updatedUser = await agentBuilder.updateUser(id, updateParams);\n\n return Response.json({\n user: {\n id: updatedUser.id,\n username: updatedUser.username,\n role: updatedUser.role,\n created_at: updatedUser.created_at,\n updated_at: updatedUser.updated_at,\n },\n });\n } catch (error: any) {\n console.error('Update user error:', error);\n return Response.json(\n { error: error.message || 'Failed to update user' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router';\n\n/**\n * GET /api/auth/config\n * Returns which authentication providers are configured\n */\nexport default defineController(async ({ env }) => {\n // Check which OAuth providers are configured by looking for their env vars\n const githubConfigured = !!(env.GITHUB_CLIENT_ID && env.GITHUB_CLIENT_SECRET);\n const googleConfigured = !!(env.GOOGLE_CLIENT_ID && env.GOOGLE_CLIENT_SECRET);\n\n return {\n github: githubConfigured,\n google: googleConfigured,\n };\n});\n","import { defineController } from '../../router/index.js';\nimport {\n verifyPassword,\n generateUserToken,\n hashToken,\n generateSuperAdminToken,\n} from '../../utils/auth.js';\n\n/**\n * POST /api/auth/login\n *\n * Authenticate a user with username/password or super admin password.\n *\n * Body:\n * - username: string (optional if using super admin)\n * - password: string\n *\n * Returns:\n * - HTTP 200: { token, user: { id, username, role } }\n * - HTTP 401: Invalid credentials\n * - HTTP 400: Missing required fields\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const body = await req.json() as { username?: string; password?: string };\n const { username, password } = body;\n\n if (!password) {\n return Response.json(\n { error: 'Password is required' },\n { status: 400 }\n );\n }\n\n // Check for super admin login\n if (env.SUPER_ADMIN_PASSWORD && password === env.SUPER_ADMIN_PASSWORD) {\n // Generate a signed super admin token\n if (!env.ENCRYPTION_KEY) {\n return Response.json(\n { error: 'Server misconfigured: ENCRYPTION_KEY required for super admin' },\n { status: 500 }\n );\n }\n\n const token = await generateSuperAdminToken(env.ENCRYPTION_KEY);\n\n return Response.json({\n token,\n user: {\n id: 'super_admin',\n username: 'admin',\n role: 'admin',\n },\n });\n }\n\n // Regular user login requires username\n if (!username) {\n return Response.json(\n { error: 'Username is required' },\n { status: 400 }\n );\n }\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n // Look up user\n const user = await agentBuilder.getUserByUsername(username);\n\n if (!user) {\n return Response.json(\n { error: 'Invalid username or password' },\n { status: 401 }\n );\n }\n\n // Verify password\n const isValid = await verifyPassword(password, user.password_hash);\n\n if (!isValid) {\n return Response.json(\n { error: 'Invalid username or password' },\n { status: 401 }\n );\n }\n\n // Generate session token\n const token = generateUserToken();\n const tokenHash = await hashToken(token);\n\n // Create session (expires in 30 days)\n const expiresAt = Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60;\n await agentBuilder.createSession({\n user_id: user.id,\n token_hash: tokenHash,\n expires_at: expiresAt,\n });\n\n return Response.json({\n token,\n user: {\n id: user.id,\n username: user.username,\n role: user.role,\n },\n });\n } catch (error: any) {\n console.error('Login error:', error);\n return Response.json(\n { error: error.message || 'Login failed' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { hashToken, isValidUserToken } from '../../utils/auth.js';\n\n/**\n * POST /api/auth/logout\n *\n * Log out the current user by invalidating their session.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 401: Invalid or missing token\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authHeader = req.headers.get('Authorization');\n\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 });\n }\n\n const token = authHeader.substring(7);\n\n // Super admin tokens don't have sessions to delete\n if (token.includes('.')) {\n // It's a signed token (super admin), just return success\n return Response.json({ success: true });\n }\n\n // Regular user token - delete session\n if (isValidUserToken(token)) {\n const tokenHash = await hashToken(token);\n\n // Get DurableAgentBuilder singleton\n const agentBuilderId = env.AGENT_BUILDER.idFromName('singleton');\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n\n await agentBuilder.deleteSession(tokenHash);\n }\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error('Logout error:', error);\n return Response.json(\n { error: error.message || 'Logout failed' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\nimport { authenticate } from '../../middleware/auth.js';\n\n/**\n * GET /api/auth/me\n *\n * Get the current authenticated user's information.\n *\n * Headers:\n * - Authorization: Bearer <token>\n *\n * Returns:\n * - HTTP 200: { user: { id, username, role }, authType }\n * - HTTP 401: Not authenticated\n */\nexport default defineController(async ({ req, env }) => {\n try {\n const authContext = await authenticate(req, env);\n\n if (!authContext) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 });\n }\n\n return Response.json({\n user: authContext.user,\n authType: authContext.authType,\n });\n } catch (error: any) {\n console.error('Auth check error:', error);\n return Response.json(\n { error: error.message || 'Authentication check failed' },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\n\n/**\n * Provider configurations with their API endpoints\n */\nconst PROVIDER_CONFIGS: Record<\n string,\n {\n sdk: string;\n modelsEndpoint: string;\n envKey: string;\n headers: (apiKey: string) => Record<string, string>;\n parseResponse: (data: any) => Array<{\n value: string;\n label: string;\n description: string;\n slug?: string;\n iconId?: string;\n }>;\n }\n> = {\n openai: {\n sdk: 'openai',\n modelsEndpoint: 'https://api.openai.com/v1/models',\n envKey: 'OPENAI_API_KEY',\n headers: (apiKey) => ({\n Authorization: `Bearer ${apiKey}`,\n }),\n parseResponse: (data) => {\n // Filter to only include common chat models, not fine-tuned or deprecated ones\n const chatModelPrefixes = [\n 'gpt-4',\n 'gpt-3.5',\n 'o1',\n 'o3',\n 'chatgpt',\n ];\n\n return data.data\n .filter((model: any) => {\n const id = model.id.toLowerCase();\n return chatModelPrefixes.some((prefix) => id.startsWith(prefix));\n })\n .map((model: any) => ({\n value: model.id,\n label: model.id,\n description: `Owned by ${model.owned_by}`,\n iconId: 'openai',\n }))\n .sort((a: any, b: any) => a.label.localeCompare(b.label));\n },\n },\n openrouter: {\n sdk: 'openrouter',\n modelsEndpoint: 'https://openrouter.ai/api/v1/models',\n envKey: 'OPENROUTER_API_KEY',\n headers: () => ({}), // OpenRouter models endpoint doesn't require auth\n parseResponse: (data) => {\n return data.data\n .map((model: any) => ({\n value: model.id,\n label: model.name || model.id,\n description: model.description?.slice(0, 150) + (model.description?.length > 150 ? '...' : '') || '',\n slug: model.canonical_slug || model.id,\n iconId: model.id.split('/')[0], // e.g., \"anthropic\" from \"anthropic/claude-3\"\n }))\n .sort((a: any, b: any) => a.label.localeCompare(b.label));\n },\n },\n};\n\n/**\n * POST /api/models/available\n *\n * Fetch available models from a provider's API.\n *\n * Request body:\n * - provider: string - The provider name (e.g., \"openai\", \"openrouter\")\n *\n * Returns:\n * - HTTP 200: { models: Array<{ value, label, description, slug?, iconId? }> }\n * - HTTP 400: { error: string } - Missing or invalid provider\n * - HTTP 401: { error: string } - Missing API key for provider\n * - HTTP 500: { error: string } - Failed to fetch models\n */\nexport default defineController(async ({ req, env }) => {\n const body = await req.json().catch(() => ({}));\n const { provider } = body as { provider?: string };\n\n if (!provider) {\n return Response.json({ error: 'Provider is required' }, { status: 400 });\n }\n\n const config = PROVIDER_CONFIGS[provider];\n if (!config) {\n return Response.json(\n { error: `Unknown provider: ${provider}. Supported: ${Object.keys(PROVIDER_CONFIGS).join(', ')}` },\n { status: 400 }\n );\n }\n\n const apiKey = env[config.envKey] as string | undefined;\n\n // OpenRouter doesn't require API key for listing models\n if (!apiKey && config.sdk !== 'openrouter') {\n return Response.json(\n { error: `API key not configured for ${provider}. Set ${config.envKey} environment variable.` },\n { status: 401 }\n );\n }\n\n try {\n const response = await fetch(config.modelsEndpoint, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers(apiKey || ''),\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(`Failed to fetch models from ${provider}:`, errorText);\n return Response.json(\n { error: `Failed to fetch models from ${provider}: ${response.statusText}` },\n { status: response.status }\n );\n }\n\n const data = await response.json();\n const models = config.parseResponse(data);\n\n return Response.json({ models });\n } catch (error: any) {\n console.error(`Error fetching models from ${provider}:`, error);\n return Response.json(\n { error: `Failed to fetch models: ${error.message}` },\n { status: 500 }\n );\n }\n});\n","import { defineController } from '../../router/index.js';\n\n/**\n * POST /api/models/endpoints\n *\n * Fetch available provider endpoints for a specific OpenRouter model.\n * This allows users to select which providers can serve a particular model.\n *\n * Request body:\n * - provider: string - The provider name (must be OpenRouter)\n * - modelSlug: string - The model slug (e.g., \"anthropic/claude-3-opus\")\n *\n * Returns:\n * - HTTP 200: { endpoints: Array<{ id, name, pricing, quantization?, maxPromptTokens?, maxCompletionTokens? }> }\n * - HTTP 400: { error: string } - Missing parameters or non-OpenRouter provider\n * - HTTP 404: { error: string } - Model not found\n * - HTTP 500: { error: string } - Failed to fetch endpoints\n */\nexport default defineController(async ({ req, env }) => {\n const body = await req.json().catch(() => ({}));\n const { provider, modelSlug } = body as { provider?: string; modelSlug?: string };\n\n if (!provider || !modelSlug) {\n return Response.json(\n { error: 'Provider and modelSlug are required' },\n { status: 400 }\n );\n }\n\n // This endpoint only works for OpenRouter\n if (provider !== 'openrouter') {\n return Response.json(\n { error: 'Endpoints are only available for OpenRouter provider' },\n { status: 400 }\n );\n }\n\n // Parse the model slug into author/slug format\n // e.g., \"deepseek/deepseek-r1\" -> author: \"deepseek\", slug: \"deepseek-r1\"\n const slashIndex = modelSlug.indexOf('/');\n if (slashIndex === -1) {\n return Response.json(\n { error: `Invalid model slug format: ${modelSlug}. Expected format: author/model-name` },\n { status: 400 }\n );\n }\n\n const author = modelSlug.substring(0, slashIndex);\n const slug = modelSlug.substring(slashIndex + 1);\n\n try {\n // Fetch endpoints from OpenRouter using their dedicated endpoints API\n // GET /api/v1/models/:author/:slug/endpoints\n const response = await fetch(`https://openrouter.ai/api/v1/models/${author}/${slug}/endpoints`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return Response.json(\n { error: `Model not found: ${modelSlug}` },\n { status: 404 }\n );\n }\n const errorText = await response.text();\n console.error(`Failed to fetch endpoints from OpenRouter:`, errorText);\n return Response.json(\n { error: `Failed to fetch endpoints: ${response.statusText}` },\n { status: response.status }\n );\n }\n\n const data = await response.json();\n\n // Parse the endpoint data from the response\n const endpoints = parseOpenRouterEndpoints(data);\n\n return Response.json({ endpoints });\n } catch (error: any) {\n console.error(`Error fetching endpoints for ${modelSlug}:`, error);\n return Response.json(\n { error: `Failed to fetch endpoints: ${error.message}` },\n { status: 500 }\n );\n }\n});\n\n/**\n * Parse OpenRouter endpoints response to extract provider information\n */\nfunction parseOpenRouterEndpoints(data: any): Array<{\n id: string;\n name: string;\n pricing: { prompt: number; completion: number };\n quantization?: string;\n maxPromptTokens?: number;\n maxCompletionTokens?: number;\n}> {\n // Response structure: { data: { endpoints: [...] } }\n const model = data.data || data;\n const endpointsArray = model.endpoints || [];\n\n if (!Array.isArray(endpointsArray) || endpointsArray.length === 0) {\n return [];\n }\n\n return endpointsArray.map((endpoint: any) => ({\n // Use 'tag' as the ID since it's the provider identifier used for routing\n id: endpoint.tag || endpoint.provider_name || endpoint.name,\n name: endpoint.name || endpoint.provider_name || endpoint.tag,\n pricing: {\n // Pricing values come as strings, convert to numbers\n prompt: parseFloat(endpoint.pricing?.prompt) || 0,\n completion: parseFloat(endpoint.pricing?.completion) || 0,\n },\n quantization: endpoint.quantization,\n maxPromptTokens: endpoint.max_prompt_tokens || endpoint.context_length,\n maxCompletionTokens: endpoint.max_completion_tokens,\n }));\n}\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/cost\n *\n * Get cost breakdown for a thread, including:\n * - Total cost across all logs\n * - Cost breakdown by model\n * - Average cost per message\n * - Average cost per message per model\n *\n * Returns:\n * - HTTP 200: { totalCost, modelBreakdown, avgCostPerMessage, avgCostPerMessageByModel }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Get all logs with cost data (no pagination)\n const logsResult = await stub.getLogs(10000, 0, \"ASC\");\n const logs = logsResult.logs || [];\n\n // Calculate total cost and group by model name\n let totalCost = 0;\n const modelCosts: Record<\n string,\n { totalCost: number; count: number }\n > = {};\n\n // Count unique messages for average calculation\n const uniqueMessages = new Set<string>();\n\n for (const log of logs) {\n const cost = log.cost_total;\n if (cost !== null && cost !== undefined && !isNaN(cost)) {\n totalCost += cost;\n\n // Track unique messages\n if (log.message_id) {\n uniqueMessages.add(log.message_id);\n }\n\n // Group by model name (not ID)\n const modelKey = log.model_name || log.model || \"unknown\";\n if (!modelCosts[modelKey]) {\n modelCosts[modelKey] = {\n totalCost: 0,\n count: 0,\n };\n }\n modelCosts[modelKey].totalCost += cost;\n modelCosts[modelKey].count += 1;\n }\n }\n\n // Calculate averages\n const messageCount = uniqueMessages.size;\n const avgCostPerMessage = messageCount > 0 ? totalCost / messageCount : 0;\n\n // Calculate average per message per model\n const avgCostPerMessageByModel: Record<\n string,\n { avgCost: number; messageCount: number }\n > = {};\n\n for (const [modelName, data] of Object.entries(modelCosts)) {\n avgCostPerMessageByModel[modelName] = {\n avgCost: data.count > 0 ? data.totalCost / data.count : 0,\n messageCount: data.count,\n };\n }\n\n // Format model breakdown for response\n const modelBreakdown = Object.entries(modelCosts).map(([modelName, data]) => ({\n modelName,\n totalCost: data.totalCost,\n requestCount: data.count,\n avgCostPerRequest: data.count > 0 ? data.totalCost / data.count : 0,\n }));\n\n return Response.json({\n totalCost,\n messageCount,\n avgCostPerMessage,\n modelBreakdown,\n avgCostPerMessageByModel,\n });\n } catch (error: any) {\n console.error(`Error calculating cost for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to calculate costs\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * File System Root API\n *\n * Routes:\n * - GET /api/threads/:id/fs?stats=1 - Get storage statistics\n * - GET /api/threads/:id/fs?grep=pattern - Search file contents\n * - GET /api/threads/:id/fs?find=pattern - Find files by path pattern\n * - GET /api/threads/:id/fs - List root directory\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (req.method !== \"GET\") {\n return Response.json(\n { error: `Method ${req.method} not allowed` },\n { status: 405 }\n );\n }\n\n const url = new URL(req.url);\n\n try {\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n // Storage stats\n if (url.searchParams.has(\"stats\")) {\n const result = await stub.getFileStats();\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json(result.stats);\n }\n\n // Full-text search (grep)\n const grepPattern = url.searchParams.get(\"grep\");\n if (grepPattern) {\n const path = url.searchParams.get(\"path\") || undefined;\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n\n const result = await stub.grepFiles(grepPattern, { path, limit });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ results: result.results, pattern: grepPattern });\n }\n\n // Find by path pattern\n const findPattern = url.searchParams.get(\"find\");\n if (findPattern) {\n const type = url.searchParams.get(\"type\") as \"file\" | \"directory\" | \"all\" | null;\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n\n const result = await stub.findFiles(findPattern, {\n type: type || \"all\",\n limit,\n });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ files: result.files, pattern: findPattern });\n }\n\n // Default: list root directory\n const result = await stub.readdirFile(\"/\");\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ files: result.files, path: \"/\" });\n } catch (error: any) {\n console.error(`Error in fs root API for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"File operation failed\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/logs\n *\n * Get logs from a thread's DurableObject\n *\n * Query parameters:\n * - limit: number (default: 100)\n * - offset: number (default: 0)\n * - order: \"asc\" | \"desc\" (default: \"desc\")\n *\n * Returns:\n * - HTTP 200: { logs: Log[], total: number, hasMore: boolean }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const url = new URL(req.url);\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Parse query parameters\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n const offset = parseInt(url.searchParams.get(\"offset\") || \"0\", 10);\n const order = url.searchParams.get(\"order\") === \"desc\" ? \"DESC\" : \"ASC\";\n\n // WebSocket upgrade for live log streaming\n if (req.headers.get(\"upgrade\")?.toLowerCase() === \"websocket\") {\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n // Forward the original upgrade request to the DurableObject\n return await stub.fetch(req);\n }\n\n // Get DurableObject instance and call via RPC for initial logs\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.getLogs(limit, offset, order);\n\n return Response.json(result);\n } catch (error: any) {\n console.error(`Error fetching logs for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to fetch logs\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\nimport type { AttachmentRef } from \"../../../agents/types\";\n\n// Helper to check if image needs processing (>2MB or unsupported format)\nfunction needsProcessing(base64Data: string, mimeType: string): boolean {\n // Estimate binary size from base64 (base64 is ~4/3 of binary size)\n const binarySize = Math.ceil(base64Data.length * 3 / 4);\n const MAX_SIZE = 2 * 1024 * 1024; // 2MB\n\n // Process if over 2MB\n if (binarySize > MAX_SIZE) {\n return true;\n }\n\n // Process if not JPEG or PNG (convert to JPEG)\n if (mimeType !== \"image/jpeg\" && mimeType !== \"image/png\") {\n return true;\n }\n\n return false;\n}\n\n/**\n * Attachment in request body\n */\ninterface AttachmentPayload {\n name: string;\n mimeType: string;\n data: string; // base64 encoded\n width?: number; // For images\n height?: number; // For images\n thumbnail?: string; // base64 encoded thumbnail\n}\n\n/**\n * Request body type\n */\ninterface MessagePayload {\n content: string;\n role: \"user\" | \"assistant\" | \"system\";\n attachments?: AttachmentPayload[];\n silent?: boolean;\n}\n\n/**\n * POST /api/threads/:id/messages\n *\n * Send a new message to the thread and trigger agent execution\n *\n * Body:\n * - content: string (message content)\n * - role: \"user\" | \"assistant\" | \"system\" (which side is sending)\n * - attachments?: Array of file attachments\n * - name: string (filename)\n * - mimeType: string\n * - data: string (base64 encoded)\n * - width?: number (for images)\n * - height?: number (for images)\n * - thumbnail?: string (base64 encoded thumbnail)\n * - silent?: boolean (hide from LLM context)\n *\n * Returns:\n * - HTTP 202: Message queued for processing\n * - HTTP 404: Thread not found\n * - HTTP 400: Invalid request\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Parse request body\n const body = (await req.json()) as MessagePayload;\n const { content = \"\", role, attachments, silent } = body;\n\n // Require either content or attachments\n const hasContent = content && typeof content === \"string\" && content.trim().length > 0;\n const hasAttachments = attachments && Array.isArray(attachments) && attachments.length > 0;\n\n if (!hasContent && !hasAttachments) {\n return Response.json(\n { error: \"Message content or attachments required\" },\n { status: 400 }\n );\n }\n\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n // Process attachments if present\n let attachmentRefs: AttachmentRef[] | undefined;\n\n if (attachments && attachments.length > 0) {\n attachmentRefs = [];\n\n for (const attachment of attachments) {\n // Generate unique ID and path for attachment\n const attachmentId = crypto.randomUUID();\n const timestamp = Date.now();\n\n // Start with original values\n let fileData = attachment.data;\n let mimeType = attachment.mimeType;\n let width = attachment.width;\n let height = attachment.height;\n\n // Process images if needed (>2MB or unsupported format)\n // Processing happens inside the DurableObject where WASM is initialized\n if (mimeType.startsWith(\"image/\") && needsProcessing(fileData, mimeType)) {\n try {\n const originalSize = Math.ceil(fileData.length * 3 / 4);\n const processed = await stub.processImage(fileData, mimeType);\n\n if (processed.success && processed.data) {\n fileData = processed.data;\n mimeType = processed.mimeType!;\n width = processed.width;\n height = processed.height;\n\n const newSize = Math.ceil(fileData.length * 3 / 4);\n console.log(\n `[image-processing] Processed ${attachment.name}: ` +\n `${(originalSize / 1024 / 1024).toFixed(2)}MB → ${(newSize / 1024 / 1024).toFixed(2)}MB, ` +\n `${processed.width}x${processed.height}, ${processed.mimeType}`\n );\n } else {\n console.error(`[image-processing] Failed to process ${attachment.name}:`, processed.error);\n // Continue with original data if processing fails\n }\n } catch (err) {\n console.error(`[image-processing] Failed to process ${attachment.name}:`, err);\n // Continue with original data if processing fails\n }\n }\n\n // Determine file extension based on (potentially updated) mimeType\n const ext = mimeType === \"image/png\" ? \"png\" :\n mimeType === \"image/jpeg\" ? \"jpg\" :\n attachment.name.split(\".\").pop() || \"bin\";\n const path = `/attachments/${timestamp}-${attachmentId}.${ext}`;\n\n // Store file in thread's file system\n const base64Size = fileData.length;\n const binarySize = Math.ceil(base64Size * 3 / 4);\n console.log(`[writeFile] Storing ${attachment.name}: ${(binarySize / 1024 / 1024).toFixed(2)}MB binary (${(base64Size / 1024 / 1024).toFixed(2)}MB base64) to ${path}`);\n\n const result = await stub.writeFile(\n path,\n fileData,\n mimeType,\n {\n thumbnail: attachment.thumbnail,\n width,\n height,\n }\n );\n\n console.log(`[writeFile] Result:`, result.success ? 'success' : result.error);\n\n if (!result.success) {\n console.error(`Failed to store attachment ${attachment.name}:`, result.error);\n continue;\n }\n\n // Create attachment reference\n const ref: AttachmentRef = {\n id: attachmentId,\n type: \"file\",\n path,\n name: attachment.name,\n mimeType: mimeType,\n };\n\n if (width) ref.width = width;\n if (height) ref.height = height;\n\n attachmentRefs.push(ref);\n }\n }\n\n // Send message with attachments\n const attachmentsJson = attachmentRefs && attachmentRefs.length > 0\n ? JSON.stringify(attachmentRefs)\n : undefined;\n return await stub.sendMessage(threadId, content, role, attachmentsJson);\n } catch (error: any) {\n console.error(`Error sending message to thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to send message\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/messages\n *\n * Get messages from a thread's DurableObject\n *\n * By default, returns the newest messages (when truncating) in chronological order\n * (oldest first in array, newest last). This is ideal for chat UIs where you append\n * messages and scroll to the bottom.\n *\n * Query parameters:\n * - limit: number (default: 100) - Number of messages to return\n * - offset: number (default: 0) - Number of newest messages to skip (for scrolling up)\n * - order: \"asc\" | \"desc\" (default: \"desc\") - Internal fetch order (affects truncation)\n * - includeSilent: \"true\" | \"false\" (default: \"false\") - Include silent messages (UI-only)\n * - depth: number (default: 0) - Maximum depth to include (0 = top-level only, 1+ = include sub-prompts)\n *\n * Examples:\n * - GET /api/threads/:id/messages?limit=10\n * Returns newest 10 messages in chronological order [oldest...newest]\n *\n * - GET /api/threads/:id/messages?limit=10&offset=10\n * Skips newest 10, returns next 10 older messages in chronological order\n * (for scrolling up to view history)\n *\n * - GET /api/threads/:id/messages?order=asc\n * Returns oldest messages first (different truncation behavior)\n *\n * - GET /api/threads/:id/messages?includeSilent=true\n * Includes silent messages (hidden from LLM, visible in UI)\n *\n * - GET /api/threads/:id/messages?depth=1\n * Includes messages up to depth 1 (top-level + first level of sub-prompts)\n *\n * Returns:\n * - HTTP 200: { messages: Message[], total: number, hasMore: boolean }\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const url = new URL(req.url);\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Parse query parameters\n const limit = parseInt(url.searchParams.get(\"limit\") || \"100\", 10);\n const offset = parseInt(url.searchParams.get(\"offset\") || \"0\", 10);\n const order = url.searchParams.get(\"order\") === \"asc\" ? \"ASC\" : \"DESC\";\n const includeSilent = url.searchParams.get(\"includeSilent\") === \"true\";\n const maxDepth = parseInt(url.searchParams.get(\"depth\") || \"0\", 10);\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.getMessages(\n limit,\n offset,\n order,\n includeSilent,\n maxDepth\n );\n\n return Response.json(result);\n } catch (error: any) {\n console.error(`Error fetching messages for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to fetch messages\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * RPC endpoint for calling DurableThread methods\n * Used primarily for testing\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n // Parse request body\n const body = await req.json() as { method?: string; args?: unknown[] };\n const { method, args = [] } = body;\n\n if (!method) {\n return Response.json({ error: \"Method required\" }, { status: 400 });\n }\n\n try {\n // Get the DurableThread instance\n const id = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const thread = env.AGENT_BUILDER_THREAD.get(id);\n\n // Call the method via RPC\n // @ts-ignore - Dynamic RPC call\n const result = await thread[method](...args);\n\n // If result is a Response, return it directly\n if (result instanceof Response) {\n return result;\n }\n\n // Otherwise wrap in JSON response\n return Response.json(result);\n } catch (error: any) {\n console.error(`RPC call to ${method} failed:`, error);\n return Response.json(\n { error: error.message || \"RPC call failed\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * POST /api/threads/:id/stop\n *\n * Stop the currently executing thread\n *\n * Returns:\n * - HTTP 200: Thread stopped successfully or not currently running\n * - HTTP 404: Thread not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n return await stub.stop();\n } catch (error: any) {\n console.error(`Error stopping thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to stop thread\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../router/index\";\n\n/**\n * GET /api/threads/:id/stream\n *\n * WebSocket endpoint for real-time message streaming\n *\n * This endpoint is specifically for message updates and should be used\n * by applications that want to receive real-time message data without\n * getting internal log/telemetry information.\n *\n * Returns:\n * - HTTP 101: WebSocket upgrade for message streaming\n * - HTTP 400: Not a WebSocket upgrade request\n * - HTTP 404: Thread not found\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n // Only handle WebSocket upgrades\n if (req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") {\n return Response.json(\n { error: \"This endpoint only supports WebSocket connections\" },\n { status: 400 }\n );\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Forward WebSocket upgrade to DurableObject\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n return await stub.fetch(req);\n } catch (error: any) {\n console.error(`Error handling message stream for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to establish message stream\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\nimport type { FileRecord } from \"../../../../agents/types.js\";\n\n/**\n * Convert FileRecord to AttachmentRef format for client consumption\n */\nfunction toAttachmentRef(file: FileRecord): {\n id: string;\n type: \"file\";\n path: string;\n name: string;\n mimeType: string;\n size: number;\n width?: number;\n height?: number;\n} {\n // Use direct width/height columns, fall back to metadata for backwards compatibility\n const metadata = file.metadata as { width?: number; height?: number } | null;\n const width = file.width ?? metadata?.width;\n const height = file.height ?? metadata?.height;\n\n return {\n id: file.path, // Use path as unique ID\n type: \"file\",\n path: file.path,\n name: file.name,\n mimeType: file.mimeType,\n size: file.size,\n ...(width && { width }),\n ...(height && { height }),\n };\n}\n\n/**\n * File System API for DurableThread\n *\n * Routes:\n * - GET /api/threads/:id/fs/*path - Get file data or list directory\n * - GET /api/threads/:id/fs/*path?thumbnail=1 - Get thumbnail (images only)\n * - GET /api/threads/:id/fs?stats=1 - Get storage stats\n * - PUT /api/threads/:id/fs/*path - Write file\n * - DELETE /api/threads/:id/fs/*path - Delete file or empty directory\n *\n * Path is a catch-all parameter, e.g.:\n * - /api/threads/abc/fs/images/photo.jpg -> path = \"images/photo.jpg\"\n * - /api/threads/abc/fs/docs/2024/report.pdf -> path = \"docs/2024/report.pdf\"\n */\nexport default defineController(async ({ req, params, env }) => {\n console.log('[fs] params received:', JSON.stringify(params));\n\n const threadId = params.id;\n // rou3 uses \"_\" for catch-all wildcard params, or check for \"path\" or \"*\"\n const pathParam = params._ || params.path || params['*'] || '';\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n console.log('[fs] threadId:', threadId, 'pathParam:', pathParam);\n\n // Normalize path - ensure it starts with /\n const path = pathParam ? `/${pathParam}` : \"/\";\n const url = new URL(req.url);\n\n try {\n // Get DurableObject instance\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId) as any;\n\n // Handle based on HTTP method\n switch (req.method) {\n case \"GET\":\n return handleGet(stub, path, url);\n case \"PUT\":\n return handlePut(stub, path, req);\n case \"DELETE\":\n return handleDelete(stub, path);\n default:\n return Response.json(\n { error: `Method ${req.method} not allowed` },\n { status: 405 }\n );\n }\n } catch (error: any) {\n console.error(`Error in fs API for thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"File operation failed\" },\n { status: 500 }\n );\n }\n});\n\n/**\n * Handle GET requests - fetch file data, directory listing, or stats\n */\nasync function handleGet(stub: any, path: string, url: URL): Promise<Response> {\n // Check for stats request\n if (url.searchParams.has(\"stats\")) {\n const result = await stub.getFileStats();\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json(result.stats);\n }\n\n // Check for thumbnail request\n if (url.searchParams.has(\"thumbnail\")) {\n const result = await stub.getFileThumbnail(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 404 });\n }\n\n // Return binary thumbnail data\n const binary = atob(result.data);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return new Response(bytes, {\n headers: {\n \"Content-Type\": \"image/jpeg\", // Thumbnails are typically JPEG\n \"Cache-Control\": \"public, max-age=31536000\", // Cache for 1 year\n },\n });\n }\n\n // Get file info first\n const statResult = await stub.statFile(path);\n\n if (!statResult.success) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n\n const file = statResult.file;\n\n // If it's a directory, list contents\n if (file.isDirectory) {\n const result = await stub.readdirFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 500 });\n }\n return Response.json({ files: result.files, path });\n }\n\n // If it's an external file, return metadata only\n if (file.storage !== \"local\") {\n return Response.json({\n file,\n external: true,\n location: file.location,\n });\n }\n\n // For local files, check if client wants JSON metadata or raw data\n const acceptHeader = url.searchParams.get(\"format\") || \"auto\";\n\n if (acceptHeader === \"json\") {\n // Return file metadata as JSON\n return Response.json({ file });\n }\n\n // Return raw file data with appropriate content type\n const result = await stub.readFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 404 });\n }\n\n // Convert base64 to binary\n const binary = atob(result.data);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return new Response(bytes, {\n headers: {\n \"Content-Type\": file.mimeType,\n \"Content-Length\": String(file.size),\n \"Content-Disposition\": `inline; filename=\"${file.name}\"`,\n },\n });\n}\n\n/**\n * Handle PUT requests - write file or create directory\n */\nasync function handlePut(stub: any, path: string, req: Request): Promise<Response> {\n const contentType = req.headers.get(\"Content-Type\") || \"\";\n\n // Check if it's a directory creation request\n if (contentType.includes(\"application/json\")) {\n const body = await req.json() as any;\n\n // Directory creation\n if (body.type === \"directory\") {\n const result = await stub.mkdirFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n return Response.json({ directory: result.directory }, { status: 201 });\n }\n\n // External file link\n if (body.location) {\n const result = await stub.linkFile(path, body.location, {\n mimeType: body.mimeType,\n size: body.size,\n metadata: body.metadata,\n });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n return Response.json(toAttachmentRef(result.file), { status: 201 });\n }\n\n // File upload with base64 data\n if (body.data) {\n const result = await stub.writeFile(path, body.data, body.mimeType || \"application/octet-stream\", {\n metadata: body.metadata,\n thumbnail: body.thumbnail,\n });\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n return Response.json(toAttachmentRef(result.file), { status: 201 });\n }\n\n return Response.json({ error: \"Invalid request body\" }, { status: 400 });\n }\n\n // Handle raw binary upload\n const data = await req.arrayBuffer();\n const mimeType = contentType.split(\";\")[0].trim() || \"application/octet-stream\";\n\n // Convert to base64\n const bytes = new Uint8Array(data);\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n const base64 = btoa(binary);\n\n const result = await stub.writeFile(path, base64, mimeType, {});\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n\n // Return AttachmentRef format for client consumption\n return Response.json(toAttachmentRef(result.file), { status: 201 });\n}\n\n/**\n * Handle DELETE requests - remove file or empty directory\n */\nasync function handleDelete(stub: any, path: string): Promise<Response> {\n // Try to get file info first\n const statResult = await stub.statFile(path);\n\n if (!statResult.success) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n\n const file = statResult.file;\n\n if (file.isDirectory) {\n // Remove directory\n const result = await stub.rmdirFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n } else {\n // Remove file\n const result = await stub.unlinkFile(path);\n if (!result.success) {\n return Response.json({ error: result.error }, { status: 400 });\n }\n }\n\n return new Response(null, { status: 204 });\n}\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * GET /api/threads/:id/logs/:logId\n *\n * Get detailed information for a single log from a thread's DurableObject\n *\n * Returns:\n * - HTTP 200: Full log details object\n * - HTTP 404: Thread or log not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n const logId = params.logId;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (!logId) {\n return Response.json({ error: \"Log ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call RPC method\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const logDetails = await stub.getLogDetails(logId);\n\n return Response.json(logDetails);\n } catch (error: any) {\n console.error(`Error fetching log details for ${logId}:`, error);\n\n if (error.message?.includes(\"not found\")) {\n return Response.json(\n { error: error.message },\n { status: 404 }\n );\n }\n\n return Response.json(\n { error: error.message || \"Failed to fetch log details\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * DELETE /api/threads/:id/messages/:messageId\n *\n * Delete a message from a thread's DurableObject\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 404: Thread or message not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n const messageId = params.messageId;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (!messageId) {\n return Response.json({ error: \"Message ID required\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.deleteMessage(messageId);\n\n if (!result.success) {\n return Response.json(\n { error: result.error || \"Failed to delete message\" },\n { status: 404 }\n );\n }\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error(`Error deleting message ${messageId} from thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to delete message\" },\n { status: 500 }\n );\n }\n});\n","import { defineController } from \"../../../../router/index\";\n\n/**\n * PATCH /api/threads/:id/messages/:messageId\n *\n * Update a message's content in a thread's DurableObject\n *\n * Body:\n * - content: string (required) - The new message content\n *\n * Returns:\n * - HTTP 200: { success: true }\n * - HTTP 400: Missing required fields\n * - HTTP 404: Thread or message not found\n * - HTTP 500: Server error\n */\nexport default defineController(async ({ req, params, env }) => {\n const threadId = params.id;\n const messageId = params.messageId;\n\n if (!threadId) {\n return Response.json({ error: \"Thread ID required\" }, { status: 400 });\n }\n\n if (!messageId) {\n return Response.json({ error: \"Message ID required\" }, { status: 400 });\n }\n\n // Parse request body\n let body: { content?: string };\n try {\n body = await req.json();\n } catch {\n return Response.json({ error: \"Invalid JSON body\" }, { status: 400 });\n }\n\n if (typeof body.content !== \"string\") {\n return Response.json({ error: \"Content is required and must be a string\" }, { status: 400 });\n }\n\n try {\n // Verify thread exists in DurableAgentBuilder\n const agentBuilderId = env.AGENT_BUILDER.idFromName(\"singleton\");\n const agentBuilder = env.AGENT_BUILDER.get(agentBuilderId) as any;\n const thread = await agentBuilder.getThread(threadId);\n\n if (!thread) {\n return Response.json(\n { error: `Thread not found: ${threadId}` },\n { status: 404 }\n );\n }\n\n // Get DurableObject instance and call via RPC\n const durableId = env.AGENT_BUILDER_THREAD.idFromName(threadId);\n const stub = env.AGENT_BUILDER_THREAD.get(durableId);\n\n // Call RPC method directly\n const result = await stub.updateMessageContent(messageId, body.content);\n\n if (!result.success) {\n return Response.json(\n { error: result.error || \"Failed to update message\" },\n { status: 404 }\n );\n }\n\n return Response.json({ success: true });\n } catch (error: any) {\n console.error(`Error updating message ${messageId} in thread ${threadId}:`, error);\n return Response.json(\n { error: error.message || \"Failed to update message\" },\n { status: 500 }\n );\n }\n});\n","// Auto-generated file - do not edit manually\n// Generated by scripts/generate-built-in-routes.ts\n\nimport { addRoute } from 'rou3';\n\n// Import all route handlers\nimport handler0 from './api/index.post';\nimport handler1 from './api/agents.get';\nimport handler2 from './api/api-keys/index.get';\nimport handler3 from './api/api-keys/index.post';\nimport handler4 from './api/config.get';\nimport handler5 from './api/diagnostics.get';\nimport handler6 from './api/events.get';\nimport handler7 from './api/models.get';\nimport handler8 from './api/new-test.get';\nimport handler9 from './api/prompts.get';\nimport handler10 from './api/providers.get';\nimport handler11 from './api/threads/index.post';\nimport handler12 from './api/threads/index';\nimport handler13 from './api/tools.get';\nimport handler14 from './api/users/index.get';\nimport handler15 from './api/users/index.post';\nimport handler16 from './api/agents/[name].get';\nimport handler17 from './api/api-keys/[id].delete';\nimport handler18 from './api/prompts/[name].get';\nimport handler19 from './api/threads/[id].delete';\nimport handler20 from './api/threads/[id].patch';\nimport handler21 from './api/threads/[id]';\nimport handler22 from './api/tools/[name].get';\nimport handler23 from './api/users/[id].delete';\nimport handler24 from './api/users/[id].put';\nimport handler25 from './api/auth/config.get';\nimport handler26 from './api/auth/login.post';\nimport handler27 from './api/auth/logout.post';\nimport handler28 from './api/auth/me.get';\nimport handler29 from './api/models/available.post';\nimport handler30 from './api/models/endpoints.post';\nimport handler31 from './api/threads/[id]/cost.get';\nimport handler32 from './api/threads/[id]/fs/index';\nimport handler33 from './api/threads/[id]/logs.get';\nimport handler34 from './api/threads/[id]/messages.post';\nimport handler35 from './api/threads/[id]/messages.get';\nimport handler36 from './api/threads/[id]/rpc.post';\nimport handler37 from './api/threads/[id]/stop.post';\nimport handler38 from './api/threads/[id]/stream';\nimport handler39 from './api/threads/[id]/fs/[...path]';\nimport handler40 from './api/threads/[id]/logs/[logId].get';\nimport handler41 from './api/threads/[id]/messages/[messageId].delete';\nimport handler42 from './api/threads/[id]/messages/[messageId].patch';\n\nconst routeHandlers: Record<string, any> = {\n 'POST:/': handler0,\n 'GET:/agents': handler1,\n 'GET:/api-keys': handler2,\n 'POST:/api-keys': handler3,\n 'GET:/config': handler4,\n 'GET:/diagnostics': handler5,\n 'GET:/events': handler6,\n 'GET:/models': handler7,\n 'GET:/new-test': handler8,\n 'GET:/prompts': handler9,\n 'GET:/providers': handler10,\n 'POST:/threads': handler11,\n 'GET:/threads': handler12,\n 'GET:/tools': handler13,\n 'GET:/users': handler14,\n 'POST:/users': handler15,\n 'GET:/agents/:name': handler16,\n 'DELETE:/api-keys/:id': handler17,\n 'GET:/prompts/:name': handler18,\n 'DELETE:/threads/:id': handler19,\n 'PATCH:/threads/:id': handler20,\n 'GET:/threads/:id': handler21,\n 'GET:/tools/:name': handler22,\n 'DELETE:/users/:id': handler23,\n 'PUT:/users/:id': handler24,\n 'GET:/auth/config': handler25,\n 'POST:/auth/login': handler26,\n 'POST:/auth/logout': handler27,\n 'GET:/auth/me': handler28,\n 'POST:/models/available': handler29,\n 'POST:/models/endpoints': handler30,\n 'GET:/threads/:id/cost': handler31,\n 'GET:/threads/:id/fs': handler32,\n 'GET:/threads/:id/logs': handler33,\n 'POST:/threads/:id/messages': handler34,\n 'GET:/threads/:id/messages': handler35,\n 'POST:/threads/:id/rpc': handler36,\n 'POST:/threads/:id/stop': handler37,\n 'GET:/threads/:id/stream': handler38,\n 'GET:/threads/:id/fs/**': handler39,\n 'GET:/threads/:id/logs/:logId': handler40,\n 'DELETE:/threads/:id/messages/:messageId': handler41,\n 'PATCH:/threads/:id/messages/:messageId': handler42,\n};\n\nexport interface RuntimeData {\n config?: any;\n tools?: any;\n models?: Record<string, () => Promise<any>>;\n modelNames?: string[];\n prompts?: Record<string, () => Promise<any>>;\n promptNames?: string[];\n agents?: Record<string, () => Promise<any>>;\n agentNames?: string[];\n}\n\nexport function registerBuiltInRoutes(router: any, runtimeData?: RuntimeData) {\n for (const [key, handler] of Object.entries(routeHandlers)) {\n const [method, ...routeParts] = key.split(':');\n const route = routeParts.join(':');\n const apiRoute = `/api${route}`;\n // Wrap handler to inject runtime data into context\n const wrappedHandler = async (context: any) => {\n // Add runtime data to context if provided\n const enhancedContext = {\n ...context,\n ...(runtimeData?.config && { config: runtimeData.config }),\n ...(runtimeData?.tools && { tools: runtimeData.tools }),\n ...(runtimeData?.models && { models: runtimeData.models }),\n ...(runtimeData?.modelNames && { modelNames: runtimeData.modelNames }),\n ...(runtimeData?.prompts && { prompts: runtimeData.prompts }),\n ...(runtimeData?.promptNames && { promptNames: runtimeData.promptNames }),\n ...(runtimeData?.agents && { agents: runtimeData.agents }),\n ...(runtimeData?.agentNames && { agentNames: runtimeData.agentNames }),\n };\n return handler(enhancedContext);\n };\n addRoute(router, method, apiRoute, async () => wrappedHandler);\n }\n}\n"]}