alchemylab-opencode 1.0.18 → 1.0.19

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.
Files changed (68) hide show
  1. package/dist/{arktype-aI7TBD0R-HX4BR3RX.js → arktype-aI7TBD0R-LH6JTJZZ.js} +2 -2
  2. package/dist/{arktype-aI7TBD0R-HX4BR3RX.js.map → arktype-aI7TBD0R-LH6JTJZZ.js.map} +1 -1
  3. package/dist/chunk-2FM4SJ4F.js +506 -0
  4. package/dist/chunk-2FM4SJ4F.js.map +7 -0
  5. package/dist/{chunk-O5VWOPCL.js → chunk-4UCKACGO.js} +2 -2
  6. package/dist/{chunk-O5VWOPCL.js.map → chunk-4UCKACGO.js.map} +1 -1
  7. package/dist/{chunk-VL3RSEZ2.js → chunk-AHJSL352.js} +9 -9
  8. package/dist/{chunk-VL3RSEZ2.js.map → chunk-AHJSL352.js.map} +1 -1
  9. package/dist/{chunk-S3PMXQSO.js → chunk-ASJTXZ3G.js} +9 -7
  10. package/dist/{chunk-S3PMXQSO.js.map → chunk-ASJTXZ3G.js.map} +1 -1
  11. package/dist/{chunk-PWFRMDDF.js → chunk-BGADAZN4.js} +1 -1
  12. package/dist/{chunk-YX3AWX2A.js → chunk-E2D2QSW7.js} +67 -12
  13. package/dist/chunk-E2D2QSW7.js.map +7 -0
  14. package/dist/{chunk-3AF5MXLF.js → chunk-FXA7YNMN.js} +5 -5
  15. package/dist/{chunk-3AF5MXLF.js.map → chunk-FXA7YNMN.js.map} +1 -1
  16. package/dist/{chunk-FMP3YLWX.js → chunk-H5AN6PD4.js} +4 -4
  17. package/dist/{chunk-FMP3YLWX.js.map → chunk-H5AN6PD4.js.map} +1 -1
  18. package/dist/{chunk-6UDEKTJV.js → chunk-PV6JYN6T.js} +287 -24
  19. package/dist/chunk-PV6JYN6T.js.map +7 -0
  20. package/dist/{chunk-SNATISLF.js → chunk-RYVKLRJZ.js} +7 -5
  21. package/dist/{chunk-SNATISLF.js.map → chunk-RYVKLRJZ.js.map} +1 -1
  22. package/dist/{chunk-J4KUHHYM.js → chunk-SZM3G6UF.js} +151 -583
  23. package/dist/chunk-SZM3G6UF.js.map +7 -0
  24. package/dist/{chunk-Z6HKGDR4.js → chunk-WHJ5FGUS.js} +43 -15
  25. package/dist/chunk-WHJ5FGUS.js.map +7 -0
  26. package/dist/{default-u_dwuiYb-WOFHQQ3K.js → default-u_dwuiYb-644FBWJS.js} +5 -5
  27. package/dist/{effect-QlVUlMFu-UERLUUQW.js → effect-QlVUlMFu-GLKKNZAC.js} +3 -3
  28. package/dist/{effect-QlVUlMFu-UERLUUQW.js.map → effect-QlVUlMFu-GLKKNZAC.js.map} +1 -1
  29. package/dist/log-TOR3B2F5.js +19 -0
  30. package/dist/{mcp-4SNUY4OD.js → mcp-W2Z3DXFD.js} +4 -3
  31. package/dist/{registry-EQ7TBD6Z.js → registry-FWM7Q3YW.js} +5 -4
  32. package/dist/{run-XIMVXVMO.js → run-PMUMTYTZ.js} +13 -11
  33. package/dist/{run-XIMVXVMO.js.map → run-PMUMTYTZ.js.map} +1 -1
  34. package/dist/{run-service-RE7EK2UK.js → run-service-B4BDQWO3.js} +3 -2
  35. package/dist/run.js +1 -1
  36. package/dist/serve.js +5 -1
  37. package/dist/serve.js.map +2 -2
  38. package/dist/{server-P3JM3FFL.js → server-HETOVWO6.js} +11 -10
  39. package/dist/{session-FV32QIWG.js → session-37HDF4U2.js} +5 -4
  40. package/dist/{share-next-MK3GU4BJ.js → share-next-MP7REE74.js} +6 -5
  41. package/dist/share-next-MP7REE74.js.map +7 -0
  42. package/dist/{sury-CWZTCd75-XC3NCMTP.js → sury-CWZTCd75-SVV5EKIT.js} +3 -3
  43. package/dist/{sury-CWZTCd75-XC3NCMTP.js.map → sury-CWZTCd75-SVV5EKIT.js.map} +1 -1
  44. package/dist/{typebox-Dei93FPO-QOBKW4L7.js → typebox-Dei93FPO-LMTONO64.js} +2 -2
  45. package/dist/{typebox-Dei93FPO-QOBKW4L7.js.map → typebox-Dei93FPO-LMTONO64.js.map} +1 -1
  46. package/dist/{valibot--1zFm7rT-LHHLSLYY.js → valibot--1zFm7rT-HRT4VHTJ.js} +3 -3
  47. package/dist/{valibot--1zFm7rT-LHHLSLYY.js.map → valibot--1zFm7rT-HRT4VHTJ.js.map} +1 -1
  48. package/dist/{valibot-D_HTw1Gn-UR62BIDY.js → valibot-D_HTw1Gn-SZJR3J76.js} +5 -5
  49. package/dist/{valibot-D_HTw1Gn-UR62BIDY.js.map → valibot-D_HTw1Gn-SZJR3J76.js.map} +1 -1
  50. package/dist/{worktree-N3PSXGW4.js → worktree-ADWVQ6IR.js} +7 -6
  51. package/dist/{worktree-N3PSXGW4.js.map → worktree-ADWVQ6IR.js.map} +1 -1
  52. package/dist/{zod-Bwrt9trS-J2GOMA2R.js → zod-Bwrt9trS-5S7UQQDY.js} +3 -3
  53. package/dist/{zod-Bwrt9trS-J2GOMA2R.js.map → zod-Bwrt9trS-5S7UQQDY.js.map} +1 -1
  54. package/dist/{zod-DSgpEGAE-VTXQW6SB.js → zod-DSgpEGAE-X2KPFU7C.js} +7 -7
  55. package/dist/{zod-DSgpEGAE-VTXQW6SB.js.map → zod-DSgpEGAE-X2KPFU7C.js.map} +1 -1
  56. package/package.json +9 -4
  57. package/dist/chunk-6UDEKTJV.js.map +0 -7
  58. package/dist/chunk-J4KUHHYM.js.map +0 -7
  59. package/dist/chunk-YX3AWX2A.js.map +0 -7
  60. package/dist/chunk-Z6HKGDR4.js.map +0 -7
  61. /package/dist/{chunk-PWFRMDDF.js.map → chunk-BGADAZN4.js.map} +0 -0
  62. /package/dist/{default-u_dwuiYb-WOFHQQ3K.js.map → default-u_dwuiYb-644FBWJS.js.map} +0 -0
  63. /package/dist/{mcp-4SNUY4OD.js.map → log-TOR3B2F5.js.map} +0 -0
  64. /package/dist/{registry-EQ7TBD6Z.js.map → mcp-W2Z3DXFD.js.map} +0 -0
  65. /package/dist/{run-service-RE7EK2UK.js.map → registry-FWM7Q3YW.js.map} +0 -0
  66. /package/dist/{server-P3JM3FFL.js.map → run-service-B4BDQWO3.js.map} +0 -0
  67. /package/dist/{session-FV32QIWG.js.map → server-HETOVWO6.js.map} +0 -0
  68. /package/dist/{share-next-MK3GU4BJ.js.map → session-37HDF4U2.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../node_modules/@hono/standard-validator/src/sanitize-issues.ts", "../node_modules/@hono/standard-validator/src/index.ts", "../node_modules/hono-openapi/dist/index.js", "../packages/opencode/src/server/server.ts", "../packages/opencode/src/control-plane/adaptors/index.ts", "../packages/opencode/src/control-plane/workspace.ts", "../packages/opencode/src/control-plane/workspace.sql.ts", "../packages/opencode/src/control-plane/sse.ts", "../packages/opencode/src/server/proxy.ts", "../packages/opencode/src/server/instance.ts", "../packages/opencode/src/server/routes/tui.ts", "../packages/opencode/src/util/queue.ts", "../packages/opencode/src/server/error.ts", "../packages/opencode/src/server/routes/question.ts", "../packages/opencode/src/server/routes/permission.ts", "../packages/opencode/src/server/routes/project.ts", "../packages/opencode/src/server/routes/session.ts", "../packages/opencode/src/server/routes/pty.ts", "../packages/opencode/src/pty/index.ts", "../packages/util/src/lazy.ts", "../packages/opencode/src/pty/schema.ts", "../packages/opencode/src/server/routes/mcp.ts", "../packages/opencode/src/server/routes/file.ts", "../packages/opencode/src/server/routes/config.ts", "../packages/opencode/src/server/routes/experimental.ts", "../packages/opencode/src/config/console-state.ts", "../packages/opencode/src/server/routes/workspace.ts", "../packages/opencode/src/server/routes/provider.ts", "../packages/opencode/src/provider/auth.ts", "../packages/opencode/src/server/routes/event.ts", "../packages/opencode/src/server/middleware.ts", "../packages/opencode/src/server/router.ts", "../packages/opencode/src/server/routes/global.ts", "../packages/opencode/src/server/mdns.ts", "../packages/opencode/src/session/projectors.ts", "../packages/opencode/src/server/projectors.ts"],
4
- "sourcesContent": ["import type { StandardSchemaV1 } from '@standard-schema/spec'\nimport type { ValidationTargets } from 'hono'\n\nconst RESTRICTED_DATA_FIELDS = {\n header: ['cookie'],\n}\n\n/**\n * Sanitizes validation issues by removing sensitive data fields from error messages.\n *\n * This function removes potentially sensitive information (like cookies) from validation\n * error messages before they are returned to the client. It handles different validation\n * library formats based on the vendor string.\n *\n * @param issues - Array of validation issues from Standard Schema validation\n * @param vendor - The validation library vendor identifier (e.g., 'arktype', 'valibot')\n * @param target - The validation target being processed ('header', 'json', etc.)\n * @returns Sanitized array of validation issues with sensitive data removed\n *\n * @example\n * ```ts\n * const issues = [{ message: 'Invalid header', data: { cookie: 'secret' } }]\n * const sanitized = sanitizeIssues(issues, 'arktype', 'header')\n * // Returns issues with cookie field removed from data\n * ```\n */\nexport function sanitizeIssues(\n issues: readonly StandardSchemaV1.Issue[],\n vendor: string,\n target: keyof ValidationTargets\n): readonly StandardSchemaV1.Issue[] {\n if (!(target in RESTRICTED_DATA_FIELDS)) {\n return issues\n }\n\n const restrictedFields =\n RESTRICTED_DATA_FIELDS[target as keyof typeof RESTRICTED_DATA_FIELDS] || []\n\n if (vendor === 'arktype') {\n return sanitizeArktypeIssues(issues, restrictedFields)\n }\n\n if (vendor === 'valibot') {\n return sanitizeValibotIssues(issues, restrictedFields)\n }\n\n return issues\n}\n\nfunction sanitizeArktypeIssues(\n issues: readonly StandardSchemaV1.Issue[],\n restrictedFields: string[]\n): readonly StandardSchemaV1.Issue[] {\n return issues.map((issue) => {\n if (\n issue &&\n typeof issue === 'object' &&\n 'data' in issue &&\n typeof issue.data === 'object' &&\n issue.data !== null &&\n !Array.isArray(issue.data)\n ) {\n const dataCopy = { ...(issue.data as Record<string, unknown>) }\n for (const field of restrictedFields) {\n delete dataCopy[field]\n }\n // Preserve prototype chain to maintain toJSON method\n const sanitizedIssue = Object.create(Object.getPrototypeOf(issue))\n Object.assign(sanitizedIssue, issue, { data: dataCopy })\n return sanitizedIssue\n }\n return issue\n }) as readonly StandardSchemaV1.Issue[]\n}\n\nfunction sanitizeValibotIssues(\n issues: readonly StandardSchemaV1.Issue[],\n restrictedFields: string[]\n): readonly StandardSchemaV1.Issue[] {\n return issues.map((issue) => {\n if (issue && typeof issue === 'object' && 'path' in issue && Array.isArray(issue.path)) {\n for (const path of issue.path) {\n if (\n typeof path === 'object' &&\n 'input' in path &&\n typeof path.input === 'object' &&\n path.input !== null &&\n !Array.isArray(path.input)\n ) {\n for (const field of restrictedFields) {\n delete path.input[field]\n }\n }\n }\n }\n return issue\n }) as readonly StandardSchemaV1.Issue[]\n}\n", "import type { StandardSchemaV1 } from '@standard-schema/spec'\nimport type { Context, Env, Input, TypedResponse, ValidationTargets } from 'hono'\nimport type { Handler } from 'hono/types'\nimport { validator } from 'hono/validator'\nimport { sanitizeIssues } from './sanitize-issues'\n\ntype HasUndefined<T> = undefined extends T ? true : false\n\nexport type FailedResponse<T> = Response &\n TypedResponse<\n {\n readonly success: false\n readonly error: readonly StandardSchemaV1.Issue[]\n readonly data: T\n },\n 400,\n 'json'\n >\ntype MustBeResponse<T> =\n T extends Promise<infer U>\n ? Promise<MustBeResponse<U>>\n : T extends Response | TypedResponse\n ? T\n : never\n\ntype Hook<\n T,\n E extends Env,\n P extends string,\n Target extends keyof ValidationTargets = keyof ValidationTargets,\n R extends\n | void\n | Response\n | TypedResponse<unknown>\n | Promise<Response | TypedResponse<unknown> | void> =\n | void\n | Response\n | TypedResponse<unknown>\n | Promise<Response | TypedResponse<unknown> | void>,\n> = (\n result: (\n | { success: true; data: T }\n | { success: false; error: readonly StandardSchemaV1.Issue[]; data: T }\n ) & {\n target: Target\n },\n c: Context<E, P>\n) => R\n\n/**\n * Validation middleware for libraries that support [Standard Schema](https://standardschema.dev/) specification.\n *\n * This middleware validates incoming request data against a provided schema\n * that conforms to the Standard Schema specification. It supports validation\n * of JSON bodies, headers, queries, forms, and other request targets.\n *\n * @param target - The request target to validate ('json', 'header', 'query', 'form', etc.)\n * @param schema - A schema object conforming to Standard Schema specification\n * @param hook - Optional hook function called with validation results for custom error handling\n * @returns A Hono middleware handler that validates requests and makes validated data available via `c.req.valid()`\n *\n * @example Basic JSON validation\n * ```ts\n * import { z } from 'zod'\n * import { sValidator } from '@hono/standard-validator'\n *\n * const schema = z.object({\n * name: z.string(),\n * age: z.number(),\n * })\n *\n * app.post('/author', sValidator('json', schema), (c) => {\n * const data = c.req.valid('json')\n * return c.json({\n * success: true,\n * message: `${data.name} is ${data.age}`,\n * })\n * })\n * ```\n *\n * @example With custom error handling hook\n * ```ts\n * app.post(\n * '/post',\n * sValidator('json', schema, (result, c) => {\n * if (!result.success) {\n * return c.text('Invalid!', 400)\n * }\n * }),\n * (c) => {\n * // Handler code\n * }\n * )\n * ```\n *\n * @example Header validation\n * ```ts\n * import { object, string } from 'valibot'\n *\n * const schema = object({\n * 'content-type': string(),\n * 'user-agent': string(),\n * })\n *\n * app.post('/author', sValidator('header', schema), (c) => {\n * const headers = c.req.valid('header')\n * // do something with headers\n * })\n * ```\n */\nconst sValidator = <\n Schema extends StandardSchemaV1,\n Target extends keyof ValidationTargets,\n E extends Env,\n P extends string,\n In = StandardSchemaV1.InferInput<Schema>,\n Out = StandardSchemaV1.InferOutput<Schema>,\n I extends Input = {\n in: HasUndefined<In> extends true\n ? {\n [K in Target]?: In extends ValidationTargets[K]\n ? In\n : { [K2 in keyof In]?: ValidationTargets[K][K2] }\n }\n : {\n [K in Target]: In extends ValidationTargets[K]\n ? In\n : { [K2 in keyof In]: ValidationTargets[K][K2] }\n }\n out: { [K in Target]: Out }\n },\n V extends I = I,\n R extends\n | void\n | Response\n | TypedResponse<unknown>\n | Promise<Response | TypedResponse<unknown> | void> = FailedResponse<ValidationTargets[Target]>,\n>(\n target: Target,\n schema: Schema,\n hook?: Hook<StandardSchemaV1.InferOutput<Schema>, E, P, Target, R>\n): Handler<E, P, V, MustBeResponse<R>> =>\n // @ts-expect-error not typed well\n validator(target, async (value, c) => {\n const result = await schema['~standard'].validate(value)\n\n if (hook) {\n const hookResult = await hook(\n result.issues\n ? { data: value, error: result.issues, success: false, target }\n : { data: value, success: true, target },\n c\n )\n if (hookResult) {\n if (hookResult instanceof Response) {\n return hookResult\n }\n\n if ('response' in hookResult) {\n return hookResult.response\n }\n }\n }\n\n if (result.issues) {\n const processedIssues = sanitizeIssues(result.issues, schema['~standard'].vendor, target)\n\n return c.json({ data: value, error: processedIssues, success: false }, 400)\n }\n\n return result.value as StandardSchemaV1.InferOutput<Schema>\n })\n\nexport type { Hook }\nexport { sValidator }\n", "import { sValidator } from '@hono/standard-validator';\nimport { loadVendor as loadVendor$1, toJsonSchema } from '@standard-community/standard-json';\nimport { loadVendor as loadVendor$2, toOpenAPISchema } from '@standard-community/standard-openapi';\n\nconst uniqueSymbol = Symbol(\"openapi\");\nconst ALLOWED_METHODS = [\n \"GET\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n \"PATCH\",\n \"TRACE\"\n];\nconst toOpenAPIPath = (path) => path.split(\"/\").map((x) => {\n let tmp = x;\n if (tmp.startsWith(\":\")) {\n const match = tmp.match(/^:([^{?]+)(?:{(.+)})?(\\?)?$/);\n if (match) {\n const paramName = match[1];\n tmp = `{${paramName}}`;\n } else {\n tmp = tmp.slice(1, tmp.length);\n if (tmp.endsWith(\"?\")) tmp = tmp.slice(0, -1);\n tmp = `{${tmp}}`;\n }\n }\n return tmp;\n}).join(\"/\");\nconst capitalize = (word) => word.charAt(0).toUpperCase() + word.slice(1);\nconst generateOperationId = (route) => {\n let operationId = route.method.toLowerCase();\n if (route.path === \"/\") return `${operationId}Index`;\n for (const segment of route.path.split(\"/\")) {\n if (segment.charCodeAt(0) === 123) {\n operationId += `By${capitalize(segment.slice(1, -1))}`;\n } else {\n operationId += capitalize(segment);\n }\n }\n return operationId;\n};\nconst paramKey = (param) => \"$ref\" in param ? param.$ref : `${param.in} ${param.name}`;\nfunction mergeParameters(...params) {\n const merged = params.flatMap((x) => x ?? []).reduce((acc, param) => {\n acc.set(paramKey(param), param);\n return acc;\n }, /* @__PURE__ */ new Map());\n return Array.from(merged.values());\n}\nconst specsByPathContext = /* @__PURE__ */ new Map();\nfunction getPathContext(path) {\n const context = [];\n for (const [key, data] of specsByPathContext) {\n if (data && path.match(key)) {\n context.push(data);\n }\n }\n return context;\n}\nfunction clearSpecsContext() {\n specsByPathContext.clear();\n}\nfunction mergeSpecs(route, ...specs) {\n return specs.reduce(\n (prev, spec) => {\n if (!spec || !prev) return prev;\n for (const [key, value] of Object.entries(spec)) {\n if (value == null) continue;\n if (key in prev && (typeof value === \"object\" || typeof value === \"function\" && key === \"operationId\")) {\n if (Array.isArray(value)) {\n const values = [...prev[key] ?? [], ...value];\n if (key === \"tags\") {\n prev[key] = Array.from(new Set(values));\n } else if (key === \"parameters\") {\n prev[key] = mergeParameters(values);\n } else {\n prev[key] = values;\n }\n } else if (typeof value === \"function\") {\n prev[key] = value(route);\n } else {\n if (key === \"parameters\") {\n prev[key] = mergeParameters(prev[key], value);\n } else {\n prev[key] = {\n ...prev[key],\n ...value\n };\n }\n }\n } else {\n prev[key] = value;\n }\n }\n return prev;\n },\n {\n operationId: generateOperationId(route)\n }\n );\n}\nfunction registerSchemaPath({\n route,\n specs,\n paths\n}) {\n const path = toOpenAPIPath(route.path);\n const method = route.method.toLowerCase();\n if (method === \"all\") {\n if (!specs) return;\n if (specsByPathContext.has(path)) {\n const prev = specsByPathContext.get(path) ?? {};\n specsByPathContext.set(path, mergeSpecs(route, prev, specs));\n } else {\n specsByPathContext.set(path, specs);\n }\n } else {\n const pathContext = getPathContext(path);\n if (!(path in paths)) {\n paths[path] = {};\n }\n if (paths[path]) {\n paths[path][method] = mergeSpecs(\n route,\n ...pathContext,\n paths[path]?.[method],\n specs\n );\n }\n }\n}\nfunction removeExcludedPaths(paths, ctx) {\n const { exclude, excludeStaticFile } = ctx.options;\n const newPaths = {};\n const _exclude = Array.isArray(exclude) ? exclude : [exclude];\n for (const [key, value] of Object.entries(paths)) {\n if (value == null) continue;\n const isExplicitlyExcluded = _exclude.some((x) => {\n if (typeof x === \"string\") return key === x;\n return x.test(key);\n });\n if (isExplicitlyExcluded) continue;\n const isWildcardWithoutParameters = key.includes(\"*\") && !key.includes(\"{\");\n if (isWildcardWithoutParameters) continue;\n if (excludeStaticFile) {\n const hasPathParameters = key.includes(\"{\");\n const lastSegment = key.split(\"/\").pop() || \"\";\n const looksLikeStaticFile = lastSegment.includes(\".\");\n const shouldExcludeAsStaticFile = !hasPathParameters && looksLikeStaticFile;\n if (shouldExcludeAsStaticFile) continue;\n }\n for (const method of Object.keys(value)) {\n const schema = value[method];\n if (schema == null) continue;\n if (key.includes(\"{\")) {\n schema.parameters = schema.parameters ? [...schema.parameters] : [];\n const pathParameters = key.split(\"/\").filter(\n (x) => x.startsWith(\"{\") && !schema.parameters.find(\n (params) => params.in === \"path\" && params.name === x.slice(1, x.length - 1)\n )\n );\n for (const param of pathParameters) {\n const paramName = param.slice(1, param.length - 1);\n const index = schema.parameters.findIndex(\n (x) => {\n if (\"$ref\" in x) {\n const pos = x.$ref.split(\"/\").pop();\n if (pos) {\n const param2 = ctx.components.parameters?.[pos];\n if (param2 && !(\"$ref\" in param2)) {\n return param2.in === \"path\" && param2.name === paramName;\n }\n }\n return false;\n }\n return x.in === \"path\" && x.name === paramName;\n }\n );\n if (index === -1) {\n schema.parameters.push({\n schema: { type: \"string\" },\n in: \"path\",\n name: paramName,\n required: true\n });\n }\n }\n }\n if (!schema.responses) {\n schema.responses = {\n 200: {}\n };\n }\n }\n newPaths[key] = value;\n }\n return newPaths;\n}\n\nconst DEFAULT_OPTIONS = {\n documentation: {},\n excludeStaticFile: true,\n exclude: [],\n excludeMethods: [\"OPTIONS\"],\n excludeTags: []\n};\nfunction openAPIRouteHandler(hono, options) {\n let specs;\n return async (c) => {\n if (specs) return c.json(specs);\n specs = await generateSpecs(hono, options, c);\n return c.json(specs);\n };\n}\nasync function generateSpecs(hono, options = DEFAULT_OPTIONS, c) {\n const ctx = {\n components: {},\n // @ts-expect-error\n options: {\n ...DEFAULT_OPTIONS,\n ...options\n }\n };\n const _documentation = ctx.options.documentation ?? {};\n clearSpecsContext();\n const paths = await generatePaths(hono, ctx);\n for (const path in paths) {\n for (const method in paths[path]) {\n const isHidden = getHiddenValue({\n valueOrFunc: paths[path][method]?.hide,\n method,\n path,\n c\n });\n if (isHidden) {\n paths[path][method] = void 0;\n }\n }\n }\n const components = mergeComponentsObjects(\n _documentation.components,\n ctx.components\n );\n return {\n openapi: \"3.1.0\",\n ..._documentation,\n tags: _documentation.tags?.filter(\n (tag) => !ctx.options.excludeTags?.includes(tag?.name)\n ),\n info: {\n title: \"Hono Documentation\",\n description: \"Development documentation\",\n version: \"0.0.0\",\n ..._documentation.info\n },\n paths: {\n ...removeExcludedPaths(paths, ctx),\n ..._documentation.paths\n },\n components\n };\n}\nasync function generatePaths(hono, ctx) {\n const paths = {};\n for (const route of hono.routes) {\n const middlewareHandler = route.handler[uniqueSymbol];\n if (!middlewareHandler) {\n if (ctx.options.includeEmptyPaths) {\n registerSchemaPath({\n route,\n paths\n });\n }\n continue;\n }\n const routeMethod = route.method;\n if (routeMethod !== \"ALL\") {\n if (ctx.options.excludeMethods?.includes(routeMethod)) {\n continue;\n }\n if (!ALLOWED_METHODS.includes(routeMethod)) {\n continue;\n }\n }\n const defaultOptionsForThisMethod = ctx.options.defaultOptions?.[routeMethod];\n const { schema: routeSpecs, components = {} } = await getSpec(\n middlewareHandler,\n defaultOptionsForThisMethod\n );\n ctx.components = mergeComponentsObjects(ctx.components, components);\n registerSchemaPath({\n route,\n specs: routeSpecs,\n paths\n });\n }\n return paths;\n}\nfunction getHiddenValue(options) {\n const { valueOrFunc, c, method, path } = options;\n if (valueOrFunc != null) {\n if (typeof valueOrFunc === \"boolean\") {\n return valueOrFunc;\n }\n if (typeof valueOrFunc === \"function\") {\n return valueOrFunc({ c, method, path });\n }\n }\n return false;\n}\nasync function getSpec(middlewareHandler, defaultOptions) {\n if (\"spec\" in middlewareHandler) {\n let components = {};\n const tmp = {\n ...defaultOptions,\n ...middlewareHandler.spec,\n responses: {\n ...defaultOptions?.responses,\n ...middlewareHandler.spec.responses\n }\n };\n if (tmp.responses) {\n for (const key of Object.keys(tmp.responses)) {\n const response = tmp.responses[key];\n if (!response || !(\"content\" in response)) continue;\n for (const contentKey of Object.keys(response.content ?? {})) {\n const raw = response.content?.[contentKey];\n if (!raw) continue;\n if (raw.schema && \"toOpenAPISchema\" in raw.schema) {\n const result2 = await raw.schema.toOpenAPISchema();\n raw.schema = result2.schema;\n if (result2.components) {\n components = mergeComponentsObjects(\n components,\n result2.components\n );\n }\n }\n }\n }\n }\n return { schema: tmp, components };\n }\n const result = await middlewareHandler.toOpenAPISchema();\n const docs = defaultOptions ?? {};\n if (middlewareHandler.target === \"form\" || middlewareHandler.target === \"json\") {\n const media = middlewareHandler.options?.media ?? middlewareHandler.target === \"json\" ? \"application/json\" : \"multipart/form-data\";\n if (!docs.requestBody || !(\"content\" in docs.requestBody) || !docs.requestBody.content) {\n docs.requestBody = {\n content: {\n [media]: {\n schema: result.schema\n }\n }\n };\n } else {\n docs.requestBody.content[media] = {\n schema: result.schema\n };\n }\n } else {\n let parameters = [];\n if (\"$ref\" in result.schema) {\n const ref = result.schema.$ref;\n const pos = ref.split(\"/\").pop();\n if (pos && result.components?.schemas?.[pos]) {\n const schema = result.components.schemas[pos];\n const newParameters = generateParameters(\n middlewareHandler.target,\n schema\n )[0];\n if (!result.components.parameters) {\n result.components.parameters = {};\n }\n result.components.parameters[pos] = newParameters;\n delete result.components.schemas[pos];\n parameters.push({\n $ref: `#/components/parameters/${pos}`\n });\n }\n } else {\n parameters = generateParameters(middlewareHandler.target, result.schema);\n }\n docs.parameters = parameters;\n }\n return { schema: docs, components: result.components };\n}\nfunction generateParameters(target, schema) {\n const parameters = [];\n for (const [key, value] of Object.entries(schema.properties ?? {})) {\n const def = {\n in: target === \"param\" ? \"path\" : target,\n name: key,\n // @ts-expect-error\n schema: value\n };\n const isRequired = schema.required?.includes(key);\n if (isRequired) {\n def.required = true;\n }\n if (def.schema && \"description\" in def.schema && def.schema.description) {\n def.description = def.schema.description;\n def.schema.description = void 0;\n }\n parameters.push(def);\n }\n return parameters;\n}\nfunction mergeComponentsObjects(...components) {\n return components.reduce(\n (prev, component, index) => {\n if (component == null || index === 0) return prev;\n if (prev.schemas && Object.keys(prev.schemas).length > 0 || component.schemas && Object.keys(component.schemas).length > 0) {\n prev.schemas = {\n ...prev.schemas,\n ...component.schemas\n };\n }\n if (prev.parameters && Object.keys(prev.parameters).length > 0 || component.parameters && Object.keys(component.parameters).length > 0) {\n prev.parameters = {\n ...prev.parameters,\n ...component.parameters\n };\n }\n return prev;\n },\n components[0] ?? {}\n );\n}\n\nfunction loadVendor(vendor, fn) {\n if (fn.toJSONSchema) {\n loadVendor$1(vendor, fn.toJSONSchema);\n }\n if (fn.toOpenAPISchema) {\n loadVendor$2(vendor, fn.toOpenAPISchema);\n }\n}\nfunction resolver(schema, userDefinedOptions) {\n return {\n vendor: schema[\"~standard\"].vendor,\n validate: schema[\"~standard\"].validate,\n toJSONSchema: (customOptions) => toJsonSchema(schema, { ...userDefinedOptions, ...customOptions }),\n toOpenAPISchema: (customOptions) => toOpenAPISchema(schema, { ...userDefinedOptions, ...customOptions })\n };\n}\nfunction validator(target, schema, hook, options) {\n const middleware = sValidator(target, schema, hook);\n return Object.assign(middleware, {\n [uniqueSymbol]: {\n target,\n ...resolver(schema, options),\n options\n }\n });\n}\nfunction describeRoute(spec) {\n const middleware = async (_c, next) => {\n await next();\n };\n return Object.assign(middleware, {\n [uniqueSymbol]: {\n spec\n }\n });\n}\nfunction describeResponse(handler, responses, options) {\n const _responses = Object.entries(responses).reduce(\n (acc, [statusCode, response]) => {\n if (response.content) {\n const content = Object.entries(response.content).reduce(\n (contentAcc, [mediaType, media]) => {\n if (media.vSchema) {\n const { vSchema, ...rest } = media;\n contentAcc[mediaType] = {\n ...rest,\n schema: resolver(vSchema, options)\n };\n } else {\n contentAcc[mediaType] = media;\n }\n return contentAcc;\n },\n {}\n );\n acc[statusCode] = { ...response, content };\n } else {\n acc[statusCode] = response;\n }\n return acc;\n },\n {}\n );\n return Object.assign(handler, {\n [uniqueSymbol]: {\n spec: { responses: _responses }\n }\n });\n}\n\nexport { ALLOWED_METHODS, clearSpecsContext, describeResponse, describeRoute, generateSpecs, loadVendor, openAPIRouteHandler, registerSchemaPath, removeExcludedPaths, resolver, uniqueSymbol, validator };\n", "import { Log } from \"../util/log\"\nimport { describeRoute, generateSpecs, validator, resolver, openAPIRouteHandler } from \"hono-openapi\"\nimport { Hono } from \"hono\"\nimport { compress } from \"hono/compress\"\nimport { cors } from \"hono/cors\"\nimport { basicAuth } from \"hono/basic-auth\"\nimport type { UpgradeWebSocket } from \"hono/ws\"\nimport z from \"zod\"\nimport { Auth } from \"../auth\"\nimport { Flag } from \"../flag/flag\"\nimport { ProviderID } from \"../provider/schema\"\nimport { createAdaptorServer, type ServerType } from \"@hono/node-server\"\nimport { createNodeWebSocket } from \"@hono/node-ws\"\nimport { WorkspaceRouterMiddleware } from \"./router\"\nimport { errors } from \"./error\"\nimport { GlobalRoutes } from \"./routes/global\"\nimport { MDNS } from \"./mdns\"\nimport { lazy } from \"@/util/lazy\"\nimport { errorHandler } from \"./middleware\"\nimport { InstanceRoutes } from \"./instance\"\nimport { initProjectors } from \"./projectors\"\n\n// @ts-ignore This global is needed to prevent ai-sdk from logging warnings to stdout https://github.com/vercel/ai/blob/2dc67e0ef538307f21368db32d5a12345d98831b/packages/ai/src/logger/log-warnings.ts#L85\nglobalThis.AI_SDK_LOG_WARNINGS = false\n\ninitProjectors()\n\nexport namespace Server {\n export type Listener = {\n hostname: string\n port: number\n url: URL\n stop: (close?: boolean) => Promise<void>\n }\n\n const log = Log.create({ service: \"server\" })\n const zipped = compress()\n\n const skipCompress = (path: string, method: string) => {\n if (path === \"/event\" || path === \"/global/event\" || path === \"/global/sync-event\") return true\n if (method === \"POST\" && /\\/session\\/[^/]+\\/(message|prompt_async)$/.test(path)) return true\n return false\n }\n\n export const Default = lazy(() => create({}).app)\n\n export function ControlPlaneRoutes(upgrade: UpgradeWebSocket, app = new Hono(), opts?: { cors?: string[] }): Hono {\n return app\n .onError(errorHandler(log))\n .use((c, next) => {\n // Allow CORS preflight requests to succeed without auth.\n // Browser clients sending Authorization headers will preflight with OPTIONS.\n if (c.req.method === \"OPTIONS\") return next()\n const password = Flag.OPENCODE_SERVER_PASSWORD\n if (!password) return next()\n const username = Flag.OPENCODE_SERVER_USERNAME ?? \"opencode\"\n return basicAuth({ username, password })(c, next)\n })\n .use(async (c, next) => {\n const skip = c.req.path === \"/log\"\n if (!skip) {\n log.info(\"request\", {\n method: c.req.method,\n path: c.req.path,\n })\n }\n const timer = log.time(\"request\", {\n method: c.req.method,\n path: c.req.path,\n })\n await next()\n if (!skip) timer.stop()\n })\n .use(\n cors({\n maxAge: 86_400,\n origin(input) {\n if (!input) return\n\n if (input.startsWith(\"http://localhost:\")) return input\n if (input.startsWith(\"http://127.0.0.1:\")) return input\n if (\n input === \"tauri://localhost\" ||\n input === \"http://tauri.localhost\" ||\n input === \"https://tauri.localhost\"\n )\n return input\n\n if (/^https:\\/\\/([a-z0-9-]+\\.)*opencode\\.ai$/.test(input)) return input\n if (opts?.cors?.includes(input)) return input\n },\n }),\n )\n .use((c, next) => {\n if (skipCompress(c.req.path, c.req.method)) return next()\n return zipped(c, next)\n })\n .route(\"/global\", GlobalRoutes())\n .put(\n \"/auth/:providerID\",\n describeRoute({\n summary: \"Set auth credentials\",\n description: \"Set authentication credentials\",\n operationId: \"auth.set\",\n responses: {\n 200: {\n description: \"Successfully set authentication credentials\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"param\",\n z.object({\n providerID: ProviderID.zod,\n }),\n ),\n validator(\"json\", Auth.Info.zod),\n async (c) => {\n const providerID = c.req.valid(\"param\").providerID\n const info = c.req.valid(\"json\")\n await Auth.set(providerID, info)\n return c.json(true)\n },\n )\n .delete(\n \"/auth/:providerID\",\n describeRoute({\n summary: \"Remove auth credentials\",\n description: \"Remove authentication credentials\",\n operationId: \"auth.remove\",\n responses: {\n 200: {\n description: \"Successfully removed authentication credentials\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"param\",\n z.object({\n providerID: ProviderID.zod,\n }),\n ),\n async (c) => {\n const providerID = c.req.valid(\"param\").providerID\n await Auth.remove(providerID)\n return c.json(true)\n },\n )\n .get(\n \"/doc\",\n openAPIRouteHandler(app, {\n documentation: {\n info: {\n title: \"opencode\",\n version: \"0.0.3\",\n description: \"opencode api\",\n },\n openapi: \"3.1.1\",\n },\n }),\n )\n .use(\n validator(\n \"query\",\n z.object({\n directory: z.string().optional(),\n workspace: z.string().optional(),\n }),\n ),\n )\n .post(\n \"/log\",\n describeRoute({\n summary: \"Write log\",\n description: \"Write a log entry to the server logs with specified level and metadata.\",\n operationId: \"app.log\",\n responses: {\n 200: {\n description: \"Log entry written successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"json\",\n z.object({\n service: z.string().meta({ description: \"Service name for the log entry\" }),\n level: z.enum([\"debug\", \"info\", \"error\", \"warn\"]).meta({ description: \"Log level\" }),\n message: z.string().meta({ description: \"Log message\" }),\n extra: z\n .record(z.string(), z.any())\n .optional()\n .meta({ description: \"Additional metadata for the log entry\" }),\n }),\n ),\n async (c) => {\n const { service, level, message, extra } = c.req.valid(\"json\")\n const logger = Log.create({ service })\n\n switch (level) {\n case \"debug\":\n logger.debug(message, extra)\n break\n case \"info\":\n logger.info(message, extra)\n break\n case \"error\":\n logger.error(message, extra)\n break\n case \"warn\":\n logger.warn(message, extra)\n break\n }\n\n return c.json(true)\n },\n )\n .use(WorkspaceRouterMiddleware(upgrade))\n }\n\n function create(opts: { cors?: string[] }) {\n const app = new Hono()\n const ws = createNodeWebSocket({ app })\n return {\n app: ControlPlaneRoutes(ws.upgradeWebSocket, app, opts),\n ws,\n }\n }\n\n export function createApp(opts: { cors?: string[] }) {\n return create(opts).app\n }\n\n export async function openapi() {\n // Build a fresh app with all routes registered directly so\n // hono-openapi can see describeRoute metadata (`.route()` wraps\n // handlers when the sub-app has a custom errorHandler, which\n // strips the metadata symbol).\n const { app, ws } = create({})\n InstanceRoutes(ws.upgradeWebSocket, app)\n const result = await generateSpecs(app, {\n documentation: {\n info: {\n title: \"opencode\",\n version: \"1.0.0\",\n description: \"opencode api\",\n },\n openapi: \"3.1.1\",\n },\n })\n return result\n }\n\n export let url: URL\n\n export async function listen(opts: {\n port: number\n hostname: string\n mdns?: boolean\n mdnsDomain?: string\n cors?: string[]\n }): Promise<Listener> {\n const built = create(opts)\n const start = (port: number) =>\n new Promise<ServerType>((resolve, reject) => {\n const server = createAdaptorServer({ fetch: built.app.fetch })\n built.ws.injectWebSocket(server)\n const fail = (err: Error) => {\n cleanup()\n reject(err)\n }\n const ready = () => {\n cleanup()\n resolve(server)\n }\n const cleanup = () => {\n server.off(\"error\", fail)\n server.off(\"listening\", ready)\n }\n server.once(\"error\", fail)\n server.once(\"listening\", ready)\n server.listen(port, opts.hostname)\n })\n\n const server = opts.port === 0 ? await start(4096).catch(() => start(0)) : await start(opts.port)\n const addr = server.address()\n if (!addr || typeof addr === \"string\") {\n throw new Error(`Failed to resolve server address for port ${opts.port}`)\n }\n\n const next = new URL(\"http://localhost\")\n next.hostname = opts.hostname\n next.port = String(addr.port)\n url = next\n\n const mdns =\n opts.mdns &&\n addr.port &&\n opts.hostname !== \"127.0.0.1\" &&\n opts.hostname !== \"localhost\" &&\n opts.hostname !== \"::1\"\n if (mdns) {\n MDNS.publish(addr.port, opts.mdnsDomain)\n } else if (opts.mdns) {\n log.warn(\"mDNS enabled but hostname is loopback; skipping mDNS publish\")\n }\n\n let closing: Promise<void> | undefined\n return {\n hostname: opts.hostname,\n port: addr.port,\n url: next,\n stop(close?: boolean) {\n closing ??= new Promise((resolve, reject) => {\n if (mdns) MDNS.unpublish()\n server.close((err) => {\n if (err) {\n reject(err)\n return\n }\n resolve()\n })\n if (close) {\n if (\"closeAllConnections\" in server && typeof server.closeAllConnections === \"function\") {\n server.closeAllConnections()\n }\n if (\"closeIdleConnections\" in server && typeof server.closeIdleConnections === \"function\") {\n server.closeIdleConnections()\n }\n }\n })\n return closing\n },\n }\n }\n}\n", "import { lazy } from \"@/util/lazy\"\nimport type { Adaptor } from \"../types\"\n\nconst ADAPTORS: Record<string, () => Promise<Adaptor>> = {\n worktree: lazy(async () => (await import(\"./worktree\")).WorktreeAdaptor),\n}\n\nexport function getAdaptor(type: string): Promise<Adaptor> {\n return ADAPTORS[type]()\n}\n\nexport function installAdaptor(type: string, adaptor: Adaptor) {\n // This is experimental: mostly used for testing right now, but we\n // will likely allow this in the future. Need to figure out the\n // TypeScript story\n\n // @ts-expect-error we force the builtin types right now, but we\n // will implement a way to extend the types for custom adaptors\n ADAPTORS[type] = () => adaptor\n}\n", "import z from \"zod\"\nimport { setTimeout as sleep } from \"node:timers/promises\"\nimport { fn } from \"@/util/fn\"\nimport { Database, eq } from \"@/storage/db\"\nimport { Project } from \"@/project/project\"\nimport { BusEvent } from \"@/bus/bus-event\"\nimport { GlobalBus } from \"@/bus/global\"\nimport { Log } from \"@/util/log\"\nimport { ProjectID } from \"@/project/schema\"\nimport { WorkspaceTable } from \"./workspace.sql\"\nimport { getAdaptor } from \"./adaptors\"\nimport { WorkspaceInfo } from \"./types\"\nimport { WorkspaceID } from \"./schema\"\nimport { parseSSE } from \"./sse\"\n\nexport namespace Workspace {\n export const Event = {\n Ready: BusEvent.define(\n \"workspace.ready\",\n z.object({\n name: z.string(),\n }),\n ),\n Failed: BusEvent.define(\n \"workspace.failed\",\n z.object({\n message: z.string(),\n }),\n ),\n }\n\n export const Info = WorkspaceInfo.meta({\n ref: \"Workspace\",\n })\n export type Info = z.infer<typeof Info>\n\n function fromRow(row: typeof WorkspaceTable.$inferSelect): Info {\n return {\n id: row.id,\n type: row.type,\n branch: row.branch,\n name: row.name,\n directory: row.directory,\n extra: row.extra,\n projectID: row.project_id,\n }\n }\n\n const CreateInput = z.object({\n id: WorkspaceID.zod.optional(),\n type: Info.shape.type,\n branch: Info.shape.branch,\n projectID: ProjectID.zod,\n extra: Info.shape.extra,\n })\n\n export const create = fn(CreateInput, async (input) => {\n const id = WorkspaceID.ascending(input.id)\n const adaptor = await getAdaptor(input.type)\n\n const config = await adaptor.configure({ ...input, id, name: null, directory: null })\n\n const info: Info = {\n id,\n type: config.type,\n branch: config.branch ?? null,\n name: config.name ?? null,\n directory: config.directory ?? null,\n extra: config.extra ?? null,\n projectID: input.projectID,\n }\n\n Database.use((db) => {\n db.insert(WorkspaceTable)\n .values({\n id: info.id,\n type: info.type,\n branch: info.branch,\n name: info.name,\n directory: info.directory,\n extra: info.extra,\n project_id: info.projectID,\n })\n .run()\n })\n\n await adaptor.create(config)\n return info\n })\n\n export function list(project: Project.Info) {\n const rows = Database.use((db) =>\n db.select().from(WorkspaceTable).where(eq(WorkspaceTable.project_id, project.id)).all(),\n )\n return rows.map(fromRow).sort((a, b) => a.id.localeCompare(b.id))\n }\n\n export const get = fn(WorkspaceID.zod, async (id) => {\n const row = Database.use((db) => db.select().from(WorkspaceTable).where(eq(WorkspaceTable.id, id)).get())\n if (!row) return\n return fromRow(row)\n })\n\n export const remove = fn(WorkspaceID.zod, async (id) => {\n const row = Database.use((db) => db.select().from(WorkspaceTable).where(eq(WorkspaceTable.id, id)).get())\n if (row) {\n const info = fromRow(row)\n const adaptor = await getAdaptor(row.type)\n adaptor.remove(info)\n Database.use((db) => db.delete(WorkspaceTable).where(eq(WorkspaceTable.id, id)).run())\n return info\n }\n })\n const log = Log.create({ service: \"workspace-sync\" })\n\n async function workspaceEventLoop(space: Info, stop: AbortSignal) {\n while (!stop.aborted) {\n const adaptor = await getAdaptor(space.type)\n const target = await Promise.resolve(adaptor.target(space))\n\n if (target.type === \"local\") {\n return\n }\n\n const baseURL = String(target.url).replace(/\\/?$/, \"/\")\n\n const res = await fetch(new URL(baseURL + \"/event\"), {\n method: \"GET\",\n signal: stop,\n })\n\n if (!res.ok || !res.body) {\n await sleep(1000)\n continue\n }\n\n await parseSSE(res.body, stop, (event) => {\n GlobalBus.emit(\"event\", {\n directory: space.id,\n payload: event,\n })\n })\n\n // Wait 250ms and retry if SSE connection fails\n await sleep(250)\n }\n }\n\n export function startSyncing(project: Project.Info) {\n const stop = new AbortController()\n const spaces = list(project).filter((space) => space.type !== \"worktree\")\n\n spaces.forEach((space) => {\n void workspaceEventLoop(space, stop.signal).catch((error) => {\n log.warn(\"workspace sync listener failed\", {\n workspaceID: space.id,\n error,\n })\n })\n })\n\n return {\n async stop() {\n stop.abort()\n },\n }\n }\n}\n", "import { sqliteTable, text } from \"drizzle-orm/sqlite-core\"\nimport { ProjectTable } from \"../project/project.sql\"\nimport type { ProjectID } from \"../project/schema\"\nimport type { WorkspaceID } from \"./schema\"\n\nexport const WorkspaceTable = sqliteTable(\"workspace\", {\n id: text().$type<WorkspaceID>().primaryKey(),\n type: text().notNull(),\n branch: text(),\n name: text(),\n directory: text(),\n extra: text({ mode: \"json\" }),\n project_id: text()\n .$type<ProjectID>()\n .notNull()\n .references(() => ProjectTable.id, { onDelete: \"cascade\" }),\n})\n", "export async function parseSSE(\n body: ReadableStream<Uint8Array>,\n signal: AbortSignal,\n onEvent: (event: unknown) => void,\n) {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buf = \"\"\n let last = \"\"\n let retry = 1000\n\n const abort = () => {\n void reader.cancel().catch(() => undefined)\n }\n\n signal.addEventListener(\"abort\", abort)\n\n try {\n while (!signal.aborted) {\n const chunk = await reader.read().catch(() => ({ done: true, value: undefined as Uint8Array | undefined }))\n if (chunk.done) break\n\n buf += decoder.decode(chunk.value, { stream: true })\n buf = buf.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\")\n\n const chunks = buf.split(\"\\n\\n\")\n buf = chunks.pop() ?? \"\"\n\n chunks.forEach((chunk) => {\n const data: string[] = []\n chunk.split(\"\\n\").forEach((line) => {\n if (line.startsWith(\"data:\")) {\n data.push(line.replace(/^data:\\s*/, \"\"))\n return\n }\n if (line.startsWith(\"id:\")) {\n last = line.replace(/^id:\\s*/, \"\")\n return\n }\n if (line.startsWith(\"retry:\")) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, \"\"), 10)\n if (!Number.isNaN(parsed)) retry = parsed\n }\n })\n\n if (!data.length) return\n const raw = data.join(\"\\n\")\n try {\n onEvent(JSON.parse(raw))\n } catch {\n onEvent({\n type: \"sse.message\",\n properties: {\n data: raw,\n id: last || undefined,\n retry,\n },\n })\n }\n })\n }\n } finally {\n signal.removeEventListener(\"abort\", abort)\n reader.releaseLock()\n }\n}\n", "import type { Target } from \"@/control-plane/types\"\nimport { lazy } from \"@/util/lazy\"\nimport { Hono } from \"hono\"\nimport { createNodeWebSocket } from \"@hono/node-ws\"\nconst { upgradeWebSocket } = createNodeWebSocket({ app: new Hono() as any })\n\nconst hop = new Set([\n \"connection\",\n \"keep-alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"proxy-connection\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"host\",\n])\n\ntype Msg = string | ArrayBuffer | Uint8Array\n\nfunction headers(req: Request, extra?: HeadersInit) {\n const out = new Headers(req.headers)\n for (const key of hop) out.delete(key)\n out.delete(\"x-opencode-directory\")\n out.delete(\"x-opencode-workspace\")\n if (!extra) return out\n for (const [key, value] of new Headers(extra).entries()) {\n out.set(key, value)\n }\n return out\n}\n\nfunction protocols(req: Request) {\n const value = req.headers.get(\"sec-websocket-protocol\")\n if (!value) return []\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean)\n}\n\nfunction socket(url: string | URL) {\n const next = new URL(url)\n if (next.protocol === \"http:\") next.protocol = \"ws:\"\n if (next.protocol === \"https:\") next.protocol = \"wss:\"\n return next.toString()\n}\n\nfunction send(ws: { send(data: string | ArrayBuffer | Uint8Array): void }, data: any) {\n if (data instanceof Blob) {\n return data.arrayBuffer().then((x) => ws.send(x))\n }\n return ws.send(data)\n}\n\nconst app = lazy(() =>\n new Hono().get(\n \"/__workspace_ws\",\n upgradeWebSocket((c) => {\n const url = c.req.header(\"x-opencode-proxy-url\")\n const queue: Msg[] = []\n let remote: WebSocket | undefined\n return {\n onOpen(_, ws) {\n if (!url) {\n ws.close(1011, \"missing proxy target\")\n return\n }\n remote = new WebSocket(url, protocols(c.req.raw))\n remote.binaryType = \"arraybuffer\"\n remote.onopen = () => {\n for (const item of queue) remote?.send(item)\n queue.length = 0\n }\n remote.onmessage = (event) => {\n send(ws, event.data)\n }\n remote.onerror = () => {\n ws.close(1011, \"proxy error\")\n }\n remote.onclose = (event) => {\n ws.close(event.code, event.reason)\n }\n },\n onMessage(event) {\n const data = event.data\n if (typeof data !== \"string\" && !(data instanceof Uint8Array) && !(data instanceof ArrayBuffer)) return\n if (remote?.readyState === WebSocket.OPEN) {\n remote.send(data)\n return\n }\n queue.push(data)\n },\n onClose(event) {\n remote?.close(event.code, event.reason)\n },\n }\n }),\n ),\n)\n\nexport namespace ServerProxy {\n export function http(target: Extract<Target, { type: \"remote\" }>, req: Request) {\n return fetch(\n new Request(target.url, {\n method: req.method,\n headers: headers(req, target.headers),\n body: req.method === \"GET\" || req.method === \"HEAD\" ? undefined : req.body,\n redirect: \"manual\",\n signal: req.signal,\n }),\n )\n }\n\n export function websocket(target: Extract<Target, { type: \"remote\" }>, req: Request, env: unknown) {\n const url = new URL(req.url)\n url.pathname = \"/__workspace_ws\"\n url.search = \"\"\n const next = new Headers(req.headers)\n next.set(\"x-opencode-proxy-url\", socket(target.url))\n return app().fetch(\n new Request(url, {\n method: req.method,\n headers: next,\n signal: req.signal,\n }),\n env as never,\n )\n }\n}\n", "import { describeRoute, resolver, validator } from \"hono-openapi\"\nimport { Hono } from \"hono\"\nimport { proxy } from \"hono/proxy\"\nimport type { UpgradeWebSocket } from \"hono/ws\"\nimport z from \"zod\"\nimport { createHash } from \"node:crypto\"\nimport { Log } from \"../util/log\"\nimport { Format } from \"../format\"\nimport { TuiRoutes } from \"./routes/tui\"\nimport { Instance } from \"../project/instance\"\nimport { Vcs } from \"../project/vcs\"\nimport { Agent } from \"../agent/agent\"\nimport { Skill } from \"../skill\"\nimport { Global } from \"../global\"\nimport { LSP } from \"../lsp\"\nimport { Command } from \"../command\"\nimport { Flag } from \"../flag/flag\"\nimport { QuestionRoutes } from \"./routes/question\"\nimport { PermissionRoutes } from \"./routes/permission\"\nimport { Snapshot } from \"@/snapshot\"\nimport { ProjectRoutes } from \"./routes/project\"\nimport { SessionRoutes } from \"./routes/session\"\nimport { PtyRoutes } from \"./routes/pty\"\nimport { McpRoutes } from \"./routes/mcp\"\nimport { FileRoutes } from \"./routes/file\"\nimport { ConfigRoutes } from \"./routes/config\"\nimport { ExperimentalRoutes } from \"./routes/experimental\"\nimport { ProviderRoutes } from \"./routes/provider\"\nimport { EventRoutes } from \"./routes/event\"\nimport { errorHandler } from \"./middleware\"\n\nconst log = Log.create({ service: \"server\" })\n\nconst embeddedUIPromise = Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI\n ? Promise.resolve(null)\n : // @ts-expect-error - generated file at build time\n import(\"opencode-web-ui.gen.ts\").then((module) => module.default as Record<string, string>).catch(() => null)\n\nconst DEFAULT_CSP =\n \"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; media-src 'self' data:; connect-src 'self' data:\"\n\nconst csp = (hash = \"\") =>\n `default-src 'self'; script-src 'self' 'wasm-unsafe-eval'${hash ? ` 'sha256-${hash}'` : \"\"}; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; media-src 'self' data:; connect-src 'self' data:`\n\nexport const InstanceRoutes = (upgrade: UpgradeWebSocket, app: Hono = new Hono()) =>\n app\n .onError(errorHandler(log))\n .route(\"/project\", ProjectRoutes())\n .route(\"/pty\", PtyRoutes(upgrade))\n .route(\"/config\", ConfigRoutes())\n .route(\"/experimental\", ExperimentalRoutes())\n .route(\"/session\", SessionRoutes())\n .route(\"/permission\", PermissionRoutes())\n .route(\"/question\", QuestionRoutes())\n .route(\"/provider\", ProviderRoutes())\n .route(\"/\", FileRoutes())\n .route(\"/\", EventRoutes())\n .route(\"/mcp\", McpRoutes())\n .route(\"/tui\", TuiRoutes())\n .post(\n \"/instance/dispose\",\n describeRoute({\n summary: \"Dispose instance\",\n description: \"Clean up and dispose the current OpenCode instance, releasing all resources.\",\n operationId: \"instance.dispose\",\n responses: {\n 200: {\n description: \"Instance disposed\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Instance.dispose()\n return c.json(true)\n },\n )\n .get(\n \"/path\",\n describeRoute({\n summary: \"Get paths\",\n description: \"Retrieve the current working directory and related path information for the OpenCode instance.\",\n operationId: \"path.get\",\n responses: {\n 200: {\n description: \"Path\",\n content: {\n \"application/json\": {\n schema: resolver(\n z\n .object({\n home: z.string(),\n state: z.string(),\n config: z.string(),\n worktree: z.string(),\n directory: z.string(),\n })\n .meta({\n ref: \"Path\",\n }),\n ),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json({\n home: Global.Path.home,\n state: Global.Path.state,\n config: Global.Path.config,\n worktree: Instance.worktree,\n directory: Instance.directory,\n })\n },\n )\n .get(\n \"/vcs\",\n describeRoute({\n summary: \"Get VCS info\",\n description: \"Retrieve version control system (VCS) information for the current project, such as git branch.\",\n operationId: \"vcs.get\",\n responses: {\n 200: {\n description: \"VCS info\",\n content: {\n \"application/json\": {\n schema: resolver(Vcs.Info),\n },\n },\n },\n },\n }),\n async (c) => {\n const [branch, default_branch] = await Promise.all([Vcs.branch(), Vcs.defaultBranch()])\n return c.json({\n branch,\n default_branch,\n })\n },\n )\n .get(\n \"/vcs/diff\",\n describeRoute({\n summary: \"Get VCS diff\",\n description: \"Retrieve the current git diff for the working tree or against the default branch.\",\n operationId: \"vcs.diff\",\n responses: {\n 200: {\n description: \"VCS diff\",\n content: {\n \"application/json\": {\n schema: resolver(Snapshot.FileDiff.array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n mode: Vcs.Mode,\n }),\n ),\n async (c) => {\n return c.json(await Vcs.diff(c.req.valid(\"query\").mode))\n },\n )\n .get(\n \"/command\",\n describeRoute({\n summary: \"List commands\",\n description: \"Get a list of all available commands in the OpenCode system.\",\n operationId: \"command.list\",\n responses: {\n 200: {\n description: \"List of commands\",\n content: {\n \"application/json\": {\n schema: resolver(Command.Info.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const commands = await Command.list()\n return c.json(commands)\n },\n )\n .get(\n \"/agent\",\n describeRoute({\n summary: \"List agents\",\n description: \"Get a list of all available AI agents in the OpenCode system.\",\n operationId: \"app.agents\",\n responses: {\n 200: {\n description: \"List of agents\",\n content: {\n \"application/json\": {\n schema: resolver(Agent.Info.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const modes = await Agent.list()\n return c.json(modes)\n },\n )\n .get(\n \"/skill\",\n describeRoute({\n summary: \"List skills\",\n description: \"Get a list of all available skills in the OpenCode system.\",\n operationId: \"app.skills\",\n responses: {\n 200: {\n description: \"List of skills\",\n content: {\n \"application/json\": {\n schema: resolver(Skill.Info.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const skills = await Skill.all()\n return c.json(skills)\n },\n )\n .get(\n \"/lsp\",\n describeRoute({\n summary: \"Get LSP status\",\n description: \"Get LSP server status\",\n operationId: \"lsp.status\",\n responses: {\n 200: {\n description: \"LSP server status\",\n content: {\n \"application/json\": {\n schema: resolver(LSP.Status.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await LSP.status())\n },\n )\n .get(\n \"/formatter\",\n describeRoute({\n summary: \"Get formatter status\",\n description: \"Get formatter status\",\n operationId: \"formatter.status\",\n responses: {\n 200: {\n description: \"Formatter status\",\n content: {\n \"application/json\": {\n schema: resolver(Format.Status.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await Format.status())\n },\n )\n .all(\"/*\", async (c) => {\n const embeddedWebUI = await embeddedUIPromise\n const path = c.req.path\n\n if (embeddedWebUI) {\n const match = embeddedWebUI[path.replace(/^\\//, \"\")] ?? embeddedWebUI[\"index.html\"] ?? null\n if (!match) return c.json({ error: \"Not Found\" }, 404)\n const fs = await import(\"fs\")\n const pathMod = await import(\"path\")\n try {\n const content = fs.readFileSync(match)\n const ext = pathMod.extname(match).toLowerCase()\n const mimeTypes: Record<string, string> = {\n '.html': 'text/html', '.js': 'application/javascript', '.css': 'text/css',\n '.json': 'application/json', '.png': 'image/png', '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon', '.woff': 'font/woff', '.woff2': 'font/woff2',\n }\n const contentType = mimeTypes[ext] || 'application/octet-stream'\n c.header(\"Content-Type\", contentType)\n if (contentType.startsWith(\"text/html\")) {\n c.header(\"Content-Security-Policy\", DEFAULT_CSP)\n }\n return c.body(content as any)\n } catch {\n return c.json({ error: \"Not Found\" }, 404)\n }\n } else {\n const response = await proxy(`https://app.opencode.ai${path}`, {\n ...c.req,\n headers: {\n ...c.req.raw.headers,\n host: \"app.opencode.ai\",\n },\n })\n const match = response.headers.get(\"content-type\")?.includes(\"text/html\")\n ? (await response.clone().text()).match(\n /<script\\b(?![^>]*\\bsrc\\s*=)[^>]*\\bid=(['\"])oc-theme-preload-script\\1[^>]*>([\\s\\S]*?)<\\/script>/i,\n )\n : undefined\n const hash = match ? createHash(\"sha256\").update(match[2]).digest(\"base64\") : \"\"\n response.headers.set(\"Content-Security-Policy\", csp(hash))\n return response\n }\n })\n", "import { Hono, type Context } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { Bus } from \"../../bus\"\nimport { Session } from \"../../session\"\nimport { TuiEvent } from \"@/cli/cmd/tui/event\"\nimport { AsyncQueue } from \"../../util/queue\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\n\nconst TuiRequest = z.object({\n path: z.string(),\n body: z.any(),\n})\n\ntype TuiRequest = z.infer<typeof TuiRequest>\n\nconst request = new AsyncQueue<TuiRequest>()\nconst response = new AsyncQueue<any>()\n\nexport async function callTui(ctx: Context) {\n const body = await ctx.req.json()\n request.push({\n path: ctx.req.path,\n body,\n })\n return response.next()\n}\n\nconst TuiControlRoutes = new Hono()\n .get(\n \"/next\",\n describeRoute({\n summary: \"Get next TUI request\",\n description: \"Retrieve the next TUI (Terminal User Interface) request from the queue for processing.\",\n operationId: \"tui.control.next\",\n responses: {\n 200: {\n description: \"Next TUI request\",\n content: {\n \"application/json\": {\n schema: resolver(TuiRequest),\n },\n },\n },\n },\n }),\n async (c) => {\n const req = await request.next()\n return c.json(req)\n },\n )\n .post(\n \"/response\",\n describeRoute({\n summary: \"Submit TUI response\",\n description: \"Submit a response to the TUI request queue to complete a pending request.\",\n operationId: \"tui.control.response\",\n responses: {\n 200: {\n description: \"Response submitted successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n validator(\"json\", z.any()),\n async (c) => {\n const body = c.req.valid(\"json\")\n response.push(body)\n return c.json(true)\n },\n )\n\nexport const TuiRoutes = lazy(() =>\n new Hono()\n .post(\n \"/append-prompt\",\n describeRoute({\n summary: \"Append TUI prompt\",\n description: \"Append prompt to the TUI\",\n operationId: \"tui.appendPrompt\",\n responses: {\n 200: {\n description: \"Prompt processed successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", TuiEvent.PromptAppend.properties),\n async (c) => {\n await Bus.publish(TuiEvent.PromptAppend, c.req.valid(\"json\"))\n return c.json(true)\n },\n )\n .post(\n \"/open-help\",\n describeRoute({\n summary: \"Open help dialog\",\n description: \"Open the help dialog in the TUI to display user assistance information.\",\n operationId: \"tui.openHelp\",\n responses: {\n 200: {\n description: \"Help dialog opened successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Bus.publish(TuiEvent.CommandExecute, {\n command: \"help.show\",\n })\n return c.json(true)\n },\n )\n .post(\n \"/open-sessions\",\n describeRoute({\n summary: \"Open sessions dialog\",\n description: \"Open the session dialog\",\n operationId: \"tui.openSessions\",\n responses: {\n 200: {\n description: \"Session dialog opened successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Bus.publish(TuiEvent.CommandExecute, {\n command: \"session.list\",\n })\n return c.json(true)\n },\n )\n .post(\n \"/open-themes\",\n describeRoute({\n summary: \"Open themes dialog\",\n description: \"Open the theme dialog\",\n operationId: \"tui.openThemes\",\n responses: {\n 200: {\n description: \"Theme dialog opened successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Bus.publish(TuiEvent.CommandExecute, {\n command: \"session.list\",\n })\n return c.json(true)\n },\n )\n .post(\n \"/open-models\",\n describeRoute({\n summary: \"Open models dialog\",\n description: \"Open the model dialog\",\n operationId: \"tui.openModels\",\n responses: {\n 200: {\n description: \"Model dialog opened successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Bus.publish(TuiEvent.CommandExecute, {\n command: \"model.list\",\n })\n return c.json(true)\n },\n )\n .post(\n \"/submit-prompt\",\n describeRoute({\n summary: \"Submit TUI prompt\",\n description: \"Submit the prompt\",\n operationId: \"tui.submitPrompt\",\n responses: {\n 200: {\n description: \"Prompt submitted successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Bus.publish(TuiEvent.CommandExecute, {\n command: \"prompt.submit\",\n })\n return c.json(true)\n },\n )\n .post(\n \"/clear-prompt\",\n describeRoute({\n summary: \"Clear TUI prompt\",\n description: \"Clear the prompt\",\n operationId: \"tui.clearPrompt\",\n responses: {\n 200: {\n description: \"Prompt cleared successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Bus.publish(TuiEvent.CommandExecute, {\n command: \"prompt.clear\",\n })\n return c.json(true)\n },\n )\n .post(\n \"/execute-command\",\n describeRoute({\n summary: \"Execute TUI command\",\n description: \"Execute a TUI command (e.g. agent_cycle)\",\n operationId: \"tui.executeCommand\",\n responses: {\n 200: {\n description: \"Command executed successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", z.object({ command: z.string() })),\n async (c) => {\n const command = c.req.valid(\"json\").command\n await Bus.publish(TuiEvent.CommandExecute, {\n // @ts-expect-error\n command: {\n session_new: \"session.new\",\n session_share: \"session.share\",\n session_interrupt: \"session.interrupt\",\n session_compact: \"session.compact\",\n messages_page_up: \"session.page.up\",\n messages_page_down: \"session.page.down\",\n messages_line_up: \"session.line.up\",\n messages_line_down: \"session.line.down\",\n messages_half_page_up: \"session.half.page.up\",\n messages_half_page_down: \"session.half.page.down\",\n messages_first: \"session.first\",\n messages_last: \"session.last\",\n agent_cycle: \"agent.cycle\",\n }[command],\n })\n return c.json(true)\n },\n )\n .post(\n \"/show-toast\",\n describeRoute({\n summary: \"Show TUI toast\",\n description: \"Show a toast notification in the TUI\",\n operationId: \"tui.showToast\",\n responses: {\n 200: {\n description: \"Toast notification shown successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n validator(\"json\", TuiEvent.ToastShow.properties),\n async (c) => {\n await Bus.publish(TuiEvent.ToastShow, c.req.valid(\"json\"))\n return c.json(true)\n },\n )\n .post(\n \"/publish\",\n describeRoute({\n summary: \"Publish TUI event\",\n description: \"Publish a TUI event\",\n operationId: \"tui.publish\",\n responses: {\n 200: {\n description: \"Event published successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"json\",\n z.union(\n Object.values(TuiEvent).map((def) => {\n return z\n .object({\n type: z.literal(def.type),\n properties: def.properties,\n })\n .meta({\n ref: \"Event\" + \".\" + def.type,\n })\n }),\n ),\n ),\n async (c) => {\n const evt = c.req.valid(\"json\")\n await Bus.publish(Object.values(TuiEvent).find((def) => def.type === evt.type)!, evt.properties)\n return c.json(true)\n },\n )\n .post(\n \"/select-session\",\n describeRoute({\n summary: \"Select session\",\n description: \"Navigate the TUI to display the specified session.\",\n operationId: \"tui.selectSession\",\n responses: {\n 200: {\n description: \"Session selected successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\"json\", TuiEvent.SessionSelect.properties),\n async (c) => {\n const { sessionID } = c.req.valid(\"json\")\n await Session.get(sessionID)\n await Bus.publish(TuiEvent.SessionSelect, { sessionID })\n return c.json(true)\n },\n )\n .route(\"/control\", TuiControlRoutes),\n)\n", "export class AsyncQueue<T> implements AsyncIterable<T> {\n private queue: T[] = []\n private resolvers: ((value: T) => void)[] = []\n\n push(item: T) {\n const resolve = this.resolvers.shift()\n if (resolve) resolve(item)\n else this.queue.push(item)\n }\n\n async next(): Promise<T> {\n if (this.queue.length > 0) return this.queue.shift()!\n return new Promise((resolve) => this.resolvers.push(resolve))\n }\n\n async *[Symbol.asyncIterator]() {\n while (true) yield await this.next()\n }\n}\n\nexport async function work<T>(concurrency: number, items: T[], fn: (item: T) => Promise<void>) {\n const pending = [...items]\n await Promise.all(\n Array.from({ length: concurrency }, async () => {\n while (true) {\n const item = pending.pop()\n if (item === undefined) return\n await fn(item)\n }\n }),\n )\n}\n", "import { resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { NotFoundError } from \"../storage/db\"\n\nexport const ERRORS = {\n 400: {\n description: \"Bad request\",\n content: {\n \"application/json\": {\n schema: resolver(\n z\n .object({\n data: z.any(),\n errors: z.array(z.record(z.string(), z.any())),\n success: z.literal(false),\n })\n .meta({\n ref: \"BadRequestError\",\n }),\n ),\n },\n },\n },\n 404: {\n description: \"Not found\",\n content: {\n \"application/json\": {\n schema: resolver(NotFoundError.Schema),\n },\n },\n },\n} as const\n\nexport function errors(...codes: number[]) {\n return Object.fromEntries(codes.map((code) => [code, ERRORS[code as keyof typeof ERRORS]]))\n}\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator } from \"hono-openapi\"\nimport { resolver } from \"hono-openapi\"\nimport { QuestionID } from \"@/question/schema\"\nimport { Question } from \"../../question\"\nimport z from \"zod\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\n\nexport const QuestionRoutes = lazy(() =>\n new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"List pending questions\",\n description: \"Get all pending question requests across all sessions.\",\n operationId: \"question.list\",\n responses: {\n 200: {\n description: \"List of pending questions\",\n content: {\n \"application/json\": {\n schema: resolver(Question.Request.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const questions = await Question.list()\n return c.json(questions)\n },\n )\n .post(\n \"/:requestID/reply\",\n describeRoute({\n summary: \"Reply to question request\",\n description: \"Provide answers to a question request from the AI assistant.\",\n operationId: \"question.reply\",\n responses: {\n 200: {\n description: \"Question answered successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n requestID: QuestionID.zod,\n }),\n ),\n validator(\"json\", Question.Reply),\n async (c) => {\n const params = c.req.valid(\"param\")\n const json = c.req.valid(\"json\")\n await Question.reply({\n requestID: params.requestID,\n answers: json.answers,\n })\n return c.json(true)\n },\n )\n .post(\n \"/:requestID/reject\",\n describeRoute({\n summary: \"Reject question request\",\n description: \"Reject a question request from the AI assistant.\",\n operationId: \"question.reject\",\n responses: {\n 200: {\n description: \"Question rejected successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n requestID: QuestionID.zod,\n }),\n ),\n async (c) => {\n const params = c.req.valid(\"param\")\n await Question.reject(params.requestID)\n return c.json(true)\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { Permission } from \"@/permission\"\nimport { PermissionID } from \"@/permission/schema\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\n\nexport const PermissionRoutes = lazy(() =>\n new Hono()\n .post(\n \"/:requestID/reply\",\n describeRoute({\n summary: \"Respond to permission request\",\n description: \"Approve or deny a permission request from the AI assistant.\",\n operationId: \"permission.reply\",\n responses: {\n 200: {\n description: \"Permission processed successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n requestID: PermissionID.zod,\n }),\n ),\n validator(\"json\", z.object({ reply: Permission.Reply, message: z.string().optional() })),\n async (c) => {\n const params = c.req.valid(\"param\")\n const json = c.req.valid(\"json\")\n await Permission.reply({\n requestID: params.requestID,\n reply: json.reply,\n message: json.message,\n })\n return c.json(true)\n },\n )\n .get(\n \"/\",\n describeRoute({\n summary: \"List pending permissions\",\n description: \"Get all pending permission requests across all sessions.\",\n operationId: \"permission.list\",\n responses: {\n 200: {\n description: \"List of pending permissions\",\n content: {\n \"application/json\": {\n schema: resolver(Permission.Request.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const permissions = await Permission.list()\n return c.json(permissions)\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator } from \"hono-openapi\"\nimport { resolver } from \"hono-openapi\"\nimport { Instance } from \"../../project/instance\"\nimport { Project } from \"../../project/project\"\nimport z from \"zod\"\nimport { ProjectID } from \"../../project/schema\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\nimport { InstanceBootstrap } from \"../../project/bootstrap\"\n\nexport const ProjectRoutes = lazy(() =>\n new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"List all projects\",\n description: \"Get a list of projects that have been opened with OpenCode.\",\n operationId: \"project.list\",\n responses: {\n 200: {\n description: \"List of projects\",\n content: {\n \"application/json\": {\n schema: resolver(Project.Info.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const projects = Project.list()\n return c.json(projects)\n },\n )\n .get(\n \"/current\",\n describeRoute({\n summary: \"Get current project\",\n description: \"Retrieve the currently active project that OpenCode is working with.\",\n operationId: \"project.current\",\n responses: {\n 200: {\n description: \"Current project information\",\n content: {\n \"application/json\": {\n schema: resolver(Project.Info),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(Instance.project)\n },\n )\n .post(\n \"/git/init\",\n describeRoute({\n summary: \"Initialize git repository\",\n description: \"Create a git repository for the current project and return the refreshed project info.\",\n operationId: \"project.initGit\",\n responses: {\n 200: {\n description: \"Project information after git initialization\",\n content: {\n \"application/json\": {\n schema: resolver(Project.Info),\n },\n },\n },\n },\n }),\n async (c) => {\n const dir = Instance.directory\n const prev = Instance.project\n const next = await Project.initGit({\n directory: dir,\n project: prev,\n })\n if (next.id === prev.id && next.vcs === prev.vcs && next.worktree === prev.worktree) return c.json(next)\n await Instance.reload({\n directory: dir,\n worktree: dir,\n project: next,\n init: InstanceBootstrap,\n })\n return c.json(next)\n },\n )\n .patch(\n \"/:projectID\",\n describeRoute({\n summary: \"Update project\",\n description: \"Update project properties such as name, icon, and commands.\",\n operationId: \"project.update\",\n responses: {\n 200: {\n description: \"Updated project information\",\n content: {\n \"application/json\": {\n schema: resolver(Project.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\"param\", z.object({ projectID: ProjectID.zod })),\n validator(\"json\", Project.UpdateInput.omit({ projectID: true })),\n async (c) => {\n const projectID = c.req.valid(\"param\").projectID\n const body = c.req.valid(\"json\")\n const project = await Project.update({ ...body, projectID })\n return c.json(project)\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { stream } from \"hono/streaming\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport { SessionID, MessageID, PartID } from \"@/session/schema\"\nimport z from \"zod\"\nimport { Session } from \"../../session\"\nimport { MessageV2 } from \"../../session/message-v2\"\nimport { SessionPrompt } from \"../../session/prompt\"\nimport { SessionCompaction } from \"../../session/compaction\"\nimport { SessionRevert } from \"../../session/revert\"\nimport { SessionStatus } from \"@/session/status\"\nimport { SessionSummary } from \"@/session/summary\"\nimport { Todo } from \"../../session/todo\"\nimport { Agent } from \"../../agent/agent\"\nimport { Snapshot } from \"@/snapshot\"\nimport { Log } from \"../../util/log\"\nimport { Permission } from \"@/permission\"\nimport { PermissionID } from \"@/permission/schema\"\nimport { ModelID, ProviderID } from \"@/provider/schema\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\nimport { Bus } from \"../../bus\"\nimport { NamedError } from \"@opencode-ai/util/error\"\n\nconst log = Log.create({ service: \"server\" })\n\nexport const SessionRoutes = lazy(() =>\n new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"List sessions\",\n description: \"Get a list of all OpenCode sessions, sorted by most recently updated.\",\n operationId: \"session.list\",\n responses: {\n 200: {\n description: \"List of sessions\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info.array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n directory: z.string().optional().meta({ description: \"Filter sessions by project directory\" }),\n roots: z.coerce.boolean().optional().meta({ description: \"Only return root sessions (no parentID)\" }),\n start: z.coerce\n .number()\n .optional()\n .meta({ description: \"Filter sessions updated on or after this timestamp (milliseconds since epoch)\" }),\n search: z.string().optional().meta({ description: \"Filter sessions by title (case-insensitive)\" }),\n limit: z.coerce.number().optional().meta({ description: \"Maximum number of sessions to return\" }),\n }),\n ),\n async (c) => {\n const query = c.req.valid(\"query\")\n const sessions: Session.Info[] = []\n for await (const session of Session.list({\n directory: query.directory,\n roots: query.roots,\n start: query.start,\n search: query.search,\n limit: query.limit,\n })) {\n sessions.push(session)\n }\n return c.json(sessions)\n },\n )\n .get(\n \"/status\",\n describeRoute({\n summary: \"Get session status\",\n description: \"Retrieve the current status of all sessions, including active, idle, and completed states.\",\n operationId: \"session.status\",\n responses: {\n 200: {\n description: \"Get session status\",\n content: {\n \"application/json\": {\n schema: resolver(z.record(z.string(), SessionStatus.Info)),\n },\n },\n },\n ...errors(400),\n },\n }),\n async (c) => {\n const result = await SessionStatus.list()\n return c.json(Object.fromEntries(result))\n },\n )\n .get(\n \"/:sessionID\",\n describeRoute({\n summary: \"Get session\",\n description: \"Retrieve detailed information about a specific OpenCode session.\",\n tags: [\"Session\"],\n operationId: \"session.get\",\n responses: {\n 200: {\n description: \"Get session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: Session.get.schema,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n log.info(\"SEARCH\", { url: c.req.url })\n const session = await Session.get(sessionID)\n return c.json(session)\n },\n )\n .get(\n \"/:sessionID/children\",\n describeRoute({\n summary: \"Get session children\",\n tags: [\"Session\"],\n description: \"Retrieve all child sessions that were forked from the specified parent session.\",\n operationId: \"session.children\",\n responses: {\n 200: {\n description: \"List of children\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info.array()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: Session.children.schema,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const session = await Session.children(sessionID)\n return c.json(session)\n },\n )\n .get(\n \"/:sessionID/todo\",\n describeRoute({\n summary: \"Get session todos\",\n description: \"Retrieve the todo list associated with a specific session, showing tasks and action items.\",\n operationId: \"session.todo\",\n responses: {\n 200: {\n description: \"Todo list\",\n content: {\n \"application/json\": {\n schema: resolver(Todo.Info.array()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const todos = await Todo.get(sessionID)\n return c.json(todos)\n },\n )\n .post(\n \"/\",\n describeRoute({\n summary: \"Create session\",\n description: \"Create a new OpenCode session for interacting with AI assistants and managing conversations.\",\n operationId: \"session.create\",\n responses: {\n ...errors(400),\n 200: {\n description: \"Successfully created session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n },\n }),\n validator(\"json\", Session.create.schema.optional()),\n async (c) => {\n const body = c.req.valid(\"json\") ?? {}\n const session = await Session.create(body)\n return c.json(session)\n },\n )\n .delete(\n \"/:sessionID\",\n describeRoute({\n summary: \"Delete session\",\n description: \"Delete a session and permanently remove all associated data, including messages and history.\",\n operationId: \"session.delete\",\n responses: {\n 200: {\n description: \"Successfully deleted session\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: Session.remove.schema,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n await Session.remove(sessionID)\n return c.json(true)\n },\n )\n .patch(\n \"/:sessionID\",\n describeRoute({\n summary: \"Update session\",\n description: \"Update properties of an existing session, such as title or other metadata.\",\n operationId: \"session.update\",\n responses: {\n 200: {\n description: \"Successfully updated session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\n \"json\",\n z.object({\n title: z.string().optional(),\n time: z\n .object({\n archived: z.number().optional(),\n })\n .optional(),\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const updates = c.req.valid(\"json\")\n\n if (updates.title !== undefined) {\n await Session.setTitle({ sessionID, title: updates.title })\n }\n if (updates.time?.archived !== undefined) {\n await Session.setArchived({ sessionID, time: updates.time.archived })\n }\n\n const session = await Session.get(sessionID)\n return c.json(session)\n },\n )\n .post(\n \"/:sessionID/init\",\n describeRoute({\n summary: \"Initialize session\",\n description:\n \"Analyze the current application and create an AGENTS.md file with project-specific agent configurations.\",\n operationId: \"session.init\",\n responses: {\n 200: {\n description: \"200\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\"json\", Session.initialize.schema.omit({ sessionID: true })),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n await Session.initialize({ ...body, sessionID })\n return c.json(true)\n },\n )\n .post(\n \"/:sessionID/fork\",\n describeRoute({\n summary: \"Fork session\",\n description: \"Create a new session by forking an existing session at a specific message point.\",\n operationId: \"session.fork\",\n responses: {\n 200: {\n description: \"200\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: Session.fork.schema.shape.sessionID,\n }),\n ),\n validator(\"json\", Session.fork.schema.omit({ sessionID: true })),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n const result = await Session.fork({ ...body, sessionID })\n return c.json(result)\n },\n )\n .post(\n \"/:sessionID/abort\",\n describeRoute({\n summary: \"Abort session\",\n description: \"Abort an active session and stop any ongoing AI processing or command execution.\",\n operationId: \"session.abort\",\n responses: {\n 200: {\n description: \"Aborted session\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n async (c) => {\n await SessionPrompt.cancel(c.req.valid(\"param\").sessionID)\n return c.json(true)\n },\n )\n .post(\n \"/:sessionID/share\",\n describeRoute({\n summary: \"Share session\",\n description: \"Create a shareable link for a session, allowing others to view the conversation.\",\n operationId: \"session.share\",\n responses: {\n 200: {\n description: \"Successfully shared session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n await Session.share(sessionID)\n const session = await Session.get(sessionID)\n return c.json(session)\n },\n )\n .get(\n \"/:sessionID/diff\",\n describeRoute({\n summary: \"Get message diff\",\n description: \"Get the file changes (diff) that resulted from a specific user message in the session.\",\n operationId: \"session.diff\",\n responses: {\n 200: {\n description: \"Successfully retrieved diff\",\n content: {\n \"application/json\": {\n schema: resolver(Snapshot.FileDiff.array()),\n },\n },\n },\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionSummary.DiffInput.shape.sessionID,\n }),\n ),\n validator(\n \"query\",\n z.object({\n messageID: SessionSummary.DiffInput.shape.messageID,\n }),\n ),\n async (c) => {\n const query = c.req.valid(\"query\")\n const params = c.req.valid(\"param\")\n const result = await SessionSummary.diff({\n sessionID: params.sessionID,\n messageID: query.messageID,\n })\n return c.json(result)\n },\n )\n .delete(\n \"/:sessionID/share\",\n describeRoute({\n summary: \"Unshare session\",\n description: \"Remove the shareable link for a session, making it private again.\",\n operationId: \"session.unshare\",\n responses: {\n 200: {\n description: \"Successfully unshared session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: Session.unshare.schema,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n await Session.unshare(sessionID)\n const session = await Session.get(sessionID)\n return c.json(session)\n },\n )\n .post(\n \"/:sessionID/summarize\",\n describeRoute({\n summary: \"Summarize session\",\n description: \"Generate a concise summary of the session using AI compaction to preserve key information.\",\n operationId: \"session.summarize\",\n responses: {\n 200: {\n description: \"Summarized session\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\n \"json\",\n z.object({\n providerID: ProviderID.zod,\n modelID: ModelID.zod,\n auto: z.boolean().optional().default(false),\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n const session = await Session.get(sessionID)\n await SessionRevert.cleanup(session)\n const msgs = await Session.messages({ sessionID })\n let currentAgent = await Agent.defaultAgent()\n for (let i = msgs.length - 1; i >= 0; i--) {\n const info = msgs[i].info\n if (info.role === \"user\") {\n currentAgent = info.agent || (await Agent.defaultAgent())\n break\n }\n }\n await SessionCompaction.create({\n sessionID,\n agent: currentAgent,\n model: {\n providerID: body.providerID,\n modelID: body.modelID,\n },\n auto: body.auto,\n })\n await SessionPrompt.loop({ sessionID })\n return c.json(true)\n },\n )\n .get(\n \"/:sessionID/message\",\n describeRoute({\n summary: \"Get session messages\",\n description: \"Retrieve all messages in a session, including user prompts and AI responses.\",\n operationId: \"session.messages\",\n responses: {\n 200: {\n description: \"List of messages\",\n content: {\n \"application/json\": {\n schema: resolver(MessageV2.WithParts.array()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\n \"query\",\n z\n .object({\n limit: z.coerce\n .number()\n .int()\n .min(0)\n .optional()\n .meta({ description: \"Maximum number of messages to return\" }),\n before: z\n .string()\n .optional()\n .meta({ description: \"Opaque cursor for loading older messages\" })\n .refine(\n (value) => {\n if (!value) return true\n try {\n MessageV2.cursor.decode(value)\n return true\n } catch {\n return false\n }\n },\n { message: \"Invalid cursor\" },\n ),\n })\n .refine((value) => !value.before || value.limit !== undefined, {\n message: \"before requires limit\",\n path: [\"before\"],\n }),\n ),\n async (c) => {\n const query = c.req.valid(\"query\")\n const sessionID = c.req.valid(\"param\").sessionID\n if (query.limit === undefined) {\n await Session.get(sessionID)\n const messages = await Session.messages({ sessionID })\n return c.json(messages)\n }\n\n if (query.limit === 0) {\n await Session.get(sessionID)\n const messages = await Session.messages({ sessionID })\n return c.json(messages)\n }\n\n const page = await MessageV2.page({\n sessionID,\n limit: query.limit,\n before: query.before,\n })\n if (page.cursor) {\n const url = new URL(c.req.url)\n url.searchParams.set(\"limit\", query.limit.toString())\n url.searchParams.set(\"before\", page.cursor)\n c.header(\"Access-Control-Expose-Headers\", \"Link, X-Next-Cursor\")\n c.header(\"Link\", `<${url.toString()}>; rel=\\\"next\\\"`)\n c.header(\"X-Next-Cursor\", page.cursor)\n }\n return c.json(page.items)\n },\n )\n .get(\n \"/:sessionID/message/:messageID\",\n describeRoute({\n summary: \"Get message\",\n description: \"Retrieve a specific message from a session by its message ID.\",\n operationId: \"session.message\",\n responses: {\n 200: {\n description: \"Message\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n info: MessageV2.Info,\n parts: MessageV2.Part.array(),\n }),\n ),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n messageID: MessageID.zod,\n }),\n ),\n async (c) => {\n const params = c.req.valid(\"param\")\n const message = await MessageV2.get({\n sessionID: params.sessionID,\n messageID: params.messageID,\n })\n return c.json(message)\n },\n )\n .delete(\n \"/:sessionID/message/:messageID\",\n describeRoute({\n summary: \"Delete message\",\n description:\n \"Permanently delete a specific message (and all of its parts) from a session. This does not revert any file changes that may have been made while processing the message.\",\n operationId: \"session.deleteMessage\",\n responses: {\n 200: {\n description: \"Successfully deleted message\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n messageID: MessageID.zod,\n }),\n ),\n async (c) => {\n const params = c.req.valid(\"param\")\n await SessionPrompt.assertNotBusy(params.sessionID)\n await Session.removeMessage({\n sessionID: params.sessionID,\n messageID: params.messageID,\n })\n return c.json(true)\n },\n )\n .delete(\n \"/:sessionID/message/:messageID/part/:partID\",\n describeRoute({\n description: \"Delete a part from a message\",\n operationId: \"part.delete\",\n responses: {\n 200: {\n description: \"Successfully deleted part\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n messageID: MessageID.zod,\n partID: PartID.zod,\n }),\n ),\n async (c) => {\n const params = c.req.valid(\"param\")\n await Session.removePart({\n sessionID: params.sessionID,\n messageID: params.messageID,\n partID: params.partID,\n })\n return c.json(true)\n },\n )\n .patch(\n \"/:sessionID/message/:messageID/part/:partID\",\n describeRoute({\n description: \"Update a part in a message\",\n operationId: \"part.update\",\n responses: {\n 200: {\n description: \"Successfully updated part\",\n content: {\n \"application/json\": {\n schema: resolver(MessageV2.Part),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n messageID: MessageID.zod,\n partID: PartID.zod,\n }),\n ),\n validator(\"json\", MessageV2.Part),\n async (c) => {\n const params = c.req.valid(\"param\")\n const body = c.req.valid(\"json\")\n if (body.id !== params.partID || body.messageID !== params.messageID || body.sessionID !== params.sessionID) {\n throw new Error(\n `Part mismatch: body.id='${body.id}' vs partID='${params.partID}', body.messageID='${body.messageID}' vs messageID='${params.messageID}', body.sessionID='${body.sessionID}' vs sessionID='${params.sessionID}'`,\n )\n }\n const part = await Session.updatePart(body)\n return c.json(part)\n },\n )\n .post(\n \"/:sessionID/message\",\n describeRoute({\n summary: \"Send message\",\n description: \"Create and send a new message to a session, streaming the AI response.\",\n operationId: \"session.prompt\",\n responses: {\n 200: {\n description: \"Created message\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n info: MessageV2.Assistant,\n parts: MessageV2.Part.array(),\n }),\n ),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\"json\", SessionPrompt.PromptInput.omit({ sessionID: true })),\n async (c) => {\n c.status(200)\n c.header(\"Content-Type\", \"application/json\")\n return stream(c, async (stream) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n const msg = await SessionPrompt.prompt({ ...body, sessionID })\n stream.write(JSON.stringify(msg))\n })\n },\n )\n .post(\n \"/:sessionID/prompt_async\",\n describeRoute({\n summary: \"Send async message\",\n description:\n \"Create and send a new message to a session asynchronously, starting the session if needed and returning immediately.\",\n operationId: \"session.prompt_async\",\n responses: {\n 202: {\n description: \"Prompt accepted\",\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\"json\", SessionPrompt.PromptInput.omit({ sessionID: true })),\n async (c) => {\n c.status(202)\n return stream(c, async () => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n SessionPrompt.prompt({ ...body, sessionID }).catch((err) => {\n log.error(\"prompt_async failed\", { sessionID, error: err })\n Bus.publish(Session.Event.Error, {\n sessionID,\n error: new NamedError.Unknown({ message: err instanceof Error ? err.message : String(err) }).toObject(),\n })\n })\n })\n },\n )\n .post(\n \"/:sessionID/command\",\n describeRoute({\n summary: \"Send command\",\n description: \"Send a new command to a session for execution by the AI assistant.\",\n operationId: \"session.command\",\n responses: {\n 200: {\n description: \"Created message\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n info: MessageV2.Assistant,\n parts: MessageV2.Part.array(),\n }),\n ),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\"json\", SessionPrompt.CommandInput.omit({ sessionID: true })),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n const msg = await SessionPrompt.command({ ...body, sessionID })\n return c.json(msg)\n },\n )\n .post(\n \"/:sessionID/shell\",\n describeRoute({\n summary: \"Run shell command\",\n description: \"Execute a shell command within the session context and return the AI's response.\",\n operationId: \"session.shell\",\n responses: {\n 200: {\n description: \"Created message\",\n content: {\n \"application/json\": {\n schema: resolver(MessageV2.Assistant),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\"json\", SessionPrompt.ShellInput.omit({ sessionID: true })),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const body = c.req.valid(\"json\")\n const msg = await SessionPrompt.shell({ ...body, sessionID })\n return c.json(msg)\n },\n )\n .post(\n \"/:sessionID/revert\",\n describeRoute({\n summary: \"Revert message\",\n description: \"Revert a specific message in a session, undoing its effects and restoring the previous state.\",\n operationId: \"session.revert\",\n responses: {\n 200: {\n description: \"Updated session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n validator(\"json\", SessionRevert.RevertInput.omit({ sessionID: true })),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n log.info(\"revert\", c.req.valid(\"json\"))\n const session = await SessionRevert.revert({\n sessionID,\n ...c.req.valid(\"json\"),\n })\n return c.json(session)\n },\n )\n .post(\n \"/:sessionID/unrevert\",\n describeRoute({\n summary: \"Restore reverted messages\",\n description: \"Restore all previously reverted messages in a session.\",\n operationId: \"session.unrevert\",\n responses: {\n 200: {\n description: \"Updated session\",\n content: {\n \"application/json\": {\n schema: resolver(Session.Info),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n }),\n ),\n async (c) => {\n const sessionID = c.req.valid(\"param\").sessionID\n const session = await SessionRevert.unrevert({ sessionID })\n return c.json(session)\n },\n )\n .post(\n \"/:sessionID/permissions/:permissionID\",\n describeRoute({\n summary: \"Respond to permission\",\n deprecated: true,\n description: \"Approve or deny a permission request from the AI assistant.\",\n operationId: \"permission.respond\",\n responses: {\n 200: {\n description: \"Permission processed successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"param\",\n z.object({\n sessionID: SessionID.zod,\n permissionID: PermissionID.zod,\n }),\n ),\n validator(\"json\", z.object({ response: Permission.Reply })),\n async (c) => {\n const params = c.req.valid(\"param\")\n Permission.reply({\n requestID: params.permissionID,\n reply: c.req.valid(\"json\").response,\n })\n return c.json(true)\n },\n ),\n)\n", "import { Hono, type MiddlewareHandler } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport type { UpgradeWebSocket } from \"hono/ws\"\nimport z from \"zod\"\nimport { Pty } from \"@/pty\"\nimport { PtyID } from \"@/pty/schema\"\nimport { NotFoundError } from \"../../storage/db\"\nimport { errors } from \"../error\"\n\nexport function PtyRoutes(upgradeWebSocket: UpgradeWebSocket) {\n return new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"List PTY sessions\",\n description: \"Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode.\",\n operationId: \"pty.list\",\n responses: {\n 200: {\n description: \"List of sessions\",\n content: {\n \"application/json\": {\n schema: resolver(Pty.Info.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await Pty.list())\n },\n )\n .post(\n \"/\",\n describeRoute({\n summary: \"Create PTY session\",\n description: \"Create a new pseudo-terminal (PTY) session for running shell commands and processes.\",\n operationId: \"pty.create\",\n responses: {\n 200: {\n description: \"Created session\",\n content: {\n \"application/json\": {\n schema: resolver(Pty.Info),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", Pty.CreateInput),\n async (c) => {\n const info = await Pty.create(c.req.valid(\"json\"))\n return c.json(info)\n },\n )\n .get(\n \"/:ptyID\",\n describeRoute({\n summary: \"Get PTY session\",\n description: \"Retrieve detailed information about a specific pseudo-terminal (PTY) session.\",\n operationId: \"pty.get\",\n responses: {\n 200: {\n description: \"Session info\",\n content: {\n \"application/json\": {\n schema: resolver(Pty.Info),\n },\n },\n },\n ...errors(404),\n },\n }),\n validator(\"param\", z.object({ ptyID: PtyID.zod })),\n async (c) => {\n const info = await Pty.get(c.req.valid(\"param\").ptyID)\n if (!info) {\n throw new NotFoundError({ message: \"Session not found\" })\n }\n return c.json(info)\n },\n )\n .put(\n \"/:ptyID\",\n describeRoute({\n summary: \"Update PTY session\",\n description: \"Update properties of an existing pseudo-terminal (PTY) session.\",\n operationId: \"pty.update\",\n responses: {\n 200: {\n description: \"Updated session\",\n content: {\n \"application/json\": {\n schema: resolver(Pty.Info),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"param\", z.object({ ptyID: PtyID.zod })),\n validator(\"json\", Pty.UpdateInput),\n async (c) => {\n const info = await Pty.update(c.req.valid(\"param\").ptyID, c.req.valid(\"json\"))\n return c.json(info)\n },\n )\n .delete(\n \"/:ptyID\",\n describeRoute({\n summary: \"Remove PTY session\",\n description: \"Remove and terminate a specific pseudo-terminal (PTY) session.\",\n operationId: \"pty.remove\",\n responses: {\n 200: {\n description: \"Session removed\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(404),\n },\n }),\n validator(\"param\", z.object({ ptyID: PtyID.zod })),\n async (c) => {\n await Pty.remove(c.req.valid(\"param\").ptyID)\n return c.json(true)\n },\n )\n .get(\n \"/:ptyID/connect\",\n describeRoute({\n summary: \"Connect to PTY session\",\n description: \"Establish a WebSocket connection to interact with a pseudo-terminal (PTY) session in real-time.\",\n operationId: \"pty.connect\",\n responses: {\n 200: {\n description: \"Connected session\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(404),\n },\n }),\n validator(\"param\", z.object({ ptyID: PtyID.zod })),\n upgradeWebSocket(async (c) => {\n const id = PtyID.zod.parse(c.req.param(\"ptyID\"))\n const cursor = (() => {\n const value = c.req.query(\"cursor\")\n if (!value) return\n const parsed = Number(value)\n if (!Number.isSafeInteger(parsed) || parsed < -1) return\n return parsed\n })()\n let handler: Awaited<ReturnType<typeof Pty.connect>>\n if (!(await Pty.get(id))) throw new Error(\"Session not found\")\n\n type Socket = {\n readyState: number\n send: (data: string | Uint8Array | ArrayBuffer) => void\n close: (code?: number, reason?: string) => void\n }\n\n const isSocket = (value: unknown): value is Socket => {\n if (!value || typeof value !== \"object\") return false\n if (!(\"readyState\" in value)) return false\n if (!(\"send\" in value) || typeof (value as { send?: unknown }).send !== \"function\") return false\n if (!(\"close\" in value) || typeof (value as { close?: unknown }).close !== \"function\") return false\n return typeof (value as { readyState?: unknown }).readyState === \"number\"\n }\n\n const pending: string[] = []\n let ready = false\n\n return {\n async onOpen(_event, ws) {\n const socket = ws.raw\n if (!isSocket(socket)) {\n ws.close()\n return\n }\n handler = await Pty.connect(id, socket, cursor)\n ready = true\n for (const msg of pending) handler?.onMessage(msg)\n pending.length = 0\n },\n onMessage(event) {\n if (typeof event.data !== \"string\") return\n if (!ready) {\n pending.push(event.data)\n return\n }\n handler?.onMessage(event.data)\n },\n onClose() {\n handler?.onClose()\n },\n onError() {\n handler?.onClose()\n },\n }\n }),\n )\n}\n", "import { BusEvent } from \"@/bus/bus-event\"\nimport { Bus } from \"@/bus\"\nimport { InstanceState } from \"@/effect/instance-state\"\nimport { makeRuntime } from \"@/effect/run-service\"\nimport { Instance } from \"@/project/instance\"\nimport type { Proc } from \"#pty\"\nimport z from \"zod\"\nimport { Log } from \"../util/log\"\nimport { lazy } from \"@opencode-ai/util/lazy\"\nimport { Shell } from \"@/shell/shell\"\nimport { Plugin } from \"@/plugin\"\nimport { PtyID } from \"./schema\"\nimport { Effect, Layer, ServiceMap } from \"effect\"\n\nexport namespace Pty {\n const log = Log.create({ service: \"pty\" })\n\n const BUFFER_LIMIT = 1024 * 1024 * 2\n const BUFFER_CHUNK = 64 * 1024\n const encoder = new TextEncoder()\n\n type Socket = {\n readyState: number\n data?: unknown\n send: (data: string | Uint8Array | ArrayBuffer) => void\n close: (code?: number, reason?: string) => void\n }\n\n const sock = (ws: Socket) => (ws.data && typeof ws.data === \"object\" ? ws.data : ws)\n\n type Active = {\n info: Info\n process: Proc\n buffer: string\n bufferCursor: number\n cursor: number\n subscribers: Map<unknown, Socket>\n }\n\n type State = {\n dir: string\n sessions: Map<PtyID, Active>\n }\n\n // WebSocket control frame: 0x00 + UTF-8 JSON.\n const meta = (cursor: number) => {\n const json = JSON.stringify({ cursor })\n const bytes = encoder.encode(json)\n const out = new Uint8Array(bytes.length + 1)\n out[0] = 0\n out.set(bytes, 1)\n return out\n }\n\n const pty = lazy(() => import(\"#pty\"))\n\n export const Info = z\n .object({\n id: PtyID.zod,\n title: z.string(),\n command: z.string(),\n args: z.array(z.string()),\n cwd: z.string(),\n status: z.enum([\"running\", \"exited\"]),\n pid: z.number(),\n })\n .meta({ ref: \"Pty\" })\n\n export type Info = z.infer<typeof Info>\n\n export const CreateInput = z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n cwd: z.string().optional(),\n title: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n })\n\n export type CreateInput = z.infer<typeof CreateInput>\n\n export const UpdateInput = z.object({\n title: z.string().optional(),\n size: z\n .object({\n rows: z.number(),\n cols: z.number(),\n })\n .optional(),\n })\n\n export type UpdateInput = z.infer<typeof UpdateInput>\n\n export const Event = {\n Created: BusEvent.define(\"pty.created\", z.object({ info: Info })),\n Updated: BusEvent.define(\"pty.updated\", z.object({ info: Info })),\n Exited: BusEvent.define(\"pty.exited\", z.object({ id: PtyID.zod, exitCode: z.number() })),\n Deleted: BusEvent.define(\"pty.deleted\", z.object({ id: PtyID.zod })),\n }\n\n export interface Interface {\n readonly list: () => Effect.Effect<Info[]>\n readonly get: (id: PtyID) => Effect.Effect<Info | undefined>\n readonly create: (input: CreateInput) => Effect.Effect<Info>\n readonly update: (id: PtyID, input: UpdateInput) => Effect.Effect<Info | undefined>\n readonly remove: (id: PtyID) => Effect.Effect<void>\n readonly resize: (id: PtyID, cols: number, rows: number) => Effect.Effect<void>\n readonly write: (id: PtyID, data: string) => Effect.Effect<void>\n readonly connect: (\n id: PtyID,\n ws: Socket,\n cursor?: number,\n ) => Effect.Effect<{ onMessage: (message: string | ArrayBuffer) => void; onClose: () => void } | undefined>\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/Pty\") {}\n\n export const layer = Layer.effect(\n Service,\n Effect.gen(function* () {\n const bus = yield* Bus.Service\n const plugin = yield* Plugin.Service\n function teardown(session: Active) {\n try {\n session.process.kill()\n } catch {}\n for (const [sub, ws] of session.subscribers.entries()) {\n try {\n if (sock(ws) === sub) ws.close()\n } catch {}\n }\n session.subscribers.clear()\n }\n\n const state = yield* InstanceState.make<State>(\n Effect.fn(\"Pty.state\")(function* (ctx) {\n const state = {\n dir: ctx.directory,\n sessions: new Map<PtyID, Active>(),\n }\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n for (const session of state.sessions.values()) {\n teardown(session)\n }\n state.sessions.clear()\n }),\n )\n\n return state\n }),\n )\n\n const remove = Effect.fn(\"Pty.remove\")(function* (id: PtyID) {\n const s = yield* InstanceState.get(state)\n const session = s.sessions.get(id)\n if (!session) return\n s.sessions.delete(id)\n log.info(\"removing session\", { id })\n teardown(session)\n yield* bus.publish(Event.Deleted, { id: session.info.id })\n })\n\n const list = Effect.fn(\"Pty.list\")(function* () {\n const s = yield* InstanceState.get(state)\n return Array.from(s.sessions.values()).map((session) => session.info)\n })\n\n const get = Effect.fn(\"Pty.get\")(function* (id: PtyID) {\n const s = yield* InstanceState.get(state)\n return s.sessions.get(id)?.info\n })\n\n const create = Effect.fn(\"Pty.create\")(function* (input: CreateInput) {\n const s = yield* InstanceState.get(state)\n const id = PtyID.ascending()\n const command = input.command || Shell.preferred()\n const args = input.args || []\n if (Shell.login(command)) {\n args.push(\"-l\")\n }\n\n const cwd = input.cwd || s.dir\n const shell = yield* plugin.trigger(\"shell.env\", { cwd }, { env: {} })\n const env = {\n ...process.env,\n ...input.env,\n ...shell.env,\n TERM: \"xterm-256color\",\n OPENCODE_TERMINAL: \"1\",\n } as Record<string, string>\n\n if (process.platform === \"win32\") {\n env.LC_ALL = \"C.UTF-8\"\n env.LC_CTYPE = \"C.UTF-8\"\n env.LANG = \"C.UTF-8\"\n }\n log.info(\"creating session\", { id, cmd: command, args, cwd })\n\n const { spawn } = yield* Effect.promise(() => pty())\n const proc = yield* Effect.sync(() =>\n spawn(command, args, {\n name: \"xterm-256color\",\n cwd,\n env,\n }),\n )\n\n const info = {\n id,\n title: input.title || `Terminal ${id.slice(-4)}`,\n command,\n args,\n cwd,\n status: \"running\",\n pid: proc.pid,\n } as const\n const session: Active = {\n info,\n process: proc,\n buffer: \"\",\n bufferCursor: 0,\n cursor: 0,\n subscribers: new Map(),\n }\n s.sessions.set(id, session)\n proc.onData(\n Instance.bind((chunk) => {\n session.cursor += chunk.length\n\n for (const [key, ws] of session.subscribers.entries()) {\n if (ws.readyState !== 1) {\n session.subscribers.delete(key)\n continue\n }\n if (sock(ws) !== key) {\n session.subscribers.delete(key)\n continue\n }\n try {\n ws.send(chunk)\n } catch {\n session.subscribers.delete(key)\n }\n }\n\n session.buffer += chunk\n if (session.buffer.length <= BUFFER_LIMIT) return\n const excess = session.buffer.length - BUFFER_LIMIT\n session.buffer = session.buffer.slice(excess)\n session.bufferCursor += excess\n }),\n )\n proc.onExit(\n Instance.bind(({ exitCode }) => {\n if (session.info.status === \"exited\") return\n log.info(\"session exited\", { id, exitCode })\n session.info.status = \"exited\"\n Effect.runFork(bus.publish(Event.Exited, { id, exitCode }))\n Effect.runFork(remove(id))\n }),\n )\n yield* bus.publish(Event.Created, { info })\n return info\n })\n\n const update = Effect.fn(\"Pty.update\")(function* (id: PtyID, input: UpdateInput) {\n const s = yield* InstanceState.get(state)\n const session = s.sessions.get(id)\n if (!session) return\n if (input.title) {\n session.info.title = input.title\n }\n if (input.size) {\n session.process.resize(input.size.cols, input.size.rows)\n }\n yield* bus.publish(Event.Updated, { info: session.info })\n return session.info\n })\n\n const resize = Effect.fn(\"Pty.resize\")(function* (id: PtyID, cols: number, rows: number) {\n const s = yield* InstanceState.get(state)\n const session = s.sessions.get(id)\n if (session && session.info.status === \"running\") {\n session.process.resize(cols, rows)\n }\n })\n\n const write = Effect.fn(\"Pty.write\")(function* (id: PtyID, data: string) {\n const s = yield* InstanceState.get(state)\n const session = s.sessions.get(id)\n if (session && session.info.status === \"running\") {\n session.process.write(data)\n }\n })\n\n const connect = Effect.fn(\"Pty.connect\")(function* (id: PtyID, ws: Socket, cursor?: number) {\n const s = yield* InstanceState.get(state)\n const session = s.sessions.get(id)\n if (!session) {\n ws.close()\n return\n }\n log.info(\"client connected to session\", { id })\n\n const sub = sock(ws)\n session.subscribers.delete(sub)\n session.subscribers.set(sub, ws)\n\n const cleanup = () => {\n session.subscribers.delete(sub)\n }\n\n const start = session.bufferCursor\n const end = session.cursor\n const from =\n cursor === -1 ? end : typeof cursor === \"number\" && Number.isSafeInteger(cursor) ? Math.max(0, cursor) : 0\n\n const data = (() => {\n if (!session.buffer) return \"\"\n if (from >= end) return \"\"\n const offset = Math.max(0, from - start)\n if (offset >= session.buffer.length) return \"\"\n return session.buffer.slice(offset)\n })()\n\n if (data) {\n try {\n for (let i = 0; i < data.length; i += BUFFER_CHUNK) {\n ws.send(data.slice(i, i + BUFFER_CHUNK))\n }\n } catch {\n cleanup()\n ws.close()\n return\n }\n }\n\n try {\n ws.send(meta(end))\n } catch {\n cleanup()\n ws.close()\n return\n }\n\n return {\n onMessage: (message: string | ArrayBuffer) => {\n session.process.write(String(message))\n },\n onClose: () => {\n log.info(\"client disconnected from session\", { id })\n cleanup()\n },\n }\n })\n\n return Service.of({ list, get, create, update, remove, resize, write, connect })\n }),\n )\n\n const defaultLayer = layer.pipe(Layer.provide(Bus.layer), Layer.provide(Plugin.defaultLayer))\n\n const { runPromise } = makeRuntime(Service, defaultLayer)\n\n export async function list() {\n return runPromise((svc) => svc.list())\n }\n\n export async function get(id: PtyID) {\n return runPromise((svc) => svc.get(id))\n }\n\n export async function resize(id: PtyID, cols: number, rows: number) {\n return runPromise((svc) => svc.resize(id, cols, rows))\n }\n\n export async function write(id: PtyID, data: string) {\n return runPromise((svc) => svc.write(id, data))\n }\n\n export async function connect(id: PtyID, ws: Socket, cursor?: number) {\n return runPromise((svc) => svc.connect(id, ws, cursor))\n }\n\n export async function create(input: CreateInput) {\n return runPromise((svc) => svc.create(input))\n }\n\n export async function update(id: PtyID, input: UpdateInput) {\n return runPromise((svc) => svc.update(id, input))\n }\n\n export async function remove(id: PtyID) {\n return runPromise((svc) => svc.remove(id))\n }\n}\n", "export function lazy<T>(fn: () => T) {\n let value: T | undefined\n let loaded = false\n\n return (): T => {\n if (loaded) return value as T\n loaded = true\n value = fn()\n return value as T\n }\n}\n", "import { Schema } from \"effect\"\nimport z from \"zod\"\n\nimport { Identifier } from \"@/id/id\"\nimport { withStatics } from \"@/util/schema\"\n\nconst ptyIdSchema = Schema.String.pipe(Schema.brand(\"PtyID\"))\n\nexport type PtyID = typeof ptyIdSchema.Type\n\nexport const PtyID = ptyIdSchema.pipe(\n withStatics((schema: typeof ptyIdSchema) => ({\n make: (id: string) => schema.makeUnsafe(id),\n ascending: (id?: string) => schema.makeUnsafe(Identifier.ascending(\"pty\", id)),\n zod: Identifier.schema(\"pty\").pipe(z.custom<PtyID>()),\n })),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { MCP } from \"../../mcp\"\nimport { Config } from \"../../config/config\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\n\nexport const McpRoutes = lazy(() =>\n new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"Get MCP status\",\n description: \"Get the status of all Model Context Protocol (MCP) servers.\",\n operationId: \"mcp.status\",\n responses: {\n 200: {\n description: \"MCP server status\",\n content: {\n \"application/json\": {\n schema: resolver(z.record(z.string(), MCP.Status)),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await MCP.status())\n },\n )\n .post(\n \"/\",\n describeRoute({\n summary: \"Add MCP server\",\n description: \"Dynamically add a new Model Context Protocol (MCP) server to the system.\",\n operationId: \"mcp.add\",\n responses: {\n 200: {\n description: \"MCP server added successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.record(z.string(), MCP.Status)),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"json\",\n z.object({\n name: z.string(),\n config: Config.Mcp,\n }),\n ),\n async (c) => {\n const { name, config } = c.req.valid(\"json\")\n const result = await MCP.add(name, config)\n return c.json(result.status)\n },\n )\n .post(\n \"/:name/auth\",\n describeRoute({\n summary: \"Start MCP OAuth\",\n description: \"Start OAuth authentication flow for a Model Context Protocol (MCP) server.\",\n operationId: \"mcp.auth.start\",\n responses: {\n 200: {\n description: \"OAuth flow started\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n authorizationUrl: z.string().describe(\"URL to open in browser for authorization\"),\n }),\n ),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n async (c) => {\n const name = c.req.param(\"name\")\n const supportsOAuth = await MCP.supportsOAuth(name)\n if (!supportsOAuth) {\n return c.json({ error: `MCP server ${name} does not support OAuth` }, 400)\n }\n const result = await MCP.startAuth(name)\n return c.json(result)\n },\n )\n .post(\n \"/:name/auth/callback\",\n describeRoute({\n summary: \"Complete MCP OAuth\",\n description:\n \"Complete OAuth authentication for a Model Context Protocol (MCP) server using the authorization code.\",\n operationId: \"mcp.auth.callback\",\n responses: {\n 200: {\n description: \"OAuth authentication completed\",\n content: {\n \"application/json\": {\n schema: resolver(MCP.Status),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n validator(\n \"json\",\n z.object({\n code: z.string().describe(\"Authorization code from OAuth callback\"),\n }),\n ),\n async (c) => {\n const name = c.req.param(\"name\")\n const { code } = c.req.valid(\"json\")\n const status = await MCP.finishAuth(name, code)\n return c.json(status)\n },\n )\n .post(\n \"/:name/auth/authenticate\",\n describeRoute({\n summary: \"Authenticate MCP OAuth\",\n description: \"Start OAuth flow and wait for callback (opens browser)\",\n operationId: \"mcp.auth.authenticate\",\n responses: {\n 200: {\n description: \"OAuth authentication completed\",\n content: {\n \"application/json\": {\n schema: resolver(MCP.Status),\n },\n },\n },\n ...errors(400, 404),\n },\n }),\n async (c) => {\n const name = c.req.param(\"name\")\n const supportsOAuth = await MCP.supportsOAuth(name)\n if (!supportsOAuth) {\n return c.json({ error: `MCP server ${name} does not support OAuth` }, 400)\n }\n const status = await MCP.authenticate(name)\n return c.json(status)\n },\n )\n .delete(\n \"/:name/auth\",\n describeRoute({\n summary: \"Remove MCP OAuth\",\n description: \"Remove OAuth credentials for an MCP server\",\n operationId: \"mcp.auth.remove\",\n responses: {\n 200: {\n description: \"OAuth credentials removed\",\n content: {\n \"application/json\": {\n schema: resolver(z.object({ success: z.literal(true) })),\n },\n },\n },\n ...errors(404),\n },\n }),\n async (c) => {\n const name = c.req.param(\"name\")\n await MCP.removeAuth(name)\n return c.json({ success: true as const })\n },\n )\n .post(\n \"/:name/connect\",\n describeRoute({\n description: \"Connect an MCP server\",\n operationId: \"mcp.connect\",\n responses: {\n 200: {\n description: \"MCP server connected successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n validator(\"param\", z.object({ name: z.string() })),\n async (c) => {\n const { name } = c.req.valid(\"param\")\n await MCP.connect(name)\n return c.json(true)\n },\n )\n .post(\n \"/:name/disconnect\",\n describeRoute({\n description: \"Disconnect an MCP server\",\n operationId: \"mcp.disconnect\",\n responses: {\n 200: {\n description: \"MCP server disconnected successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n validator(\"param\", z.object({ name: z.string() })),\n async (c) => {\n const { name } = c.req.valid(\"param\")\n await MCP.disconnect(name)\n return c.json(true)\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { File } from \"../../file\"\nimport { Ripgrep } from \"../../file/ripgrep\"\nimport { LSP } from \"../../lsp\"\nimport { Instance } from \"../../project/instance\"\nimport { lazy } from \"../../util/lazy\"\n\nexport const FileRoutes = lazy(() =>\n new Hono()\n .get(\n \"/find\",\n describeRoute({\n summary: \"Find text\",\n description: \"Search for text patterns across files in the project using ripgrep.\",\n operationId: \"find.text\",\n responses: {\n 200: {\n description: \"Matches\",\n content: {\n \"application/json\": {\n schema: resolver(Ripgrep.Match.shape.data.array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n pattern: z.string(),\n }),\n ),\n async (c) => {\n const pattern = c.req.valid(\"query\").pattern\n const result = await Ripgrep.search({\n cwd: Instance.directory,\n pattern,\n limit: 10,\n })\n return c.json(result)\n },\n )\n .get(\n \"/find/file\",\n describeRoute({\n summary: \"Find files\",\n description: \"Search for files or directories by name or pattern in the project directory.\",\n operationId: \"find.files\",\n responses: {\n 200: {\n description: \"File paths\",\n content: {\n \"application/json\": {\n schema: resolver(z.string().array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n query: z.string(),\n dirs: z.enum([\"true\", \"false\"]).optional(),\n type: z.enum([\"file\", \"directory\"]).optional(),\n limit: z.coerce.number().int().min(1).max(200).optional(),\n }),\n ),\n async (c) => {\n const query = c.req.valid(\"query\").query\n const dirs = c.req.valid(\"query\").dirs\n const type = c.req.valid(\"query\").type\n const limit = c.req.valid(\"query\").limit\n const results = await File.search({\n query,\n limit: limit ?? 10,\n dirs: dirs !== \"false\",\n type,\n })\n return c.json(results)\n },\n )\n .get(\n \"/find/symbol\",\n describeRoute({\n summary: \"Find symbols\",\n description: \"Search for workspace symbols like functions, classes, and variables using LSP.\",\n operationId: \"find.symbols\",\n responses: {\n 200: {\n description: \"Symbols\",\n content: {\n \"application/json\": {\n schema: resolver(LSP.Symbol.array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n query: z.string(),\n }),\n ),\n async (c) => {\n /*\n const query = c.req.valid(\"query\").query\n const result = await LSP.workspaceSymbol(query)\n return c.json(result)\n */\n return c.json([])\n },\n )\n .get(\n \"/file\",\n describeRoute({\n summary: \"List files\",\n description: \"List files and directories in a specified path.\",\n operationId: \"file.list\",\n responses: {\n 200: {\n description: \"Files and directories\",\n content: {\n \"application/json\": {\n schema: resolver(File.Node.array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n path: z.string(),\n }),\n ),\n async (c) => {\n const path = c.req.valid(\"query\").path\n const content = await File.list(path)\n return c.json(content)\n },\n )\n .get(\n \"/file/content\",\n describeRoute({\n summary: \"Read file\",\n description: \"Read the content of a specified file.\",\n operationId: \"file.read\",\n responses: {\n 200: {\n description: \"File content\",\n content: {\n \"application/json\": {\n schema: resolver(File.Content),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n path: z.string(),\n }),\n ),\n async (c) => {\n const path = c.req.valid(\"query\").path\n const content = await File.read(path)\n return c.json(content)\n },\n )\n .get(\n \"/file/status\",\n describeRoute({\n summary: \"Get file status\",\n description: \"Get the git status of all files in the project.\",\n operationId: \"file.status\",\n responses: {\n 200: {\n description: \"File status\",\n content: {\n \"application/json\": {\n schema: resolver(File.Info.array()),\n },\n },\n },\n },\n }),\n async (c) => {\n const content = await File.status()\n return c.json(content)\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { Config } from \"../../config/config\"\nimport { Provider } from \"../../provider/provider\"\nimport { mapValues } from \"remeda\"\nimport { errors } from \"../error\"\nimport { Log } from \"../../util/log\"\nimport { lazy } from \"../../util/lazy\"\nimport { SessionStatus } from \"../../session/status\"\nimport { Bus } from \"../../bus\"\nimport { Auth } from \"../../auth\"\n\n/**\n * Plan usage for the OAuth providers this instance is signed into. The\n * tokens already live in the auth store; the providers each answer a usage\n * query with them (ChatGPT: wham/usage; Anthropic: api/oauth/usage). Cached\n * for a minute: a gauge, not a meter (2026-09-05).\n */\nexport type UsageWindow = { kind: \"5h\" | \"7d\" | \"other\"; label: string; usedPercent: number; resetsAt: number | null }\nexport type ProviderUsage = { providerID: string; plan: string | null; windows: UsageWindow[]; error?: string }\nconst USAGE_TTL_MS = 60_000\nlet usageCache: { at: number; data: ProviderUsage[] } | undefined\n\nasync function readUsageJson(url: string, headers: Record<string, string>): Promise<any> {\n const res = await fetch(url, { headers, signal: AbortSignal.timeout(10_000) })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n return res.json()\n}\n\nfunction openaiWindows(rateLimit: any): UsageWindow[] {\n const out: UsageWindow[] = []\n for (const key of [\"primary_window\", \"secondary_window\"] as const) {\n const w = rateLimit?.[key]\n if (!w || typeof w !== \"object\") continue\n const secs = Number(w.limit_window_seconds ?? 0)\n const kind: UsageWindow[\"kind\"] = secs >= 500_000 ? \"7d\" : secs > 0 && secs <= 21_600 ? \"5h\" : \"other\"\n out.push({\n kind,\n label: kind === \"7d\" ? \"weekly\" : kind === \"5h\" ? \"5-hour window\" : `${Math.round(secs / 3600)}h window`,\n usedPercent: Number(w.used_percent ?? 0),\n resetsAt: typeof w.reset_at === \"number\" ? w.reset_at : null,\n })\n }\n return out\n}\n\nasync function openaiUsage(auth: Auth.Oauth): Promise<ProviderUsage> {\n const headers: Record<string, string> = { authorization: `Bearer ${auth.access}` }\n if (auth.accountId) headers[\"ChatGPT-Account-Id\"] = auth.accountId\n const data = await readUsageJson(\"https://chatgpt.com/backend-api/wham/usage\", headers)\n return { providerID: \"openai\", plan: typeof data?.plan_type === \"string\" ? data.plan_type : null, windows: openaiWindows(data?.rate_limit) }\n}\n\nasync function anthropicUsage(auth: Auth.Oauth): Promise<ProviderUsage> {\n const data = await readUsageJson(\"https://api.anthropic.com/api/oauth/usage\", {\n authorization: `Bearer ${auth.access}`,\n \"anthropic-beta\": \"oauth-2025-04-20\",\n })\n const toTs = (v: unknown): number | null =>\n typeof v === \"string\" && !Number.isNaN(Date.parse(v)) ? Math.floor(Date.parse(v) / 1000) : null\n const windows: UsageWindow[] = []\n if (data?.five_hour && typeof data.five_hour === \"object\") {\n windows.push({ kind: \"5h\", label: \"5-hour window\", usedPercent: Number(data.five_hour.utilization ?? 0), resetsAt: toTs(data.five_hour.resets_at) })\n }\n if (data?.seven_day && typeof data.seven_day === \"object\") {\n windows.push({ kind: \"7d\", label: \"weekly\", usedPercent: Number(data.seven_day.utilization ?? 0), resetsAt: toTs(data.seven_day.resets_at) })\n }\n for (const l of Array.isArray(data?.limits) ? data.limits : []) {\n const name = l?.scope?.model?.display_name\n if (l?.kind === \"weekly_scoped\" && typeof name === \"string\" && name) {\n windows.push({ kind: \"other\", label: `weekly, ${name}`, usedPercent: Number(l.percent ?? 0), resetsAt: toTs(l.resets_at) })\n }\n }\n return { providerID: \"anthropic\", plan: null, windows }\n}\n\nexport async function providerUsage(force = false): Promise<{ providers: ProviderUsage[]; fetchedAt: number }> {\n if (!force && usageCache && Date.now() - usageCache.at < USAGE_TTL_MS) return { providers: usageCache.data, fetchedAt: usageCache.at }\n const all = await Auth.all().catch(() => ({}) as Record<string, Auth.Info>)\n const out: ProviderUsage[] = []\n for (const [providerID, info] of Object.entries(all)) {\n if (info.type !== \"oauth\") continue\n if (providerID !== \"openai\" && providerID !== \"anthropic\") continue\n const oauth = info as Auth.Oauth\n if (oauth.expires < Date.now()) {\n out.push({ providerID, plan: null, windows: [], error: \"token expired; it refreshes on the next model call\" })\n continue\n }\n try {\n out.push(providerID === \"openai\" ? await openaiUsage(oauth) : await anthropicUsage(oauth))\n } catch (e) {\n out.push({ providerID, plan: null, windows: [], error: e instanceof Error ? e.message : String(e) })\n }\n }\n usageCache = { at: Date.now(), data: out }\n return { providers: out, fetchedAt: usageCache.at }\n}\n\nlet pendingReload: { unsubscribe: () => void; timer: ReturnType<typeof setTimeout> } | undefined\n\nasync function anySessionBusy(): Promise<boolean> {\n const statuses = await SessionStatus.list().catch(() => new Map())\n for (const status of statuses.values()) if (status.type !== \"idle\") return true\n return false\n}\n\nasync function fireDeferredReload(): Promise<void> {\n const pending = pendingReload\n pendingReload = undefined\n if (pending) {\n pending.unsubscribe()\n clearTimeout(pending.timer)\n }\n await Config.invalidate(true)\n}\n\nconst log = Log.create({ service: \"server\" })\n\nexport const ConfigRoutes = lazy(() =>\n new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"Get configuration\",\n description: \"Retrieve the current OpenCode configuration settings and preferences.\",\n operationId: \"config.get\",\n responses: {\n 200: {\n description: \"Get config info\",\n content: {\n \"application/json\": {\n schema: resolver(Config.Info),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await Config.get())\n },\n )\n .patch(\n \"/\",\n describeRoute({\n summary: \"Update configuration\",\n description: \"Update OpenCode configuration settings and preferences.\",\n operationId: \"config.update\",\n responses: {\n 200: {\n description: \"Successfully updated config\",\n content: {\n \"application/json\": {\n schema: resolver(Config.Info),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", Config.Info),\n async (c) => {\n const config = c.req.valid(\"json\")\n await Config.update(config)\n return c.json(config)\n },\n )\n .post(\n \"/reload\",\n describeRoute({\n summary: \"Reload configuration\",\n description: \"Invalidate all cached config and agent state, forcing a re-read from disk on next access.\",\n operationId: \"config.reload\",\n responses: {\n 200: {\n description: \"Config cache invalidated\",\n content: {\n \"application/json\": {\n schema: resolver(z.object({ ok: z.boolean() })),\n },\n },\n },\n },\n }),\n async (c) => {\n // A reload disposes the instance, which aborts every prompt loop in\n // flight -- silently: the assistant message stays empty with no error.\n // While any session is busy, hold the reload and fire it on the next\n // all-idle status event (bounded by a two-minute cap). The action\n // server's own idle check races the prompt it just delivered by a few\n // milliseconds; this end cannot race (2026-09-05).\n if (await anySessionBusy()) {\n if (!pendingReload) {\n const unsubscribe = Bus.subscribe(SessionStatus.Event.Status, async () => {\n if (!(await anySessionBusy())) await fireDeferredReload()\n })\n const timer = setTimeout(() => void fireDeferredReload(), 120_000)\n pendingReload = { unsubscribe, timer }\n }\n return c.json({ ok: true, deferred: true })\n }\n await Config.invalidate(true)\n return c.json({ ok: true })\n },\n )\n .get(\n \"/usage\",\n describeRoute({\n summary: \"Plan usage\",\n description: \"Percent used and reset times of the usage windows on the OAuth providers this instance is signed into.\",\n operationId: \"config.usage\",\n responses: {\n 200: {\n description: \"Per-provider usage windows\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n fetchedAt: z.number(),\n providers: z.array(\n z.object({\n providerID: z.string(),\n plan: z.string().nullable(),\n error: z.string().optional(),\n windows: z.array(\n z.object({ kind: z.string(), label: z.string(), usedPercent: z.number(), resetsAt: z.number().nullable() }),\n ),\n }),\n ),\n }),\n ),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await providerUsage(c.req.query(\"force\") === \"1\"))\n },\n )\n .get(\n \"/providers\",\n describeRoute({\n summary: \"List config providers\",\n description: \"Get a list of all configured AI providers and their default models.\",\n operationId: \"config.providers\",\n responses: {\n 200: {\n description: \"List of providers\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n providers: Provider.Info.array(),\n default: z.record(z.string(), z.string()),\n }),\n ),\n },\n },\n },\n },\n }),\n async (c) => {\n using _ = log.time(\"providers\")\n const providers = await Provider.list().then((x) => mapValues(x, (item) => item))\n return c.json({\n providers: Object.values(providers),\n default: mapValues(providers, (item) => Provider.sort(Object.values(item.models))[0].id),\n })\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { ProviderID, ModelID } from \"../../provider/schema\"\nimport { ToolRegistry } from \"../../tool/registry\"\nimport { Worktree } from \"../../worktree\"\nimport { Instance } from \"../../project/instance\"\nimport { Project } from \"../../project/project\"\nimport { MCP } from \"../../mcp\"\nimport { Session } from \"../../session\"\nimport { Config } from \"../../config/config\"\nimport { ConsoleState } from \"../../config/console-state\"\nimport { Account, AccountID, OrgID } from \"../../account\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\nimport { WorkspaceRoutes } from \"./workspace\"\n\nconst ConsoleOrgOption = z.object({\n accountID: z.string(),\n accountEmail: z.string(),\n accountUrl: z.string(),\n orgID: z.string(),\n orgName: z.string(),\n active: z.boolean(),\n})\n\nconst ConsoleOrgList = z.object({\n orgs: z.array(ConsoleOrgOption),\n})\n\nconst ConsoleSwitchBody = z.object({\n accountID: z.string(),\n orgID: z.string(),\n})\n\nexport const ExperimentalRoutes = lazy(() =>\n new Hono()\n .get(\n \"/console\",\n describeRoute({\n summary: \"Get active Console provider metadata\",\n description: \"Get the active Console org name and the set of provider IDs managed by that Console org.\",\n operationId: \"experimental.console.get\",\n responses: {\n 200: {\n description: \"Active Console provider metadata\",\n content: {\n \"application/json\": {\n schema: resolver(ConsoleState),\n },\n },\n },\n },\n }),\n async (c) => {\n const [consoleState, groups] = await Promise.all([Config.getConsoleState(), Account.orgsByAccount()])\n return c.json({\n ...consoleState,\n switchableOrgCount: groups.reduce((count, group) => count + group.orgs.length, 0),\n })\n },\n )\n .get(\n \"/console/orgs\",\n describeRoute({\n summary: \"List switchable Console orgs\",\n description: \"Get the available Console orgs across logged-in accounts, including the current active org.\",\n operationId: \"experimental.console.listOrgs\",\n responses: {\n 200: {\n description: \"Switchable Console orgs\",\n content: {\n \"application/json\": {\n schema: resolver(ConsoleOrgList),\n },\n },\n },\n },\n }),\n async (c) => {\n const [groups, active] = await Promise.all([Account.orgsByAccount(), Account.active()])\n\n const orgs = groups.flatMap((group) =>\n group.orgs.map((org) => ({\n accountID: group.account.id,\n accountEmail: group.account.email,\n accountUrl: group.account.url,\n orgID: org.id,\n orgName: org.name,\n active: !!active && active.id === group.account.id && active.active_org_id === org.id,\n })),\n )\n return c.json({ orgs })\n },\n )\n .post(\n \"/console/switch\",\n describeRoute({\n summary: \"Switch active Console org\",\n description: \"Persist a new active Console account/org selection for the current local OpenCode state.\",\n operationId: \"experimental.console.switchOrg\",\n responses: {\n 200: {\n description: \"Switch success\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n validator(\"json\", ConsoleSwitchBody),\n async (c) => {\n const body = c.req.valid(\"json\")\n await Account.switchOrg(AccountID.make(body.accountID), OrgID.make(body.orgID))\n return c.json(true)\n },\n )\n .get(\n \"/tool/ids\",\n describeRoute({\n summary: \"List tool IDs\",\n description:\n \"Get a list of all available tool IDs, including both built-in tools and dynamically registered tools.\",\n operationId: \"tool.ids\",\n responses: {\n 200: {\n description: \"Tool IDs\",\n content: {\n \"application/json\": {\n schema: resolver(z.array(z.string()).meta({ ref: \"ToolIDs\" })),\n },\n },\n },\n ...errors(400),\n },\n }),\n async (c) => {\n return c.json(await ToolRegistry.ids())\n },\n )\n .get(\n \"/tool\",\n describeRoute({\n summary: \"List tools\",\n description:\n \"Get a list of available tools with their JSON schema parameters for a specific provider and model combination.\",\n operationId: \"tool.list\",\n responses: {\n 200: {\n description: \"Tools\",\n content: {\n \"application/json\": {\n schema: resolver(\n z\n .array(\n z\n .object({\n id: z.string(),\n description: z.string(),\n parameters: z.any(),\n })\n .meta({ ref: \"ToolListItem\" }),\n )\n .meta({ ref: \"ToolList\" }),\n ),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"query\",\n z.object({\n provider: z.string(),\n model: z.string(),\n }),\n ),\n async (c) => {\n const { provider, model } = c.req.valid(\"query\")\n const tools = await ToolRegistry.tools({ providerID: ProviderID.make(provider), modelID: ModelID.make(model) })\n return c.json(\n tools.map((t) => ({\n id: t.id,\n description: t.description,\n // Handle both Zod schemas and plain JSON schemas\n parameters: (t.parameters as any)?._def ? zodToJsonSchema(t.parameters as any) : t.parameters,\n })),\n )\n },\n )\n .route(\"/workspace\", WorkspaceRoutes())\n .post(\n \"/worktree\",\n describeRoute({\n summary: \"Create worktree\",\n description: \"Create a new git worktree for the current project and run any configured startup scripts.\",\n operationId: \"worktree.create\",\n responses: {\n 200: {\n description: \"Worktree created\",\n content: {\n \"application/json\": {\n schema: resolver(Worktree.Info),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", Worktree.CreateInput.optional()),\n async (c) => {\n const body = c.req.valid(\"json\")\n const worktree = await Worktree.create(body)\n return c.json(worktree)\n },\n )\n .get(\n \"/worktree\",\n describeRoute({\n summary: \"List worktrees\",\n description: \"List all sandbox worktrees for the current project.\",\n operationId: \"worktree.list\",\n responses: {\n 200: {\n description: \"List of worktree directories\",\n content: {\n \"application/json\": {\n schema: resolver(z.array(z.string())),\n },\n },\n },\n },\n }),\n async (c) => {\n const sandboxes = await Project.sandboxes(Instance.project.id)\n return c.json(sandboxes)\n },\n )\n .delete(\n \"/worktree\",\n describeRoute({\n summary: \"Remove worktree\",\n description: \"Remove a git worktree and delete its branch.\",\n operationId: \"worktree.remove\",\n responses: {\n 200: {\n description: \"Worktree removed\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", Worktree.RemoveInput),\n async (c) => {\n const body = c.req.valid(\"json\")\n await Worktree.remove(body)\n await Project.removeSandbox(Instance.project.id, body.directory)\n return c.json(true)\n },\n )\n .post(\n \"/worktree/reset\",\n describeRoute({\n summary: \"Reset worktree\",\n description: \"Reset a worktree branch to the primary default branch.\",\n operationId: \"worktree.reset\",\n responses: {\n 200: {\n description: \"Worktree reset\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", Worktree.ResetInput),\n async (c) => {\n const body = c.req.valid(\"json\")\n await Worktree.reset(body)\n return c.json(true)\n },\n )\n .get(\n \"/session\",\n describeRoute({\n summary: \"List sessions\",\n description:\n \"Get a list of all OpenCode sessions across projects, sorted by most recently updated. Archived sessions are excluded by default.\",\n operationId: \"experimental.session.list\",\n responses: {\n 200: {\n description: \"List of sessions\",\n content: {\n \"application/json\": {\n schema: resolver(Session.GlobalInfo.array()),\n },\n },\n },\n },\n }),\n validator(\n \"query\",\n z.object({\n directory: z.string().optional().meta({ description: \"Filter sessions by project directory\" }),\n roots: z.coerce.boolean().optional().meta({ description: \"Only return root sessions (no parentID)\" }),\n start: z.coerce\n .number()\n .optional()\n .meta({ description: \"Filter sessions updated on or after this timestamp (milliseconds since epoch)\" }),\n cursor: z.coerce\n .number()\n .optional()\n .meta({ description: \"Return sessions updated before this timestamp (milliseconds since epoch)\" }),\n search: z.string().optional().meta({ description: \"Filter sessions by title (case-insensitive)\" }),\n limit: z.coerce.number().optional().meta({ description: \"Maximum number of sessions to return\" }),\n archived: z.coerce.boolean().optional().meta({ description: \"Include archived sessions (default false)\" }),\n }),\n ),\n async (c) => {\n const query = c.req.valid(\"query\")\n const limit = query.limit ?? 100\n const sessions: Session.GlobalInfo[] = []\n for await (const session of Session.listGlobal({\n directory: query.directory,\n roots: query.roots,\n start: query.start,\n cursor: query.cursor,\n search: query.search,\n limit: limit + 1,\n archived: query.archived,\n })) {\n sessions.push(session)\n }\n const hasMore = sessions.length > limit\n const list = hasMore ? sessions.slice(0, limit) : sessions\n if (hasMore && list.length > 0) {\n c.header(\"x-next-cursor\", String(list[list.length - 1].time.updated))\n }\n return c.json(list)\n },\n )\n .get(\n \"/resource\",\n describeRoute({\n summary: \"Get MCP resources\",\n description: \"Get all available MCP resources from connected servers. Optionally filter by name.\",\n operationId: \"experimental.resource.list\",\n responses: {\n 200: {\n description: \"MCP resources\",\n content: {\n \"application/json\": {\n schema: resolver(z.record(z.string(), MCP.Resource)),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await MCP.resources())\n },\n ),\n)\n", "import z from \"zod\"\n\nexport const ConsoleState = z.object({\n consoleManagedProviders: z.array(z.string()),\n activeOrgName: z.string().optional(),\n switchableOrgCount: z.number().int().nonnegative(),\n})\n\nexport type ConsoleState = z.infer<typeof ConsoleState>\n\nexport const emptyConsoleState: ConsoleState = {\n consoleManagedProviders: [],\n activeOrgName: undefined,\n switchableOrgCount: 0,\n}\n", "import { Hono } from \"hono\"\nimport { describeRoute, resolver, validator } from \"hono-openapi\"\nimport z from \"zod\"\nimport { Workspace } from \"../../control-plane/workspace\"\nimport { Instance } from \"../../project/instance\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\n\nexport const WorkspaceRoutes = lazy(() =>\n new Hono()\n .post(\n \"/\",\n describeRoute({\n summary: \"Create workspace\",\n description: \"Create a workspace for the current project.\",\n operationId: \"experimental.workspace.create\",\n responses: {\n 200: {\n description: \"Workspace created\",\n content: {\n \"application/json\": {\n schema: resolver(Workspace.Info),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"json\",\n Workspace.create.schema.omit({\n projectID: true,\n }),\n ),\n async (c) => {\n const body = c.req.valid(\"json\")\n const workspace = await Workspace.create({\n projectID: Instance.project.id,\n ...body,\n })\n return c.json(workspace)\n },\n )\n .get(\n \"/\",\n describeRoute({\n summary: \"List workspaces\",\n description: \"List all workspaces.\",\n operationId: \"experimental.workspace.list\",\n responses: {\n 200: {\n description: \"Workspaces\",\n content: {\n \"application/json\": {\n schema: resolver(z.array(Workspace.Info)),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(Workspace.list(Instance.project))\n },\n )\n .delete(\n \"/:id\",\n describeRoute({\n summary: \"Remove workspace\",\n description: \"Remove an existing workspace.\",\n operationId: \"experimental.workspace.remove\",\n responses: {\n 200: {\n description: \"Workspace removed\",\n content: {\n \"application/json\": {\n schema: resolver(Workspace.Info.optional()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"param\",\n z.object({\n id: Workspace.Info.shape.id,\n }),\n ),\n async (c) => {\n const { id } = c.req.valid(\"param\")\n return c.json(await Workspace.remove(id))\n },\n ),\n)\n", "import { Hono } from \"hono\"\nimport { describeRoute, validator, resolver } from \"hono-openapi\"\nimport z from \"zod\"\nimport { Config } from \"../../config/config\"\nimport { Provider } from \"../../provider/provider\"\nimport { ModelsDev } from \"../../provider/models\"\nimport { ProviderAuth } from \"../../provider/auth\"\nimport { ProviderID } from \"../../provider/schema\"\nimport { mapValues } from \"remeda\"\nimport { errors } from \"../error\"\nimport { lazy } from \"../../util/lazy\"\nimport { Log } from \"../../util/log\"\n\nconst log = Log.create({ service: \"server\" })\n\nexport const ProviderRoutes = lazy(() =>\n new Hono()\n .get(\n \"/\",\n describeRoute({\n summary: \"List providers\",\n description: \"Get a list of all available AI providers, including both available and connected ones.\",\n operationId: \"provider.list\",\n responses: {\n 200: {\n description: \"List of providers\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.object({\n all: ModelsDev.Provider.array(),\n default: z.record(z.string(), z.string()),\n connected: z.array(z.string()),\n }),\n ),\n },\n },\n },\n },\n }),\n async (c) => {\n const config = await Config.get()\n const disabled = new Set(config.disabled_providers ?? [])\n const enabled = config.enabled_providers ? new Set(config.enabled_providers) : undefined\n\n const allProviders = await ModelsDev.get()\n const filteredProviders: Record<string, (typeof allProviders)[string]> = {}\n for (const [key, value] of Object.entries(allProviders)) {\n if ((enabled ? enabled.has(key) : true) && !disabled.has(key)) {\n filteredProviders[key] = value\n }\n }\n\n const connected = await Provider.list()\n const providers = Object.assign(\n mapValues(filteredProviders, (x) => Provider.fromModelsDevProvider(x)),\n connected,\n )\n return c.json({\n all: Object.values(providers),\n default: mapValues(providers, (item) => Provider.sort(Object.values(item.models))[0].id),\n connected: Object.keys(connected),\n })\n },\n )\n .get(\n \"/auth\",\n describeRoute({\n summary: \"Get provider auth methods\",\n description: \"Retrieve available authentication methods for all AI providers.\",\n operationId: \"provider.auth\",\n responses: {\n 200: {\n description: \"Provider auth methods\",\n content: {\n \"application/json\": {\n schema: resolver(z.record(z.string(), z.array(ProviderAuth.Method))),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await ProviderAuth.methods())\n },\n )\n .post(\n \"/:providerID/oauth/authorize\",\n describeRoute({\n summary: \"OAuth authorize\",\n description: \"Initiate OAuth authorization for a specific AI provider to get an authorization URL.\",\n operationId: \"provider.oauth.authorize\",\n responses: {\n 200: {\n description: \"Authorization URL and method\",\n content: {\n \"application/json\": {\n schema: resolver(ProviderAuth.Authorization.optional()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"param\",\n z.object({\n providerID: ProviderID.zod.meta({ description: \"Provider ID\" }),\n }),\n ),\n validator(\n \"json\",\n z.object({\n method: z.number().meta({ description: \"Auth method index\" }),\n inputs: z.record(z.string(), z.string()).optional().meta({ description: \"Prompt inputs\" }),\n }),\n ),\n async (c) => {\n const providerID = c.req.valid(\"param\").providerID\n const { method, inputs } = c.req.valid(\"json\")\n const result = await ProviderAuth.authorize({\n providerID,\n method,\n inputs,\n })\n return c.json(result)\n },\n )\n .post(\n \"/:providerID/oauth/callback\",\n describeRoute({\n summary: \"OAuth callback\",\n description: \"Handle the OAuth callback from a provider after user authorization.\",\n operationId: \"provider.oauth.callback\",\n responses: {\n 200: {\n description: \"OAuth callback processed successfully\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"param\",\n z.object({\n providerID: ProviderID.zod.meta({ description: \"Provider ID\" }),\n }),\n ),\n validator(\n \"json\",\n z.object({\n method: z.number().meta({ description: \"Auth method index\" }),\n code: z.string().optional().meta({ description: \"OAuth authorization code\" }),\n }),\n ),\n async (c) => {\n const providerID = c.req.valid(\"param\").providerID\n const { method, code } = c.req.valid(\"json\")\n await ProviderAuth.callback({\n providerID,\n method,\n code,\n })\n return c.json(true)\n },\n ),\n)\n", "import type { AuthOAuthResult, Hooks } from \"@opencode-ai/plugin\"\nimport { NamedError } from \"@opencode-ai/util/error\"\nimport { Auth } from \"@/auth\"\nimport { InstanceState } from \"@/effect/instance-state\"\nimport { makeRuntime } from \"@/effect/run-service\"\nimport { Plugin } from \"../plugin\"\nimport { ProviderID } from \"./schema\"\nimport { Array as Arr, Effect, Layer, Record, Result, ServiceMap } from \"effect\"\nimport z from \"zod\"\n\nexport namespace ProviderAuth {\n export const Method = z\n .object({\n type: z.union([z.literal(\"oauth\"), z.literal(\"api\")]),\n label: z.string(),\n prompts: z\n .array(\n z.union([\n z.object({\n type: z.literal(\"text\"),\n key: z.string(),\n message: z.string(),\n placeholder: z.string().optional(),\n when: z\n .object({\n key: z.string(),\n op: z.union([z.literal(\"eq\"), z.literal(\"neq\")]),\n value: z.string(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"select\"),\n key: z.string(),\n message: z.string(),\n options: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n hint: z.string().optional(),\n }),\n ),\n when: z\n .object({\n key: z.string(),\n op: z.union([z.literal(\"eq\"), z.literal(\"neq\")]),\n value: z.string(),\n })\n .optional(),\n }),\n ]),\n )\n .optional(),\n })\n .meta({\n ref: \"ProviderAuthMethod\",\n })\n export type Method = z.infer<typeof Method>\n\n export const Authorization = z\n .object({\n url: z.string(),\n method: z.union([z.literal(\"auto\"), z.literal(\"code\")]),\n instructions: z.string(),\n })\n .meta({\n ref: \"ProviderAuthAuthorization\",\n })\n export type Authorization = z.infer<typeof Authorization>\n\n export const OauthMissing = NamedError.create(\"ProviderAuthOauthMissing\", z.object({ providerID: ProviderID.zod }))\n\n export const OauthCodeMissing = NamedError.create(\n \"ProviderAuthOauthCodeMissing\",\n z.object({ providerID: ProviderID.zod }),\n )\n\n export const OauthCallbackFailed = NamedError.create(\"ProviderAuthOauthCallbackFailed\", z.object({}))\n\n export const ValidationFailed = NamedError.create(\n \"ProviderAuthValidationFailed\",\n z.object({\n field: z.string(),\n message: z.string(),\n }),\n )\n\n export type Error =\n | Auth.AuthError\n | InstanceType<typeof OauthMissing>\n | InstanceType<typeof OauthCodeMissing>\n | InstanceType<typeof OauthCallbackFailed>\n | InstanceType<typeof ValidationFailed>\n\n type Hook = NonNullable<Hooks[\"auth\"]>\n\n export interface Interface {\n readonly methods: () => Effect.Effect<Record<ProviderID, Method[]>>\n readonly authorize: (input: {\n providerID: ProviderID\n method: number\n inputs?: Record<string, string>\n }) => Effect.Effect<Authorization | undefined, Error>\n readonly callback: (input: { providerID: ProviderID; method: number; code?: string }) => Effect.Effect<void, Error>\n }\n\n interface State {\n hooks: Record<ProviderID, Hook>\n pending: Map<ProviderID, AuthOAuthResult>\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/ProviderAuth\") {}\n\n export const layer: Layer.Layer<Service, never, Auth.Service | Plugin.Service> = Layer.effect(\n Service,\n Effect.gen(function* () {\n const auth = yield* Auth.Service\n const plugin = yield* Plugin.Service\n const state = yield* InstanceState.make<State>(\n Effect.fn(\"ProviderAuth.state\")(function* () {\n const plugins = yield* plugin.list()\n return {\n hooks: Record.fromEntries(\n Arr.filterMap(plugins, (x) =>\n x.auth?.provider !== undefined\n ? Result.succeed([ProviderID.make(x.auth.provider), x.auth] as const)\n : Result.failVoid,\n ),\n ),\n pending: new Map<ProviderID, AuthOAuthResult>(),\n }\n }),\n )\n\n const methods = Effect.fn(\"ProviderAuth.methods\")(function* () {\n const hooks = (yield* InstanceState.get(state)).hooks\n return Record.map(hooks, (item) =>\n item.methods.map(\n (method): Method => ({\n type: method.type,\n label: method.label,\n prompts: method.prompts?.map((prompt) => {\n if (prompt.type === \"select\") {\n return {\n type: \"select\" as const,\n key: prompt.key,\n message: prompt.message,\n options: prompt.options,\n when: prompt.when,\n }\n }\n return {\n type: \"text\" as const,\n key: prompt.key,\n message: prompt.message,\n placeholder: prompt.placeholder,\n when: prompt.when,\n }\n }),\n }),\n ),\n )\n })\n\n const authorize = Effect.fn(\"ProviderAuth.authorize\")(function* (input: {\n providerID: ProviderID\n method: number\n inputs?: Record<string, string>\n }) {\n const { hooks, pending } = yield* InstanceState.get(state)\n const method = hooks[input.providerID].methods[input.method]\n if (method.type !== \"oauth\") return\n\n if (method.prompts && input.inputs) {\n for (const prompt of method.prompts) {\n if (prompt.type === \"text\" && prompt.validate && input.inputs[prompt.key] !== undefined) {\n const error = prompt.validate(input.inputs[prompt.key])\n if (error) return yield* Effect.fail(new ValidationFailed({ field: prompt.key, message: error }))\n }\n }\n }\n\n const result = yield* Effect.promise(() => method.authorize(input.inputs))\n pending.set(input.providerID, result)\n return {\n url: result.url,\n method: result.method,\n instructions: result.instructions,\n }\n })\n\n const callback = Effect.fn(\"ProviderAuth.callback\")(function* (input: {\n providerID: ProviderID\n method: number\n code?: string\n }) {\n const pending = (yield* InstanceState.get(state)).pending\n const match = pending.get(input.providerID)\n if (!match) return yield* Effect.fail(new OauthMissing({ providerID: input.providerID }))\n if (match.method === \"code\" && !input.code) {\n return yield* Effect.fail(new OauthCodeMissing({ providerID: input.providerID }))\n }\n\n const result = yield* Effect.promise(() =>\n match.method === \"code\" ? match.callback(input.code!) : match.callback(),\n )\n if (!result || result.type !== \"success\") return yield* Effect.fail(new OauthCallbackFailed({}))\n\n if (\"key\" in result) {\n yield* auth.set(input.providerID, {\n type: \"api\",\n key: result.key,\n })\n }\n\n if (\"refresh\" in result) {\n const { type: _, provider: __, refresh, access, expires, ...extra } = result\n yield* auth.set(input.providerID, {\n type: \"oauth\",\n access,\n refresh,\n expires,\n ...extra,\n })\n }\n })\n\n return Service.of({ methods, authorize, callback })\n }),\n )\n\n export const defaultLayer = Layer.suspend(() =>\n layer.pipe(Layer.provide(Auth.defaultLayer), Layer.provide(Plugin.defaultLayer)),\n )\n\n const { runPromise } = makeRuntime(Service, defaultLayer)\n\n export async function methods() {\n return runPromise((svc) => svc.methods())\n }\n\n export async function authorize(input: {\n providerID: ProviderID\n method: number\n inputs?: Record<string, string>\n }): Promise<Authorization | undefined> {\n return runPromise((svc) => svc.authorize(input))\n }\n\n export async function callback(input: { providerID: ProviderID; method: number; code?: string }) {\n return runPromise((svc) => svc.callback(input))\n }\n}\n", "import { Hono } from \"hono\"\nimport { describeRoute, resolver } from \"hono-openapi\"\nimport { streamSSE } from \"hono/streaming\"\nimport { Log } from \"@/util/log\"\nimport { BusEvent } from \"@/bus/bus-event\"\nimport { Bus } from \"@/bus\"\nimport { AsyncQueue } from \"../../util/queue\"\n\nconst log = Log.create({ service: \"server\" })\n\nexport const EventRoutes = () =>\n new Hono().get(\n \"/event\",\n describeRoute({\n summary: \"Subscribe to events\",\n description: \"Get events\",\n operationId: \"event.subscribe\",\n responses: {\n 200: {\n description: \"Event stream\",\n content: {\n \"text/event-stream\": {\n schema: resolver(BusEvent.payloads()),\n },\n },\n },\n },\n }),\n async (c) => {\n log.info(\"event connected\")\n c.header(\"Cache-Control\", \"no-cache, no-transform\")\n c.header(\"X-Accel-Buffering\", \"no\")\n c.header(\"X-Content-Type-Options\", \"nosniff\")\n return streamSSE(c, async (stream) => {\n const q = new AsyncQueue<string | null>()\n let done = false\n\n q.push(\n JSON.stringify({\n type: \"server.connected\",\n properties: {},\n }),\n )\n\n // Send heartbeat every 10s to prevent stalled proxy streams.\n const heartbeat = setInterval(() => {\n q.push(\n JSON.stringify({\n type: \"server.heartbeat\",\n properties: {},\n }),\n )\n }, 10_000)\n\n const stop = () => {\n if (done) return\n done = true\n clearInterval(heartbeat)\n unsub()\n q.push(null)\n log.info(\"event disconnected\")\n }\n\n const unsub = Bus.subscribeAll((event) => {\n q.push(JSON.stringify(event))\n if (event.type === Bus.InstanceDisposed.type) {\n stop()\n }\n })\n\n stream.onAbort(stop)\n\n try {\n for await (const data of q) {\n if (data === null) return\n await stream.writeSSE({ data })\n }\n } finally {\n stop()\n }\n })\n },\n )\n", "import { Provider } from \"../provider/provider\"\nimport { NamedError } from \"@opencode-ai/util/error\"\nimport { NotFoundError } from \"../storage/db\"\nimport { Session } from \"../session\"\nimport type { ContentfulStatusCode } from \"hono/utils/http-status\"\nimport type { ErrorHandler } from \"hono\"\nimport { HTTPException } from \"hono/http-exception\"\nimport type { Log } from \"../util/log\"\n\nexport function errorHandler(log: Log.Logger): ErrorHandler {\n return (err, c) => {\n log.error(\"failed\", {\n error: err,\n })\n if (err instanceof NamedError) {\n let status: ContentfulStatusCode\n if (err instanceof NotFoundError) status = 404\n else if (err instanceof Provider.ModelNotFoundError) status = 400\n else if (err.name === \"ProviderAuthValidationFailed\") status = 400\n else if (err.name.startsWith(\"Worktree\")) status = 400\n else status = 500\n return c.json(err.toObject(), { status })\n }\n if (err instanceof Session.BusyError) {\n return c.json(new NamedError.Unknown({ message: err.message }).toObject(), { status: 400 })\n }\n if (err instanceof HTTPException) return err.getResponse()\n const message = err instanceof Error && err.stack ? err.stack : err.toString()\n return c.json(new NamedError.Unknown({ message }).toObject(), {\n status: 500,\n })\n }\n}\n", "import type { MiddlewareHandler } from \"hono\"\nimport type { UpgradeWebSocket } from \"hono/ws\"\nimport { getAdaptor } from \"@/control-plane/adaptors\"\nimport { WorkspaceID } from \"@/control-plane/schema\"\nimport { Workspace } from \"@/control-plane/workspace\"\nimport { ServerProxy } from \"./proxy\"\nimport { lazy } from \"@/util/lazy\"\nimport { Filesystem } from \"@/util/filesystem\"\nimport { Instance } from \"@/project/instance\"\nimport { InstanceBootstrap } from \"@/project/bootstrap\"\nimport { InstanceRoutes } from \"./instance\"\n\ntype Rule = { method?: string; path: string; exact?: boolean; action: \"local\" | \"forward\" }\n\nconst RULES: Array<Rule> = [\n { path: \"/session/status\", action: \"forward\" },\n { method: \"GET\", path: \"/session\", action: \"local\" },\n]\n\nfunction local(method: string, path: string) {\n for (const rule of RULES) {\n if (rule.method && rule.method !== method) continue\n const match = rule.exact ? path === rule.path : path === rule.path || path.startsWith(rule.path + \"/\")\n if (match) return rule.action === \"local\"\n }\n return false\n}\n\nexport function WorkspaceRouterMiddleware(upgrade: UpgradeWebSocket): MiddlewareHandler {\n const routes = lazy(() => InstanceRoutes(upgrade))\n\n return async (c) => {\n const raw = c.req.query(\"directory\") || c.req.header(\"x-opencode-directory\") || process.cwd()\n const directory = Filesystem.resolve(\n (() => {\n try {\n return decodeURIComponent(raw)\n } catch {\n return raw\n }\n })(),\n )\n\n const url = new URL(c.req.url)\n const workspaceParam = url.searchParams.get(\"workspace\") || c.req.header(\"x-opencode-workspace\")\n\n // TODO: If session is being routed, force it to lookup the\n // project/workspace\n\n // If no workspace is provided we use the \"project\" workspace\n if (!workspaceParam) {\n return Instance.provide({\n directory,\n init: InstanceBootstrap,\n async fn() {\n return routes().fetch(c.req.raw, c.env)\n },\n })\n }\n\n const workspaceID = WorkspaceID.make(workspaceParam)\n const workspace = await Workspace.get(workspaceID)\n if (!workspace) {\n return new Response(`Workspace not found: ${workspaceID}`, {\n status: 500,\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\",\n },\n })\n }\n\n const adaptor = await getAdaptor(workspace.type)\n const target = await adaptor.target(workspace)\n\n if (target.type === \"local\") {\n return Instance.provide({\n directory: target.directory,\n init: InstanceBootstrap,\n async fn() {\n return routes().fetch(c.req.raw, c.env)\n },\n })\n }\n\n if (local(c.req.method, url.pathname)) {\n // No instance provided because we are serving cached data; there\n // is no instance to work with\n return routes().fetch(c.req.raw, c.env)\n }\n\n if (c.req.header(\"upgrade\")?.toLowerCase() === \"websocket\") {\n return ServerProxy.websocket(target, c.req.raw, c.env)\n }\n\n const headers = new Headers(c.req.raw.headers)\n headers.delete(\"x-opencode-workspace\")\n\n return ServerProxy.http(\n target,\n new Request(c.req.raw, {\n headers,\n }),\n )\n }\n}\n", "import { Hono, type Context } from \"hono\"\nimport { describeRoute, resolver, validator } from \"hono-openapi\"\nimport { streamSSE } from \"hono/streaming\"\nimport z from \"zod\"\nimport { BusEvent } from \"@/bus/bus-event\"\nimport { SyncEvent } from \"@/sync\"\nimport { GlobalBus } from \"@/bus/global\"\nimport { AsyncQueue } from \"@/util/queue\"\nimport { Instance } from \"../../project/instance\"\nimport { Installation } from \"@/installation\"\nimport { Log } from \"../../util/log\"\nimport { lazy } from \"../../util/lazy\"\nimport { Config } from \"../../config/config\"\nimport { errors } from \"../error\"\n\nconst log = Log.create({ service: \"server\" })\n\nexport const GlobalDisposedEvent = BusEvent.define(\"global.disposed\", z.object({}))\n\nasync function streamEvents(c: Context, subscribe: (q: AsyncQueue<string | null>) => () => void) {\n return streamSSE(c, async (stream) => {\n const q = new AsyncQueue<string | null>()\n let done = false\n\n q.push(\n JSON.stringify({\n payload: {\n type: \"server.connected\",\n properties: {},\n },\n }),\n )\n\n // Send heartbeat every 10s to prevent stalled proxy streams.\n const heartbeat = setInterval(() => {\n q.push(\n JSON.stringify({\n payload: {\n type: \"server.heartbeat\",\n properties: {},\n },\n }),\n )\n }, 10_000)\n\n const stop = () => {\n if (done) return\n done = true\n clearInterval(heartbeat)\n unsub()\n q.push(null)\n log.info(\"global event disconnected\")\n }\n\n const unsub = subscribe(q)\n\n stream.onAbort(stop)\n\n try {\n for await (const data of q) {\n if (data === null) return\n await stream.writeSSE({ data })\n }\n } finally {\n stop()\n }\n })\n}\n\nexport const GlobalRoutes = lazy(() =>\n new Hono()\n .get(\n \"/health\",\n describeRoute({\n summary: \"Get health\",\n description: \"Get health information about the OpenCode server.\",\n operationId: \"global.health\",\n responses: {\n 200: {\n description: \"Health information\",\n content: {\n \"application/json\": {\n schema: resolver(z.object({ healthy: z.literal(true), version: z.string() })),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json({ healthy: true, version: Installation.VERSION })\n },\n )\n .get(\n \"/event\",\n describeRoute({\n summary: \"Get global events\",\n description: \"Subscribe to global events from the OpenCode system using server-sent events.\",\n operationId: \"global.event\",\n responses: {\n 200: {\n description: \"Event stream\",\n content: {\n \"text/event-stream\": {\n schema: resolver(\n z\n .object({\n directory: z.string(),\n payload: BusEvent.payloads(),\n })\n .meta({\n ref: \"GlobalEvent\",\n }),\n ),\n },\n },\n },\n },\n }),\n async (c) => {\n log.info(\"global event connected\")\n c.header(\"Cache-Control\", \"no-cache, no-transform\")\n c.header(\"X-Accel-Buffering\", \"no\")\n c.header(\"X-Content-Type-Options\", \"nosniff\")\n\n return streamEvents(c, (q) => {\n async function handler(event: any) {\n q.push(JSON.stringify(event))\n }\n GlobalBus.on(\"event\", handler)\n return () => GlobalBus.off(\"event\", handler)\n })\n },\n )\n .get(\n \"/sync-event\",\n describeRoute({\n summary: \"Subscribe to global sync events\",\n description: \"Get global sync events\",\n operationId: \"global.sync-event.subscribe\",\n responses: {\n 200: {\n description: \"Event stream\",\n content: {\n \"text/event-stream\": {\n schema: resolver(\n z\n .object({\n payload: SyncEvent.payloads(),\n })\n .meta({\n ref: \"SyncEvent\",\n }),\n ),\n },\n },\n },\n },\n }),\n async (c) => {\n log.info(\"global sync event connected\")\n c.header(\"Cache-Control\", \"no-cache, no-transform\")\n c.header(\"X-Accel-Buffering\", \"no\")\n c.header(\"X-Content-Type-Options\", \"nosniff\")\n return streamEvents(c, (q) => {\n return SyncEvent.subscribeAll(({ def, event }) => {\n // TODO: don't pass def, just pass the type (and it should\n // be versioned)\n q.push(\n JSON.stringify({\n payload: {\n ...event,\n type: SyncEvent.versionedType(def.type, def.version),\n },\n }),\n )\n })\n })\n },\n )\n .get(\n \"/config\",\n describeRoute({\n summary: \"Get global configuration\",\n description: \"Retrieve the current global OpenCode configuration settings and preferences.\",\n operationId: \"global.config.get\",\n responses: {\n 200: {\n description: \"Get global config info\",\n content: {\n \"application/json\": {\n schema: resolver(Config.Info),\n },\n },\n },\n },\n }),\n async (c) => {\n return c.json(await Config.getGlobal())\n },\n )\n .patch(\n \"/config\",\n describeRoute({\n summary: \"Update global configuration\",\n description: \"Update global OpenCode configuration settings and preferences.\",\n operationId: \"global.config.update\",\n responses: {\n 200: {\n description: \"Successfully updated global config\",\n content: {\n \"application/json\": {\n schema: resolver(Config.Info),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\"json\", Config.Info),\n async (c) => {\n const config = c.req.valid(\"json\")\n const next = await Config.updateGlobal(config)\n return c.json(next)\n },\n )\n .post(\n \"/dispose\",\n describeRoute({\n summary: \"Dispose instance\",\n description: \"Clean up and dispose all OpenCode instances, releasing all resources.\",\n operationId: \"global.dispose\",\n responses: {\n 200: {\n description: \"Global disposed\",\n content: {\n \"application/json\": {\n schema: resolver(z.boolean()),\n },\n },\n },\n },\n }),\n async (c) => {\n await Instance.disposeAll()\n GlobalBus.emit(\"event\", {\n directory: \"global\",\n payload: {\n type: GlobalDisposedEvent.type,\n properties: {},\n },\n })\n return c.json(true)\n },\n )\n .post(\n \"/upgrade\",\n describeRoute({\n summary: \"Upgrade opencode\",\n description: \"Upgrade opencode to the specified version or latest if not specified.\",\n operationId: \"global.upgrade\",\n responses: {\n 200: {\n description: \"Upgrade result\",\n content: {\n \"application/json\": {\n schema: resolver(\n z.union([\n z.object({\n success: z.literal(true),\n version: z.string(),\n }),\n z.object({\n success: z.literal(false),\n error: z.string(),\n }),\n ]),\n ),\n },\n },\n },\n ...errors(400),\n },\n }),\n validator(\n \"json\",\n z.object({\n target: z.string().optional(),\n }),\n ),\n async (c) => {\n const method = await Installation.method()\n if (method === \"unknown\") {\n return c.json({ success: false, error: \"Unknown installation method\" }, 400)\n }\n const target = c.req.valid(\"json\").target || (await Installation.latest(method))\n const result = await Installation.upgrade(method, target)\n .then(() => ({ success: true as const, version: target }))\n .catch((e) => ({ success: false as const, error: e instanceof Error ? e.message : String(e) }))\n if (result.success) {\n GlobalBus.emit(\"event\", {\n directory: \"global\",\n payload: {\n type: Installation.Event.Updated.type,\n properties: { version: target },\n },\n })\n return c.json(result)\n }\n return c.json(result, 500)\n },\n ),\n)\n", "import { Log } from \"@/util/log\"\nimport { Bonjour } from \"bonjour-service\"\n\nconst log = Log.create({ service: \"mdns\" })\n\nexport namespace MDNS {\n let bonjour: Bonjour | undefined\n let currentPort: number | undefined\n\n export function publish(port: number, domain?: string) {\n if (currentPort === port) return\n if (bonjour) unpublish()\n\n try {\n const host = domain ?? \"opencode.local\"\n const name = `opencode-${port}`\n bonjour = new Bonjour()\n const service = bonjour.publish({\n name,\n type: \"http\",\n host,\n port,\n txt: { path: \"/\" },\n })\n\n service.on(\"up\", () => {\n log.info(\"mDNS service published\", { name, port })\n })\n\n service.on(\"error\", (err) => {\n log.error(\"mDNS service error\", { error: err })\n })\n\n currentPort = port\n } catch (err) {\n log.error(\"mDNS publish failed\", { error: err })\n if (bonjour) {\n try {\n bonjour.destroy()\n } catch {}\n }\n bonjour = undefined\n currentPort = undefined\n }\n }\n\n export function unpublish() {\n if (bonjour) {\n try {\n bonjour.unpublishAll()\n bonjour.destroy()\n } catch (err) {\n log.error(\"mDNS unpublish failed\", { error: err })\n }\n bonjour = undefined\n currentPort = undefined\n log.info(\"mDNS service unpublished\")\n }\n }\n}\n", "import { NotFoundError, eq, and } from \"../storage/db\"\nimport { SyncEvent } from \"@/sync\"\nimport { Session } from \"./index\"\nimport { MessageV2 } from \"./message-v2\"\nimport { SessionTable, MessageTable, PartTable } from \"./session.sql\"\nimport { ProjectTable } from \"../project/project.sql\"\nimport { Log } from \"../util/log\"\n\nconst log = Log.create({ service: \"session.projector\" })\n\nfunction foreign(err: unknown) {\n if (typeof err !== \"object\" || err === null) return false\n if (\"code\" in err && err.code === \"SQLITE_CONSTRAINT_FOREIGNKEY\") return true\n return \"message\" in err && typeof err.message === \"string\" && err.message.includes(\"FOREIGN KEY constraint failed\")\n}\n\nexport type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> | null } : T\n\nfunction grab<T extends object, K1 extends keyof T, X>(\n obj: T,\n field1: K1,\n cb?: (val: NonNullable<T[K1]>) => X,\n): X | undefined {\n if (obj == undefined || !(field1 in obj)) return undefined\n\n const val = obj[field1]\n if (val && typeof val === \"object\" && cb) {\n return cb(val)\n }\n if (val === undefined) {\n throw new Error(\n \"Session update failure: pass `null` to clear a field instead of `undefined`: \" + JSON.stringify(obj),\n )\n }\n return val as X | undefined\n}\n\nexport function toPartialRow(info: DeepPartial<Session.Info>) {\n const obj = {\n id: grab(info, \"id\"),\n project_id: grab(info, \"projectID\"),\n workspace_id: grab(info, \"workspaceID\"),\n parent_id: grab(info, \"parentID\"),\n slug: grab(info, \"slug\"),\n directory: grab(info, \"directory\"),\n title: grab(info, \"title\"),\n version: grab(info, \"version\"),\n share_url: grab(info, \"share\", (v) => grab(v, \"url\")),\n summary_additions: grab(info, \"summary\", (v) => grab(v, \"additions\")),\n summary_deletions: grab(info, \"summary\", (v) => grab(v, \"deletions\")),\n summary_files: grab(info, \"summary\", (v) => grab(v, \"files\")),\n summary_diffs: grab(info, \"summary\", (v) => grab(v, \"diffs\")),\n revert: grab(info, \"revert\"),\n permission: grab(info, \"permission\"),\n time_created: grab(info, \"time\", (v) => grab(v, \"created\")),\n time_updated: grab(info, \"time\", (v) => grab(v, \"updated\")),\n time_compacting: grab(info, \"time\", (v) => grab(v, \"compacting\")),\n time_archived: grab(info, \"time\", (v) => grab(v, \"archived\")),\n }\n\n return Object.fromEntries(Object.entries(obj).filter(([_, val]) => val !== undefined))\n}\n\nexport default [\n SyncEvent.project(Session.Event.Created, (db, data) => {\n db.insert(SessionTable).values(Session.toRow(data.info)).run()\n }),\n\n SyncEvent.project(Session.Event.Updated, (db, data) => {\n const info = data.info\n const row = db\n .update(SessionTable)\n .set(toPartialRow(info))\n .where(eq(SessionTable.id, data.sessionID))\n .returning()\n .get()\n if (!row) throw new NotFoundError({ message: `Session not found: ${data.sessionID}` })\n }),\n\n SyncEvent.project(Session.Event.Deleted, (db, data) => {\n db.delete(SessionTable).where(eq(SessionTable.id, data.sessionID)).run()\n }),\n\n SyncEvent.project(MessageV2.Event.Updated, (db, data) => {\n const time_created = data.info.time.created\n const { id, sessionID, ...rest } = data.info\n\n try {\n db.insert(MessageTable)\n .values({\n id,\n session_id: sessionID,\n time_created,\n data: rest,\n })\n .onConflictDoUpdate({ target: MessageTable.id, set: { data: rest } })\n .run()\n } catch (err) {\n if (!foreign(err)) throw err\n log.warn(\"ignored late message update\", { messageID: id, sessionID })\n }\n }),\n\n SyncEvent.project(MessageV2.Event.Removed, (db, data) => {\n db.delete(MessageTable)\n .where(and(eq(MessageTable.id, data.messageID), eq(MessageTable.session_id, data.sessionID)))\n .run()\n }),\n\n SyncEvent.project(MessageV2.Event.PartRemoved, (db, data) => {\n db.delete(PartTable)\n .where(and(eq(PartTable.id, data.partID), eq(PartTable.session_id, data.sessionID)))\n .run()\n }),\n\n SyncEvent.project(MessageV2.Event.PartUpdated, (db, data) => {\n const { id, messageID, sessionID, ...rest } = data.part\n\n try {\n db.insert(PartTable)\n .values({\n id,\n message_id: messageID,\n session_id: sessionID,\n time_created: data.time,\n data: rest,\n })\n .onConflictDoUpdate({ target: PartTable.id, set: { data: rest } })\n .run()\n } catch (err) {\n if (!foreign(err)) throw err\n log.warn(\"ignored late part update\", { partID: id, messageID, sessionID })\n }\n }),\n]\n", "import z from \"zod\"\nimport sessionProjectors from \"../session/projectors\"\nimport { SyncEvent } from \"@/sync\"\nimport { Session } from \"@/session\"\nimport { SessionTable } from \"@/session/session.sql\"\nimport { Database, eq } from \"@/storage/db\"\n\nexport function initProjectors() {\n SyncEvent.init({\n projectors: sessionProjectors,\n convertEvent: (type, data) => {\n if (type === \"session.updated\") {\n const id = (data as z.infer<typeof Session.Event.Updated.schema>).sessionID\n const row = Database.use((db) => db.select().from(SessionTable).where(eq(SessionTable.id, id)).get())\n\n if (!row) return data\n\n return {\n sessionID: id,\n info: Session.fromRow(row),\n }\n }\n return data\n },\n })\n}\n\ninitProjectors()\n"],
5
- "mappings": "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",
6
- "names": ["response", "validator", "Hono", "z", "createNodeWebSocket", "chunk", "Workspace", "log", "ServerProxy", "Hono", "z", "Hono", "z", "z", "z", "z", "Hono", "z", "validator", "Hono", "z", "Hono", "z", "validator", "Hono", "z", "Hono", "z", "validator", "Hono", "z", "Hono", "validator", "z", "Hono", "z", "Hono", "validator", "z", "stream", "Hono", "z", "z", "lazy", "fn", "z", "z", "Pty", "log", "lazy", "z", "state", "remove", "list", "get", "create", "update", "resize", "write", "connect", "upgradeWebSocket", "Hono", "validator", "z", "socket", "Hono", "z", "Hono", "z", "validator", "Hono", "z", "Hono", "validator", "z", "Hono", "z", "headers", "log", "Hono", "validator", "z", "_", "Hono", "z", "z", "Hono", "z", "Hono", "validator", "z", "z", "Hono", "validator", "Hono", "z", "Effect", "Layer", "ServiceMap", "z", "ProviderAuth", "methods", "authorize", "callback", "mapValues", "log", "Hono", "z", "mapValues", "validator", "Hono", "log", "Hono", "stream", "log", "log", "app", "Hono", "z", "validator", "response", "headers", "Hono", "streamSSE", "z", "log", "z", "streamSSE", "stream", "Hono", "validator", "log", "MDNS", "log", "Server", "log", "app", "Hono", "z", "validator", "createNodeWebSocket", "server"]
7
- }