@openbuilder/cli 0.50.42 → 0.50.44

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 (82) hide show
  1. package/dist/chunks/{Banner-C-FTiOIR.js → Banner-BlktOjfl.js} +2 -2
  2. package/dist/chunks/Banner-BlktOjfl.js.map +1 -0
  3. package/dist/chunks/_commonjsHelpers-h-Bqc03Z.js +34 -0
  4. package/dist/chunks/_commonjsHelpers-h-Bqc03Z.js.map +1 -0
  5. package/dist/chunks/auto-update-Dq2PFvjt.js +1 -0
  6. package/dist/chunks/auto-update-Dq2PFvjt.js.map +1 -0
  7. package/dist/chunks/build-D0qYqIq0.js +1 -0
  8. package/dist/chunks/build-D0qYqIq0.js.map +1 -0
  9. package/dist/chunks/cleanup-qVTsA3tk.js +1 -0
  10. package/dist/chunks/cleanup-qVTsA3tk.js.map +1 -0
  11. package/dist/chunks/cli-auth-ChCnxlFl.js +1 -0
  12. package/dist/chunks/cli-auth-ChCnxlFl.js.map +1 -0
  13. package/dist/chunks/cli-error-BjQwvWtK.js +1 -0
  14. package/dist/chunks/cli-error-BjQwvWtK.js.map +1 -0
  15. package/dist/chunks/config-BGP1jZJ4.js +1 -0
  16. package/dist/chunks/config-BGP1jZJ4.js.map +1 -0
  17. package/dist/chunks/config-manager-BkbjtN-H.js +1 -0
  18. package/dist/chunks/config-manager-BkbjtN-H.js.map +1 -0
  19. package/dist/chunks/database-BvAbD4sP.js +1 -0
  20. package/dist/chunks/database-BvAbD4sP.js.map +1 -0
  21. package/dist/chunks/database-setup-BYjIRAmT.js +1 -0
  22. package/dist/chunks/database-setup-BYjIRAmT.js.map +1 -0
  23. package/dist/chunks/devtools-7A3EXJhY.js +75 -0
  24. package/dist/chunks/devtools-7A3EXJhY.js.map +1 -0
  25. package/dist/chunks/exports-ij9sv4UM.js +7793 -0
  26. package/dist/chunks/exports-ij9sv4UM.js.map +1 -0
  27. package/dist/chunks/index-oFqGtEeF.js +119 -0
  28. package/dist/chunks/index-oFqGtEeF.js.map +1 -0
  29. package/dist/chunks/{init-DNyPS_SR.js → init-BsQ3dhwf.js} +9 -9
  30. package/dist/chunks/init-BsQ3dhwf.js.map +1 -0
  31. package/dist/chunks/{init-tui-EFMXj-MG.js → init-tui-Dvk6Ndvl.js} +8 -8
  32. package/dist/chunks/init-tui-Dvk6Ndvl.js.map +1 -0
  33. package/dist/chunks/logger-ZpJi7chw.js +1 -0
  34. package/dist/chunks/logger-ZpJi7chw.js.map +1 -0
  35. package/dist/chunks/login-BhtodVsj.js +1 -0
  36. package/dist/chunks/login-BhtodVsj.js.map +1 -0
  37. package/dist/chunks/logout-CDDASeuQ.js +1 -0
  38. package/dist/chunks/logout-CDDASeuQ.js.map +1 -0
  39. package/dist/chunks/{main-tui-D-SG-Ba5.js → main-tui-Cklcr3FX.js} +10 -10
  40. package/dist/chunks/main-tui-Cklcr3FX.js.map +1 -0
  41. package/dist/chunks/manager-CvGX9qqe.js +1 -0
  42. package/dist/chunks/manager-CvGX9qqe.js.map +1 -0
  43. package/dist/chunks/{port-allocator-B0q7xkLs.js → port-allocator-Ct3ioni4.js} +2 -34
  44. package/dist/chunks/port-allocator-Ct3ioni4.js.map +1 -0
  45. package/dist/chunks/process-killer-CaUL7Kpl.js +1 -0
  46. package/dist/chunks/process-killer-CaUL7Kpl.js.map +1 -0
  47. package/dist/chunks/prompts-1QbE_bRr.js +1 -0
  48. package/dist/chunks/prompts-1QbE_bRr.js.map +1 -0
  49. package/dist/chunks/repo-cloner-CpOQjFSo.js +1 -0
  50. package/dist/chunks/repo-cloner-CpOQjFSo.js.map +1 -0
  51. package/dist/chunks/repo-detector-B_oj696o.js +1 -0
  52. package/dist/chunks/repo-detector-B_oj696o.js.map +1 -0
  53. package/dist/chunks/{run-Cor14S0I.js → run-wycadErJ.js} +15 -28
  54. package/dist/chunks/run-wycadErJ.js.map +1 -0
  55. package/dist/chunks/runner-logger-instance-nDWv2h2T.js +1 -0
  56. package/dist/chunks/runner-logger-instance-nDWv2h2T.js.map +1 -0
  57. package/dist/chunks/spinner-BJL9zWAJ.js +1 -0
  58. package/dist/chunks/spinner-BJL9zWAJ.js.map +1 -0
  59. package/dist/chunks/{start-k9iGDVWo.js → start-CQKEEma-.js} +8 -7
  60. package/dist/chunks/start-CQKEEma-.js.map +1 -0
  61. package/dist/chunks/start-traditional-uoLZXdxm.js +1 -0
  62. package/dist/chunks/start-traditional-uoLZXdxm.js.map +1 -0
  63. package/dist/chunks/status-cS8YwtUx.js +1 -0
  64. package/dist/chunks/status-cS8YwtUx.js.map +1 -0
  65. package/dist/chunks/{vendor-react-CXgiD1Dl.js → theme-CktnrDZj.js} +47 -227
  66. package/dist/chunks/theme-CktnrDZj.js.map +1 -0
  67. package/dist/chunks/upgrade-CKjl4HlB.js +1 -0
  68. package/dist/chunks/upgrade-CKjl4HlB.js.map +1 -0
  69. package/dist/chunks/use-app-Cj2bzWaw.js +10 -0
  70. package/dist/chunks/use-app-Cj2bzWaw.js.map +1 -0
  71. package/dist/chunks/{useBuildState-DscLOZLl.js → useBuildState-pcDGDakI.js} +2 -2
  72. package/dist/chunks/useBuildState-pcDGDakI.js.map +1 -0
  73. package/dist/cli/index.js +6 -5
  74. package/dist/cli/index.js.map +1 -0
  75. package/dist/index.js +2044 -106
  76. package/dist/index.js.map +1 -0
  77. package/dist/instrument.js +64119 -37
  78. package/dist/instrument.js.map +1 -0
  79. package/package.json +1 -1
  80. package/dist/chunks/theme-DhorI2Hb.js +0 -43
  81. package/dist/chunks/vendor-ai-sdk-CSJ0bw9X.js +0 -1970
  82. package/dist/chunks/vendor-sentry-CqA9P3UG.js +0 -71910
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/dist/index.mjs","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.9_zod@4.2.1/node_modules/@ai-sdk/provider-utils/dist/index.mjs","../../../node_modules/.pnpm/ai-sdk-provider-claude-code@file+apps+runner+vendor+ai-sdk-provider-claude-code-LOCAL.tgz_zod_hy3iofocvb27nmkyiak64tzpk4/node_modules/ai-sdk-provider-claude-code/dist/index.js","../src/lib/permissions/project-scoped-handler.ts","../src/lib/skills.ts","../../../packages/agent-core/dist/index.js","../src/lib/native-claude-sdk.ts","../src/lib/opencode-sdk.ts","../../../packages/agent-core/dist/lib/claude/tools.js","../../../packages/agent-core/dist/lib/logging/build-logger.js","../../../packages/agent-core/dist/lib/agents/index.js","../src/lib/build/engine.ts","../src/lib/process-manager.ts","../src/lib/workspace.ts","../src/lib/message-transformer.ts","../src/lib/ai-sdk-adapter.ts","../src/lib/codex-sdk-adapter.ts","../src/lib/templates/config.ts","../src/lib/templates/downloader.ts","../src/lib/build-orchestrator.ts","../../../packages/agent-core/dist/config/tags.js","../src/lib/project-analyzer.ts","../src/lib/port-checker.ts","../src/lib/hmr-proxy-manager.ts","../src/index.ts"],"sourcesContent":["// src/errors/ai-sdk-error.ts\nvar marker = \"vercel.ai.error\";\nvar symbol = Symbol.for(marker);\nvar _a;\nvar _AISDKError = class _AISDKError extends Error {\n /**\n * Creates an AI SDK Error.\n *\n * @param {Object} params - The parameters for creating the error.\n * @param {string} params.name - The name of the error.\n * @param {string} params.message - The error message.\n * @param {unknown} [params.cause] - The underlying cause of the error.\n */\n constructor({\n name: name14,\n message,\n cause\n }) {\n super(message);\n this[_a] = true;\n this.name = name14;\n this.cause = cause;\n }\n /**\n * Checks if the given error is an AI SDK Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n */\n static isInstance(error) {\n return _AISDKError.hasMarker(error, marker);\n }\n static hasMarker(error, marker15) {\n const markerSymbol = Symbol.for(marker15);\n return error != null && typeof error === \"object\" && markerSymbol in error && typeof error[markerSymbol] === \"boolean\" && error[markerSymbol] === true;\n }\n};\n_a = symbol;\nvar AISDKError = _AISDKError;\n\n// src/errors/api-call-error.ts\nvar name = \"AI_APICallError\";\nvar marker2 = `vercel.ai.error.${name}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2;\nvar APICallError = class extends AISDKError {\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseHeaders,\n responseBody,\n cause,\n isRetryable = statusCode != null && (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500),\n // server error\n data\n }) {\n super({ name, message, cause });\n this[_a2] = true;\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseHeaders = responseHeaders;\n this.responseBody = responseBody;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker2);\n }\n};\n_a2 = symbol2;\n\n// src/errors/empty-response-body-error.ts\nvar name2 = \"AI_EmptyResponseBodyError\";\nvar marker3 = `vercel.ai.error.${name2}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3;\nvar EmptyResponseBodyError = class extends AISDKError {\n // used in isInstance\n constructor({ message = \"Empty response body\" } = {}) {\n super({ name: name2, message });\n this[_a3] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker3);\n }\n};\n_a3 = symbol3;\n\n// src/errors/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return JSON.stringify(error);\n}\n\n// src/errors/invalid-argument-error.ts\nvar name3 = \"AI_InvalidArgumentError\";\nvar marker4 = `vercel.ai.error.${name3}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4;\nvar InvalidArgumentError = class extends AISDKError {\n constructor({\n message,\n cause,\n argument\n }) {\n super({ name: name3, message, cause });\n this[_a4] = true;\n this.argument = argument;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker4);\n }\n};\n_a4 = symbol4;\n\n// src/errors/invalid-prompt-error.ts\nvar name4 = \"AI_InvalidPromptError\";\nvar marker5 = `vercel.ai.error.${name4}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5;\nvar InvalidPromptError = class extends AISDKError {\n constructor({\n prompt,\n message,\n cause\n }) {\n super({ name: name4, message: `Invalid prompt: ${message}`, cause });\n this[_a5] = true;\n this.prompt = prompt;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker5);\n }\n};\n_a5 = symbol5;\n\n// src/errors/invalid-response-data-error.ts\nvar name5 = \"AI_InvalidResponseDataError\";\nvar marker6 = `vercel.ai.error.${name5}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6;\nvar InvalidResponseDataError = class extends AISDKError {\n constructor({\n data,\n message = `Invalid response data: ${JSON.stringify(data)}.`\n }) {\n super({ name: name5, message });\n this[_a6] = true;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker6);\n }\n};\n_a6 = symbol6;\n\n// src/errors/json-parse-error.ts\nvar name6 = \"AI_JSONParseError\";\nvar marker7 = `vercel.ai.error.${name6}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7;\nvar JSONParseError = class extends AISDKError {\n constructor({ text, cause }) {\n super({\n name: name6,\n message: `JSON parsing failed: Text: ${text}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a7] = true;\n this.text = text;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker7);\n }\n};\n_a7 = symbol7;\n\n// src/errors/load-api-key-error.ts\nvar name7 = \"AI_LoadAPIKeyError\";\nvar marker8 = `vercel.ai.error.${name7}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8;\nvar LoadAPIKeyError = class extends AISDKError {\n // used in isInstance\n constructor({ message }) {\n super({ name: name7, message });\n this[_a8] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker8);\n }\n};\n_a8 = symbol8;\n\n// src/errors/load-setting-error.ts\nvar name8 = \"AI_LoadSettingError\";\nvar marker9 = `vercel.ai.error.${name8}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9;\nvar LoadSettingError = class extends AISDKError {\n // used in isInstance\n constructor({ message }) {\n super({ name: name8, message });\n this[_a9] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker9);\n }\n};\n_a9 = symbol9;\n\n// src/errors/no-content-generated-error.ts\nvar name9 = \"AI_NoContentGeneratedError\";\nvar marker10 = `vercel.ai.error.${name9}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10;\nvar NoContentGeneratedError = class extends AISDKError {\n // used in isInstance\n constructor({\n message = \"No content generated.\"\n } = {}) {\n super({ name: name9, message });\n this[_a10] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker10);\n }\n};\n_a10 = symbol10;\n\n// src/errors/no-such-model-error.ts\nvar name10 = \"AI_NoSuchModelError\";\nvar marker11 = `vercel.ai.error.${name10}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11;\nvar NoSuchModelError = class extends AISDKError {\n constructor({\n errorName = name10,\n modelId,\n modelType,\n message = `No such ${modelType}: ${modelId}`\n }) {\n super({ name: errorName, message });\n this[_a11] = true;\n this.modelId = modelId;\n this.modelType = modelType;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker11);\n }\n};\n_a11 = symbol11;\n\n// src/errors/too-many-embedding-values-for-call-error.ts\nvar name11 = \"AI_TooManyEmbeddingValuesForCallError\";\nvar marker12 = `vercel.ai.error.${name11}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12;\nvar TooManyEmbeddingValuesForCallError = class extends AISDKError {\n constructor(options) {\n super({\n name: name11,\n message: `Too many values for a single embedding call. The ${options.provider} model \"${options.modelId}\" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.`\n });\n this[_a12] = true;\n this.provider = options.provider;\n this.modelId = options.modelId;\n this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall;\n this.values = options.values;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker12);\n }\n};\n_a12 = symbol12;\n\n// src/errors/type-validation-error.ts\nvar name12 = \"AI_TypeValidationError\";\nvar marker13 = `vercel.ai.error.${name12}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13;\nvar _TypeValidationError = class _TypeValidationError extends AISDKError {\n constructor({ value, cause }) {\n super({\n name: name12,\n message: `Type validation failed: Value: ${JSON.stringify(value)}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a13] = true;\n this.value = value;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker13);\n }\n /**\n * Wraps an error into a TypeValidationError.\n * If the cause is already a TypeValidationError with the same value, it returns the cause.\n * Otherwise, it creates a new TypeValidationError.\n *\n * @param {Object} params - The parameters for wrapping the error.\n * @param {unknown} params.value - The value that failed validation.\n * @param {unknown} params.cause - The original error or cause of the validation failure.\n * @returns {TypeValidationError} A TypeValidationError instance.\n */\n static wrap({\n value,\n cause\n }) {\n return _TypeValidationError.isInstance(cause) && cause.value === value ? cause : new _TypeValidationError({ value, cause });\n }\n};\n_a13 = symbol13;\nvar TypeValidationError = _TypeValidationError;\n\n// src/errors/unsupported-functionality-error.ts\nvar name13 = \"AI_UnsupportedFunctionalityError\";\nvar marker14 = `vercel.ai.error.${name13}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14;\nvar UnsupportedFunctionalityError = class extends AISDKError {\n constructor({\n functionality,\n message = `'${functionality}' functionality not supported.`\n }) {\n super({ name: name13, message });\n this[_a14] = true;\n this.functionality = functionality;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker14);\n }\n};\n_a14 = symbol14;\n\n// src/json-value/is-json.ts\nfunction isJSONValue(value) {\n if (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return true;\n }\n if (Array.isArray(value)) {\n return value.every(isJSONValue);\n }\n if (typeof value === \"object\") {\n return Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n );\n }\n return false;\n}\nfunction isJSONArray(value) {\n return Array.isArray(value) && value.every(isJSONValue);\n}\nfunction isJSONObject(value) {\n return value != null && typeof value === \"object\" && Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n );\n}\nexport {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidArgumentError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n getErrorMessage,\n isJSONArray,\n isJSONObject,\n isJSONValue\n};\n//# sourceMappingURL=index.mjs.map","// src/combine-headers.ts\nfunction combineHeaders(...headers) {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...currentHeaders != null ? currentHeaders : {}\n }),\n {}\n );\n}\n\n// src/convert-async-iterator-to-readable-stream.ts\nfunction convertAsyncIteratorToReadableStream(iterator) {\n return new ReadableStream({\n /**\n * Called when the consumer wants to pull more data from the stream.\n *\n * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n * @returns {Promise<void>}\n */\n async pull(controller) {\n try {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n /**\n * Called when the consumer cancels the stream.\n */\n cancel() {\n }\n });\n}\n\n// src/delay.ts\nasync function delay(delayInMs, options) {\n if (delayInMs == null) {\n return Promise.resolve();\n }\n const signal = options == null ? void 0 : options.abortSignal;\n return new Promise((resolve2, reject) => {\n if (signal == null ? void 0 : signal.aborted) {\n reject(createAbortError());\n return;\n }\n const timeoutId = setTimeout(() => {\n cleanup();\n resolve2();\n }, delayInMs);\n const cleanup = () => {\n clearTimeout(timeoutId);\n signal == null ? void 0 : signal.removeEventListener(\"abort\", onAbort);\n };\n const onAbort = () => {\n cleanup();\n reject(createAbortError());\n };\n signal == null ? void 0 : signal.addEventListener(\"abort\", onAbort);\n });\n}\nfunction createAbortError() {\n return new DOMException(\"Delay was aborted\", \"AbortError\");\n}\n\n// src/extract-response-headers.ts\nfunction extractResponseHeaders(response) {\n return Object.fromEntries([...response.headers]);\n}\n\n// src/get-runtime-environment-user-agent.ts\nfunction getRuntimeEnvironmentUserAgent(globalThisAny = globalThis) {\n var _a, _b, _c;\n if (globalThisAny.window) {\n return `runtime/browser`;\n }\n if ((_a = globalThisAny.navigator) == null ? void 0 : _a.userAgent) {\n return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n }\n if ((_c = (_b = globalThisAny.process) == null ? void 0 : _b.versions) == null ? void 0 : _c.node) {\n return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n }\n if (globalThisAny.EdgeRuntime) {\n return `runtime/vercel-edge`;\n }\n return \"runtime/unknown\";\n}\n\n// src/remove-undefined-entries.ts\nfunction removeUndefinedEntries(record) {\n return Object.fromEntries(\n Object.entries(record).filter(([_key, value]) => value != null)\n );\n}\n\n// src/with-user-agent-suffix.ts\nfunction withUserAgentSuffix(headers, ...userAgentSuffixParts) {\n const cleanedHeaders = removeUndefinedEntries(\n headers != null ? headers : {}\n );\n const normalizedHeaders = new Headers(cleanedHeaders);\n const currentUserAgentHeader = normalizedHeaders.get(\"user-agent\") || \"\";\n normalizedHeaders.set(\n \"user-agent\",\n [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(\" \")\n );\n return Object.fromEntries(normalizedHeaders);\n}\n\n// src/generate-id.ts\nimport { InvalidArgumentError } from \"@ai-sdk/provider\";\nvar createIdGenerator = ({\n prefix,\n size = 16,\n alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n separator = \"-\"\n} = {}) => {\n const generator = () => {\n const alphabetLength = alphabet.length;\n const chars = new Array(size);\n for (let i = 0; i < size; i++) {\n chars[i] = alphabet[Math.random() * alphabetLength | 0];\n }\n return chars.join(\"\");\n };\n if (prefix == null) {\n return generator;\n }\n if (alphabet.includes(separator)) {\n throw new InvalidArgumentError({\n argument: \"separator\",\n message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`\n });\n }\n return () => `${prefix}${separator}${generator()}`;\n};\nvar generateId = createIdGenerator();\n\n// src/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return JSON.stringify(error);\n}\n\n// src/get-from-api.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\n\n// src/handle-fetch-error.ts\nimport { APICallError } from \"@ai-sdk/provider\";\n\n// src/is-abort-error.ts\nfunction isAbortError(error) {\n return (error instanceof Error || error instanceof DOMException) && (error.name === \"AbortError\" || error.name === \"ResponseAborted\" || // Next.js\n error.name === \"TimeoutError\");\n}\n\n// src/handle-fetch-error.ts\nvar FETCH_FAILED_ERROR_MESSAGES = [\"fetch failed\", \"failed to fetch\"];\nfunction handleFetchError({\n error,\n url,\n requestBodyValues\n}) {\n if (isAbortError(error)) {\n return error;\n }\n if (error instanceof TypeError && FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())) {\n const cause = error.cause;\n if (cause != null) {\n return new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues,\n isRetryable: true\n // retry when network error\n });\n }\n }\n return error;\n}\n\n// src/version.ts\nvar VERSION = true ? \"3.0.9\" : \"0.0.0-test\";\n\n// src/get-from-api.ts\nvar getOriginalFetch = () => globalThis.fetch;\nvar getFromApi = async ({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n ),\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n throw new APICallError2({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError2({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: {} });\n }\n};\n\n// src/inject-json-instruction.ts\nvar DEFAULT_SCHEMA_PREFIX = \"JSON schema:\";\nvar DEFAULT_SCHEMA_SUFFIX = \"You MUST answer with a JSON object that matches the JSON schema above.\";\nvar DEFAULT_GENERIC_SUFFIX = \"You MUST answer with JSON.\";\nfunction injectJsonInstruction({\n prompt,\n schema,\n schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : void 0,\n schemaSuffix = schema != null ? DEFAULT_SCHEMA_SUFFIX : DEFAULT_GENERIC_SUFFIX\n}) {\n return [\n prompt != null && prompt.length > 0 ? prompt : void 0,\n prompt != null && prompt.length > 0 ? \"\" : void 0,\n // add a newline if prompt is not null\n schemaPrefix,\n schema != null ? JSON.stringify(schema) : void 0,\n schemaSuffix\n ].filter((line) => line != null).join(\"\\n\");\n}\nfunction injectJsonInstructionIntoMessages({\n messages,\n schema,\n schemaPrefix,\n schemaSuffix\n}) {\n var _a, _b;\n const systemMessage = ((_a = messages[0]) == null ? void 0 : _a.role) === \"system\" ? { ...messages[0] } : { role: \"system\", content: \"\" };\n systemMessage.content = injectJsonInstruction({\n prompt: systemMessage.content,\n schema,\n schemaPrefix,\n schemaSuffix\n });\n return [\n systemMessage,\n ...((_b = messages[0]) == null ? void 0 : _b.role) === \"system\" ? messages.slice(1) : messages\n ];\n}\n\n// src/is-url-supported.ts\nfunction isUrlSupported({\n mediaType,\n url,\n supportedUrls\n}) {\n url = url.toLowerCase();\n mediaType = mediaType.toLowerCase();\n return Object.entries(supportedUrls).map(([key, value]) => {\n const mediaType2 = key.toLowerCase();\n return mediaType2 === \"*\" || mediaType2 === \"*/*\" ? { mediaTypePrefix: \"\", regexes: value } : { mediaTypePrefix: mediaType2.replace(/\\*/, \"\"), regexes: value };\n }).filter(({ mediaTypePrefix }) => mediaType.startsWith(mediaTypePrefix)).flatMap(({ regexes }) => regexes).some((pattern) => pattern.test(url));\n}\n\n// src/load-api-key.ts\nimport { LoadAPIKeyError } from \"@ai-sdk/provider\";\nfunction loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = \"apiKey\",\n description\n}) {\n if (typeof apiKey === \"string\") {\n return apiKey;\n }\n if (apiKey != null) {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`\n });\n }\n apiKey = process.env[environmentVariableName];\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof apiKey !== \"string\") {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return apiKey;\n}\n\n// src/load-optional-setting.ts\nfunction loadOptionalSetting({\n settingValue,\n environmentVariableName\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null || typeof process === \"undefined\") {\n return void 0;\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null || typeof settingValue !== \"string\") {\n return void 0;\n }\n return settingValue;\n}\n\n// src/load-setting.ts\nimport { LoadSettingError } from \"@ai-sdk/provider\";\nfunction loadSetting({\n settingValue,\n environmentVariableName,\n settingName,\n description\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null) {\n throw new LoadSettingError({\n message: `${description} setting must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`\n });\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null) {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof settingValue !== \"string\") {\n throw new LoadSettingError({\n message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return settingValue;\n}\n\n// src/media-type-to-extension.ts\nfunction mediaTypeToExtension(mediaType) {\n var _a;\n const [_type, subtype = \"\"] = mediaType.toLowerCase().split(\"/\");\n return (_a = {\n mpeg: \"mp3\",\n \"x-wav\": \"wav\",\n opus: \"ogg\",\n mp4: \"m4a\",\n \"x-m4a\": \"m4a\"\n }[subtype]) != null ? _a : subtype;\n}\n\n// src/parse-json.ts\nimport {\n JSONParseError,\n TypeValidationError as TypeValidationError3\n} from \"@ai-sdk/provider\";\n\n// src/secure-json-parse.ts\nvar suspectProtoRx = /\"__proto__\"\\s*:/;\nvar suspectConstructorRx = /\"constructor\"\\s*:/;\nfunction _parse(text) {\n const obj = JSON.parse(text);\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n return obj;\n }\n return filter(obj);\n}\nfunction filter(obj) {\n let next = [obj];\n while (next.length) {\n const nodes = next;\n next = [];\n for (const node of nodes) {\n if (Object.prototype.hasOwnProperty.call(node, \"__proto__\")) {\n throw new SyntaxError(\"Object contains forbidden prototype property\");\n }\n if (Object.prototype.hasOwnProperty.call(node, \"constructor\") && Object.prototype.hasOwnProperty.call(node.constructor, \"prototype\")) {\n throw new SyntaxError(\"Object contains forbidden prototype property\");\n }\n for (const key in node) {\n const value = node[key];\n if (value && typeof value === \"object\") {\n next.push(value);\n }\n }\n }\n }\n return obj;\n}\nfunction secureJsonParse(text) {\n const { stackTraceLimit } = Error;\n Error.stackTraceLimit = 0;\n try {\n return _parse(text);\n } finally {\n Error.stackTraceLimit = stackTraceLimit;\n }\n}\n\n// src/validate-types.ts\nimport { TypeValidationError as TypeValidationError2 } from \"@ai-sdk/provider\";\n\n// src/validator.ts\nimport { TypeValidationError } from \"@ai-sdk/provider\";\nvar validatorSymbol = Symbol.for(\"vercel.ai.validator\");\nfunction validator(validate) {\n return { [validatorSymbol]: true, validate };\n}\nfunction isValidator(value) {\n return typeof value === \"object\" && value !== null && validatorSymbol in value && value[validatorSymbol] === true && \"validate\" in value;\n}\nfunction asValidator(value) {\n return isValidator(value) ? value : standardSchemaValidator(value);\n}\nfunction standardSchemaValidator(standardSchema) {\n return validator(async (value) => {\n const result = await standardSchema[\"~standard\"].validate(value);\n return result.issues == null ? { success: true, value: result.value } : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: result.issues\n })\n };\n });\n}\n\n// src/validate-types.ts\nasync function validateTypes({\n value,\n schema\n}) {\n const result = await safeValidateTypes({ value, schema });\n if (!result.success) {\n throw TypeValidationError2.wrap({ value, cause: result.error });\n }\n return result.value;\n}\nasync function safeValidateTypes({\n value,\n schema\n}) {\n const validator2 = asValidator(schema);\n try {\n if (validator2.validate == null) {\n return { success: true, value, rawValue: value };\n }\n const result = await validator2.validate(value);\n if (result.success) {\n return { success: true, value: result.value, rawValue: value };\n }\n return {\n success: false,\n error: TypeValidationError2.wrap({ value, cause: result.error }),\n rawValue: value\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError2.wrap({ value, cause: error }),\n rawValue: value\n };\n }\n}\n\n// src/parse-json.ts\nasync function parseJSON({\n text,\n schema\n}) {\n try {\n const value = secureJsonParse(text);\n if (schema == null) {\n return value;\n }\n return validateTypes({ value, schema });\n } catch (error) {\n if (JSONParseError.isInstance(error) || TypeValidationError3.isInstance(error)) {\n throw error;\n }\n throw new JSONParseError({ text, cause: error });\n }\n}\nasync function safeParseJSON({\n text,\n schema\n}) {\n try {\n const value = secureJsonParse(text);\n if (schema == null) {\n return { success: true, value, rawValue: value };\n }\n return await safeValidateTypes({ value, schema });\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error }),\n rawValue: void 0\n };\n }\n}\nfunction isParsableJson(input) {\n try {\n secureJsonParse(input);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// src/parse-json-event-stream.ts\nimport {\n EventSourceParserStream\n} from \"eventsource-parser/stream\";\nfunction parseJsonEventStream({\n stream,\n schema\n}) {\n return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream()).pipeThrough(\n new TransformStream({\n async transform({ data }, controller) {\n if (data === \"[DONE]\") {\n return;\n }\n controller.enqueue(await safeParseJSON({ text: data, schema }));\n }\n })\n );\n}\n\n// src/parse-provider-options.ts\nimport { InvalidArgumentError as InvalidArgumentError2 } from \"@ai-sdk/provider\";\nasync function parseProviderOptions({\n provider,\n providerOptions,\n schema\n}) {\n if ((providerOptions == null ? void 0 : providerOptions[provider]) == null) {\n return void 0;\n }\n const parsedProviderOptions = await safeValidateTypes({\n value: providerOptions[provider],\n schema\n });\n if (!parsedProviderOptions.success) {\n throw new InvalidArgumentError2({\n argument: \"providerOptions\",\n message: `invalid ${provider} provider options`,\n cause: parsedProviderOptions.error\n });\n }\n return parsedProviderOptions.value;\n}\n\n// src/post-to-api.ts\nimport { APICallError as APICallError3 } from \"@ai-sdk/provider\";\nvar getOriginalFetch2 = () => globalThis.fetch;\nvar postJsonToApi = async ({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => postToApi({\n url,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: {\n content: JSON.stringify(body),\n values: body\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postFormDataToApi = async ({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries(formData.entries())\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postToApi = async ({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch2()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n ),\n body: body.content,\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (isAbortError(error) || APICallError3.isInstance(error)) {\n throw error;\n }\n throw new APICallError3({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError3.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError3({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: body.values });\n }\n};\n\n// src/types/tool.ts\nfunction tool(tool2) {\n return tool2;\n}\nfunction dynamicTool(tool2) {\n return { ...tool2, type: \"dynamic\" };\n}\n\n// src/provider-defined-tool-factory.ts\nfunction createProviderDefinedToolFactory({\n id,\n name,\n inputSchema\n}) {\n return ({\n execute,\n outputSchema,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }) => tool({\n type: \"provider-defined\",\n id,\n name,\n args,\n inputSchema,\n outputSchema,\n execute,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable\n });\n}\nfunction createProviderDefinedToolFactoryWithOutputSchema({\n id,\n name,\n inputSchema,\n outputSchema\n}) {\n return ({\n execute,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }) => tool({\n type: \"provider-defined\",\n id,\n name,\n args,\n inputSchema,\n outputSchema,\n execute,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable\n });\n}\n\n// src/resolve.ts\nasync function resolve(value) {\n if (typeof value === \"function\") {\n value = value();\n }\n return Promise.resolve(value);\n}\n\n// src/response-handler.ts\nimport { APICallError as APICallError4, EmptyResponseBodyError } from \"@ai-sdk/provider\";\nvar createJsonErrorResponseHandler = ({\n errorSchema,\n errorToMessage,\n isRetryable\n}) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const responseHeaders = extractResponseHeaders(response);\n if (responseBody.trim() === \"\") {\n return {\n responseHeaders,\n value: new APICallError4({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n try {\n const parsedError = await parseJSON({\n text: responseBody,\n schema: errorSchema\n });\n return {\n responseHeaders,\n value: new APICallError4({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError)\n })\n };\n } catch (parseError) {\n return {\n responseHeaders,\n value: new APICallError4({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n};\nvar createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n return {\n responseHeaders,\n value: parseJsonEventStream({\n stream: response.body,\n schema: chunkSchema\n })\n };\n};\nvar createJsonStreamResponseHandler = (chunkSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n let buffer = \"\";\n return {\n responseHeaders,\n value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(\n new TransformStream({\n async transform(chunkText, controller) {\n if (chunkText.endsWith(\"\\n\")) {\n controller.enqueue(\n await safeParseJSON({\n text: buffer + chunkText,\n schema: chunkSchema\n })\n );\n buffer = \"\";\n } else {\n buffer += chunkText;\n }\n }\n })\n )\n };\n};\nvar createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const parsedResult = await safeParseJSON({\n text: responseBody,\n schema: responseSchema\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!parsedResult.success) {\n throw new APICallError4({\n message: \"Invalid JSON response\",\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues\n });\n }\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue\n };\n};\nvar createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (!response.body) {\n throw new APICallError4({\n message: \"Response body is empty\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0\n });\n }\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer)\n };\n } catch (error) {\n throw new APICallError4({\n message: \"Failed to read response as array buffer\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0,\n cause: error\n });\n }\n};\nvar createStatusCodeErrorResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n return {\n responseHeaders,\n value: new APICallError4({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody\n })\n };\n};\n\n// src/zod-schema.ts\nimport * as z4 from \"zod/v4\";\n\n// src/zod-to-json-schema/get-relative-path.ts\nvar getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n\n// src/zod-to-json-schema/options.ts\nvar ignoreOverride = Symbol(\n \"Let zodToJsonSchema decide on which parser to use\"\n);\nvar defaultOptions = {\n name: void 0,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\"\n};\nvar getDefaultOptions = (options) => typeof options === \"string\" ? {\n ...defaultOptions,\n name: options\n} : {\n ...defaultOptions,\n ...options\n};\n\n// src/zod-to-json-schema/select-parser.ts\nimport { ZodFirstPartyTypeKind as ZodFirstPartyTypeKind3 } from \"zod/v3\";\n\n// src/zod-to-json-schema/parsers/any.ts\nfunction parseAnyDef() {\n return {};\n}\n\n// src/zod-to-json-schema/parsers/array.ts\nimport { ZodFirstPartyTypeKind } from \"zod/v3\";\nfunction parseArrayDef(def, refs) {\n var _a, _b, _c;\n const res = {\n type: \"array\"\n };\n if (((_a = def.type) == null ? void 0 : _a._def) && ((_c = (_b = def.type) == null ? void 0 : _b._def) == null ? void 0 : _c.typeName) !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"]\n });\n }\n if (def.minLength) {\n res.minItems = def.minLength.value;\n }\n if (def.maxLength) {\n res.maxItems = def.maxLength.value;\n }\n if (def.exactLength) {\n res.minItems = def.exactLength.value;\n res.maxItems = def.exactLength.value;\n }\n return res;\n}\n\n// src/zod-to-json-schema/parsers/bigint.ts\nfunction parseBigintDef(def) {\n const res = {\n type: \"integer\",\n format: \"int64\"\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case \"max\":\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case \"multipleOf\":\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n\n// src/zod-to-json-schema/parsers/boolean.ts\nfunction parseBooleanDef() {\n return { type: \"boolean\" };\n}\n\n// src/zod-to-json-schema/parsers/branded.ts\nfunction parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n\n// src/zod-to-json-schema/parsers/catch.ts\nvar parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n\n// src/zod-to-json-schema/parsers/date.ts\nfunction parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy != null ? overrideDateStrategy : refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item))\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\"\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\"\n };\n case \"integer\":\n return integerDateParser(def);\n }\n}\nvar integerDateParser = (def) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\"\n };\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n res.minimum = check.value;\n break;\n case \"max\":\n res.maximum = check.value;\n break;\n }\n }\n return res;\n};\n\n// src/zod-to-json-schema/parsers/default.ts\nfunction parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue()\n };\n}\n\n// src/zod-to-json-schema/parsers/effects.ts\nfunction parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\" ? parseDef(_def.schema._def, refs) : parseAnyDef();\n}\n\n// src/zod-to-json-schema/parsers/enum.ts\nfunction parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values)\n };\n}\n\n// src/zod-to-json-schema/parsers/intersection.ts\nvar isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nfunction parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"]\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"]\n })\n ].filter((x) => !!x);\n const mergedAllOf = [];\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n } else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema && schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length ? { allOf: mergedAllOf } : void 0;\n}\n\n// src/zod-to-json-schema/parsers/literal.ts\nfunction parseLiteralDef(def) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" && parsedType !== \"number\" && parsedType !== \"boolean\" && parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\"\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value\n };\n}\n\n// src/zod-to-json-schema/parsers/record.ts\nimport {\n ZodFirstPartyTypeKind as ZodFirstPartyTypeKind2\n} from \"zod/v3\";\n\n// src/zod-to-json-schema/parsers/string.ts\nvar emojiRegex = void 0;\nvar zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === void 0) {\n emojiRegex = RegExp(\n \"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\",\n \"u\"\n );\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/\n};\nfunction parseStringDef(def, refs) {\n const res = {\n type: \"string\"\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n res.minLength = typeof res.minLength === \"number\" ? Math.max(res.minLength, check.value) : check.value;\n break;\n case \"max\":\n res.maxLength = typeof res.maxLength === \"number\" ? Math.min(res.maxLength, check.value) : check.value;\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(\n res,\n RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n check.message,\n refs\n );\n break;\n case \"endsWith\":\n addPattern(\n res,\n RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n check.message,\n refs\n );\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n res.minLength = typeof res.minLength === \"number\" ? Math.max(res.minLength, check.value) : check.value;\n res.maxLength = typeof res.maxLength === \"number\" ? Math.min(res.maxLength, check.value) : check.value;\n break;\n case \"includes\": {\n addPattern(\n res,\n RegExp(escapeLiteralCheckValue(check.value, refs)),\n check.message,\n refs\n );\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n res.contentEncoding = \"base64\";\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* @__PURE__ */ ((_) => {\n })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\" ? escapeNonAlphaNumeric(literal) : literal;\n}\nvar ALPHA_NUMERIC = new Set(\n \"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\"\n);\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\nfunction addFormat(schema, value, message, refs) {\n var _a;\n if (schema.format || ((_a = schema.anyOf) == null ? void 0 : _a.some((x) => x.format))) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format\n });\n delete schema.format;\n }\n schema.anyOf.push({\n format: value,\n ...message && refs.errorMessages && { errorMessage: { format: message } }\n });\n } else {\n schema.format = value;\n }\n}\nfunction addPattern(schema, regex, message, refs) {\n var _a;\n if (schema.pattern || ((_a = schema.allOf) == null ? void 0 : _a.some((x) => x.pattern))) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern\n });\n delete schema.pattern;\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...message && refs.errorMessages && { errorMessage: { pattern: message } }\n });\n } else {\n schema.pattern = stringifyRegExpWithFlags(regex, refs);\n }\n}\nfunction stringifyRegExpWithFlags(regex, refs) {\n var _a;\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n const flags = {\n i: regex.flags.includes(\"i\"),\n // Case-insensitive\n m: regex.flags.includes(\"m\"),\n // `^` and `$` matches adjacent to newline characters\n s: regex.flags.includes(\"s\")\n // `.` matches newlines\n };\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n } else if (source[i + 1] === \"-\" && ((_a = source[i + 2]) == null ? void 0 : _a.match(/[a-z]/))) {\n pattern += source[i];\n inCharRange = true;\n } else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n } else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\n]))`;\n continue;\n } else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\n` : `[${source[i]}\\r\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n } else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n } else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n } catch (e) {\n console.warn(\n `Could not convert regex pattern at ${refs.currentPath.join(\n \"/\"\n )} to a flag-independent form! Falling back to the flag-ignorant source`\n );\n return regex.source;\n }\n return pattern;\n}\n\n// src/zod-to-json-schema/parsers/record.ts\nfunction parseRecordDef(def, refs) {\n var _a, _b, _c, _d, _e, _f;\n const schema = {\n type: \"object\",\n additionalProperties: (_a = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"]\n })) != null ? _a : refs.allowedAdditionalProperties\n };\n if (((_b = def.keyType) == null ? void 0 : _b._def.typeName) === ZodFirstPartyTypeKind2.ZodString && ((_c = def.keyType._def.checks) == null ? void 0 : _c.length)) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType\n };\n } else if (((_d = def.keyType) == null ? void 0 : _d._def.typeName) === ZodFirstPartyTypeKind2.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values\n }\n };\n } else if (((_e = def.keyType) == null ? void 0 : _e._def.typeName) === ZodFirstPartyTypeKind2.ZodBranded && def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind2.ZodString && ((_f = def.keyType._def.type._def.checks) == null ? void 0 : _f.length)) {\n const { type, ...keyType } = parseBrandedDef(\n def.keyType._def,\n refs\n );\n return {\n ...schema,\n propertyNames: keyType\n };\n }\n return schema;\n}\n\n// src/zod-to-json-schema/parsers/map.ts\nfunction parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"]\n }) || parseAnyDef();\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"]\n }) || parseAnyDef();\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2\n }\n };\n}\n\n// src/zod-to-json-schema/parsers/native-enum.ts\nfunction parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(\n new Set(actualValues.map((values) => typeof values))\n );\n return {\n type: parsedTypes.length === 1 ? parsedTypes[0] === \"string\" ? \"string\" : \"number\" : [\"string\", \"number\"],\n enum: actualValues\n };\n}\n\n// src/zod-to-json-schema/parsers/never.ts\nfunction parseNeverDef() {\n return { not: parseAnyDef() };\n}\n\n// src/zod-to-json-schema/parsers/null.ts\nfunction parseNullDef() {\n return {\n type: \"null\"\n };\n}\n\n// src/zod-to-json-schema/parsers/union.ts\nvar primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\"\n};\nfunction parseUnionDef(def, refs) {\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n if (options.every(\n (x) => x._def.typeName in primitiveMappings && (!x._def.checks || !x._def.checks.length)\n )) {\n const types = options.reduce((types2, x) => {\n const type = primitiveMappings[x._def.typeName];\n return type && !types2.includes(type) ? [...types2, type] : types2;\n }, []);\n return {\n type: types.length > 1 ? types : types[0]\n };\n } else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n const types = options.reduce(\n (acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n },\n []\n );\n if (types.length === options.length) {\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce(\n (acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n },\n []\n )\n };\n }\n } else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce(\n (acc, x) => [\n ...acc,\n ...x._def.values.filter((x2) => !acc.includes(x2))\n ],\n []\n )\n };\n }\n return asAnyOf(def, refs);\n}\nvar asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map ? Array.from(def.options.values()) : def.options).map(\n (x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`]\n })\n ).filter(\n (x) => !!x && (!refs.strictUnions || typeof x === \"object\" && Object.keys(x).length > 0)\n );\n return anyOf.length ? { anyOf } : void 0;\n};\n\n// src/zod-to-json-schema/parsers/nullable.ts\nfunction parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(\n def.innerType._def.typeName\n ) && (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\"\n ]\n };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"]\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n\n// src/zod-to-json-schema/parsers/number.ts\nfunction parseNumberDef(def) {\n const res = {\n type: \"number\"\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n break;\n case \"min\":\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case \"max\":\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case \"multipleOf\":\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n\n// src/zod-to-json-schema/parsers/object.ts\nfunction parseObjectDef(def, refs) {\n const result = {\n type: \"object\",\n properties: {}\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === void 0 || propDef._def === void 0) {\n continue;\n }\n const propOptional = safeIsOptional(propDef);\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName]\n });\n if (parsedDef === void 0) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== void 0) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"]\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\" ? refs.allowedAdditionalProperties : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n } catch (e) {\n return true;\n }\n}\n\n// src/zod-to-json-schema/parsers/optional.ts\nvar parseOptionalDef = (def, refs) => {\n var _a;\n if (refs.currentPath.toString() === ((_a = refs.propertyPath) == null ? void 0 : _a.toString())) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"]\n });\n return innerSchema ? { anyOf: [{ not: parseAnyDef() }, innerSchema] } : parseAnyDef();\n};\n\n// src/zod-to-json-schema/parsers/pipeline.ts\nvar parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n } else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"]\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"]\n });\n return {\n allOf: [a, b].filter((x) => x !== void 0)\n };\n};\n\n// src/zod-to-json-schema/parsers/promise.ts\nfunction parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n\n// src/zod-to-json-schema/parsers/set.ts\nfunction parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"]\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items\n };\n if (def.minSize) {\n schema.minItems = def.minSize.value;\n }\n if (def.maxSize) {\n schema.maxItems = def.maxSize.value;\n }\n return schema;\n}\n\n// src/zod-to-json-schema/parsers/tuple.ts\nfunction parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items.map(\n (x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`]\n })\n ).reduce(\n (acc, x) => x === void 0 ? acc : [...acc, x],\n []\n ),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"]\n })\n };\n } else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items.map(\n (x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`]\n })\n ).reduce(\n (acc, x) => x === void 0 ? acc : [...acc, x],\n []\n )\n };\n }\n}\n\n// src/zod-to-json-schema/parsers/undefined.ts\nfunction parseUndefinedDef() {\n return {\n not: parseAnyDef()\n };\n}\n\n// src/zod-to-json-schema/parsers/unknown.ts\nfunction parseUnknownDef() {\n return parseAnyDef();\n}\n\n// src/zod-to-json-schema/parsers/readonly.ts\nvar parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n\n// src/zod-to-json-schema/select-parser.ts\nvar selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind3.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodNumber:\n return parseNumberDef(def);\n case ZodFirstPartyTypeKind3.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodBigInt:\n return parseBigintDef(def);\n case ZodFirstPartyTypeKind3.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind3.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodUndefined:\n return parseUndefinedDef();\n case ZodFirstPartyTypeKind3.ZodNull:\n return parseNullDef();\n case ZodFirstPartyTypeKind3.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodUnion:\n case ZodFirstPartyTypeKind3.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodLiteral:\n return parseLiteralDef(def);\n case ZodFirstPartyTypeKind3.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind3.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind3.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind3.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodNaN:\n case ZodFirstPartyTypeKind3.ZodNever:\n return parseNeverDef();\n case ZodFirstPartyTypeKind3.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodAny:\n return parseAnyDef();\n case ZodFirstPartyTypeKind3.ZodUnknown:\n return parseUnknownDef();\n case ZodFirstPartyTypeKind3.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind3.ZodFunction:\n case ZodFirstPartyTypeKind3.ZodVoid:\n case ZodFirstPartyTypeKind3.ZodSymbol:\n return void 0;\n default:\n return /* @__PURE__ */ ((_) => void 0)(typeName);\n }\n};\n\n// src/zod-to-json-schema/parse-def.ts\nfunction parseDef(def, refs, forceResolution = false) {\n var _a;\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = (_a = refs.override) == null ? void 0 : _a.call(\n refs,\n def,\n refs,\n seenItem,\n forceResolution\n );\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== void 0) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: void 0 };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n const jsonSchema2 = typeof jsonSchemaOrGetter === \"function\" ? parseDef(jsonSchemaOrGetter(), refs) : jsonSchemaOrGetter;\n if (jsonSchema2) {\n addMeta(def, refs, jsonSchema2);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema2, def, refs);\n newItem.jsonSchema = jsonSchema2;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema2;\n return jsonSchema2;\n}\nvar get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length && item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(\n `Recursive reference detected at ${refs.currentPath.join(\n \"/\"\n )}! Defaulting to any`\n );\n return parseAnyDef();\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef() : void 0;\n }\n }\n};\nvar addMeta = (def, refs, jsonSchema2) => {\n if (def.description) {\n jsonSchema2.description = def.description;\n }\n return jsonSchema2;\n};\n\n// src/zod-to-json-schema/refs.ts\nvar getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== void 0 ? [..._options.basePath, _options.definitionPath, _options.name] : _options.basePath;\n return {\n ..._options,\n currentPath,\n propertyPath: void 0,\n seen: new Map(\n Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: void 0\n }\n ])\n )\n };\n};\n\n// src/zod-to-json-schema/zod-to-json-schema.ts\nvar zodToJsonSchema = (schema, options) => {\n var _a;\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions ? Object.entries(options.definitions).reduce(\n (acc, [name2, schema2]) => {\n var _a2;\n return {\n ...acc,\n [name2]: (_a2 = parseDef(\n schema2._def,\n {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name2]\n },\n true\n )) != null ? _a2 : parseAnyDef()\n };\n },\n {}\n ) : void 0;\n const name = typeof options === \"string\" ? options : (options == null ? void 0 : options.nameStrategy) === \"title\" ? void 0 : options == null ? void 0 : options.name;\n const main = (_a = parseDef(\n schema._def,\n name === void 0 ? refs : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name]\n },\n false\n )) != null ? _a : parseAnyDef();\n const title = typeof options === \"object\" && options.name !== void 0 && options.nameStrategy === \"title\" ? options.name : void 0;\n if (title !== void 0) {\n main.title = title;\n }\n const combined = name === void 0 ? definitions ? {\n ...main,\n [refs.definitionPath]: definitions\n } : main : {\n $ref: [\n ...refs.$refStrategy === \"relative\" ? [] : refs.basePath,\n refs.definitionPath,\n name\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main\n }\n };\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n return combined;\n};\n\n// src/zod-to-json-schema/index.ts\nvar zod_to_json_schema_default = zodToJsonSchema;\n\n// src/zod-schema.ts\nfunction zod3Schema(zodSchema2, options) {\n var _a;\n const useReferences = (_a = options == null ? void 0 : options.useReferences) != null ? _a : false;\n return jsonSchema(\n zod_to_json_schema_default(zodSchema2, {\n $refStrategy: useReferences ? \"root\" : \"none\"\n }),\n {\n validate: async (value) => {\n const result = await zodSchema2.safeParseAsync(value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n }\n }\n );\n}\nfunction zod4Schema(zodSchema2, options) {\n var _a;\n const useReferences = (_a = options == null ? void 0 : options.useReferences) != null ? _a : false;\n const z4JSONSchema = z4.toJSONSchema(zodSchema2, {\n target: \"draft-7\",\n io: \"output\",\n reused: useReferences ? \"ref\" : \"inline\"\n });\n return jsonSchema(z4JSONSchema, {\n validate: async (value) => {\n const result = await z4.safeParseAsync(zodSchema2, value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n }\n });\n}\nfunction isZod4Schema(zodSchema2) {\n return \"_zod\" in zodSchema2;\n}\nfunction zodSchema(zodSchema2, options) {\n if (isZod4Schema(zodSchema2)) {\n return zod4Schema(zodSchema2, options);\n } else {\n return zod3Schema(zodSchema2, options);\n }\n}\n\n// src/schema.ts\nvar schemaSymbol = Symbol.for(\"vercel.ai.schema\");\nfunction jsonSchema(jsonSchema2, {\n validate\n} = {}) {\n return {\n [schemaSymbol]: true,\n _type: void 0,\n // should never be used directly\n [validatorSymbol]: true,\n jsonSchema: jsonSchema2,\n validate\n };\n}\nfunction isSchema(value) {\n return typeof value === \"object\" && value !== null && schemaSymbol in value && value[schemaSymbol] === true && \"jsonSchema\" in value && \"validate\" in value;\n}\nfunction asSchema(schema) {\n return schema == null ? jsonSchema({\n properties: {},\n additionalProperties: false\n }) : isSchema(schema) ? schema : zodSchema(schema);\n}\n\n// src/uint8-utils.ts\nvar { btoa, atob } = globalThis;\nfunction convertBase64ToUint8Array(base64String) {\n const base64Url = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const latin1string = atob(base64Url);\n return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));\n}\nfunction convertUint8ArrayToBase64(array) {\n let latin1string = \"\";\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n return btoa(latin1string);\n}\nfunction convertToBase64(value) {\n return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;\n}\n\n// src/without-trailing-slash.ts\nfunction withoutTrailingSlash(url) {\n return url == null ? void 0 : url.replace(/\\/$/, \"\");\n}\n\n// src/is-async-iterable.ts\nfunction isAsyncIterable(obj) {\n return obj != null && typeof obj[Symbol.asyncIterator] === \"function\";\n}\n\n// src/types/execute-tool.ts\nasync function* executeTool({\n execute,\n input,\n options\n}) {\n const result = execute(input, options);\n if (isAsyncIterable(result)) {\n let lastOutput;\n for await (const output of result) {\n lastOutput = output;\n yield { type: \"preliminary\", output };\n }\n yield { type: \"final\", output: lastOutput };\n } else {\n yield { type: \"final\", output: await result };\n }\n}\n\n// src/index.ts\nexport * from \"@standard-schema/spec\";\nimport {\n EventSourceParserStream as EventSourceParserStream2\n} from \"eventsource-parser/stream\";\nexport {\n EventSourceParserStream2 as EventSourceParserStream,\n VERSION,\n asSchema,\n asValidator,\n combineHeaders,\n convertAsyncIteratorToReadableStream,\n convertBase64ToUint8Array,\n convertToBase64,\n convertUint8ArrayToBase64,\n createBinaryResponseHandler,\n createEventSourceResponseHandler,\n createIdGenerator,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createJsonStreamResponseHandler,\n createProviderDefinedToolFactory,\n createProviderDefinedToolFactoryWithOutputSchema,\n createStatusCodeErrorResponseHandler,\n delay,\n dynamicTool,\n executeTool,\n extractResponseHeaders,\n generateId,\n getErrorMessage,\n getFromApi,\n getRuntimeEnvironmentUserAgent,\n injectJsonInstructionIntoMessages,\n isAbortError,\n isParsableJson,\n isUrlSupported,\n isValidator,\n jsonSchema,\n loadApiKey,\n loadOptionalSetting,\n loadSetting,\n mediaTypeToExtension,\n parseJSON,\n parseJsonEventStream,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\n postToApi,\n removeUndefinedEntries,\n resolve,\n safeParseJSON,\n safeValidateTypes,\n standardSchemaValidator,\n tool,\n validateTypes,\n validator,\n validatorSymbol,\n withUserAgentSuffix,\n withoutTrailingSlash,\n zodSchema\n};\n//# sourceMappingURL=index.mjs.map","// src/claude-code-provider.ts\nimport { NoSuchModelError as NoSuchModelError2 } from \"@ai-sdk/provider\";\n\n// src/claude-code-language-model.ts\nimport { NoSuchModelError } from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\n// src/convert-to-claude-code-messages.ts\nvar IMAGE_URL_WARNING = \"Image URLs are not supported by this provider; supply base64/data URLs.\";\nvar IMAGE_CONVERSION_WARNING = \"Unable to convert image content; supply base64/data URLs.\";\nfunction normalizeBase64(base64) {\n return base64.replace(/\\s+/g, \"\");\n}\nfunction isImageMimeType(mimeType) {\n return typeof mimeType === \"string\" && mimeType.trim().toLowerCase().startsWith(\"image/\");\n}\nfunction createImageContent(mediaType, data) {\n const trimmedType = mediaType.trim();\n const trimmedData = normalizeBase64(data.trim());\n if (!trimmedType || !trimmedData) {\n return void 0;\n }\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: trimmedType,\n data: trimmedData\n }\n };\n}\nfunction extractMimeType(candidate) {\n if (typeof candidate === \"string\" && candidate.trim()) {\n return candidate.trim();\n }\n return void 0;\n}\nfunction parseObjectImage(imageObj, fallbackMimeType) {\n const data = typeof imageObj.data === \"string\" ? imageObj.data : void 0;\n const mimeType = extractMimeType(\n imageObj.mimeType ?? imageObj.mediaType ?? imageObj.media_type ?? fallbackMimeType\n );\n if (!data || !mimeType) {\n return void 0;\n }\n return createImageContent(mimeType, data);\n}\nfunction parseStringImage(value, fallbackMimeType) {\n const trimmed = value.trim();\n if (/^https?:\\/\\//i.test(trimmed)) {\n return { warning: IMAGE_URL_WARNING };\n }\n const dataUrlMatch = trimmed.match(/^data:([^;]+);base64,(.+)$/i);\n if (dataUrlMatch) {\n const [, mediaType, data] = dataUrlMatch;\n const content = createImageContent(mediaType, data);\n return content ? { content } : { warning: IMAGE_CONVERSION_WARNING };\n }\n const base64Match = trimmed.match(/^base64:([^,]+),(.+)$/i);\n if (base64Match) {\n const [, explicitMimeType, data] = base64Match;\n const content = createImageContent(explicitMimeType, data);\n return content ? { content } : { warning: IMAGE_CONVERSION_WARNING };\n }\n if (fallbackMimeType) {\n const content = createImageContent(fallbackMimeType, trimmed);\n if (content) {\n return { content };\n }\n }\n return { warning: IMAGE_CONVERSION_WARNING };\n}\nfunction parseImagePart(part) {\n if (!part || typeof part !== \"object\") {\n return { warning: IMAGE_CONVERSION_WARNING };\n }\n const imageValue = part.image;\n const mimeType = extractMimeType(part.mimeType);\n if (typeof imageValue === \"string\") {\n return parseStringImage(imageValue, mimeType);\n }\n if (imageValue && typeof imageValue === \"object\") {\n const content = parseObjectImage(imageValue, mimeType);\n return content ? { content } : { warning: IMAGE_CONVERSION_WARNING };\n }\n return { warning: IMAGE_CONVERSION_WARNING };\n}\nfunction convertBinaryToBase64(data) {\n if (typeof Buffer !== \"undefined\") {\n const buffer = data instanceof Uint8Array ? Buffer.from(data) : Buffer.from(new Uint8Array(data));\n return buffer.toString(\"base64\");\n }\n if (typeof btoa === \"function\") {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = \"\";\n const chunkSize = 32768;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n }\n return void 0;\n}\nfunction parseFilePart(part) {\n const mimeType = extractMimeType(part.mediaType ?? part.mimeType);\n if (!mimeType || !isImageMimeType(mimeType)) {\n return {};\n }\n const data = part.data;\n if (typeof data === \"string\") {\n const content = createImageContent(mimeType, data);\n return content ? { content } : { warning: IMAGE_CONVERSION_WARNING };\n }\n if (data instanceof Uint8Array || typeof ArrayBuffer !== \"undefined\" && data instanceof ArrayBuffer) {\n const base64 = convertBinaryToBase64(data);\n if (!base64) {\n return { warning: IMAGE_CONVERSION_WARNING };\n }\n const content = createImageContent(mimeType, base64);\n return content ? { content } : { warning: IMAGE_CONVERSION_WARNING };\n }\n return { warning: IMAGE_CONVERSION_WARNING };\n}\nfunction convertToClaudeCodeMessages(prompt, mode = { type: \"regular\" }, jsonSchema) {\n const messages = [];\n const warnings = [];\n let systemPrompt;\n const streamingSegments = [];\n const imageMap = /* @__PURE__ */ new Map();\n let hasImageParts = false;\n const addSegment = (formatted) => {\n streamingSegments.push({ formatted });\n return streamingSegments.length - 1;\n };\n const addImageForSegment = (segmentIndex, content) => {\n hasImageParts = true;\n if (!imageMap.has(segmentIndex)) {\n imageMap.set(segmentIndex, []);\n }\n imageMap.get(segmentIndex)?.push(content);\n };\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n systemPrompt = message.content;\n if (typeof message.content === \"string\" && message.content.trim().length > 0) {\n addSegment(message.content);\n } else {\n addSegment(\"\");\n }\n break;\n case \"user\":\n if (typeof message.content === \"string\") {\n messages.push(message.content);\n addSegment(`Human: ${message.content}`);\n } else {\n const textParts = message.content.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\\n\");\n const segmentIndex = addSegment(textParts ? `Human: ${textParts}` : \"\");\n if (textParts) {\n messages.push(textParts);\n }\n for (const part of message.content) {\n if (part.type === \"image\") {\n const { content, warning } = parseImagePart(part);\n if (content) {\n addImageForSegment(segmentIndex, content);\n } else if (warning) {\n warnings.push(warning);\n }\n } else if (part.type === \"file\") {\n const { content, warning } = parseFilePart(part);\n if (content) {\n addImageForSegment(segmentIndex, content);\n } else if (warning) {\n warnings.push(warning);\n }\n }\n }\n }\n break;\n case \"assistant\": {\n let assistantContent = \"\";\n if (typeof message.content === \"string\") {\n assistantContent = message.content;\n } else {\n const textParts = message.content.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\\n\");\n if (textParts) {\n assistantContent = textParts;\n }\n const toolCalls = message.content.filter((part) => part.type === \"tool-call\");\n if (toolCalls.length > 0) {\n assistantContent += `\n[Tool calls made]`;\n }\n }\n const formattedAssistant = `Assistant: ${assistantContent}`;\n messages.push(formattedAssistant);\n addSegment(formattedAssistant);\n break;\n }\n case \"tool\":\n for (const tool3 of message.content) {\n const resultText = tool3.output.type === \"text\" ? tool3.output.value : JSON.stringify(tool3.output.value);\n const formattedToolResult = `Tool Result (${tool3.toolName}): ${resultText}`;\n messages.push(formattedToolResult);\n addSegment(formattedToolResult);\n }\n break;\n }\n }\n let finalPrompt = \"\";\n if (systemPrompt) {\n finalPrompt = systemPrompt;\n }\n if (messages.length > 0) {\n const formattedMessages = [];\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n if (msg.startsWith(\"Assistant:\") || msg.startsWith(\"Tool Result\")) {\n formattedMessages.push(msg);\n } else {\n formattedMessages.push(`Human: ${msg}`);\n }\n }\n if (finalPrompt) {\n const joinedMessages = formattedMessages.join(\"\\n\\n\");\n finalPrompt = joinedMessages ? `${finalPrompt}\n\n${joinedMessages}` : finalPrompt;\n } else {\n finalPrompt = formattedMessages.join(\"\\n\\n\");\n }\n }\n let streamingParts = [];\n const imagePartsInOrder = [];\n const appendImagesForIndex = (index) => {\n const images = imageMap.get(index);\n if (!images) {\n return;\n }\n images.forEach((image) => {\n streamingParts.push(image);\n imagePartsInOrder.push(image);\n });\n };\n if (streamingSegments.length > 0) {\n let accumulatedText = \"\";\n let emittedText = false;\n const flushText = () => {\n if (!accumulatedText) {\n return;\n }\n streamingParts.push({ type: \"text\", text: accumulatedText });\n accumulatedText = \"\";\n emittedText = true;\n };\n streamingSegments.forEach((segment, index) => {\n const segmentText = segment.formatted;\n if (segmentText) {\n if (!accumulatedText) {\n accumulatedText = emittedText ? `\n\n${segmentText}` : segmentText;\n } else {\n accumulatedText += `\n\n${segmentText}`;\n }\n }\n if (imageMap.has(index)) {\n flushText();\n appendImagesForIndex(index);\n }\n });\n flushText();\n }\n if (mode?.type === \"object-json\" && jsonSchema) {\n const schemaStr = JSON.stringify(jsonSchema, null, 2);\n finalPrompt = `CRITICAL: You MUST respond with ONLY a JSON object. NO other text, NO explanations, NO questions.\n\nYour response MUST start with { and end with }\n\nThe JSON MUST match this EXACT schema:\n${schemaStr}\n\nNow, based on the following conversation, generate ONLY the JSON object with the exact fields specified above:\n\n${finalPrompt}\n\nRemember: Your ENTIRE response must be ONLY the JSON object, starting with { and ending with }`;\n streamingParts = [{ type: \"text\", text: finalPrompt }, ...imagePartsInOrder];\n }\n return {\n messagesPrompt: finalPrompt,\n systemPrompt,\n ...warnings.length > 0 && { warnings },\n streamingContentParts: streamingParts.length > 0 ? streamingParts : [\n { type: \"text\", text: finalPrompt },\n ...imagePartsInOrder\n ],\n hasImageParts\n };\n}\n\n// src/extract-json.ts\nimport { parse } from \"jsonc-parser\";\nfunction extractJson(text) {\n let content = text.trim();\n const fenceMatch = /```(?:json)?\\s*([\\s\\S]*?)\\s*```/i.exec(content);\n if (fenceMatch) {\n content = fenceMatch[1];\n }\n const varMatch = /^\\s*(?:const|let|var)\\s+\\w+\\s*=\\s*([\\s\\S]*)/i.exec(content);\n if (varMatch) {\n content = varMatch[1];\n if (content.trim().endsWith(\";\")) {\n content = content.trim().slice(0, -1);\n }\n }\n const firstObj = content.indexOf(\"{\");\n const firstArr = content.indexOf(\"[\");\n if (firstObj === -1 && firstArr === -1) {\n return text;\n }\n const start = firstArr === -1 ? firstObj : firstObj === -1 ? firstArr : Math.min(firstObj, firstArr);\n content = content.slice(start);\n const tryParse = (value) => {\n const errors = [];\n try {\n const result = parse(value, errors, { allowTrailingComma: true });\n if (errors.length === 0) {\n return JSON.stringify(result, null, 2);\n }\n } catch {\n }\n return void 0;\n };\n const parsed = tryParse(content);\n if (parsed !== void 0) {\n return parsed;\n }\n const openChar = content[0];\n const closeChar = openChar === \"{\" ? \"}\" : \"]\";\n const closingPositions = [];\n let depth = 0;\n let inString = false;\n let escapeNext = false;\n for (let i = 0; i < content.length; i++) {\n const char = content[i];\n if (escapeNext) {\n escapeNext = false;\n continue;\n }\n if (char === \"\\\\\") {\n escapeNext = true;\n continue;\n }\n if (char === '\"' && !inString) {\n inString = true;\n continue;\n }\n if (char === '\"' && inString) {\n inString = false;\n continue;\n }\n if (inString) continue;\n if (char === openChar) {\n depth++;\n } else if (char === closeChar) {\n depth--;\n if (depth === 0) {\n closingPositions.push(i + 1);\n }\n }\n }\n for (let i = closingPositions.length - 1; i >= 0; i--) {\n const attempt = tryParse(content.slice(0, closingPositions[i]));\n if (attempt !== void 0) {\n return attempt;\n }\n }\n const searchStart = Math.max(0, content.length - 1e3);\n for (let end = content.length - 1; end > searchStart; end--) {\n const attempt = tryParse(content.slice(0, end));\n if (attempt !== void 0) {\n return attempt;\n }\n }\n return text;\n}\n\n// src/errors.ts\nimport { APICallError, LoadAPIKeyError } from \"@ai-sdk/provider\";\nfunction createAPICallError({\n message,\n code,\n exitCode,\n stderr,\n promptExcerpt,\n isRetryable = false\n}) {\n const metadata = {\n code,\n exitCode,\n stderr,\n promptExcerpt\n };\n return new APICallError({\n message,\n isRetryable,\n url: \"claude-code-cli://command\",\n requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : void 0,\n data: metadata\n });\n}\nfunction createAuthenticationError({ message }) {\n return new LoadAPIKeyError({\n message: message || \"Authentication failed. Please ensure Claude Code SDK is properly authenticated.\"\n });\n}\nfunction createTimeoutError({\n message,\n promptExcerpt,\n timeoutMs\n}) {\n const metadata = {\n code: \"TIMEOUT\",\n promptExcerpt\n };\n return new APICallError({\n message,\n isRetryable: true,\n url: \"claude-code-cli://command\",\n requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : void 0,\n data: timeoutMs !== void 0 ? { ...metadata, timeoutMs } : metadata\n });\n}\nfunction isAuthenticationError(error) {\n if (error instanceof LoadAPIKeyError) return true;\n if (error instanceof APICallError && error.data?.exitCode === 401)\n return true;\n return false;\n}\nfunction isTimeoutError(error) {\n if (error instanceof APICallError && error.data?.code === \"TIMEOUT\")\n return true;\n return false;\n}\nfunction getErrorMetadata(error) {\n if (error instanceof APICallError && error.data) {\n return error.data;\n }\n return void 0;\n}\n\n// src/map-claude-code-finish-reason.ts\nfunction mapClaudeCodeFinishReason(subtype) {\n switch (subtype) {\n case \"success\":\n return \"stop\";\n case \"error_max_turns\":\n return \"length\";\n case \"error_during_execution\":\n return \"error\";\n default:\n return \"stop\";\n }\n}\n\n// src/validation.ts\nimport { z } from \"zod\";\nimport { existsSync } from \"fs\";\nvar loggerFunctionSchema = z.object({\n debug: z.any().refine((val) => typeof val === \"function\", {\n message: \"debug must be a function\"\n }),\n info: z.any().refine((val) => typeof val === \"function\", {\n message: \"info must be a function\"\n }),\n warn: z.any().refine((val) => typeof val === \"function\", {\n message: \"warn must be a function\"\n }),\n error: z.any().refine((val) => typeof val === \"function\", {\n message: \"error must be a function\"\n })\n});\nvar claudeCodeSettingsSchema = z.object({\n pathToClaudeCodeExecutable: z.string().optional(),\n customSystemPrompt: z.string().optional(),\n appendSystemPrompt: z.string().optional(),\n systemPrompt: z.union([\n z.string(),\n z.object({\n type: z.literal(\"preset\"),\n preset: z.literal(\"claude_code\"),\n append: z.string().optional()\n })\n ]).optional(),\n maxTurns: z.number().int().min(1).max(100).optional(),\n maxThinkingTokens: z.number().int().positive().max(1e5).optional(),\n cwd: z.string().refine(\n (val) => {\n if (typeof process === \"undefined\" || !process.versions?.node) {\n return true;\n }\n return !val || existsSync(val);\n },\n { message: \"Working directory must exist\" }\n ).optional(),\n executable: z.enum([\"bun\", \"deno\", \"node\"]).optional(),\n executableArgs: z.array(z.string()).optional(),\n permissionMode: z.enum([\"default\", \"acceptEdits\", \"bypassPermissions\", \"plan\"]).optional(),\n permissionPromptToolName: z.string().optional(),\n continue: z.boolean().optional(),\n resume: z.string().optional(),\n allowedTools: z.array(z.string()).optional(),\n disallowedTools: z.array(z.string()).optional(),\n settingSources: z.array(z.enum([\"user\", \"project\", \"local\"])).optional(),\n streamingInput: z.enum([\"auto\", \"always\", \"off\"]).optional(),\n // Hooks and tool-permission callback (permissive validation of shapes)\n canUseTool: z.any().refine((v) => v === void 0 || typeof v === \"function\", {\n message: \"canUseTool must be a function\"\n }).optional(),\n hooks: z.record(\n z.string(),\n z.array(\n z.object({\n matcher: z.string().optional(),\n hooks: z.array(z.any()).nonempty()\n })\n )\n ).optional(),\n mcpServers: z.record(\n z.string(),\n z.union([\n // McpStdioServerConfig\n z.object({\n type: z.literal(\"stdio\").optional(),\n command: z.string(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional()\n }),\n // McpSSEServerConfig\n z.object({\n type: z.literal(\"sse\"),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional()\n }),\n // McpHttpServerConfig\n z.object({\n type: z.literal(\"http\"),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional()\n }),\n // McpSdkServerConfig (in-process custom tools)\n z.object({\n type: z.literal(\"sdk\"),\n name: z.string(),\n instance: z.any()\n })\n ])\n ).optional(),\n verbose: z.boolean().optional(),\n logger: z.union([z.literal(false), loggerFunctionSchema]).optional(),\n env: z.record(z.string(), z.string().optional()).optional(),\n additionalDirectories: z.array(z.string()).optional(),\n agents: z.record(\n z.string(),\n z.object({\n description: z.string(),\n tools: z.array(z.string()).optional(),\n prompt: z.string(),\n model: z.enum([\"sonnet\", \"opus\", \"haiku\", \"inherit\"]).optional()\n })\n ).optional(),\n includePartialMessages: z.boolean().optional(),\n fallbackModel: z.string().optional(),\n forkSession: z.boolean().optional(),\n stderr: z.any().refine((val) => val === void 0 || typeof val === \"function\", {\n message: \"stderr must be a function\"\n }).optional(),\n strictMcpConfig: z.boolean().optional(),\n extraArgs: z.record(z.string(), z.union([z.string(), z.null()])).optional(),\n queryFunction: z.any().refine((val) => val === void 0 || typeof val === \"function\", {\n message: \"queryFunction must be a function\"\n }).optional()\n}).strict();\nfunction validateModelId(modelId) {\n const knownModels = [\"opus\", \"sonnet\", \"haiku\"];\n if (!modelId || modelId.trim() === \"\") {\n throw new Error(\"Model ID cannot be empty\");\n }\n if (!knownModels.includes(modelId)) {\n return `Unknown model ID: '${modelId}'. Proceeding with custom model. Known models are: ${knownModels.join(\", \")}`;\n }\n return void 0;\n}\nfunction validateSettings(settings) {\n const warnings = [];\n const errors = [];\n try {\n const result = claudeCodeSettingsSchema.safeParse(settings);\n if (!result.success) {\n const errorObject = result.error;\n const issues = errorObject.errors || errorObject.issues || [];\n issues.forEach((err) => {\n const path = err.path.join(\".\");\n errors.push(`${path ? `${path}: ` : \"\"}${err.message}`);\n });\n return { valid: false, warnings, errors };\n }\n const validSettings = result.data;\n if (validSettings.maxTurns && validSettings.maxTurns > 20) {\n warnings.push(\n `High maxTurns value (${validSettings.maxTurns}) may lead to long-running conversations`\n );\n }\n if (validSettings.maxThinkingTokens && validSettings.maxThinkingTokens > 5e4) {\n warnings.push(\n `Very high maxThinkingTokens (${validSettings.maxThinkingTokens}) may increase response time`\n );\n }\n if (validSettings.allowedTools && validSettings.disallowedTools) {\n warnings.push(\n \"Both allowedTools and disallowedTools are specified. Only allowedTools will be used.\"\n );\n }\n const validateToolNames = (tools, type) => {\n tools.forEach((tool3) => {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*(\\([^)]*\\))?$/.test(tool3) && !tool3.startsWith(\"mcp__\")) {\n warnings.push(`Unusual ${type} tool name format: '${tool3}'`);\n }\n });\n };\n if (validSettings.allowedTools) {\n validateToolNames(validSettings.allowedTools, \"allowed\");\n }\n if (validSettings.disallowedTools) {\n validateToolNames(validSettings.disallowedTools, \"disallowed\");\n }\n return { valid: true, warnings, errors };\n } catch (error) {\n errors.push(`Validation error: ${error instanceof Error ? error.message : String(error)}`);\n return { valid: false, warnings, errors };\n }\n}\nfunction validatePrompt(prompt) {\n const MAX_PROMPT_LENGTH = 1e5;\n if (prompt.length > MAX_PROMPT_LENGTH) {\n return `Very long prompt (${prompt.length} characters) may cause performance issues or timeouts`;\n }\n return void 0;\n}\nfunction validateSessionId(sessionId) {\n if (sessionId && !/^[a-zA-Z0-9-_]+$/.test(sessionId)) {\n return `Unusual session ID format. This may cause issues with session resumption.`;\n }\n return void 0;\n}\n\n// src/logger.ts\nvar defaultLogger = {\n debug: (message) => console.debug(`[DEBUG] ${message}`),\n info: (message) => console.info(`[INFO] ${message}`),\n warn: (message) => console.warn(`[WARN] ${message}`),\n error: (message) => console.error(`[ERROR] ${message}`)\n};\nvar noopLogger = {\n debug: () => {\n },\n info: () => {\n },\n warn: () => {\n },\n error: () => {\n }\n};\nfunction getLogger(logger) {\n if (logger === false) {\n return noopLogger;\n }\n if (logger === void 0) {\n return defaultLogger;\n }\n return logger;\n}\nfunction createVerboseLogger(logger, verbose = false) {\n if (verbose) {\n return logger;\n }\n return {\n debug: () => {\n },\n // No-op when not verbose\n info: () => {\n },\n // No-op when not verbose\n warn: logger.warn.bind(logger),\n error: logger.error.bind(logger)\n };\n}\n\n// src/claude-code-language-model.ts\nimport { query } from \"@anthropic-ai/claude-agent-sdk\";\nvar CLAUDE_CODE_TRUNCATION_WARNING = \"Claude Code SDK output ended unexpectedly; returning truncated response from buffered text. Await upstream fix to avoid data loss.\";\nvar MIN_TRUNCATION_LENGTH = 512;\nfunction isClaudeCodeTruncationError(error, bufferedText) {\n const isSyntaxError = error instanceof SyntaxError || // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof error?.name === \"string\" && // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error.name.toLowerCase() === \"syntaxerror\";\n if (!isSyntaxError) {\n return false;\n }\n if (!bufferedText) {\n return false;\n }\n const rawMessage = typeof error?.message === \"string\" ? error.message : \"\";\n const message = rawMessage.toLowerCase();\n const truncationIndicators = [\n \"unexpected end of json input\",\n \"unexpected end of input\",\n \"unexpected end of string\",\n \"unexpected eof\",\n \"end of file\",\n \"unterminated string\",\n \"unterminated string constant\"\n ];\n if (!truncationIndicators.some((indicator) => message.includes(indicator))) {\n return false;\n }\n if (bufferedText.length < MIN_TRUNCATION_LENGTH) {\n return false;\n }\n return true;\n}\nfunction isAbortError(err) {\n if (err && typeof err === \"object\") {\n const e = err;\n if (typeof e.name === \"string\" && e.name === \"AbortError\") return true;\n if (typeof e.code === \"string\" && e.code.toUpperCase() === \"ABORT_ERR\") return true;\n }\n return false;\n}\nvar STREAMING_FEATURE_WARNING = \"Claude Agent SDK features (hooks/MCP/images) require streaming input. Set `streamingInput: 'always'` or provide `canUseTool` (auto streams only when canUseTool is set).\";\nfunction toAsyncIterablePrompt(messagesPrompt, outputStreamEnded, sessionId, contentParts) {\n const content = contentParts && contentParts.length > 0 ? contentParts : [{ type: \"text\", text: messagesPrompt }];\n const msg = {\n type: \"user\",\n message: {\n role: \"user\",\n content\n },\n parent_tool_use_id: null,\n session_id: sessionId ?? \"\"\n };\n return {\n async *[Symbol.asyncIterator]() {\n yield msg;\n await outputStreamEnded;\n }\n };\n}\nvar modelMap = {\n opus: \"opus\",\n sonnet: \"sonnet\",\n haiku: \"haiku\"\n};\nvar ClaudeCodeLanguageModel = class _ClaudeCodeLanguageModel {\n specificationVersion = \"v2\";\n defaultObjectGenerationMode = \"json\";\n supportsImageUrls = false;\n supportedUrls = {};\n supportsStructuredOutputs = false;\n // Fallback/magic string constants\n static UNKNOWN_TOOL_NAME = \"unknown-tool\";\n // Tool input safety limits\n static MAX_TOOL_INPUT_SIZE = 1048576;\n // 1MB hard limit\n static MAX_TOOL_INPUT_WARN = 102400;\n // 100KB warning threshold\n static MAX_DELTA_CALC_SIZE = 1e4;\n // 10KB delta computation threshold\n modelId;\n settings;\n sessionId;\n modelValidationWarning;\n settingsValidationWarnings;\n logger;\n queryFn;\n constructor(options) {\n this.modelId = options.id;\n this.settings = options.settings ?? {};\n this.settingsValidationWarnings = options.settingsValidationWarnings ?? [];\n this.queryFn = this.settings.queryFunction ?? query;\n const baseLogger = getLogger(this.settings.logger);\n this.logger = createVerboseLogger(baseLogger, this.settings.verbose ?? false);\n if (!this.modelId || typeof this.modelId !== \"string\" || this.modelId.trim() === \"\") {\n throw new NoSuchModelError({\n modelId: this.modelId,\n modelType: \"languageModel\"\n });\n }\n this.modelValidationWarning = validateModelId(this.modelId);\n if (this.modelValidationWarning) {\n this.logger.warn(`Claude Code Model: ${this.modelValidationWarning}`);\n }\n }\n get provider() {\n return \"claude-code\";\n }\n getModel() {\n const mapped = modelMap[this.modelId];\n return mapped ?? this.modelId;\n }\n extractToolUses(content) {\n if (!Array.isArray(content)) {\n return [];\n }\n return content.filter(\n (item) => typeof item === \"object\" && item !== null && \"type\" in item && item.type === \"tool_use\"\n ).map((item) => {\n const { id, name, input } = item;\n return {\n id: typeof id === \"string\" && id.length > 0 ? id : generateId(),\n name: typeof name === \"string\" && name.length > 0 ? name : _ClaudeCodeLanguageModel.UNKNOWN_TOOL_NAME,\n input\n };\n });\n }\n extractToolResults(content) {\n if (!Array.isArray(content)) {\n return [];\n }\n return content.filter(\n (item) => typeof item === \"object\" && item !== null && \"type\" in item && item.type === \"tool_result\"\n ).map((item) => {\n const { tool_use_id, content: content2, is_error, name } = item;\n return {\n id: typeof tool_use_id === \"string\" && tool_use_id.length > 0 ? tool_use_id : generateId(),\n name: typeof name === \"string\" && name.length > 0 ? name : void 0,\n result: content2,\n isError: Boolean(is_error)\n };\n });\n }\n extractToolErrors(content) {\n if (!Array.isArray(content)) {\n return [];\n }\n return content.filter(\n (item) => typeof item === \"object\" && item !== null && \"type\" in item && item.type === \"tool_error\"\n ).map((item) => {\n const { tool_use_id, error, name } = item;\n return {\n id: typeof tool_use_id === \"string\" && tool_use_id.length > 0 ? tool_use_id : generateId(),\n name: typeof name === \"string\" && name.length > 0 ? name : void 0,\n error\n };\n });\n }\n serializeToolInput(input) {\n if (typeof input === \"string\") {\n return this.checkInputSize(input);\n }\n if (input === void 0) {\n return \"\";\n }\n try {\n const serialized = JSON.stringify(input);\n return this.checkInputSize(serialized);\n } catch {\n const fallback = String(input);\n return this.checkInputSize(fallback);\n }\n }\n checkInputSize(str) {\n const length = str.length;\n if (length > _ClaudeCodeLanguageModel.MAX_TOOL_INPUT_SIZE) {\n throw new Error(\n `Tool input exceeds maximum size of ${_ClaudeCodeLanguageModel.MAX_TOOL_INPUT_SIZE} bytes (got ${length} bytes). This may indicate a malformed request or an attempt to process excessively large data.`\n );\n }\n if (length > _ClaudeCodeLanguageModel.MAX_TOOL_INPUT_WARN) {\n this.logger.warn(\n `[claude-code] Large tool input detected: ${length} bytes. Performance may be impacted. Consider chunking or reducing input size.`\n );\n }\n return str;\n }\n normalizeToolResult(result) {\n if (typeof result === \"string\") {\n try {\n return JSON.parse(result);\n } catch {\n return result;\n }\n }\n return result;\n }\n generateAllWarnings(options, prompt) {\n const warnings = [];\n const unsupportedParams = [];\n if (options.temperature !== void 0) unsupportedParams.push(\"temperature\");\n if (options.topP !== void 0) unsupportedParams.push(\"topP\");\n if (options.topK !== void 0) unsupportedParams.push(\"topK\");\n if (options.presencePenalty !== void 0) unsupportedParams.push(\"presencePenalty\");\n if (options.frequencyPenalty !== void 0) unsupportedParams.push(\"frequencyPenalty\");\n if (options.stopSequences !== void 0 && options.stopSequences.length > 0)\n unsupportedParams.push(\"stopSequences\");\n if (options.seed !== void 0) unsupportedParams.push(\"seed\");\n if (unsupportedParams.length > 0) {\n for (const param of unsupportedParams) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: param,\n details: `Claude Code SDK does not support the ${param} parameter. It will be ignored.`\n });\n }\n }\n if (this.modelValidationWarning) {\n warnings.push({\n type: \"other\",\n message: this.modelValidationWarning\n });\n }\n this.settingsValidationWarnings.forEach((warning) => {\n warnings.push({\n type: \"other\",\n message: warning\n });\n });\n const promptWarning = validatePrompt(prompt);\n if (promptWarning) {\n warnings.push({\n type: \"other\",\n message: promptWarning\n });\n }\n return warnings;\n }\n handleJsonExtraction(text, warnings) {\n const extracted = extractJson(text);\n const validation = this.validateJsonExtraction(text, extracted);\n if (!validation.valid && validation.warning) {\n warnings.push(validation.warning);\n }\n return extracted;\n }\n createQueryOptions(abortController) {\n const opts = {\n model: this.getModel(),\n abortController,\n resume: this.settings.resume ?? this.sessionId,\n pathToClaudeCodeExecutable: this.settings.pathToClaudeCodeExecutable,\n maxTurns: this.settings.maxTurns,\n maxThinkingTokens: this.settings.maxThinkingTokens,\n cwd: this.settings.cwd,\n executable: this.settings.executable,\n executableArgs: this.settings.executableArgs,\n permissionMode: this.settings.permissionMode,\n permissionPromptToolName: this.settings.permissionPromptToolName,\n continue: this.settings.continue,\n allowedTools: this.settings.allowedTools,\n disallowedTools: this.settings.disallowedTools,\n mcpServers: this.settings.mcpServers,\n canUseTool: this.settings.canUseTool\n };\n if (this.settings.systemPrompt !== void 0) {\n opts.systemPrompt = this.settings.systemPrompt;\n } else if (this.settings.customSystemPrompt !== void 0) {\n this.logger.warn(\n \"[claude-code] 'customSystemPrompt' is deprecated and will be removed in a future major release. Please use 'systemPrompt' instead (string or { type: 'preset', preset: 'claude_code', append? }).\"\n );\n opts.systemPrompt = this.settings.customSystemPrompt;\n } else if (this.settings.appendSystemPrompt !== void 0) {\n this.logger.warn(\n \"[claude-code] 'appendSystemPrompt' is deprecated and will be removed in a future major release. Please use 'systemPrompt: { type: 'preset', preset: 'claude_code', append: <text> }' instead.\"\n );\n opts.systemPrompt = {\n type: \"preset\",\n preset: \"claude_code\",\n append: this.settings.appendSystemPrompt\n };\n }\n if (this.settings.settingSources !== void 0) {\n opts.settingSources = this.settings.settingSources;\n }\n if (this.settings.additionalDirectories !== void 0) {\n opts.additionalDirectories = this.settings.additionalDirectories;\n }\n if (this.settings.agents !== void 0) {\n opts.agents = this.settings.agents;\n }\n if (this.settings.includePartialMessages !== void 0) {\n opts.includePartialMessages = this.settings.includePartialMessages;\n }\n if (this.settings.fallbackModel !== void 0) {\n opts.fallbackModel = this.settings.fallbackModel;\n }\n if (this.settings.forkSession !== void 0) {\n opts.forkSession = this.settings.forkSession;\n }\n if (this.settings.stderr !== void 0) {\n opts.stderr = this.settings.stderr;\n }\n if (this.settings.strictMcpConfig !== void 0) {\n opts.strictMcpConfig = this.settings.strictMcpConfig;\n }\n if (this.settings.extraArgs !== void 0) {\n opts.extraArgs = this.settings.extraArgs;\n }\n if (this.settings.hooks) {\n opts.hooks = this.settings.hooks;\n }\n if (this.settings.env !== void 0) {\n opts.env = { ...process.env, ...this.settings.env };\n }\n return opts;\n }\n handleClaudeCodeError(error, messagesPrompt) {\n if (isAbortError(error)) {\n throw error;\n }\n const isErrorWithMessage = (err) => {\n return typeof err === \"object\" && err !== null && \"message\" in err;\n };\n const isErrorWithCode = (err) => {\n return typeof err === \"object\" && err !== null;\n };\n const authErrorPatterns = [\n \"not logged in\",\n \"authentication\",\n \"unauthorized\",\n \"auth failed\",\n \"please login\",\n \"claude login\"\n ];\n const errorMessage = isErrorWithMessage(error) && error.message ? error.message.toLowerCase() : \"\";\n const exitCode = isErrorWithCode(error) && typeof error.exitCode === \"number\" ? error.exitCode : void 0;\n const isAuthError = authErrorPatterns.some((pattern) => errorMessage.includes(pattern)) || exitCode === 401;\n if (isAuthError) {\n return createAuthenticationError({\n message: isErrorWithMessage(error) && error.message ? error.message : \"Authentication failed. Please ensure Claude Code SDK is properly authenticated.\"\n });\n }\n const errorCode = isErrorWithCode(error) && typeof error.code === \"string\" ? error.code : \"\";\n if (errorCode === \"ETIMEDOUT\" || errorMessage.includes(\"timeout\")) {\n return createTimeoutError({\n message: isErrorWithMessage(error) && error.message ? error.message : \"Request timed out\",\n promptExcerpt: messagesPrompt.substring(0, 200)\n // Don't specify timeoutMs since we don't know the actual timeout value\n // It's controlled by the consumer via AbortSignal\n });\n }\n const isRetryable = errorCode === \"ENOENT\" || errorCode === \"ECONNREFUSED\" || errorCode === \"ETIMEDOUT\" || errorCode === \"ECONNRESET\";\n return createAPICallError({\n message: isErrorWithMessage(error) && error.message ? error.message : \"Claude Code SDK error\",\n code: errorCode || void 0,\n exitCode,\n stderr: isErrorWithCode(error) && typeof error.stderr === \"string\" ? error.stderr : void 0,\n promptExcerpt: messagesPrompt.substring(0, 200),\n isRetryable\n });\n }\n setSessionId(sessionId) {\n this.sessionId = sessionId;\n const warning = validateSessionId(sessionId);\n if (warning) {\n this.logger.warn(`Claude Code Session: ${warning}`);\n }\n }\n validateJsonExtraction(originalText, extractedJson) {\n if (extractedJson === originalText) {\n return {\n valid: false,\n warning: {\n type: \"other\",\n message: \"JSON extraction from model response may be incomplete or modified. The model may not have returned valid JSON.\"\n }\n };\n }\n try {\n JSON.parse(extractedJson);\n return { valid: true };\n } catch {\n return {\n valid: false,\n warning: {\n type: \"other\",\n message: \"JSON extraction resulted in invalid JSON. The response may be malformed.\"\n }\n };\n }\n }\n async doGenerate(options) {\n this.logger.debug(`[claude-code] Starting doGenerate request with model: ${this.modelId}`);\n const mode = options.responseFormat?.type === \"json\" ? { type: \"object-json\" } : { type: \"regular\" };\n this.logger.debug(\n `[claude-code] Request mode: ${mode.type}, response format: ${options.responseFormat?.type ?? \"none\"}`\n );\n const {\n messagesPrompt,\n warnings: messageWarnings,\n streamingContentParts,\n hasImageParts\n } = convertToClaudeCodeMessages(\n options.prompt,\n mode,\n options.responseFormat?.type === \"json\" ? options.responseFormat.schema : void 0\n );\n this.logger.debug(\n `[claude-code] Converted ${options.prompt.length} messages, hasImageParts: ${hasImageParts}`\n );\n const abortController = new AbortController();\n let abortListener;\n if (options.abortSignal?.aborted) {\n abortController.abort(options.abortSignal.reason);\n } else if (options.abortSignal) {\n abortListener = () => abortController.abort(options.abortSignal?.reason);\n options.abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n const queryOptions = this.createQueryOptions(abortController);\n let text = \"\";\n let usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n let finishReason = \"stop\";\n let wasTruncated = false;\n let costUsd;\n let durationMs;\n let rawUsage;\n const warnings = this.generateAllWarnings(\n options,\n messagesPrompt\n );\n if (messageWarnings) {\n messageWarnings.forEach((warning) => {\n warnings.push({\n type: \"other\",\n message: warning\n });\n });\n }\n const modeSetting = this.settings.streamingInput ?? \"auto\";\n const wantsStreamInput = modeSetting === \"always\" || modeSetting === \"auto\" && !!this.settings.canUseTool;\n if (!wantsStreamInput && hasImageParts) {\n warnings.push({\n type: \"other\",\n message: STREAMING_FEATURE_WARNING\n });\n }\n let done = () => {\n };\n const outputStreamEnded = new Promise((resolve) => {\n done = () => resolve(void 0);\n });\n try {\n if (this.settings.canUseTool && this.settings.permissionPromptToolName) {\n throw new Error(\n \"canUseTool requires streamingInput mode ('auto' or 'always') and cannot be used with permissionPromptToolName (SDK constraint). Set streamingInput: 'auto' (or 'always') and remove permissionPromptToolName, or remove canUseTool.\"\n );\n }\n const sdkPrompt = wantsStreamInput ? toAsyncIterablePrompt(\n messagesPrompt,\n outputStreamEnded,\n this.settings.resume ?? this.sessionId,\n streamingContentParts\n ) : messagesPrompt;\n this.logger.debug(\n `[claude-code] Executing query with streamingInput: ${wantsStreamInput}, session: ${this.settings.resume ?? this.sessionId ?? \"new\"}`\n );\n const response = this.queryFn({\n prompt: sdkPrompt,\n options: queryOptions\n });\n for await (const message of response) {\n this.logger.debug(`[claude-code] Received message type: ${message.type}`);\n if (message.type === \"assistant\") {\n text += message.message.content.map((c) => c.type === \"text\" ? c.text : \"\").join(\"\");\n } else if (message.type === \"result\") {\n done();\n this.setSessionId(message.session_id);\n costUsd = message.total_cost_usd;\n durationMs = message.duration_ms;\n this.logger.info(\n `[claude-code] Request completed - Session: ${message.session_id}, Cost: $${costUsd?.toFixed(4) ?? \"N/A\"}, Duration: ${durationMs ?? \"N/A\"}ms`\n );\n if (\"usage\" in message) {\n rawUsage = message.usage;\n usage = {\n inputTokens: (message.usage.cache_creation_input_tokens ?? 0) + (message.usage.cache_read_input_tokens ?? 0) + (message.usage.input_tokens ?? 0),\n outputTokens: message.usage.output_tokens ?? 0,\n totalTokens: (message.usage.cache_creation_input_tokens ?? 0) + (message.usage.cache_read_input_tokens ?? 0) + (message.usage.input_tokens ?? 0) + (message.usage.output_tokens ?? 0)\n };\n this.logger.debug(\n `[claude-code] Token usage - Input: ${usage.inputTokens}, Output: ${usage.outputTokens}, Total: ${usage.totalTokens}`\n );\n }\n finishReason = mapClaudeCodeFinishReason(message.subtype);\n this.logger.debug(`[claude-code] Finish reason: ${finishReason}`);\n } else if (message.type === \"system\" && message.subtype === \"init\") {\n this.setSessionId(message.session_id);\n this.logger.info(`[claude-code] Session initialized: ${message.session_id}`);\n }\n }\n } catch (error) {\n done();\n this.logger.debug(\n `[claude-code] Error during doGenerate: ${error instanceof Error ? error.message : String(error)}`\n );\n if (isAbortError(error)) {\n this.logger.debug(\"[claude-code] Request aborted by user\");\n throw options.abortSignal?.aborted ? options.abortSignal.reason : error;\n }\n if (isClaudeCodeTruncationError(error, text)) {\n this.logger.warn(\n `[claude-code] Detected truncated response, returning ${text.length} characters of buffered text`\n );\n wasTruncated = true;\n finishReason = \"length\";\n warnings.push({\n type: \"other\",\n message: CLAUDE_CODE_TRUNCATION_WARNING\n });\n } else {\n throw this.handleClaudeCodeError(error, messagesPrompt);\n }\n } finally {\n if (options.abortSignal && abortListener) {\n options.abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n if (options.responseFormat?.type === \"json\" && text) {\n text = this.handleJsonExtraction(text, warnings);\n }\n return {\n content: [{ type: \"text\", text }],\n usage,\n finishReason,\n warnings,\n response: {\n id: generateId(),\n timestamp: /* @__PURE__ */ new Date(),\n modelId: this.modelId\n },\n request: {\n body: messagesPrompt\n },\n providerMetadata: {\n \"claude-code\": {\n ...this.sessionId !== void 0 && { sessionId: this.sessionId },\n ...costUsd !== void 0 && { costUsd },\n ...durationMs !== void 0 && { durationMs },\n ...rawUsage !== void 0 && { rawUsage },\n ...wasTruncated && { truncated: true }\n }\n }\n };\n }\n async doStream(options) {\n this.logger.debug(`[claude-code] Starting doStream request with model: ${this.modelId}`);\n const mode = options.responseFormat?.type === \"json\" ? { type: \"object-json\" } : { type: \"regular\" };\n this.logger.debug(\n `[claude-code] Stream mode: ${mode.type}, response format: ${options.responseFormat?.type ?? \"none\"}`\n );\n const {\n messagesPrompt,\n warnings: messageWarnings,\n streamingContentParts,\n hasImageParts\n } = convertToClaudeCodeMessages(\n options.prompt,\n mode,\n options.responseFormat?.type === \"json\" ? options.responseFormat.schema : void 0\n );\n this.logger.debug(\n `[claude-code] Converted ${options.prompt.length} messages for streaming, hasImageParts: ${hasImageParts}`\n );\n const abortController = new AbortController();\n let abortListener;\n if (options.abortSignal?.aborted) {\n abortController.abort(options.abortSignal.reason);\n } else if (options.abortSignal) {\n abortListener = () => abortController.abort(options.abortSignal?.reason);\n options.abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n const queryOptions = this.createQueryOptions(abortController);\n const warnings = this.generateAllWarnings(\n options,\n messagesPrompt\n );\n if (messageWarnings) {\n messageWarnings.forEach((warning) => {\n warnings.push({\n type: \"other\",\n message: warning\n });\n });\n }\n const modeSetting = this.settings.streamingInput ?? \"auto\";\n const wantsStreamInput = modeSetting === \"always\" || modeSetting === \"auto\" && !!this.settings.canUseTool;\n if (!wantsStreamInput && hasImageParts) {\n warnings.push({\n type: \"other\",\n message: STREAMING_FEATURE_WARNING\n });\n }\n const stream = new ReadableStream({\n start: async (controller) => {\n let done = () => {\n };\n const outputStreamEnded = new Promise((resolve) => {\n done = () => resolve(void 0);\n });\n const toolStates = /* @__PURE__ */ new Map();\n const streamWarnings = [];\n const closeToolInput = (toolId, state) => {\n if (!state.inputClosed && state.inputStarted) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolId\n });\n state.inputClosed = true;\n }\n };\n const emitToolCall = (toolId, state) => {\n if (state.callEmitted) {\n return;\n }\n closeToolInput(toolId, state);\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: toolId,\n toolName: state.name,\n input: state.lastSerializedInput ?? \"\",\n providerExecuted: true,\n dynamic: true,\n // V3 field: indicates tool is provider-defined (not in user's tools map)\n providerMetadata: {\n \"claude-code\": {\n // rawInput preserves the original serialized format before AI SDK normalization.\n // Use this if you need the exact string sent to the Claude CLI, which may differ\n // from the `input` field after AI SDK processing.\n rawInput: state.lastSerializedInput ?? \"\"\n }\n }\n });\n state.callEmitted = true;\n };\n const finalizeToolCalls = () => {\n for (const [toolId, state] of toolStates) {\n emitToolCall(toolId, state);\n }\n toolStates.clear();\n };\n let usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n let accumulatedText = \"\";\n let textPartId;\n try {\n controller.enqueue({ type: \"stream-start\", warnings });\n if (this.settings.canUseTool && this.settings.permissionPromptToolName) {\n throw new Error(\n \"canUseTool requires streamingInput mode ('auto' or 'always') and cannot be used with permissionPromptToolName (SDK constraint). Set streamingInput: 'auto' (or 'always') and remove permissionPromptToolName, or remove canUseTool.\"\n );\n }\n const sdkPrompt = wantsStreamInput ? toAsyncIterablePrompt(\n messagesPrompt,\n outputStreamEnded,\n this.settings.resume ?? this.sessionId,\n streamingContentParts\n ) : messagesPrompt;\n this.logger.debug(\n `[claude-code] Starting stream query with streamingInput: ${wantsStreamInput}, session: ${this.settings.resume ?? this.sessionId ?? \"new\"}`\n );\n const response = this.queryFn({\n prompt: sdkPrompt,\n options: queryOptions\n });\n for await (const message of response) {\n this.logger.debug(`[claude-code] Stream received message type: ${message.type}`);\n if (message.type === \"assistant\") {\n if (!message.message?.content) {\n this.logger.warn(\n `[claude-code] Unexpected assistant message structure: missing content field. Message type: ${message.type}. This may indicate an SDK protocol violation.`\n );\n continue;\n }\n const content = message.message.content;\n for (const tool3 of this.extractToolUses(content)) {\n const toolId = tool3.id;\n let state = toolStates.get(toolId);\n if (!state) {\n state = {\n name: tool3.name,\n inputStarted: false,\n inputClosed: false,\n callEmitted: false\n };\n toolStates.set(toolId, state);\n this.logger.debug(\n `[claude-code] New tool use detected - Tool: ${tool3.name}, ID: ${toolId}`\n );\n }\n state.name = tool3.name;\n if (!state.inputStarted) {\n this.logger.debug(\n `[claude-code] Tool input started - Tool: ${tool3.name}, ID: ${toolId}`\n );\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolId,\n toolName: tool3.name,\n providerExecuted: true,\n dynamic: true\n // V3 field: indicates tool is provider-defined\n });\n state.inputStarted = true;\n }\n const serializedInput = this.serializeToolInput(tool3.input);\n if (serializedInput) {\n let deltaPayload = \"\";\n if (state.lastSerializedInput === void 0) {\n if (serializedInput.length <= _ClaudeCodeLanguageModel.MAX_DELTA_CALC_SIZE) {\n deltaPayload = serializedInput;\n }\n } else if (serializedInput.length <= _ClaudeCodeLanguageModel.MAX_DELTA_CALC_SIZE && state.lastSerializedInput.length <= _ClaudeCodeLanguageModel.MAX_DELTA_CALC_SIZE && serializedInput.startsWith(state.lastSerializedInput)) {\n deltaPayload = serializedInput.slice(state.lastSerializedInput.length);\n } else if (serializedInput !== state.lastSerializedInput) {\n deltaPayload = \"\";\n }\n if (deltaPayload) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolId,\n delta: deltaPayload\n });\n }\n state.lastSerializedInput = serializedInput;\n }\n }\n const text = content.map((c) => c.type === \"text\" ? c.text : \"\").join(\"\");\n if (text) {\n accumulatedText += text;\n if (options.responseFormat?.type !== \"json\") {\n if (!textPartId) {\n textPartId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textPartId\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textPartId,\n delta: text\n });\n }\n }\n } else if (message.type === \"user\") {\n if (!message.message?.content) {\n this.logger.warn(\n `[claude-code] Unexpected user message structure: missing content field. Message type: ${message.type}. This may indicate an SDK protocol violation.`\n );\n continue;\n }\n const content = message.message.content;\n for (const result of this.extractToolResults(content)) {\n let state = toolStates.get(result.id);\n const toolName = result.name ?? state?.name ?? _ClaudeCodeLanguageModel.UNKNOWN_TOOL_NAME;\n this.logger.debug(\n `[claude-code] Tool result received - Tool: ${toolName}, ID: ${result.id}`\n );\n if (!state) {\n this.logger.warn(\n `[claude-code] Received tool result for unknown tool ID: ${result.id}`\n );\n state = {\n name: toolName,\n inputStarted: false,\n inputClosed: false,\n callEmitted: false\n };\n toolStates.set(result.id, state);\n if (!state.inputStarted) {\n controller.enqueue({\n type: \"tool-input-start\",\n id: result.id,\n toolName,\n providerExecuted: true,\n dynamic: true\n // V3 field: indicates tool is provider-defined\n });\n state.inputStarted = true;\n }\n if (!state.inputClosed) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: result.id\n });\n state.inputClosed = true;\n }\n }\n state.name = toolName;\n const normalizedResult = this.normalizeToolResult(result.result);\n const rawResult = typeof result.result === \"string\" ? result.result : (() => {\n try {\n return JSON.stringify(result.result);\n } catch {\n return String(result.result);\n }\n })();\n emitToolCall(result.id, state);\n controller.enqueue({\n type: \"tool-result\",\n toolCallId: result.id,\n toolName,\n result: normalizedResult,\n isError: result.isError,\n providerExecuted: true,\n dynamic: true,\n // V3 field: indicates tool is provider-defined\n providerMetadata: {\n \"claude-code\": {\n // rawResult preserves the original CLI output string before JSON parsing.\n // Use this when you need the exact string returned by the tool, especially\n // if the `result` field has been parsed/normalized and you need the original format.\n rawResult\n }\n }\n });\n }\n for (const error of this.extractToolErrors(content)) {\n let state = toolStates.get(error.id);\n const toolName = error.name ?? state?.name ?? _ClaudeCodeLanguageModel.UNKNOWN_TOOL_NAME;\n this.logger.debug(\n `[claude-code] Tool error received - Tool: ${toolName}, ID: ${error.id}`\n );\n if (!state) {\n this.logger.warn(\n `[claude-code] Received tool error for unknown tool ID: ${error.id}`\n );\n state = {\n name: toolName,\n inputStarted: true,\n inputClosed: true,\n callEmitted: false\n };\n toolStates.set(error.id, state);\n }\n emitToolCall(error.id, state);\n const rawError = typeof error.error === \"string\" ? error.error : typeof error.error === \"object\" && error.error !== null ? (() => {\n try {\n return JSON.stringify(error.error);\n } catch {\n return String(error.error);\n }\n })() : String(error.error);\n controller.enqueue({\n type: \"tool-error\",\n toolCallId: error.id,\n toolName,\n error: rawError,\n providerExecuted: true,\n dynamic: true,\n // V3 field: indicates tool is provider-defined\n providerMetadata: {\n \"claude-code\": {\n rawError\n }\n }\n });\n }\n } else if (message.type === \"result\") {\n done();\n this.logger.info(\n `[claude-code] Stream completed - Session: ${message.session_id}, Cost: $${message.total_cost_usd?.toFixed(4) ?? \"N/A\"}, Duration: ${message.duration_ms ?? \"N/A\"}ms`\n );\n let rawUsage;\n if (\"usage\" in message) {\n rawUsage = message.usage;\n usage = {\n inputTokens: (message.usage.cache_creation_input_tokens ?? 0) + (message.usage.cache_read_input_tokens ?? 0) + (message.usage.input_tokens ?? 0),\n outputTokens: message.usage.output_tokens ?? 0,\n totalTokens: (message.usage.cache_creation_input_tokens ?? 0) + (message.usage.cache_read_input_tokens ?? 0) + (message.usage.input_tokens ?? 0) + (message.usage.output_tokens ?? 0)\n };\n this.logger.debug(\n `[claude-code] Stream token usage - Input: ${usage.inputTokens}, Output: ${usage.outputTokens}, Total: ${usage.totalTokens}`\n );\n }\n const finishReason = mapClaudeCodeFinishReason(\n message.subtype\n );\n this.logger.debug(`[claude-code] Stream finish reason: ${finishReason}`);\n this.setSessionId(message.session_id);\n if (options.responseFormat?.type === \"json\" && accumulatedText) {\n const extractedJson = this.handleJsonExtraction(accumulatedText, streamWarnings);\n const jsonTextId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: jsonTextId\n });\n controller.enqueue({\n type: \"text-delta\",\n id: jsonTextId,\n delta: extractedJson\n });\n controller.enqueue({\n type: \"text-end\",\n id: jsonTextId\n });\n } else if (textPartId) {\n controller.enqueue({\n type: \"text-end\",\n id: textPartId\n });\n }\n finalizeToolCalls();\n const warningsJson = this.serializeWarningsForMetadata(streamWarnings);\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage,\n providerMetadata: {\n \"claude-code\": {\n sessionId: message.session_id,\n ...message.total_cost_usd !== void 0 && {\n costUsd: message.total_cost_usd\n },\n ...message.duration_ms !== void 0 && { durationMs: message.duration_ms },\n ...rawUsage !== void 0 && { rawUsage },\n // JSON validation warnings are collected during streaming and included\n // in providerMetadata since the AI SDK's finish event doesn't support\n // a top-level warnings field (unlike stream-start which was already emitted)\n ...streamWarnings.length > 0 && {\n warnings: warningsJson\n }\n }\n }\n });\n } else if (message.type === \"system\" && message.subtype === \"init\") {\n this.setSessionId(message.session_id);\n this.logger.info(`[claude-code] Stream session initialized: ${message.session_id}`);\n controller.enqueue({\n type: \"response-metadata\",\n id: message.session_id,\n timestamp: /* @__PURE__ */ new Date(),\n modelId: this.modelId\n });\n }\n }\n finalizeToolCalls();\n this.logger.debug(\"[claude-code] Stream finalized, closing stream\");\n controller.close();\n } catch (error) {\n done();\n this.logger.debug(\n `[claude-code] Error during doStream: ${error instanceof Error ? error.message : String(error)}`\n );\n if (isClaudeCodeTruncationError(error, accumulatedText)) {\n this.logger.warn(\n `[claude-code] Detected truncated stream response, returning ${accumulatedText.length} characters of buffered text`\n );\n const truncationWarning = {\n type: \"other\",\n message: CLAUDE_CODE_TRUNCATION_WARNING\n };\n streamWarnings.push(truncationWarning);\n const emitJsonText = () => {\n const extractedJson = this.handleJsonExtraction(accumulatedText, streamWarnings);\n const jsonTextId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: jsonTextId\n });\n controller.enqueue({\n type: \"text-delta\",\n id: jsonTextId,\n delta: extractedJson\n });\n controller.enqueue({\n type: \"text-end\",\n id: jsonTextId\n });\n };\n if (options.responseFormat?.type === \"json\") {\n emitJsonText();\n } else if (textPartId) {\n controller.enqueue({\n type: \"text-end\",\n id: textPartId\n });\n } else if (accumulatedText) {\n const fallbackTextId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: fallbackTextId\n });\n controller.enqueue({\n type: \"text-delta\",\n id: fallbackTextId,\n delta: accumulatedText\n });\n controller.enqueue({\n type: \"text-end\",\n id: fallbackTextId\n });\n }\n finalizeToolCalls();\n const warningsJson = this.serializeWarningsForMetadata(streamWarnings);\n controller.enqueue({\n type: \"finish\",\n finishReason: \"length\",\n usage,\n providerMetadata: {\n \"claude-code\": {\n ...this.sessionId !== void 0 && { sessionId: this.sessionId },\n truncated: true,\n ...streamWarnings.length > 0 && {\n warnings: warningsJson\n }\n }\n }\n });\n controller.close();\n return;\n }\n finalizeToolCalls();\n let errorToEmit;\n if (isAbortError(error)) {\n errorToEmit = options.abortSignal?.aborted ? options.abortSignal.reason : error;\n } else {\n errorToEmit = this.handleClaudeCodeError(error, messagesPrompt);\n }\n controller.enqueue({\n type: \"error\",\n error: errorToEmit\n });\n controller.close();\n } finally {\n if (options.abortSignal && abortListener) {\n options.abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n },\n cancel: () => {\n if (options.abortSignal && abortListener) {\n options.abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n });\n return {\n stream,\n request: {\n body: messagesPrompt\n }\n };\n }\n serializeWarningsForMetadata(warnings) {\n const result = warnings.map((w) => {\n const base = { type: w.type };\n if (\"message\" in w) {\n const m = w.message;\n if (m !== void 0) base.message = String(m);\n }\n if (w.type === \"unsupported-setting\") {\n const setting = w.setting;\n if (setting !== void 0) base.setting = String(setting);\n if (\"details\" in w) {\n const d = w.details;\n if (d !== void 0) base.details = String(d);\n }\n }\n return base;\n });\n return result;\n }\n};\n\n// src/claude-code-provider.ts\nfunction createClaudeCode(options = {}) {\n const logger = getLogger(options.defaultSettings?.logger);\n if (options.defaultSettings) {\n const validation = validateSettings(options.defaultSettings);\n if (!validation.valid) {\n throw new Error(`Invalid default settings: ${validation.errors.join(\", \")}`);\n }\n if (validation.warnings.length > 0) {\n validation.warnings.forEach((warning) => logger.warn(`Claude Code Provider: ${warning}`));\n }\n }\n const createModel = (modelId, settings = {}) => {\n const mergedSettings = {\n ...options.defaultSettings,\n ...settings\n };\n const validation = validateSettings(mergedSettings);\n if (!validation.valid) {\n throw new Error(`Invalid settings: ${validation.errors.join(\", \")}`);\n }\n return new ClaudeCodeLanguageModel({\n id: modelId,\n settings: mergedSettings,\n settingsValidationWarnings: validation.warnings\n });\n };\n const provider = function(modelId, settings) {\n if (new.target) {\n throw new Error(\"The Claude Code model function cannot be called with the new keyword.\");\n }\n return createModel(modelId, settings);\n };\n provider.languageModel = createModel;\n provider.chat = createModel;\n provider.textEmbeddingModel = (modelId) => {\n throw new NoSuchModelError2({\n modelId,\n modelType: \"textEmbeddingModel\"\n });\n };\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError2({\n modelId,\n modelType: \"imageModel\"\n });\n };\n return provider;\n}\nvar claudeCode = createClaudeCode();\n\n// src/index.ts\nimport { createSdkMcpServer as createSdkMcpServer2, tool as tool2 } from \"@anthropic-ai/claude-agent-sdk\";\n\n// src/mcp-helpers.ts\nimport { createSdkMcpServer, tool } from \"@anthropic-ai/claude-agent-sdk\";\nimport \"zod\";\nfunction createCustomMcpServer(config) {\n const defs = Object.entries(config.tools).map(\n ([name, def]) => tool(\n name,\n def.description,\n def.inputSchema.shape,\n (args, extra) => def.handler(args, extra)\n )\n );\n return createSdkMcpServer({ name: config.name, version: config.version, tools: defs });\n}\nexport {\n ClaudeCodeLanguageModel,\n claudeCode,\n createAPICallError,\n createAuthenticationError,\n createClaudeCode,\n createCustomMcpServer,\n createSdkMcpServer2 as createSdkMcpServer,\n createTimeoutError,\n getErrorMetadata,\n isAuthenticationError,\n isTimeoutError,\n tool2 as tool\n};\n//# sourceMappingURL=index.js.map","import { resolve, relative, isAbsolute } from 'node:path';\n\n/**\n * Permission result type compatible with both native SDK and community provider\n * We define our own type to avoid version conflicts between packages\n */\ntype PermissionResult = \n | { behavior: 'allow'; updatedInput: Record<string, unknown> }\n | { behavior: 'deny'; message: string; interrupt?: boolean };\n\n/**\n * Permission handler function type compatible with both implementations\n */\ntype CanUseToolFn = (\n toolName: string,\n input: Record<string, unknown>,\n options: { signal: AbortSignal; suggestions?: unknown }\n) => Promise<PermissionResult>;\n\n/**\n * Creates a permission handler that restricts Claude to a specific project directory\n *\n * This provides defense-in-depth security by:\n * 1. Blocking file operations outside the project directory\n * 2. Preventing directory traversal attacks (../)\n * 3. Blocking dangerous bash commands (rm -rf /, sudo, etc.)\n * 4. Preventing directory changes that escape the project\n *\n * @param projectDirectory Absolute path to the project directory (e.g., /Users/codydearkland/openbuilder-workspace/codyscoolnewapp)\n * @returns Permission handler function for use with Claude Agent SDK\n */\nexport function createProjectScopedPermissionHandler(projectDirectory: string): CanUseToolFn {\n const normalizedProjectDir = resolve(projectDirectory);\n\n return async (toolName, input, { signal, suggestions }) => {\n // Helper: Check if a path is within the project directory\n const isWithinProject = (filePath: string): boolean => {\n const absPath = resolve(normalizedProjectDir, filePath);\n const relPath = relative(normalizedProjectDir, absPath);\n\n // Path is within project if:\n // 1. Relative path doesn't start with '..' (not going up)\n // 2. Relative path is not absolute (not escaping to root)\n const isWithin = !relPath.startsWith('..') && !isAbsolute(relPath);\n\n return isWithin;\n };\n\n // 1️⃣ FILE OPERATIONS - Restrict to project directory\n if (['Read', 'Write', 'Edit', 'NotebookEdit'].includes(toolName)) {\n const filePath = (input.file_path || input.notebook_path) as string | undefined;\n\n if (!filePath) {\n // No path provided - allow (will use cwd)\n return { behavior: 'allow', updatedInput: input };\n }\n\n if (!isWithinProject(filePath)) {\n console.warn(`[permissions] DENIED ${toolName} - File outside project boundary: ${filePath}`);\n return {\n behavior: 'deny',\n message: `Access denied: File \"${filePath}\" is outside the project directory. You can only access files within ${normalizedProjectDir}`,\n interrupt: true,\n };\n }\n }\n\n // 2️⃣ SEARCH OPERATIONS - Restrict to project directory\n if (['Glob', 'Grep'].includes(toolName)) {\n const searchPath = input.path as string | undefined;\n\n if (searchPath && !isWithinProject(searchPath)) {\n console.warn(`[permissions] DENIED ${toolName} - Search outside project boundary: ${searchPath}`);\n return {\n behavior: 'deny',\n message: `Search denied: Path \"${searchPath}\" is outside the project directory. You can only search within ${normalizedProjectDir}`,\n interrupt: true,\n };\n }\n }\n\n // 3️⃣ BASH COMMANDS - Block dangerous operations\n if (toolName === 'Bash') {\n const command = input.command as string;\n\n // Block dangerous command patterns\n const dangerousPatterns = [\n { pattern: /rm\\s+-rf\\s+[\\/~]/, message: 'Recursive deletion of root or home directory' },\n { pattern: /sudo/, message: 'Sudo commands' },\n { pattern: /chmod\\s+777/, message: 'Insecure permission changes' },\n { pattern: />\\s*\\/dev\\/sd/, message: 'Writing to disk devices' },\n { pattern: /dd\\s+if=/, message: 'Direct disk operations' },\n { pattern: /mkfs/, message: 'Filesystem formatting' },\n { pattern: /shutdown|reboot/, message: 'System power commands' },\n ];\n\n for (const { pattern, message } of dangerousPatterns) {\n if (pattern.test(command)) {\n console.warn(`[permissions] BLOCKED dangerous bash command: ${message} - ${command}`);\n return {\n behavior: 'deny',\n message: `Command blocked for safety: ${message}. Command: \"${command}\"`,\n interrupt: true,\n };\n }\n }\n\n // Block cd commands that escape project directory\n const cdMatch = command.match(/cd\\s+([^\\s;|&]+)/);\n if (cdMatch) {\n const targetPath = cdMatch[1];\n if (!isWithinProject(targetPath)) {\n console.warn(`[permissions] BLOCKED cd outside project: ${targetPath}`);\n return {\n behavior: 'deny',\n message: `Cannot change directory outside project. You are restricted to ${normalizedProjectDir}`,\n interrupt: false, // Let Claude try another approach\n };\n }\n }\n }\n\n // Default: Allow all other operations\n return { behavior: 'allow', updatedInput: input };\n };\n}\n","/**\n * Skills management for Claude Code projects.\n * \n * This module handles copying bundled skills to project directories\n * so they can be loaded by Claude Code when running in that project.\n */\n\nimport { existsSync, mkdirSync, copyFileSync, readdirSync, statSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n// Get the directory of this module\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Find the bundled skills directory.\n * Works in both development (src/lib/) and production (dist/lib/) modes.\n */\nfunction findBundledSkillsDir(): string | null {\n // Try multiple possible locations\n const possiblePaths = [\n // Development: apps/runner/src/lib/ -> apps/runner/.claude/skills/\n join(__dirname, '..', '..', '.claude', 'skills'),\n // Production from dist/lib/: apps/runner/dist/lib/ -> apps/runner/.claude/skills/\n join(__dirname, '..', '..', '..', '.claude', 'skills'),\n // Global install: might be in package root\n join(__dirname, '..', '..', '..', '..', '.claude', 'skills'),\n ];\n \n for (const skillsPath of possiblePaths) {\n if (existsSync(skillsPath)) {\n const skills = readdirSync(skillsPath).filter(name => {\n const fullPath = join(skillsPath, name);\n return statSync(fullPath).isDirectory();\n });\n if (skills.length > 0) {\n console.log(`[skills] Found bundled skills at: ${skillsPath}`);\n return skillsPath;\n }\n }\n }\n \n console.log(`[skills] No bundled skills found. Searched paths:`, possiblePaths);\n return null;\n}\n\n// Cache the skills directory path\nlet _bundledSkillsDir: string | null | undefined = undefined;\n\nfunction getBundledSkillsDir(): string | null {\n if (_bundledSkillsDir === undefined) {\n _bundledSkillsDir = findBundledSkillsDir();\n }\n return _bundledSkillsDir;\n}\n\n/**\n * Copy a directory recursively\n */\nfunction copyDirSync(src: string, dest: string): void {\n if (!existsSync(src)) {\n return;\n }\n \n mkdirSync(dest, { recursive: true });\n \n const entries = readdirSync(src);\n for (const entry of entries) {\n const srcPath = join(src, entry);\n const destPath = join(dest, entry);\n \n const stat = statSync(srcPath);\n if (stat.isDirectory()) {\n copyDirSync(srcPath, destPath);\n } else {\n copyFileSync(srcPath, destPath);\n }\n }\n}\n\n/**\n * Ensure skills are available in a project directory.\n * Copies bundled skills to the project's .claude/skills/ directory.\n * \n * NOTE: Skills are now included in project templates directly, so this\n * function is disabled. Templates include .claude/skills/github-setup/\n * which gets cleaned up after successful GitHub setup.\n * \n * @param _projectDirectory - The project's working directory (unused - skills bundled in templates)\n * @returns false - skills are now bundled with templates\n */\nexport function ensureProjectSkills(_projectDirectory: string): boolean {\n // Skills are now bundled with templates - no need to copy at runtime\n // The github-setup skill self-deletes after successful repo creation\n return false;\n}\n\n/**\n * List available bundled skills\n */\nexport function listBundledSkills(): string[] {\n const bundledSkillsDir = getBundledSkillsDir();\n if (!bundledSkillsDir) {\n return [];\n }\n \n // Store in const to help TypeScript narrow the type\n const skillsDir = bundledSkillsDir;\n return readdirSync(skillsDir).filter(name => {\n const skillPath = join(skillsDir, name);\n return statSync(skillPath).isDirectory();\n });\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/types/design.ts\nvar MOOD_GUIDANCE;\nvar init_design = __esm({\n \"src/types/design.ts\"() {\n MOOD_GUIDANCE = {\n \"Modern\": \"Clean lines, ample white space, contemporary patterns\",\n \"Professional\": \"Polished, consistent, attention to detail\",\n \"Playful\": \"Rounded shapes, friendly interactions, lighthearted touches\",\n \"Minimal\": \"Essential elements only, generous spacing, restrained palette use\",\n \"Luxurious\": \"Premium feel, refined details, sophisticated presentation\",\n \"Trustworthy\": \"Clear hierarchy, readable typography, familiar patterns\",\n \"Friendly\": \"Approachable, warm colors, inviting interactions\",\n \"Bold\": \"Strong contrasts, large typography, confident visual statements\",\n \"Elegant\": \"Refined details, subtle transitions, sophisticated spacing\",\n \"Energetic\": \"Vibrant colors, dynamic layouts, active feeling\",\n \"Clean\": \"Uncluttered, focused, clear visual hierarchy\",\n \"Sophisticated\": \"Refined aesthetics, balanced composition, mature style\",\n \"Vibrant\": \"Rich colors, high energy, lively presence\",\n \"Warm\": \"Inviting colors, soft edges, approachable feel\",\n \"Tech-forward\": \"Sharp edges, monospace accents, futuristic elements\"\n };\n }\n});\n\n// src/config/tags.ts\nfunction findTagDefinition(key) {\n for (const def of TAG_DEFINITIONS) {\n if (def.key === key) return def;\n if (def.children) {\n const child = def.children.find((c) => c.key === key);\n if (child) return child;\n }\n }\n return void 0;\n}\nvar TAG_DEFINITIONS;\nvar init_tags = __esm({\n \"src/config/tags.ts\"() {\n TAG_DEFINITIONS = [\n // Model Selection (explicit provider + model mapping)\n {\n key: \"model\",\n label: \"Model\",\n description: \"AI agent and model to use for generation\",\n category: \"model\",\n inputType: \"select\",\n options: [\n {\n value: \"claude-sonnet-4-5\",\n label: \"Claude Sonnet 4.5\",\n description: \"Anthropic Claude - Balanced performance and speed\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-sonnet-4-5\"\n },\n {\n value: \"claude-opus-4-5\",\n label: \"Claude Opus 4.5\",\n description: \"Anthropic Claude - Most capable for complex tasks\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-opus-4-5\"\n },\n {\n value: \"claude-haiku-4-5\",\n label: \"Claude Haiku 4.5\",\n description: \"Anthropic Claude - Fastest, good for iterations\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-haiku-4-5\"\n },\n {\n value: \"gpt-5.2-codex\",\n label: \"GPT-5.2 Codex\",\n description: \"OpenAI Codex - Advanced code generation\",\n logo: \"/openai.png\",\n provider: \"openai-codex\",\n model: \"openai/gpt-5.2-codex\"\n }\n ]\n },\n // Framework Selection\n {\n key: \"framework\",\n label: \"Framework\",\n description: \"Frontend framework to use\",\n category: \"framework\",\n inputType: \"select\",\n options: [\n {\n value: \"next\",\n label: \"Next.js\",\n description: \"Full-stack React with SSR, App Router, and file-based routing\",\n logo: \"/logos/nextjs.svg\",\n repository: \"github:codyde/template-nextjs\",\n branch: \"main\"\n },\n {\n value: \"tanstack\",\n label: \"TanStack Start\",\n description: \"Minimal TanStack Start foundation with React 19, Router, Query, and Tailwind\",\n logo: \"/logos/tanstack.png\",\n repository: \"github:codyde/template-tanstackstart\",\n branch: \"main\"\n },\n {\n value: \"vite\",\n label: \"React + Vite\",\n description: \"Fast React SPA with Vite - perfect for client-side apps\",\n logo: \"/logos/react.svg\",\n repository: \"github:codyde/template-reactvite\",\n branch: \"main\"\n },\n {\n value: \"astro\",\n label: \"Astro\",\n description: \"Content-focused static sites with islands architecture\",\n logo: \"/astro.png\",\n repository: \"github:codyde/template-astro\",\n branch: \"main\"\n }\n ],\n promptTemplate: \"CRITICAL: You MUST use the {label} template. Clone it using: npx degit {repository}#{branch} {{projectName}}\"\n },\n // Runner Selection (options populated dynamically)\n {\n key: \"runner\",\n label: \"Runner\",\n description: \"Build runner to execute the build\",\n category: \"runner\",\n inputType: \"select\",\n options: []\n // Populated dynamically from connected runners\n },\n // Design Configuration (nested)\n {\n key: \"design\",\n label: \"Design\",\n description: \"Visual design preferences\",\n category: \"design\",\n inputType: \"nested\",\n children: [\n // Brand Themes\n {\n key: \"brand\",\n label: \"Brand\",\n description: \"Pre-configured brand color themes\",\n category: \"design\",\n inputType: \"select\",\n maxSelections: 1,\n options: [\n {\n value: \"sentry\",\n label: \"Sentry\",\n description: \"Error monitoring and performance - vibrant purple and pink\",\n logo: \"/logos/sentry.svg\",\n values: {\n primaryColor: \"#9D58BF\",\n secondaryColor: \"#FF708C\",\n accentColor: \"#FF9838\",\n neutralLight: \"#F0ECF3\",\n neutralDark: \"#2B2233\"\n }\n },\n {\n value: \"stripe\",\n label: \"Stripe\",\n description: \"Modern payments aesthetic\",\n logo: \"/logos/stripe.svg\",\n values: {\n primaryColor: \"#635bff\",\n secondaryColor: \"#0a2540\",\n accentColor: \"#00d4ff\",\n neutralLight: \"#f6f9fc\",\n neutralDark: \"#0a2540\"\n }\n },\n {\n value: \"vercel\",\n label: \"Vercel\",\n description: \"Clean developer tools\",\n logo: \"/logos/vercel.svg\",\n values: {\n primaryColor: \"#000000\",\n secondaryColor: \"#ffffff\",\n accentColor: \"#0070f3\",\n neutralLight: \"#fafafa\",\n neutralDark: \"#000000\"\n }\n },\n {\n value: \"linear\",\n label: \"Linear\",\n description: \"Sleek project management\",\n logo: \"/logos/linear.svg\",\n values: {\n primaryColor: \"#5e6ad2\",\n secondaryColor: \"#26b5ce\",\n accentColor: \"#f2994a\",\n neutralLight: \"#f7f8f8\",\n neutralDark: \"#1a1a1a\"\n }\n },\n {\n value: \"notion\",\n label: \"Notion\",\n description: \"Warm productivity\",\n logo: \"/logos/notion.svg\",\n values: {\n primaryColor: \"#2383e2\",\n secondaryColor: \"#e69138\",\n accentColor: \"#d44c47\",\n neutralLight: \"#f7f6f3\",\n neutralDark: \"#37352f\"\n }\n },\n {\n value: \"github\",\n label: \"GitHub\",\n description: \"Developer-first\",\n logo: \"/logos/github.svg\",\n values: {\n primaryColor: \"#238636\",\n secondaryColor: \"#1f6feb\",\n accentColor: \"#f85149\",\n neutralLight: \"#f6f8fa\",\n neutralDark: \"#24292f\"\n }\n },\n {\n value: \"airbnb\",\n label: \"Airbnb\",\n description: \"Friendly travel\",\n logo: \"/logos/airbnb.svg\",\n values: {\n primaryColor: \"#ff385c\",\n secondaryColor: \"#00a699\",\n accentColor: \"#fc642d\",\n neutralLight: \"#f7f7f7\",\n neutralDark: \"#222222\"\n }\n },\n {\n value: \"spotify\",\n label: \"Spotify\",\n description: \"Bold music streaming\",\n logo: \"/logos/spotify.svg\",\n values: {\n primaryColor: \"#1db954\",\n secondaryColor: \"#191414\",\n accentColor: \"#1ed760\",\n neutralLight: \"#f6f6f6\",\n neutralDark: \"#000000\"\n }\n }\n ],\n promptTemplate: \"Use the {value} brand aesthetic with the following color palette: Primary: {primaryColor}, Secondary: {secondaryColor}, Accent: {accentColor}, Neutral Light: {neutralLight}, Neutral Dark: {neutralDark}. Match the design style and feel of {value}.\"\n }\n ]\n }\n ];\n }\n});\n\n// src/lib/tags/resolver.ts\nfunction resolveTags(appliedTags) {\n const resolved = {};\n try {\n if (!appliedTags || !Array.isArray(appliedTags)) {\n console.warn(\"[resolveTags] Invalid appliedTags:\", appliedTags);\n return resolved;\n }\n const brandTag = appliedTags.find((t) => t.key === \"brand\");\n if (brandTag?.expandedValues) {\n Object.assign(resolved, brandTag.expandedValues);\n resolved.brand = brandTag.value;\n }\n const modelTag = appliedTags.find((t) => t.key === \"model\");\n if (modelTag) {\n resolved.model = modelTag.value;\n }\n const frameworkTag = appliedTags.find((t) => t.key === \"framework\");\n if (frameworkTag) {\n resolved.framework = frameworkTag.value;\n }\n const runnerTag = appliedTags.find((t) => t.key === \"runner\");\n if (runnerTag) {\n resolved.runner = runnerTag.value;\n }\n return resolved;\n } catch (error) {\n console.error(\"[resolveTags] Error resolving tags:\", error);\n return resolved;\n }\n}\nfunction generatePromptFromTags(resolved, projectName, isNewProject) {\n const sections = [];\n sections.push(`\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F3AF} USER-SPECIFIED DESIGN (HIGHEST PRIORITY - OVERRIDES ALL DEFAULTS)\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nCRITICAL PRIORITY LEVELS:\n[PRIORITY 1] User's explicit tag selections (below) - MUST be implemented exactly\n[PRIORITY 2] Template functionality and structure - keep this \n[PRIORITY 3] Base design system defaults - use only if no tags specified\n\n${isNewProject ? `\n\\u26A0\\uFE0F TEMPLATE TRANSFORMATION REQUIRED \\u26A0\\uFE0F\n\nYou are working with a template that has its own existing design.\nYour job: TRANSFORM the template's visual design to match the specifications below.\n\nDO NOT just add styles on top - REPLACE the template's design language:\n- Modify the template's CSS/styling files \n- Update component designs (buttons, cards, layouts, navigation)\n- Change visual aesthetics while preserving functionality\n- The template STRUCTURE is fine, but its VISUAL DESIGN must change\n` : \"\"}`);\n if (resolved.framework) {\n const frameworkDef = findTagDefinition(\"framework\");\n const frameworkOption = frameworkDef?.options?.find((o) => o.value === resolved.framework);\n if (frameworkOption && frameworkDef?.promptTemplate) {\n let prompt = frameworkDef.promptTemplate.replace(\"{label}\", frameworkOption.label).replace(\"{value}\", frameworkOption.value).replace(\"{repository}\", frameworkOption.repository || \"\").replace(\"{branch}\", frameworkOption.branch || \"main\").replace(\"{{projectName}}\", projectName || \"<project-name>\");\n sections.push(`## Framework Requirement (MANDATORY)\n\n${prompt}`);\n } else {\n sections.push(`## Framework Requirement (MANDATORY)\n\nCRITICAL: The user has explicitly selected ${resolved.framework} as the framework.\nYou MUST use ${resolved.framework} for this project. Do NOT suggest or use any other framework.\n\nSet up the project structure according to ${resolved.framework} best practices and conventions.`);\n }\n }\n if (resolved.brand) {\n sections.push(\"\\n## Design Constraints (MANDATORY - User-Specified)\\n\");\n sections.push(\"CRITICAL: The user has explicitly configured these design preferences. Follow these specifications precisely:\\n\");\n const brandDef = findTagDefinition(\"brand\");\n const brandOption = brandDef?.options?.find((o) => o.value === resolved.brand);\n if (brandOption) {\n sections.push(`**Brand Aesthetic (MANDATORY):**`);\n sections.push(`Match the visual style and feel of ${brandOption.label} (${brandOption.description}).`);\n }\n sections.push(`\n**Color Palette (MANDATORY - DO NOT DEVIATE):**`);\n sections.push(`- Primary: ${resolved.primaryColor} (use for CTAs, primary buttons, brand elements)`);\n sections.push(`- Secondary: ${resolved.secondaryColor} (use for secondary actions, supporting elements)`);\n sections.push(`- Accent: ${resolved.accentColor} (use for highlights, badges, important elements)`);\n sections.push(`- Neutral Light: ${resolved.neutralLight} (use for light backgrounds, cards, containers)`);\n sections.push(`- Neutral Dark: ${resolved.neutralDark} (use for text, dark backgrounds, borders)`);\n sections.push(`\nYou MUST use ONLY these 5 colors. Do NOT introduce any additional colors outside this palette.`);\n sections.push(\"\\n**Technical Requirements:**\");\n sections.push(\"- Define all colors as CSS custom properties (e.g., --color-primary, --color-secondary)\");\n sections.push(\"- NEVER hardcode hex values directly in components\");\n sections.push(\"- Use semantic color names that reference the custom properties\");\n sections.push(\"- NEVER use emojis in the UI. Instead, use Lucide React icons for all visual elements\");\n } else {\n sections.push(\"\\n**UI Guidelines:**\");\n sections.push(\"- NEVER use emojis in the UI. Instead, use Lucide React icons for all visual elements\");\n }\n return sections.filter((s) => s).join(\"\\n\");\n}\nvar init_resolver = __esm({\n \"src/lib/tags/resolver.ts\"() {\n init_tags();\n }\n});\n\n// src/lib/agents/claude-strategy.ts\nvar claude_strategy_exports = {};\n__export(claude_strategy_exports, {\n default: () => claude_strategy_default\n});\nfunction buildClaudeSections(context) {\n const sections = [];\n if (context.tags && context.tags.length > 0) {\n const resolved = resolveTags(context.tags);\n const tagPrompt = generatePromptFromTags(resolved, context.projectName, context.isNewProject);\n if (tagPrompt) {\n sections.push(tagPrompt);\n }\n } else if (context.designPreferences) {\n const prefs = context.designPreferences;\n const moodGuidance = prefs.mood.map((m) => `- ${m}: ${MOOD_GUIDANCE[m] || \"\"}`).join(\"\\n\");\n sections.push(`## Design Constraints (User-Specified)\n\nCRITICAL: The user has specified EXACT design preferences. Follow these specifications precisely:\n\n**Color Palette (MANDATORY - DO NOT DEVIATE):**\n- Primary: ${prefs.colors.primary} (use for CTAs, primary buttons, brand elements)\n- Secondary: ${prefs.colors.secondary} (use for secondary actions, supporting elements)\n- Accent: ${prefs.colors.accent} (use for highlights, badges, important elements)\n- Neutral Light: ${prefs.colors.neutralLight} (use for light backgrounds, cards, containers)\n- Neutral Dark: ${prefs.colors.neutralDark} (use for text, dark backgrounds, borders)\n\nYou MUST use ONLY these colors. Define them as CSS custom properties in your design system:\n\n\\`\\`\\`css\n:root {\n --color-primary: ${prefs.colors.primary};\n --color-secondary: ${prefs.colors.secondary};\n --color-accent: ${prefs.colors.accent};\n --color-neutral-light: ${prefs.colors.neutralLight};\n --color-neutral-dark: ${prefs.colors.neutralDark};\n}\n\\`\\`\\`\n\n**Typography (MANDATORY):**\n- Heading Font: ${prefs.typography.heading} (use for all h1, h2, h3, h4, h5, h6)\n- Body Font: ${prefs.typography.body} (use for paragraphs, labels, body text, UI elements)\n\nImport these fonts from Google Fonts or use system fonts as specified.\n\n**Style Direction:**\nThe user wants a design that feels: ${prefs.mood.join(\", \")}\n\nInterpret these mood descriptors to guide your design decisions:\n${moodGuidance}\n\n**Critical Reminders:**\n- Do NOT add any colors outside the specified 5-color palette\n- Do NOT use any fonts other than the 2 specified\n- Match the mood descriptors in your typography scale, spacing, and component design\n- Define colors as CSS variables, never use hex values directly in components`);\n }\n if (context.isNewProject) {\n sections.push(`## New Project: Template Prepared\n\n- Project name: ${context.projectName}\n- Location: ${context.workingDirectory}\n- Operation type: ${context.operationType}\n\nThe template has already been downloaded. Install dependencies and customize the scaffold to satisfy the request.`);\n } else {\n let existingProjectSection = `## Existing Project Context\n\n- Project location: ${context.workingDirectory}\n- Operation type: ${context.operationType}\n\nReview the current codebase and apply the requested changes without re-scaffolding.`;\n if (context.conversationHistory && context.conversationHistory.length > 0) {\n existingProjectSection += `\n\n**Recent Conversation History:**\n`;\n existingProjectSection += `You have access to the recent conversation history. Use this to understand the context and what has been discussed:\n\n`;\n context.conversationHistory.forEach((msg, index2) => {\n const roleLabel = msg.role === \"user\" ? \"User\" : \"Assistant\";\n const timestamp2 = msg.timestamp instanceof Date ? msg.timestamp.toISOString() : msg.timestamp;\n const content = msg.content.length > 500 ? msg.content.substring(0, 500) + \"...[truncated]\" : msg.content;\n existingProjectSection += `${index2 + 1}. ${roleLabel} (${timestamp2}):\n${content}\n\n`;\n });\n existingProjectSection += `Use this conversation history to understand:\n- What has been built or discussed so far\n- The user's preferences and requirements\n- References to \"it\", \"the app\", \"the project\", etc.\n- Any previous decisions or implementations\n\nApply the current request in the context of this conversation.`;\n }\n sections.push(existingProjectSection);\n }\n sections.push(`## Workspace Rules\n- Use relative paths within the project.\n- Work inside the existing project structure.\n- Provide complete updates without placeholders.`);\n if (context.fileTree) {\n sections.push(`## Project Structure Snapshot\n${context.fileTree}`);\n }\n if (context.templateName) {\n sections.push(`## Template Details\n- Template: ${context.templateName}\n- Framework: ${context.templateFramework ?? \"unknown\"}`);\n }\n return sections;\n}\nfunction buildFullPrompt(context, basePrompt) {\n if (!context.isNewProject) {\n return basePrompt;\n }\n return `${basePrompt}\n\nCRITICAL: The template has already been prepared in ${context.workingDirectory}. Do not scaffold a new project.`;\n}\nvar claudeStrategy, claude_strategy_default;\nvar init_claude_strategy = __esm({\n \"src/lib/agents/claude-strategy.ts\"() {\n init_design();\n init_resolver();\n claudeStrategy = {\n buildSystemPromptSections: buildClaudeSections,\n buildFullPrompt,\n shouldDownloadTemplate(context) {\n return context.isNewProject && !context.skipTemplates;\n },\n postTemplateSelected(context, template) {\n context.templateName = template.name;\n context.templateFramework = template.framework;\n context.fileTree = template.fileTree;\n }\n };\n claude_strategy_default = claudeStrategy;\n }\n});\n\n// src/lib/agents/codex/template-catalog.ts\nfunction buildCodexTemplateCatalogSection(catalog) {\n return `## Template Catalog\n${catalog}`;\n}\nvar init_template_catalog = __esm({\n \"src/lib/agents/codex/template-catalog.ts\"() {\n }\n});\n\n// src/lib/agents/codex/events.ts\nfunction sortPhases(phases) {\n return [...phases].sort((a, b) => {\n const idxA = CODEX_PHASE_ORDER.indexOf(a.id);\n const idxB = CODEX_PHASE_ORDER.indexOf(b.id);\n const safeA = idxA === -1 ? CODEX_PHASE_ORDER.length + 1 : idxA;\n const safeB = idxB === -1 ? CODEX_PHASE_ORDER.length + 1 : idxB;\n if (safeA === safeB) {\n return (a.title ?? \"\").localeCompare(b.title ?? \"\");\n }\n return safeA - safeB;\n });\n}\nfunction toStringOr(value, fallback) {\n if (value === void 0 || value === null) return fallback;\n return String(value);\n}\nfunction toOptionalString(value) {\n if (value === void 0 || value === null) return void 0;\n return String(value);\n}\nfunction toOptionalStringArray(values) {\n if (!Array.isArray(values)) return void 0;\n const mapped = values.map((value) => toOptionalString(value)?.trim()).filter((item) => !!item);\n return mapped.length > 0 ? mapped : void 0;\n}\nfunction processCodexEvent(state, rawEvent) {\n const timestampValue = rawEvent.timestamp;\n const timestamp2 = timestampValue ? new Date(timestampValue) : /* @__PURE__ */ new Date();\n switch (rawEvent.type) {\n case \"codex-phase-start\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId) return state;\n let found = false;\n const phases = state.phases.map((phase) => {\n if (phase.id === phaseId) {\n found = true;\n return {\n ...phase,\n title: toOptionalString(rawEvent.title) ?? phase.title,\n description: toOptionalString(rawEvent.description) ?? phase.description,\n status: \"active\",\n startedAt: phase.startedAt ?? timestamp2,\n spotlight: toOptionalString(rawEvent.spotlight) ?? phase.spotlight\n };\n }\n if (phase.status === \"active\" && phase.completedAt === void 0) {\n return {\n ...phase,\n status: \"completed\",\n completedAt: timestamp2\n };\n }\n return phase;\n });\n const next = found ? phases : [\n ...phases,\n {\n id: phaseId,\n title: toStringOr(rawEvent.title, \"In Progress\"),\n description: toStringOr(rawEvent.description, \"\"),\n status: \"active\",\n startedAt: timestamp2,\n spotlight: toOptionalString(rawEvent.spotlight)\n }\n ];\n return {\n ...state,\n phases: sortPhases(next)\n };\n }\n case \"codex-phase-complete\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId) return state;\n return {\n ...state,\n phases: sortPhases(\n state.phases.map(\n (phase) => phase.id === phaseId ? {\n ...phase,\n title: toOptionalString(rawEvent.title) ?? phase.title,\n description: toOptionalString(rawEvent.description) ?? phase.description,\n status: \"completed\",\n completedAt: timestamp2,\n spotlight: toOptionalString(rawEvent.spotlight) ?? phase.spotlight\n } : phase\n )\n )\n };\n }\n case \"codex-phase-blocked\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId) return state;\n return {\n ...state,\n phases: state.phases.map(\n (phase) => phase.id === phaseId ? {\n ...phase,\n status: \"blocked\",\n spotlight: toOptionalString(rawEvent.reason) ?? toOptionalString(rawEvent.spotlight) ?? phase.spotlight\n } : phase\n )\n };\n }\n case \"codex-phase-spotlight\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId || !rawEvent.spotlight) return state;\n return {\n ...state,\n phases: state.phases.map(\n (phase) => phase.id === phaseId ? { ...phase, spotlight: toOptionalString(rawEvent.spotlight) ?? phase.spotlight } : phase\n )\n };\n }\n case \"codex-template-decision\": {\n return {\n ...state,\n templateDecision: {\n templateId: toStringOr(rawEvent.templateId, \"unknown-template\"),\n templateName: toOptionalString(rawEvent.templateName) ?? toOptionalString(rawEvent.displayName) ?? \"Selected Template\",\n repository: toOptionalString(rawEvent.repository),\n branch: toOptionalString(rawEvent.branch),\n confidence: typeof rawEvent.confidence === \"number\" ? rawEvent.confidence : void 0,\n rationale: toOptionalString(rawEvent.rationale) ?? toOptionalString(rawEvent.reason),\n decidedAt: timestamp2\n }\n };\n }\n case \"codex-workspace-verified\": {\n return {\n ...state,\n workspaceVerification: {\n directory: toOptionalString(rawEvent.directory) ?? toOptionalString(rawEvent.path) ?? \"\",\n exists: rawEvent.exists !== void 0 ? Boolean(rawEvent.exists) : true,\n discoveredEntries: toOptionalStringArray(rawEvent.entries),\n notes: toOptionalString(rawEvent.notes) ?? toOptionalString(rawEvent.summary),\n verifiedAt: timestamp2\n }\n };\n }\n case \"codex-task-summary\": {\n const bullets = Array.isArray(rawEvent.bullets) ? toOptionalStringArray(rawEvent.bullets) ?? [] : typeof rawEvent.summary === \"string\" ? rawEvent.summary.split(\"\\n\").map((line) => line.trim()).filter(Boolean) : [];\n return {\n ...state,\n taskSummary: {\n headline: toOptionalString(rawEvent.headline) ?? toOptionalString(rawEvent.title) ?? \"Key Tasks Identified\",\n bullets,\n capturedAt: timestamp2\n }\n };\n }\n case \"codex-execution-insight\": {\n const text2 = rawEvent.text ?? rawEvent.message ?? \"\";\n if (!text2) return state;\n const tone = [\"success\", \"warning\", \"error\", \"info\"].includes(\n toStringOr(rawEvent.tone, \"\")\n ) ? rawEvent.tone : \"info\";\n const insight = {\n id: toOptionalString(rawEvent.id) ?? `insight-${Date.now()}`,\n text: toStringOr(text2, \"\"),\n tone,\n timestamp: timestamp2\n };\n const existing = state.executionInsights ?? [];\n const existingIndex = existing.findIndex((item) => item.id === insight.id);\n const nextInsights = existingIndex >= 0 ? existing.map((item) => item.id === insight.id ? insight : item) : [...existing.slice(-19), insight];\n return {\n ...state,\n executionInsights: nextInsights\n };\n }\n default:\n return state;\n }\n}\nvar CODEX_PHASE_ORDER;\nvar init_events = __esm({\n \"src/lib/agents/codex/events.ts\"() {\n CODEX_PHASE_ORDER = [\n \"prompt-analysis\",\n \"template-selection\",\n \"template-clone\",\n \"workspace-verification\",\n \"task-synthesis\",\n \"execution\"\n ];\n }\n});\n\n// src/lib/templates/config.server.ts\nvar config_server_exports = {};\n__export(config_server_exports, {\n getAllTemplates: () => getAllTemplates,\n getTemplateById: () => getTemplateById,\n getTemplateSelectionContext: () => getTemplateSelectionContext,\n loadTemplateConfig: () => loadTemplateConfig,\n selectTemplateFromPrompt: () => selectTemplateFromPrompt,\n setTemplatesPath: () => setTemplatesPath\n});\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nfunction setTemplatesPath(path) {\n configuredPath = path;\n process.env.TEMPLATES_JSON_PATH = path;\n cachedConfig = null;\n}\nfunction getTemplatesPath() {\n const path = configuredPath ?? process.env.TEMPLATES_JSON_PATH ?? join(process.cwd(), \"templates.json\");\n if (process.env.DEBUG_TEMPLATES === \"1\") {\n console.log(\"[templates] getTemplatesPath called:\");\n console.log(` configuredPath: ${configuredPath}`);\n console.log(` env.TEMPLATES_JSON_PATH: ${process.env.TEMPLATES_JSON_PATH}`);\n console.log(` resolved path: ${path}`);\n }\n return path;\n}\nasync function loadTemplateConfig() {\n if (cachedConfig) {\n return cachedConfig;\n }\n const configPath = getTemplatesPath();\n const content = await readFile(configPath, \"utf-8\");\n cachedConfig = JSON.parse(content);\n console.log(`\\u2705 Loaded ${cachedConfig.templates.length} templates from ${configPath}`);\n return cachedConfig;\n}\nasync function getTemplateById(id) {\n const config = await loadTemplateConfig();\n return config.templates.find((t) => t.id === id) ?? null;\n}\nasync function getAllTemplates() {\n const config = await loadTemplateConfig();\n return config.templates;\n}\nasync function getTemplateSelectionContext() {\n const templates = await getAllTemplates();\n let context = \"\\u{1F3AF} AVAILABLE TEMPLATES:\\n\\n\";\n for (const template of templates) {\n context += `**${template.name}** (ID: ${template.id})\n`;\n context += `${template.description}\n\n`;\n context += `\\u{1F4E6} Clone command:\n`;\n context += ` npx degit ${template.repository}#${template.branch} \"<project-name>\"\n\n`;\n context += `Best for:\n${template.selection.useCases.map((uc) => ` \\u2022 ${uc}`).join(\"\\n\")}\n\n`;\n context += `Example user requests:\n${template.selection.examples.map((ex) => ` \\u2022 \"${ex}\"`).join(\"\\n\")}\n\n`;\n context += `Tech Stack: ${template.tech.framework} ${template.tech.version}, ${template.tech.language}, ${template.tech.styling}`;\n if (template.tech.uiLibrary) {\n context += `, ${template.tech.uiLibrary}`;\n }\n context += \"\\n\\n\";\n context += \"---\\n\\n\";\n }\n return context;\n}\nasync function selectTemplateFromPrompt(userPrompt) {\n const templates = await getAllTemplates();\n const prompt = userPrompt.toLowerCase();\n const scores = templates.map((template) => {\n const keywords = template.selection.keywords;\n const matches = keywords.filter(\n (keyword) => prompt.includes(keyword.toLowerCase())\n );\n return {\n template,\n score: matches.length,\n matchedKeywords: matches\n };\n });\n scores.sort((a, b) => b.score - a.score);\n if (scores[0].score > 0) {\n console.log(`\\u{1F3AF} Auto-selected template: ${scores[0].template.name}`);\n console.log(` Matched keywords: ${scores[0].matchedKeywords.join(\", \")}`);\n return scores[0].template;\n }\n console.log(`\\u{1F3AF} No keyword matches, defaulting to react-vite (basic template)`);\n return templates.find((t) => t.id === \"react-vite\") ?? templates[0];\n}\nvar cachedConfig, configuredPath;\nvar init_config_server = __esm({\n \"src/lib/templates/config.server.ts\"() {\n cachedConfig = null;\n }\n});\n\n// src/lib/templates/load-template-context.server.ts\nvar load_template_context_server_exports = {};\n__export(load_template_context_server_exports, {\n loadTemplateSelectionContext: () => loadTemplateSelectionContext\n});\nasync function loadTemplateSelectionContext(context) {\n if (context.templateSelectionContext) {\n return context.templateSelectionContext;\n }\n if (typeof window !== \"undefined\") {\n return void 0;\n }\n const { getTemplateSelectionContext: getTemplateSelectionContext2 } = await Promise.resolve().then(() => (init_config_server(), config_server_exports));\n return getTemplateSelectionContext2();\n}\nvar init_load_template_context_server = __esm({\n \"src/lib/templates/load-template-context.server.ts\"() {\n }\n});\n\n// src/lib/templates/load-template-context.ts\nasync function loadTemplateSelectionContext2(context) {\n if (context.templateSelectionContext) {\n return context.templateSelectionContext;\n }\n if (typeof window !== \"undefined\") {\n return void 0;\n }\n const loader = await Promise.resolve().then(() => (init_load_template_context_server(), load_template_context_server_exports));\n return loader.loadTemplateSelectionContext(context);\n}\nvar init_load_template_context = __esm({\n \"src/lib/templates/load-template-context.ts\"() {\n }\n});\n\n// src/lib/agents/codex-strategy.ts\nvar codex_strategy_exports = {};\n__export(codex_strategy_exports, {\n default: () => codex_strategy_default\n});\nfunction getParentDirectory(filePath) {\n if (!filePath) return filePath;\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const trimmed = normalized.replace(/\\/+$|\\/+$|\\/*$/, \"\");\n const lastSlash = trimmed.lastIndexOf(\"/\");\n if (lastSlash <= 0) {\n return \"/\";\n }\n return trimmed.slice(0, lastSlash);\n}\nfunction buildCodexSections(context) {\n const sections = [];\n if (context.tags && context.tags.length > 0) {\n const resolved = resolveTags(context.tags);\n const tagPrompt = generatePromptFromTags(resolved, context.projectName, context.isNewProject);\n if (tagPrompt) {\n sections.push(tagPrompt);\n }\n }\n if (context.isNewProject) {\n if (context.templateMetadata) {\n sections.push(`## Template Already Selected\n\n- Template: ${context.templateName ?? \"Selected template\"}\n- Repository: ${context.templateMetadata.repository}#${context.templateMetadata.branch}\n- The template has been chosen based on your analysis of the user's request\n- Clone command: npx degit ${context.templateMetadata.repository}#${context.templateMetadata.branch} ${context.projectName}\n- CRITICAL: After cloning, prefix EVERY bash command with \"cd ${context.projectName} &&\"\n- Follow the setup instructions exactly before implementing the request`);\n } else {\n sections.push(`## Template Selection and Setup\n\n- Codex selects the appropriate template using the provided catalog\n- After cloning, prefix EVERY bash command with \"cd ${context.projectName} &&\"\n- Remember: bash commands run in fresh shells - cd does not persist\n- Follow the setup instructions exactly before implementing the request`);\n }\n } else {\n let existingProjectSection = `## Existing Project Context\n\n- Project location: ${context.workingDirectory}\n- Modify the existing codebase to satisfy the request.`;\n if (context.conversationHistory && context.conversationHistory.length > 0) {\n existingProjectSection += `\n\n**Recent Conversation History:**\n`;\n existingProjectSection += `You have access to recent conversation history. Use this to understand context:\n\n`;\n context.conversationHistory.forEach((msg, index2) => {\n const roleLabel = msg.role === \"user\" ? \"User\" : \"Assistant\";\n const timestamp2 = msg.timestamp instanceof Date ? msg.timestamp.toISOString() : msg.timestamp;\n const content = msg.content.length > 500 ? msg.content.substring(0, 500) + \"...[truncated]\" : msg.content;\n existingProjectSection += `${index2 + 1}. ${roleLabel} (${timestamp2}):\n${content}\n\n`;\n });\n existingProjectSection += `Use this history to understand:\n- What has been built or discussed\n- User preferences and requirements\n- References to \"it\", \"the app\", \"the project\"\n- Previous decisions or implementations\n\nApply the current request in context of this conversation.`;\n }\n sections.push(existingProjectSection);\n }\n sections.push(`## Workspace Rules\n- ${context.isNewProject ? `After cloning, prefix ALL bash commands with \"cd ${context.projectName} &&\"` : \"Operate inside the workspace directory\"}\n- Each bash command runs in a fresh shell - cd does not persist between commands\n- ${context.isNewProject ? `Example: bash -lc 'cd ${context.projectName} && npm install'` : \"Use relative paths for file operations\"}\n- Provide complete file contents for every modification`);\n sections.push(`## Task Tracking - Internal System (NOT A TOOL)\n\nIMPORTANT: Task tracking is done by including JSON in your text responses.\nThis is NOT a tool to call, NOT a command to run, NOT something to install.\n\nSimply include a JSON code block in your response like this:\n\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Clone template\",\"status\":\"completed\",\"activeForm\":\"Cloned template\"},\n {\"content\":\"Install dependencies\",\"status\":\"in_progress\",\"activeForm\":\"Installing dependencies\"},\n {\"content\":\"Implement features\",\"status\":\"pending\",\"activeForm\":\"Implementing features\"}\n]}\n\\`\\`\\`\n\nThe system automatically extracts this from your response text.\nDO NOT try to call it as a tool, run it as a command, or install it as a binary.\nJust include the JSON code block in your message.`);\n if (context.templateSelectionContext && !context.templateMetadata) {\n sections.push(buildCodexTemplateCatalogSection(context.templateSelectionContext));\n }\n return sections;\n}\nfunction buildFullPrompt2(context, basePrompt) {\n if (!context.isNewProject) {\n return basePrompt;\n }\n if (context.templateMetadata) {\n const { repository, branch } = context.templateMetadata;\n return `USER REQUEST: ${basePrompt}\n\nWORKFLOW INSTRUCTIONS:\n\nYou will complete this request in ONE continuous session by following these exact steps:\n\nSTEP 1: CREATE TASK BREAKDOWN\nFirst, analyze the request and determine what specific tasks need to be done.\n\nCreate AS MANY TASKS AS NEEDED to properly build the MVP. This could be:\n- Simple request: 3-4 tasks\n- Medium request: 5-8 tasks\n- Complex request: 10-15+ tasks\n\nThink through ALL the work required.\n\nThen include a JSON code block in your response:\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Clone and configure template\",\"status\":\"in_progress\",\"activeForm\":\"Cloning and configuring template\"},\n {\"content\":\"Install dependencies\",\"status\":\"pending\",\"activeForm\":\"Installing dependencies\"},\n {\"content\":\"Implement features\",\"status\":\"pending\",\"activeForm\":\"Implementing features\"},\n ...as many as needed...\n {\"content\":\"Verify build\",\"status\":\"pending\",\"activeForm\":\"Verifying build\"}\n]}\n\\`\\`\\`\n\nThe system will automatically extract this. Do NOT try to call it as a tool or command.\n\nSTEP 2: CLONE AND CONFIGURE\n bash -lc 'npx degit ${repository}#${branch} ${context.projectName}'\n bash -lc 'ls ${context.projectName}'\n bash -lc 'cd ${context.projectName} && cat > .npmrc << EOF\nsave-exact=true\nlegacy-peer-deps=false\nengine-strict=true\nEOF'\n bash -lc 'cd ${context.projectName} && npm pkg set name=\"${context.projectName}\"'\n\nAfter setup, include updated JSON code block (mark setup as \"completed\")\n\nSTEP 3: INSTALL DEPENDENCIES\n bash -lc 'cd ${context.projectName} && npm install'\n\nAfter installing, include updated JSON code block\n\nSTEP 4: IMPLEMENT ALL FEATURES\n - Modify template files to deliver the requested functionality\n - Use: bash -lc 'cd ${context.projectName} && cat > filepath << EOF\n...\nEOF'\n - Implement EVERY requested feature completely\n - After each major feature, include updated JSON code block\n\nSTEP 5: VERIFY BUILD\n bash -lc 'cd ${context.projectName} && npm run build'\n\nAfter successful build, include final JSON code block with all tasks \"completed\"\n\nCRITICAL: You MUST complete ALL 5 steps in this single session.\nEach bash command runs in a fresh shell - prefix with \"cd ${context.projectName} &&\"\nOnly respond \"Implementation complete\" after ALL steps are verified.`;\n }\n return `USER REQUEST: ${basePrompt}\n\nWORKFLOW INSTRUCTIONS:\n\nYou will complete this request in ONE continuous session by following these exact steps:\n\nSTEP 1: CREATE TASK BREAKDOWN\nFirst, analyze the request and determine what tasks are needed.\n\nCreate AS MANY TASKS AS NEEDED to properly build the MVP. This could be:\n- Simple request: 3-4 tasks\n- Medium request: 5-8 tasks\n- Complex request: 10-15+ tasks\n\nThink through ALL the work required.\n\nThen include a JSON code block in your response:\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Select and clone template\",\"status\":\"in_progress\",\"activeForm\":\"Selecting and cloning template\"},\n {\"content\":\"Install dependencies\",\"status\":\"pending\",\"activeForm\":\"Installing dependencies\"},\n ...as many tasks as needed...\n {\"content\":\"Verify build\",\"status\":\"pending\",\"activeForm\":\"Verifying build\"}\n]}\n\\`\\`\\`\n\nThe system automatically extracts this. Do NOT try to call it as a tool or command.\n\nSTEP 2: CLONE AND CONFIGURE\n Choose appropriate template from available options\n bash -lc 'npx degit <repository>#<branch> ${context.projectName}'\n bash -lc 'ls ${context.projectName}'\n bash -lc 'cd ${context.projectName} && cat > .npmrc << EOF\nsave-exact=true\nEOF'\n bash -lc 'cd ${context.projectName} && npm pkg set name=\"${context.projectName}\"'\n\nAfter setup, include updated JSON code block (mark setup as \"completed\")\n\nSTEP 3: INSTALL DEPENDENCIES\n bash -lc 'cd ${context.projectName} && npm install'\n\nAfter installing, include updated JSON code block\n\nSTEP 4: IMPLEMENT ALL FEATURES\n - Modify template files to deliver requested functionality\n - ALL commands: bash -lc 'cd ${context.projectName} && ...'\n - Implement EVERY requested feature completely\n - After each major feature, include updated JSON code block\n\nSTEP 5: VERIFY BUILD\n bash -lc 'cd ${context.projectName} && npm run build'\n\nAfter successful build, include final JSON code block with all tasks \"completed\"\n\nCRITICAL: Complete ALL 5 steps in this single session.\nEach bash command runs in a fresh shell - prefix with \"cd ${context.projectName} &&\"\nOnly respond \"Implementation complete\" after ALL steps are verified.`;\n}\nvar codexStrategy, codex_strategy_default;\nvar init_codex_strategy = __esm({\n \"src/lib/agents/codex-strategy.ts\"() {\n init_template_catalog();\n init_events();\n init_load_template_context();\n init_resolver();\n codexStrategy = {\n buildSystemPromptSections: buildCodexSections,\n buildFullPrompt: buildFullPrompt2,\n shouldDownloadTemplate() {\n return false;\n },\n resolveWorkingDirectory(context) {\n if (!context.isNewProject) {\n return context.workingDirectory;\n }\n return getParentDirectory(context.workingDirectory);\n },\n async getTemplateSelectionContext(context) {\n return loadTemplateSelectionContext2(context);\n },\n processRunnerEvent(state, event) {\n if (!state || typeof state !== \"object\") {\n return state;\n }\n const codexLike = state;\n if (!Array.isArray(codexLike?.phases)) {\n return state;\n }\n const next = processCodexEvent(codexLike, event);\n return next;\n }\n };\n codex_strategy_default = codexStrategy;\n }\n});\n\n// src/lib/prompts.ts\nvar CLAUDE_SYSTEM_PROMPT = `You are an elite coding assistant specialized in building visually stunning, production-ready JavaScript applications.\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F9E0} ARCHITECTURAL THINKING - BEFORE ANY TODOS\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nBEFORE creating your todo list, STOP and think holistically for 30 seconds:\n\n1. **Visualize the End State**\n - What files will exist when this is done?\n - What's the component/module hierarchy?\n - How does data flow through the system?\n - What will make this app UNIQUE and memorable?\n\n2. **Identify ALL Dependencies Upfront**\n - What npm packages are needed? List them ALL before coding\n - What's the optimal file creation order?\n - Which tasks block others?\n\n3. **Anticipate Problems**\n - What could break? (types, imports, runtime)\n - Are there conflicting patterns in the codebase?\n - Will this work with the existing architecture?\n\n4. **Design the Experience**\n - What's the visual identity? (colors, typography, spacing)\n - What makes this different from a generic template?\n - What micro-interactions will delight users?\n\n5. **THEN Create Your Plan**\n - Create todos in dependency order\n - Group related changes\n - Put all package.json changes FIRST\n\nWRONG \\u274C: Start coding immediately, figure it out as you go\nRIGHT \\u2705: 30 seconds of architecture thinking, then confident execution\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F680} PLAN MODE - AUTO-CONTINUE AFTER APPROVAL\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nIf you use ExitPlanMode to submit a plan, the system will automatically approve it.\nWhen you receive \"User has approved your plan\" or similar approval message:\n\n\\u26A0\\uFE0F CRITICAL: DO NOT STOP! DO NOT SUMMARIZE THE PLAN! \\u26A0\\uFE0F\n\nIMMEDIATELY begin implementing your plan:\n1. Call TodoWrite with your first todo set to \"in_progress\"\n2. Start executing the first task\n3. Continue through ALL todos until the build is 100% complete\n\nWRONG \\u274C: ExitPlanMode \\u2192 \"Plan approved\" \\u2192 Output summary text \\u2192 Stop\nRIGHT \\u2705: ExitPlanMode \\u2192 \"Plan approved\" \\u2192 TodoWrite \\u2192 Start coding immediately\n\nThe plan approval is NOT the end of your work - it's the signal to BEGIN implementation.\nYour job is not done until all code is written, dependencies installed, and the app runs.\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F4E6} DEPENDENCY LAW - INSTALL ONCE, INSTALL FIRST\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nDependencies MUST be handled in this exact order:\n\n1. **Identify ALL packages** needed for the ENTIRE feature upfront\n2. **Add them ALL** to package.json in ONE edit\n3. **Run install ONCE** (pnpm install / npm install)\n4. **THEN proceed** with source code changes\n\nNEVER do this:\n\\u274C Write code \\u2192 realize you need a package \\u2192 add to package.json \\u2192 reinstall\n\\u274C Install after each new dependency discovered\n\\u274C Multiple install commands throughout the build\n\nThis wastes time and causes inconsistent node_modules states.\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F3AF} STEP-BY-STEP TODO EXECUTION - MANDATORY WORKFLOW\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\n\\u26A0\\uFE0F CRITICAL REQUIREMENT - YOU WILL BE PENALIZED FOR VIOLATING THIS \\u26A0\\uFE0F\n\nYou MUST call TodoWrite to update status AFTER COMPLETING EACH INDIVIDUAL TODO.\n\nDO NOT WAIT UNTIL THE END TO UPDATE ALL TODOS AT ONCE!\nDO NOT BATCH TODOS INTO A SINGLE TodoWrite CALL!\nDO NOT WORK ON MULTIPLE TODOS BEFORE UPDATING!\n\n**MANDATORY WORKFLOW FOR EACH TODO:**\n\n1. **Start todo**: TodoWrite({ todos: [{ ..., status: \"in_progress\" }] })\n2. **Do the work**: Execute tools to complete that ONE todo\n3. **Complete todo**: TodoWrite({ todos: [{ ..., status: \"completed\" }] })\n4. **Brief summary**: 1 SHORT sentence about what you accomplished\n5. **Move to next**: Mark next todo \"in_progress\" and repeat steps 2-5\n\nWRONG \\u274C (Don't do this):\n- Work on todos 1, 2, 3, 4, 5, then TodoWrite once marking all complete\n- Wait until the end to update all statuses\n\nRIGHT \\u2705 (Do this):\n- TodoWrite (todo 1: in_progress)\n- Work on todo 1\n- TodoWrite (todo 1: completed, todo 2: in_progress)\n- Work on todo 2\n- TodoWrite (todo 2: completed, todo 3: in_progress)\n- Work on todo 3\n- ... continue for each todo\n\nVERIFICATION: If you have 7 todos, you should call TodoWrite AT LEAST 14 times (start + complete for each).\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F504} FOLLOW-UP REQUESTS - TODOS ARE ALWAYS REQUIRED\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\n\\u26A0\\uFE0F CRITICAL: Even for simple follow-up changes, you MUST use TodoWrite! \\u26A0\\uFE0F\n\nWhen a user asks for a small change, fix, or adjustment to an existing project:\n\n1. **ALWAYS create at least one todo** before making any edits\n2. Mark it \"in_progress\", do the work, then mark it \"completed\"\n3. Add the summary todo at the end (as always)\n\nWRONG \\u274C: User asks \"remove the header\" \\u2192 Read file \\u2192 Edit file \\u2192 Done (no todos!)\nRIGHT \\u2705: User asks \"remove the header\" \\u2192 TodoWrite(\"Remove header branding\", in_progress) \\u2192 Read \\u2192 Edit \\u2192 TodoWrite(completed) \\u2192 Summary todo\n\n**Why this matters:**\n- The UI tracks progress via todos - without them, users see nothing happening\n- Small changes still need visibility and tracking\n- Consistent workflow regardless of task complexity\n\n**Example for a simple follow-up:**\n\\`\\`\\`\nUser: \"Can you change the button color to blue?\"\n\nTodoWrite({ todos: [\n { content: \"Update button color to blue\", status: \"in_progress\", activeForm: \"Updating button color\" }\n]})\n\n[Read the file, make the edit]\n\nTodoWrite({ todos: [\n { content: \"Update button color to blue\", status: \"completed\", activeForm: \"Updated button color\" },\n { content: \"Summarize what was built\", status: \"in_progress\", activeForm: \"Writing build summary\" }\n]})\n\n\"Changed the primary button color from purple to blue across all components.\"\n\nTodoWrite({ todos: [\n { content: \"Update button color to blue\", status: \"completed\", activeForm: \"Updated button color\" },\n { content: \"Summarize what was built\", status: \"completed\", activeForm: \"Writing build summary\" }\n]})\n\\`\\`\\`\n\n**AUTONOMOUS EXECUTION:**\n\nKeep working until the task is 100% complete. Do NOT stop to ask for user approval unless:\n- \\u2753 You need critical information only the user can provide\n- \\u274C You encounter an unrecoverable error\n- \\u{1F914} The user's request is ambiguous (ask clarifying questions FIRST, then execute)\n\nNEVER pause mid-task saying \"Should I continue?\" or \"Would you like me to...?\"\nThe user expects you to complete the full request autonomously.\n\nExample flow:\n\\`\\`\\`\nTodoWrite({ todos: [\n { content: \"Create hero section\", status: \"in_progress\", ... },\n { content: \"Add navigation\", status: \"pending\", ... }\n]})\n\n[Work on hero section completely]\n\nTodoWrite({ todos: [\n { content: \"Create hero section\", status: \"completed\", ... },\n { content: \"Add navigation\", status: \"in_progress\", ... }\n]})\n\"Built hero section with gradient background, responsive typography, and CTA buttons.\"\n\n[Now work on navigation]\n\\`\\`\\`\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F4AC} MINIMAL CHATTER - CONCISE COMMUNICATION\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\n\\u26A0\\uFE0F CRITICAL: ONLY provide text updates AFTER completing a todo, NOT during work \\u26A0\\uFE0F\n\\u26A0\\uFE0F Work through todos SEQUENTIALLY: start the next todo only after the previous one is fully completed \\u26A0\\uFE0F\n\\u26A0\\uFE0F The ONLY chat responses you send are the post-todo summaries and the final markdown recap \\u26A0\\uFE0F\n\\u26A0\\uFE0F Tool output covers everything else\\u2014stay completely silent while working \\u26A0\\uFE0F\n\n**Text Update Rules:**\n- \\u2705 ONE high-level summary sentence AFTER each todo completes\n- \\u2705 Summary MUST describe what changed for that specific todo\n- \\u2705 Every summary sentence MUST end with a period.\n- \\u274C NO running commentary during todo execution\n- \\u274C NO explanations of what you're about to do\n- \\u274C NO status updates while working\n- \\u274C NO colons at the end of sentences\n\n**Example (what to do):**\n\nTodoWrite(todo 1: in_progress)\n[Use tools silently - Read, Write, Edit, Bash]\nTodoWrite(todo 1: completed, todo 2: in_progress)\n\"Built hero section with gradient and CTA.\"\n\n[Use tools silently for todo 2]\nTodoWrite(todo 2: completed, todo 3: in_progress)\n\"Added responsive navigation.\"\n\n**Example (what NOT to do):**\n\n\"I'm going to work on the hero section:\"\n[tools]\n\"Now I'll add the navigation:\"\n[tools]\n\"Here's what I'm doing with the styling:\"\n[tools]\nTodoWrite(all todos: completed) \\u2190 WRONG!\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F50D} CONTEXT AWARENESS - READ BEFORE YOU WRITE\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nBEFORE modifying ANY existing file:\n\n1. **Search for patterns**: Use Grep to find similar code in the codebase\n - Example: Before adding a new component, search for existing components\n - Match naming conventions, import patterns, and structure\n\n2. **Read related files**: Use Read to understand dependencies\n - Check imports and exports\n - Understand data flow\n - See how similar features are implemented\n\n3. **Understand the context**: Consider impact on other files\n - Will this change break imports elsewhere?\n - Does this follow the project's architecture?\n - Are there existing utilities to reuse?\n\n4. **Then make targeted changes**: Use Edit for surgical precision\n - Change only what needs changing\n - Preserve working code\n - Match existing code style\n\nNEVER blindly modify files without understanding the surrounding context.\nNEVER create duplicate utilities that already exist in the codebase.\n\nExample workflow for \"add authentication\":\n1. Grep for \"auth\" to find existing auth code\n2. Read auth-related files to understand current approach\n3. Read similar features to match patterns\n4. Create new auth component following discovered patterns\n\n\\u{1F527} CRITICAL: Use TodoWrite Tool ALWAYS \\u{1F527}\n\nYou MUST use the TodoWrite tool to plan and track ALL your work:\n\n1. BEFORE starting: Create todos breaking down the entire task\n2. DURING work: Update todos as you progress (mark in_progress, completed)\n3. Use descriptive todo content (what you're doing)\n4. Provide activeForm (present continuous, e.g., \"Creating component\")\n5. Keep updates CONCISE (2-3 sentences max per todo)\n\nExample:\nTodoWrite({\n todos: [\n { content: \"Set up project structure\", status: \"completed\", activeForm: \"Setting up project structure\" },\n { content: \"Create main component\", status: \"in_progress\", activeForm: \"Creating main component\" },\n { content: \"Add styling\", status: \"pending\", activeForm: \"Adding styling\" }\n ]\n})\n\n\\u{1F4AC} COMMUNICATION STYLE \\u{1F4AC}\n\nKeep your responses BRIEF and FOCUSED:\n- \\u2705 \"Created hero section with gradient and CTA buttons.\"\n- \\u2705 \"Installed dependencies and verified dev server starts.\"\n- \\u274C Long bulleted lists of everything you did\n- \\u274C Detailed feature breakdowns (users see the code!)\n\n**IMPORTANT: Format all text responses using Markdown:**\n- Use **bold** for emphasis\n- Use \\`code\\` for file names, commands, or technical terms\n- Use bullet points for lists\n- Use ### headings for sections if needed\n- Keep it clean and scannable\n\nWhen ALL tasks complete, provide a SHORT summary (2-3 sentences max):\n\\u2705 \"Build complete! Created a help landing page with search, 6 help categories, and responsive design. Dependencies installed and ready to run.\"\n\\u274C Do NOT provide lengthy final reports with numbered lists and checkmarks\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u2705 COMPLETION CHECKLIST\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nBefore marking work complete, ensure:\n- [ ] All todos marked \"completed\"\n- [ ] All dependencies installed\n- [ ] Design has 3-5 colors with clear hierarchy\n- [ ] No decorative filler or generic patterns\n- [ ] Typography uses 2 font families maximum\n- [ ] Mobile-responsive (test at 375px, 768px, 1440px)\n- [ ] All images use valid Pexels URLs (not downloaded)\n- [ ] Micro-interactions present (hover, transitions)\n- [ ] Code is production-ready (no placeholders)\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F6A8} ERROR RECOVERY - FIX AND VERIFY BEFORE COMPLETING\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nWhen you encounter errors, follow these systematic recovery patterns:\n\n**During Dependency Installation:**\n\nIf \\`npm install\\` or \\`pnpm install\\` fails:\n1. Read the FULL error message carefully\n2. Identify the root cause:\n - Missing peer dependencies? Add them to package.json\n - Version conflicts? Adjust version constraints\n - Network issues? Retry with error handling\n3. Fix the package.json\n4. Re-run installation\n5. Verify success before moving on\n\n**During Dev Server Start:**\n\nIf \\`npm run dev\\` fails or crashes:\n1. Capture the error output (it will be shown to you)\n2. Common issues:\n - Missing environment variables? Check what's required\n - Port already in use? Choose different port\n - Missing config files? Create them\n - TypeScript errors? Fix type issues\n3. Use Grep to search for related config files (vite.config, next.config, etc.)\n4. Fix the root cause (not just symptoms)\n5. Re-test the dev server\n6. NEVER mark todo complete if server won't start\n\n**During Build/Compile Errors:**\n\nIf you see TypeScript, ESLint, or build errors:\n1. Read all errors in order\n2. Fix errors one by one from top to bottom\n3. Common fixes:\n - Missing imports? Add them\n - Type errors? Fix type definitions\n - Unused variables? Remove or use them\n4. Re-run build after each fix\n5. Verify clean build with no warnings\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F501} MANDATORY ITERATION LOOP - KEEP GOING UNTIL FIXED\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\n\\u26A0\\uFE0F CRITICAL: You MUST iterate until errors are ACTUALLY fixed! \\u26A0\\uFE0F\n\n**THE ERROR FIX LOOP:**\n\n\\`\\`\\`\nWHILE errors exist:\n 1. Make a code change to fix the error\n 2. Run npm run build OR npm run dev\n 3. Read the terminal output\n 4. IF errors still exist:\n - Analyze what went wrong\n - Make another fix\n - Go back to step 2\n 5. IF no errors:\n - Mark todo as completed\n - Move to next task\n\\`\\`\\`\n\n**WRONG \\u274C (Common mistakes):**\n- Make ONE change \\u2192 Say \"I fixed it\" \\u2192 Stop (without verifying)\n- Make a change \\u2192 See same error \\u2192 Give up\n- Make a change \\u2192 Don't run verification \\u2192 Declare success\n\n**RIGHT \\u2705 (What you MUST do):**\n- Make a change \\u2192 Run build/dev \\u2192 Check output \\u2192 Iterate if needed\n- Continue fixing until terminal shows SUCCESS\n- Only declare fixed AFTER seeing clean output\n\n**Philosophy: \"Fix errors immediately. Never proceed with broken code.\"**\n\nNEVER mark a todo as \"completed\" if:\n- Dependencies failed to install\n- Dev server won't start\n- Build has errors or warnings\n- Code has runtime errors\n- You haven't RUN verification to prove it works\n\nInstead, add a new todo: \"Fix [specific error]\" and resolve it.\n\n\\u{1F3AF} PROJECT QUALITY STANDARDS \\u{1F3AF}\n\n1. Framework Selection:\n - Choose modern, well-supported frameworks\n - Default to Vite for React, Astro for static sites, Next.js for full-stack\n - Use TypeScript when beneficial\n\n2. Code Organization:\n - Keep files focused and modular (under 250 lines)\n - Separate concerns (components, utils, config)\n - Use clear naming conventions\n\n3. Dependencies:\n - Use npm/pnpm for package management\n - Include all necessary dependencies in package.json\n - Prefer stable, maintained packages\n\n4. Development Experience:\n - Include a dev server script\n - Set up hot reload when possible\n - Provide clear README with setup instructions\n\n\\u{1F4C1} FILE OPERATIONS \\u{1F4C1}\n\nBest practices:\n- Create project structure logically (config files first, then code)\n- Write complete, runnable code (ABSOLUTELY NO placeholders)\n- Include necessary configuration files\n- Think holistically about the entire project\n- Keep files modular and under 250 lines\n\n\\u{1F4D0} CODE FORMATTING STANDARDS \\u{1F4D0}\n\nMaintain consistent code style across all generated files:\n- **Indentation**: 2 spaces (match JS/TS ecosystem standards)\n- **Quotes**: Single quotes for strings (unless project uses double)\n- **Semicolons**: Match existing project style, default to no semicolons for modern projects\n- **Trailing commas**: Use in multiline arrays/objects for cleaner diffs\n- **Line length**: Aim for under 100 characters, wrap when readable\n- **Imports**: Group and sort (React first, then external, then internal)\n\nWhen editing existing files:\n- MATCH the existing code style exactly\n- Don't \"fix\" style inconsistencies unless asked\n- Preserve the project's established patterns\n\n\\u{1F3A8} CSS FILE STANDARDS \\u{1F3A8}\n\nCRITICAL: CSS files must follow the design system and avoid generic resets.\n\n1. REMOVE Default CSS Resets:\n - NEVER include this generic reset in CSS files:\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n - If you find this pattern in existing CSS files, REMOVE it immediately\n\n2. CSS Structure Requirements:\n - Base your CSS on the specific design requirements provided\n - Use semantic, design-specific selectors and values\n - Include only styles that are purposeful and design-driven\n - Use modern CSS features (flexbox, grid, custom properties)\n\n3. When creating CSS files:\n - Start with the actual design requirements, not generic resets\n - Use specific colors, spacing, and typography from the design\n - Create meaningful component-based styles\n - Avoid unnecessary resets that conflict with framework defaults\n\n\\u{1F9EA} TESTING: VERIFY BEFORE DECLARING SUCCESS \\u{1F9EA}\n\nAfter completing all build tasks and installing dependencies, you MUST:\n\n1. Start the dev server to verify the application works:\n - Run the appropriate command (npm run dev, npm start, etc.)\n - Wait for the server to start successfully\n - Check the terminal output for any errors\n\n2. Test the application:\n - Verify the server started on the expected port\n - Look for any runtime errors in the console\n - Confirm the build is working correctly\n\n3. **IF ERRORS APPEAR - ITERATE:**\n - Read the error message carefully\n - Make the fix\n - Stop the dev server\n - Start it again to verify\n - Repeat until clean startup\n\n4. After testing is complete (NO ERRORS):\n - Stop the dev server (Ctrl+C or kill the process)\n - Do NOT leave the dev server running\n\n**SUCCESS INDICATORS (what to look for):**\n\\u2705 \"compiled successfully\"\n\\u2705 \"ready in X ms\"\n\\u2705 \"Local: http://localhost:XXXX\"\n\\u2705 No red error text\n\n**FAILURE INDICATORS (must fix before completing):**\n\\u274C Any \"error\" or \"Error\" message\n\\u274C Stack traces\n\\u274C \"failed to compile\"\n\\u274C Module not found errors\n\nYour complete workflow should be:\n1. Create all necessary files\n2. Set up package.json with proper dependencies and scripts\n3. Install dependencies (npm install, pnpm install, etc.)\n4. Start the dev server to test\n5. Check for errors \\u2192 If any, fix and re-test\n6. Only after clean output: Stop the dev server\n7. Mark all todos as completed\n\n\\u26A0\\uFE0F CRITICAL: Do NOT mark work complete while errors exist! Iterate until fixed!\n\nNEVER manually create project files when a CLI tool exists.\nALWAYS track your progress with TodoWrite.\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F6D1} DEV SERVER DISCIPLINE\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\n- Start dev server ONCE at the end for final verification\n- Do NOT restart after each file change (HMR handles this automatically)\n- Do NOT restart after dependency updates (the server auto-detects changes)\n- Only restart if: port conflict, config file change, or explicit crash\n\nWRONG \\u274C: Edit file \\u2192 restart server \\u2192 edit file \\u2192 restart server\nRIGHT \\u2705: Edit all files \\u2192 start server once \\u2192 verify \\u2192 stop\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F504} CONTINUATION - IF INTERRUPTED\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nIf your response was cut off mid-stream:\n- Do NOT repeat completed work or re-explain context\n- Resume from the EXACT point of interruption\n- Reference (don't re-state) what was already established\n- Continue the current todo\\u2014don't restart the list\n- Skip pleasantries like \"Continuing where I left off...\"\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F680} TEMPLATE ORIGINALITY - CREATE FRESH, NOT COPY\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\n\\u26A0\\uFE0F CRITICAL: The template is a SCAFFOLD, not a design to copy! \\u26A0\\uFE0F\n\nThe downloaded template provides:\n\\u2705 Project structure and configuration\n\\u2705 Build tooling and dev server setup\n\\u2705 Framework boilerplate (routing, etc.)\n\nThe template does NOT provide your design. You MUST:\n\n**1. REPLACE Template Visuals Completely**\n- DELETE or completely rewrite the template's example components\n- Do NOT keep template hero sections, cards, or layouts\n- Do NOT reuse template color schemes or typography\n- Create YOUR OWN visual identity from scratch\n\n**2. Design for THIS Specific App**\n- What is the app's personality? (playful, serious, minimal, bold)\n- What colors represent THIS brand? (not the template's purple/blue)\n- What layout serves THIS content? (not generic template sections)\n\n**3. Common Template Traps to AVOID**\n\\u274C Keeping the template's \"Welcome to [Framework]\" hero\n\\u274C Reusing template card layouts with just new text\n\\u274C Using template's default purple/indigo color scheme\n\\u274C Copying template navigation structure exactly\n\\u274C Leaving template example pages like \"About\" or \"Features\"\n\n**4. What to DO Instead**\n\\u2705 Wipe template components and write new ones\n\\u2705 Choose a UNIQUE color palette (not purple/blue/indigo)\n\\u2705 Design layouts specific to the requested features\n\\u2705 Create custom navigation for this app's needs\n\\u2705 Build components that serve the actual user request\n\n**PHILOSOPHY: \"The template is your foundation, not your ceiling\"**\n\nEvery app you build should look COMPLETELY DIFFERENT from the template it started from.\nIf someone saw the template and your output side-by-side, they should NOT recognize them as related.\n\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F3A8} DESIGN EXCELLENCE - HIGHEST PRIORITY\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nCreate visually stunning, memorable designs that stand out. Follow these STRICT rules:\n\n**COLOR DISCIPLINE (CRITICAL)**\n- Use EXACTLY 3-5 colors total:\n - 1 primary brand color (vibrant, distinctive)\n - 2-3 neutrals (backgrounds, text, borders)\n - 1-2 accent colors (highlights, CTAs, important elements)\n- Define colors as CSS custom properties in a design system\n- NEVER use generic color names (use specific hex/hsl values)\n- Example palette: #FF6B6B (primary), #4ECDC4 (accent), #333333/#F7F7F7 (neutrals)\n\n**TYPOGRAPHY HIERARCHY**\n- Use MAXIMUM 2 font families:\n - 1 for headings (distinctive, bold)\n - 1 for body text (readable, clean)\n- Establish clear size scale: h1 (3rem+), h2 (2rem), h3 (1.5rem), body (1rem)\n- Use font weight variation (300, 400, 600, 700) for hierarchy\n- Consistent line-height: 1.2 for headings, 1.6 for body text\n\n**BANNED: DECORATIVE FILLER**\nNEVER generate:\n- Abstract gradient circles or blurry blobs\n- Generic geometric patterns without purpose\n- Decorative squares, triangles, or shapes\n- Random background noise or textures\n\nInstead, use:\n- Purposeful imagery (photos from Pexels with valid URLs)\n- Functional illustrations that enhance understanding\n- Intentional gradients that guide attention\n- Meaningful iconography\n\n**VISUAL INTEREST REQUIREMENTS**\nEvery design must have:\n1. **Distinctive brand personality**: Not generic template\n2. **Visual hierarchy**: Clear focal points and flow\n3. **Purposeful white space**: Generous breathing room (2rem+ between sections)\n4. **Subtle micro-interactions**: Hover states, transitions (200-300ms)\n5. **Responsive excellence**: Mobile-first, enhances for desktop\n\n**LAYOUT STANDARDS**\n- Mobile-first: Design for 375px, then enhance for 768px, 1440px\n- Use CSS Grid/Flexbox for fluid layouts\n- Apply 8pt spacing system (8px, 16px, 24px, 32px, 48px, 64px)\n- Section padding: min 48px mobile, 64px desktop\n- Content max-width: 1200-1440px for readability\n\n**ACCESSIBILITY REQUIREMENTS**\n- Semantic HTML5 (nav, main, article, section)\n- ARIA labels where needed (WCAG AA minimum)\n- Keyboard navigation support (focus states, tab order)\n- Color contrast ratio \\u22654.5:1 for text\n- Touch targets \\u226544x44px on mobile\n\n**PHILOSOPHY: \"Ship interesting, not boring, but never ugly\"**\n\n CONSISTENCY CHECKLIST\n \\u2713 3-5 colors maximum (defined as CSS variables)\n \\u2713 2 font families maximum\n \\u2713 No decorative filler or abstract shapes\n \\u2713 Mobile-first responsive (375px, 768px, 1440px)\n \\u2713 8pt spacing system applied\n \\u2713 Micro-interactions present (hover, transitions)\n \\u2713 Images use valid Pexels URLs (not downloaded)\n`;\nvar CODEX_SYSTEM_PROMPT = CLAUDE_SYSTEM_PROMPT.replace(/🔧 CRITICAL: Use TodoWrite Tool ALWAYS 🔧[\\s\\S]*?(?=═══════════════|$)/g, `\\u{1F4CB} TASK TRACKING VIA JSON CODE BLOCKS \\u{1F4CB}\n\nYou track your work by including JSON code blocks in your responses.\n\n**Format:**\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Task description\",\"status\":\"completed\",\"activeForm\":\"Past tense of task\"},\n {\"content\":\"Current task\",\"status\":\"in_progress\",\"activeForm\":\"Present continuous\"},\n {\"content\":\"Future task\",\"status\":\"pending\",\"activeForm\":\"Will do\"}\n]}\n\\`\\`\\`\n\n**When to include:**\n- At the start: Include your initial task breakdown\n- After each major step: Update with new statuses\n- At the end: All tasks marked \"completed\"\n\n**Statuses:**\n- \"pending\" = not started\n- \"in_progress\" = currently working on this\n- \"completed\" = finished\n\nCreate as many tasks as needed for the request (3-15+ tasks based on complexity).\n\n`).replace(/TodoWrite\\(\\{[\\s\\S]*?\\}\\)/g, '```json\\n{\"todos\":[...]}\\n```').replace(/call TodoWrite/gi, \"include a JSON code block\").replace(/TodoWrite tool/gi, \"JSON task tracking\").trim();\n\n// src/shared/runner/messages.ts\nvar COMMAND_TYPES = [\n \"analyze-project\",\n \"start-build\",\n \"cancel-build\",\n \"start-dev-server\",\n \"stop-dev-server\",\n \"start-tunnel\",\n \"stop-tunnel\",\n \"fetch-logs\",\n \"runner-health-check\",\n \"delete-project-files\",\n \"read-file\",\n \"write-file\",\n \"list-files\",\n \"http-proxy-request\",\n \"hmr-connect\",\n \"hmr-message\",\n \"hmr-disconnect\",\n \"github-sync\",\n \"github-push\"\n];\nvar isRunnerCommand = (message) => COMMAND_TYPES.includes(message.type);\nvar isRunnerEvent = (message) => !isRunnerCommand(message);\n\n// src/types/agent.ts\nvar DEFAULT_AGENT_ID = \"claude-code\";\nvar DEFAULT_CLAUDE_MODEL_ID = \"claude-sonnet-4-5\";\nvar DEFAULT_OPENCODE_MODEL_ID = \"anthropic/claude-sonnet-4-5\";\nvar LEGACY_MODEL_MAP = {\n \"claude-haiku-4-5\": \"anthropic/claude-haiku-4-5\",\n \"claude-sonnet-4-5\": \"anthropic/claude-sonnet-4-5\",\n \"claude-opus-4-5\": \"anthropic/claude-opus-4-5\",\n \"gpt-5-codex\": \"openai/gpt-5.2-codex\",\n \"gpt-5.2-codex\": \"openai/gpt-5.2-codex\"\n};\nfunction normalizeModelId(modelId) {\n if (modelId.includes(\"/\")) {\n return modelId;\n }\n return LEGACY_MODEL_MAP[modelId] || `anthropic/${modelId}`;\n}\nfunction parseModelId(modelId) {\n const normalized = normalizeModelId(modelId);\n const [provider, ...modelParts] = normalized.split(\"/\");\n return {\n provider: provider || \"anthropic\",\n model: modelParts.join(\"/\") || \"claude-sonnet-4-5\"\n };\n}\nvar CLAUDE_MODEL_METADATA = {\n \"claude-haiku-4-5\": {\n label: \"Claude Haiku 4.5\",\n description: \"Fast and efficient Claude model\",\n provider: \"anthropic\"\n },\n \"claude-sonnet-4-5\": {\n label: \"Claude Sonnet 4.5\",\n description: \"Balanced performance and quality\",\n provider: \"anthropic\"\n },\n \"claude-opus-4-5\": {\n label: \"Claude Opus 4.5\",\n description: \"Most capable Claude model for complex tasks\",\n provider: \"anthropic\"\n }\n};\nvar MODEL_METADATA = {\n \"anthropic/claude-haiku-4-5\": {\n label: \"Claude Haiku 4.5\",\n description: \"Fast and efficient\",\n provider: \"anthropic\"\n },\n \"anthropic/claude-sonnet-4-5\": {\n label: \"Claude Sonnet 4.5\",\n description: \"Balanced performance and quality\",\n provider: \"anthropic\"\n },\n \"anthropic/claude-opus-4-5\": {\n label: \"Claude Opus 4.5\",\n description: \"Most capable for complex tasks\",\n provider: \"anthropic\"\n },\n \"openai/gpt-4o\": {\n label: \"GPT-4o\",\n description: \"OpenAI flagship model\",\n provider: \"openai\"\n },\n \"openai/o3\": {\n label: \"o3\",\n description: \"OpenAI reasoning model\",\n provider: \"openai\"\n },\n \"google/gemini-2.5-pro\": {\n label: \"Gemini 2.5 Pro\",\n description: \"Google flagship model\",\n provider: \"google\"\n },\n \"deepseek/deepseek-chat\": {\n label: \"DeepSeek Chat\",\n description: \"DeepSeek conversational model\",\n provider: \"deepseek\"\n },\n \"deepseek/deepseek-reasoner\": {\n label: \"DeepSeek Reasoner\",\n description: \"DeepSeek reasoning model\",\n provider: \"deepseek\"\n },\n \"openai/gpt-5.2-codex\": {\n label: \"GPT-5.2 Codex\",\n description: \"OpenAI Codex - Advanced code generation\",\n provider: \"openai\"\n }\n};\nfunction getModelLabel(modelId) {\n const normalized = normalizeModelId(modelId);\n return MODEL_METADATA[normalized]?.label ?? CLAUDE_MODEL_METADATA[modelId]?.label ?? modelId;\n}\n\n// src/types/github.ts\nvar GITHUB_CHAT_MESSAGES = {\n SETUP: \"Set up GitHub repository for this project. Create a new public repository and push the code.\",\n PUSH: \"Push the latest changes to GitHub.\",\n SYNC: \"Sync GitHub repository information.\",\n CHECK_AUTH: \"Check if GitHub CLI is authenticated.\"\n};\n\n// src/types/neondb.ts\nvar NEONDB_CHAT_MESSAGES = {\n SETUP: \"Configure a NeonDB PostgreSQL database for this project.\"\n};\n\n// src/lib/agents/strategy.ts\nvar strategyRegistry = /* @__PURE__ */ new Map();\nfunction registerAgentStrategy(agentId, strategy) {\n strategyRegistry.set(agentId, strategy);\n}\nfunction getAgentStrategy(agentId) {\n const strategy = strategyRegistry.get(agentId);\n if (!strategy) {\n throw new Error(`No strategy registered for agent: ${agentId}`);\n }\n return strategy;\n}\n\n// src/lib/agents/index.ts\nvar initialized = false;\nasync function ensureRegistry() {\n if (initialized) {\n return;\n }\n const [{ default: claudeStrategy2 }, { default: codexStrategy2 }] = await Promise.all([\n Promise.resolve().then(() => (init_claude_strategy(), claude_strategy_exports)),\n Promise.resolve().then(() => (init_codex_strategy(), codex_strategy_exports))\n ]);\n registerAgentStrategy(\"claude-code\", claudeStrategy2);\n registerAgentStrategy(\"openai-codex\", codexStrategy2);\n initialized = true;\n}\nasync function resolveAgentStrategy(agentId) {\n await ensureRegistry();\n return getAgentStrategy(agentId);\n}\n\n// src/index.ts\ninit_config_server();\n\n// src/lib/logging/build-logger.ts\nimport * as Sentry from \"@sentry/node\";\nvar BuildLogger = class {\n buildId = null;\n projectId = null;\n /**\n * Set correlation IDs for the current build\n * Call this at the start of each build to enable correlation tracking\n */\n setBuildContext(buildId, projectId) {\n this.buildId = buildId;\n this.projectId = projectId;\n this.log(\"debug\", \"runner\", `Build context set: ${buildId} / ${projectId}`);\n }\n /**\n * Clear correlation IDs after build completes\n */\n clearBuildContext() {\n this.log(\"debug\", \"runner\", \"Build context cleared\");\n this.buildId = null;\n this.projectId = null;\n }\n /**\n * Core logging method - creates structured log entries\n * Public for custom logging needs\n */\n log(level, context, message, data) {\n if (process.env.SILENT_MODE === \"1\") {\n return;\n }\n if (level === \"info\" || level === \"debug\") {\n if (process.env.DEBUG_BUILD === \"0\") {\n return;\n }\n }\n const entry = {\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n level,\n context,\n buildId: this.buildId ?? void 0,\n projectId: this.projectId ?? void 0,\n message,\n data\n };\n const prefix = `[${context}]`;\n const icon = {\n debug: \"\\u{1F50D}\",\n info: \"\\u{1F4CB}\",\n warn: \"\\u26A0\\uFE0F \",\n error: \"\\u274C\"\n }[level];\n const logFn = level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log;\n if (data && Object.keys(data).length > 0) {\n logFn(`${icon} ${prefix} ${message}`, data);\n } else {\n logFn(`${icon} ${prefix} ${message}`);\n }\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"test\") {\n try {\n if (level === \"warn\" || level === \"error\") {\n Sentry.addBreadcrumb({\n category: `build-logger.${context}`,\n message,\n level: level === \"error\" ? \"error\" : \"warning\",\n data: {\n ...data,\n buildId: this.buildId,\n projectId: this.projectId\n }\n });\n }\n } catch {\n }\n }\n }\n /**\n * Orchestrator-specific logging methods\n */\n orchestrator = {\n newProject: (operationType) => this.log(\"info\", \"orchestrator\", `NEW PROJECT (operationType: ${operationType})`),\n existingProject: (operationType) => this.log(\"info\", \"orchestrator\", `EXISTING PROJECT (operationType: ${operationType})`),\n templateProvided: (templateName, templateId, framework) => this.log(\"info\", \"orchestrator\", `Frontend provided template: ${templateName}`, {\n templateId,\n framework\n }),\n templateSelecting: (method) => this.log(\"info\", \"orchestrator\", `Template selection: ${method}`),\n templateSelected: (templateName, templateId) => this.log(\"info\", \"orchestrator\", `Selected template: ${templateName}`, { templateId }),\n templateDownloading: (templateName, repository, target) => this.log(\"info\", \"orchestrator\", `Downloading template: ${templateName}`, {\n repository,\n target\n }),\n templateDownloaded: (templateName, path, fileTreeSize) => this.log(\"info\", \"orchestrator\", `Template downloaded: ${templateName}`, {\n path,\n fileTreeSize\n }),\n catalogPrepared: (catalogSize) => this.log(\"info\", \"orchestrator\", `Template catalog prepared (${catalogSize} chars)`, {\n catalogSize\n }),\n systemPromptGenerated: (size) => this.log(\"info\", \"orchestrator\", `System prompt generated (${size} chars)`, { size }),\n orchestrationComplete: (data) => this.log(\"info\", \"orchestrator\", \"Orchestration complete\", data),\n error: (message, error) => this.log(\"error\", \"orchestrator\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Message transformer-specific logging methods\n */\n transformer = {\n todoListFound: () => this.log(\"debug\", \"transformer\", \"Found Codex task list, parsing...\"),\n todoListParsed: (todoCount, completed, inProgress, pending) => this.log(\"info\", \"transformer\", `Parsed ${todoCount} todos`, {\n completed,\n inProgress,\n pending\n }),\n todoListInvalidFormat: (expected, got) => this.log(\"error\", \"transformer\", \"Invalid todo format from Codex\", {\n expected,\n got: JSON.stringify(got).substring(0, 200)\n }),\n todoListParseError: (error, rawJson) => this.log(\"error\", \"transformer\", \"Failed to parse Codex todolist\", {\n error: String(error),\n rawJson: rawJson.substring(0, 300)\n }),\n todoListRemoved: () => this.log(\"debug\", \"transformer\", \"Removed task list from chat text\"),\n toolStarted: (toolName, toolId) => this.log(\"debug\", \"transformer\", `Tool started: ${toolName}`, { toolName, toolId }),\n toolCompleted: (toolName, toolId) => this.log(\"debug\", \"transformer\", `Tool completed: ${toolName}`, { toolName, toolId }),\n pathViolationWarning: (toolName, path, workspace) => this.log(\"warn\", \"transformer\", `Path outside workspace: ${path}`, {\n toolName,\n path,\n workspace\n }),\n desktopPathDetected: (path) => this.log(\"error\", \"transformer\", `DESKTOP PATH DETECTED - Likely hallucinated: ${path}`, { path })\n };\n /**\n * Codex query-specific logging methods\n */\n codexQuery = {\n promptBuilding: (workingDirectory, systemPromptSize, userPromptSize) => this.log(\"info\", \"codex-query\", \"Building Codex prompt\", {\n workingDirectory,\n systemPromptSize,\n userPromptSize\n }),\n threadStarting: () => this.log(\"info\", \"codex-query\", \"Starting Codex thread (multi-turn)\"),\n turnStarted: (turnNumber, maxTurns, promptSize) => this.log(\"info\", \"codex-query\", `\\u2550\\u2550\\u2550 Turn ${turnNumber}/${maxTurns} \\u2550\\u2550\\u2550`, {\n turnNumber,\n maxTurns,\n promptSize\n }),\n taskListExtracted: () => this.log(\"info\", \"codex-query\", \"Task list extracted and updated\"),\n taskListStatus: (completed, inProgress, pending, total) => this.log(\"info\", \"codex-query\", `Tasks: ${completed} completed | ${inProgress} in_progress | ${pending} pending (total: ${total})`, {\n completed,\n inProgress,\n pending,\n total\n }),\n taskListTask: (index2, content, status, icon) => this.log(\"debug\", \"codex-query\", ` ${icon} ${index2 + 1}. ${content}`, { status }),\n taskListParseError: (error, rawContent) => this.log(\"error\", \"codex-query\", \"PARSE ERROR: Could not parse task list JSON\", {\n error: String(error),\n rawContent: rawContent.substring(0, 200)\n }),\n taskListMissing: (turnNumber) => this.log(\"warn\", \"codex-query\", `WARNING: No <start-todolist> tags found in Turn ${turnNumber}`, {\n turnNumber\n }),\n turnComplete: (turnNumber, hadToolCalls, messageLength) => this.log(\"info\", \"codex-query\", `Turn ${turnNumber} complete`, {\n hadToolCalls,\n messageLength\n }),\n tasksComplete: (completed, total) => this.log(\"info\", \"codex-query\", `Task status: ${completed}/${total} completed`, {\n completed,\n total\n }),\n allComplete: () => this.log(\"info\", \"codex-query\", \"\\u2705 All MVP tasks complete!\"),\n allTasksComplete: () => this.log(\"info\", \"codex-query\", \"\\u2705 All MVP tasks complete!\"),\n taskCompleteDetected: () => this.log(\"info\", \"codex-query\", \"\\u2705 Task complete (detected completion signal)\"),\n continuePrompting: (reason) => this.log(\"warn\", \"codex-query\", `No tools used but not done - ${reason}`),\n continuing: () => this.log(\"info\", \"codex-query\", \"\\u23ED\\uFE0F Continuing to next turn (had tool calls)\"),\n loopExited: (turnCount, maxTurns) => this.log(\"info\", \"codex-query\", `EXITED WHILE LOOP after ${turnCount} turns`, {\n turnCount,\n maxTurns\n }),\n sessionComplete: (turnCount) => this.log(\"info\", \"codex-query\", `Session complete after ${turnCount} turns`, { turnCount }),\n error: (message, error) => this.log(\"error\", \"codex-query\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Claude query-specific logging methods\n */\n claudeQuery = {\n queryStarted: (model, cwd, maxTurns) => this.log(\"info\", \"claude-query\", `Starting Claude query (${model})`, {\n cwd,\n maxTurns\n }),\n error: (message, error) => this.log(\"error\", \"claude-query\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Runner-specific logging methods\n */\n runner = {\n workspaceRoot: (path) => this.log(\"info\", \"runner\", `Workspace root: ${path}`, { path }),\n commandReceived: (commandType, projectId) => this.log(\"info\", \"runner\", `Received command: ${commandType}`, { commandType, projectId }),\n buildOperation: (operationType, projectSlug, agentId) => this.log(\"info\", \"runner\", `Build operation: ${operationType}`, {\n operationType,\n projectSlug,\n agentId\n }),\n templateProvided: (templateId) => this.log(\"info\", \"runner\", `Template provided by frontend: ${templateId}`, { templateId }),\n buildStreamCreated: () => this.log(\"info\", \"runner\", \"Build stream created, starting to process chunks...\"),\n firstChunkReceived: (agentLabel) => this.log(\"info\", \"runner\", `First chunk received from ${agentLabel}`, { agentLabel }),\n streamEnded: (chunkCount) => this.log(\"info\", \"runner\", `Stream ended after ${chunkCount} chunks`, { chunkCount }),\n buildCompleted: (projectId) => this.log(\"info\", \"runner\", `Build completed successfully`, { projectId }),\n buildFailed: (error) => this.log(\"error\", \"runner\", `Build failed: ${error}`, { error }),\n portDetected: (port) => this.log(\"info\", \"runner\", `Port detected: ${port}`, { port }),\n tunnelCreated: (port, tunnelUrl) => this.log(\"info\", \"runner\", `Tunnel created: ${tunnelUrl} \\u2192 localhost:${port}`, {\n port,\n tunnelUrl\n }),\n error: (message, error, context) => this.log(\"error\", \"runner\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Build stream-specific logging (tool calls, text, etc.)\n */\n build = {\n agentText: (agentLabel, text2) => {\n const truncated = text2.length > 200 ? text2.slice(0, 200) + \"...\" : text2;\n this.log(\"debug\", \"build\", `${agentLabel}: ${truncated}`, {\n agentLabel,\n textLength: text2.length\n });\n },\n agentThinking: (thinking) => {\n const truncated = thinking.length > 300 ? thinking.slice(0, 300) + \"...\" : thinking;\n this.log(\"debug\", \"build\", `Thinking: ${truncated}`, {\n thinkingLength: thinking.length\n });\n },\n toolCalled: (toolName, toolId, inputSize) => this.log(\"info\", \"build\", `Tool called: ${toolName} (${toolId})`, {\n toolName,\n toolId,\n inputSize\n }),\n toolResult: (toolId, outputSize, isError) => this.log(isError ? \"error\" : \"info\", \"build\", `Tool result (${toolId})`, {\n toolId,\n outputSize,\n isError\n }),\n runCommandDetected: (runCommand) => this.log(\"info\", \"build\", `Detected runCommand: ${runCommand}`, { runCommand })\n };\n /**\n * WebSocket-specific logging methods\n */\n websocket = {\n serverCreated: (instanceId) => this.log(\"info\", \"websocket\", `WebSocket server instance created`, { instanceId }),\n serverInitialized: (path, runnerPath) => this.log(\"info\", \"websocket\", `Server initialized`, { path, runnerPath }),\n clientConnected: (clientId, projectId, sessionId) => this.log(\"info\", \"websocket\", `Client connected: ${clientId}`, { clientId, projectId, sessionId }),\n clientDisconnected: (clientId) => this.log(\"info\", \"websocket\", `Client disconnected: ${clientId}`, { clientId }),\n clientSubscribed: (clientId, projectId) => this.log(\"info\", \"websocket\", `Client subscribed to project: ${projectId}`, { clientId, projectId }),\n clientTimeout: (clientId) => this.log(\"warn\", \"websocket\", `Client timeout: ${clientId}`, { clientId }),\n runnerConnected: (runnerId) => this.log(\"info\", \"websocket\", `Runner connected: ${runnerId}`, { runnerId }),\n runnerDisconnected: (runnerId, code) => this.log(\"info\", \"websocket\", `Runner disconnected: ${runnerId}`, { runnerId, code }),\n runnerNotConnected: (runnerId, commandType) => this.log(\"warn\", \"websocket\", `Cannot send command to runner ${runnerId}: not connected`, {\n runnerId,\n commandType\n }),\n runnerAuthRejected: () => this.log(\"warn\", \"websocket\", `Runner connection rejected: invalid auth`),\n runnerAuthMissing: () => this.log(\"error\", \"websocket\", `RUNNER_SHARED_SECRET is not configured`),\n runnerStaleRemoved: (runnerId) => this.log(\"info\", \"websocket\", `Removing stale runner connection: ${runnerId}`, { runnerId }),\n commandSent: (runnerId, commandType, traceAttached) => this.log(\"debug\", \"websocket\", `Sent command to runner: ${commandType}`, {\n runnerId,\n commandType,\n traceAttached\n }),\n eventReceived: (runnerId, eventType) => this.log(\"debug\", \"websocket\", `Received event from runner: ${eventType}`, {\n runnerId,\n eventType\n }),\n broadcastToolCall: (toolName, toolState, subscriberCount) => this.log(\"info\", \"websocket\", `Broadcasting planning tool: ${toolName} (state=${toolState})`, {\n toolName,\n toolState,\n subscriberCount\n }),\n broadcastBuildComplete: (projectId, sessionId, subscriberCount) => this.log(\"info\", \"websocket\", `Broadcasting build-complete`, {\n projectId,\n sessionId,\n subscriberCount\n }),\n unknownUpgradePath: (pathname) => this.log(\"warn\", \"websocket\", `Unknown upgrade path: ${pathname}`, { pathname }),\n shutdown: () => this.log(\"info\", \"websocket\", `Shutting down server...`),\n shutdownComplete: () => this.log(\"info\", \"websocket\", `Server shut down`),\n error: (message, error, context) => this.log(\"error\", \"websocket\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Port allocator-specific logging methods\n */\n portAllocator = {\n portAllocated: (port, projectId) => this.log(\"info\", \"port-allocator\", `Port allocated: ${port}`, { port, projectId }),\n portReleased: (port, projectId) => this.log(\"info\", \"port-allocator\", `Port released: ${port}`, { port, projectId }),\n portInUse: (port) => this.log(\"warn\", \"port-allocator\", `Port ${port} is already in use`, { port }),\n portRangeExhausted: (minPort, maxPort) => this.log(\"error\", \"port-allocator\", `No available ports in range ${minPort}-${maxPort}`, {\n minPort,\n maxPort\n }),\n portConflict: (port, projectId, existingProjectId) => this.log(\"warn\", \"port-allocator\", `Port ${port} conflict detected`, {\n port,\n projectId,\n existingProjectId\n }),\n allocationsCleared: (count) => this.log(\"info\", \"port-allocator\", `Cleared ${count} port allocations`, { count }),\n error: (message, error, context) => this.log(\"error\", \"port-allocator\", message, {\n error: error instanceof Error ? error.message : String(error),\n ...context\n })\n };\n /**\n * Process manager-specific logging methods\n */\n processManager = {\n processStarting: (projectId, command, cwd) => this.log(\"info\", \"process-manager\", `Starting process: ${command}`, {\n projectId,\n command,\n cwd\n }),\n processStarted: (projectId, pid) => this.log(\"info\", \"process-manager\", `Process started`, { projectId, pid }),\n processOutput: (projectId, output) => this.log(\"debug\", \"process-manager\", `Process output: ${output.substring(0, 100)}`, {\n projectId,\n outputLength: output.length\n }),\n processError: (projectId, error) => this.log(\"error\", \"process-manager\", `Process error: ${error}`, { projectId, error }),\n processExited: (projectId, code, signal) => this.log(\"info\", \"process-manager\", `Process exited`, { projectId, code, signal }),\n processStopped: (projectId) => this.log(\"info\", \"process-manager\", `Process stopped`, { projectId }),\n processNotFound: (projectId) => this.log(\"warn\", \"process-manager\", `Process not found for project: ${projectId}`, { projectId }),\n processKilled: (projectId, signal) => this.log(\"info\", \"process-manager\", `Process killed with signal: ${signal}`, {\n projectId,\n signal\n }),\n processCleanup: (projectId) => this.log(\"info\", \"process-manager\", `Cleaning up process`, { projectId }),\n processListRetrieved: (count) => this.log(\"debug\", \"process-manager\", `Retrieved ${count} running processes`, { count }),\n error: (message, error, context) => this.log(\"error\", \"process-manager\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Build events-specific logging methods\n */\n buildEvents = {\n eventReceived: (eventType, projectId, sessionId) => this.log(\"info\", \"build-events\", `Received event: ${eventType}`, {\n eventType,\n projectId,\n sessionId\n }),\n eventProcessed: (eventType, projectId) => this.log(\"debug\", \"build-events\", `Processed event: ${eventType}`, { eventType, projectId }),\n buildStarted: (projectId, sessionId) => this.log(\"info\", \"build-events\", `Build started`, { projectId, sessionId }),\n buildCompleted: (projectId, sessionId, success) => this.log(\"info\", \"build-events\", `Build ${success ? \"completed\" : \"failed\"}`, {\n projectId,\n sessionId,\n success\n }),\n portDetected: (projectId, port) => this.log(\"info\", \"build-events\", `Port detected: ${port}`, { projectId, port }),\n devServerStarted: (projectId, port, url) => this.log(\"info\", \"build-events\", `Dev server started: ${url}`, { projectId, port, url }),\n devServerError: (projectId, error) => this.log(\"error\", \"build-events\", `Dev server error: ${error}`, { projectId, error }),\n toolCallReceived: (toolName, toolId) => this.log(\"debug\", \"build-events\", `Tool call: ${toolName}`, { toolName, toolId }),\n logChunkReceived: (projectId, chunkSize) => this.log(\"debug\", \"build-events\", `Log chunk received`, { projectId, chunkSize }),\n invalidEvent: (reason) => this.log(\"warn\", \"build-events\", `Invalid event: ${reason}`, { reason }),\n error: (message, error, context) => this.log(\"error\", \"build-events\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n};\nvar buildLogger = new BuildLogger();\n\n// src/lib/websocket/server.ts\nimport { WebSocketServer, WebSocket } from \"ws\";\n\n// src/lib/runner/event-stream.ts\nvar subscribers = global.__runnerEventSubscribers ?? /* @__PURE__ */ new Map();\nglobal.__runnerEventSubscribers = subscribers;\nfunction publishRunnerEvent(event) {\n if (!event.commandId) {\n return;\n }\n const set = subscribers.get(event.commandId);\n if (!set) {\n return;\n }\n for (const handler of set) {\n handler(event);\n }\n}\n\n// src/lib/websocket/server.ts\nimport * as Sentry2 from \"@sentry/node\";\n\n// src/lib/db/client.ts\nimport { drizzle } from \"drizzle-orm/node-postgres\";\nimport pg from \"pg\";\n\n// src/lib/db/schema.ts\nvar schema_exports = {};\n__export(schema_exports, {\n accounts: () => accounts,\n cliAuthSessions: () => cliAuthSessions,\n generationNotes: () => generationNotes,\n generationSessions: () => generationSessions,\n generationTodos: () => generationTodos,\n generationToolCalls: () => generationToolCalls,\n messages: () => messages,\n portAllocations: () => portAllocations,\n projects: () => projects,\n runnerKeys: () => runnerKeys,\n runningProcesses: () => runningProcesses,\n serverOperations: () => serverOperations,\n sessions: () => sessions,\n users: () => users,\n verifications: () => verifications\n});\nimport { pgTable, text, integer, timestamp, uuid, jsonb, index, uniqueIndex, boolean } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nvar users = pgTable(\"users\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n name: text(\"name\").notNull(),\n email: text(\"email\").notNull().unique(),\n emailVerified: boolean(\"email_verified\").notNull().default(false),\n image: text(\"image\"),\n hasCompletedOnboarding: boolean(\"has_completed_onboarding\").notNull().default(false),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n});\nvar sessions = pgTable(\"sessions\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n token: text(\"token\").notNull().unique(),\n expiresAt: timestamp(\"expires_at\").notNull(),\n ipAddress: text(\"ip_address\"),\n userAgent: text(\"user_agent\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n userIdIdx: index(\"sessions_user_id_idx\").on(table.userId),\n tokenIdx: index(\"sessions_token_idx\").on(table.token)\n}));\nvar accounts = pgTable(\"accounts\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n accountId: text(\"account_id\").notNull(),\n providerId: text(\"provider_id\").notNull(),\n // 'credential', 'google', etc.\n accessToken: text(\"access_token\"),\n refreshToken: text(\"refresh_token\"),\n accessTokenExpiresAt: timestamp(\"access_token_expires_at\"),\n refreshTokenExpiresAt: timestamp(\"refresh_token_expires_at\"),\n scope: text(\"scope\"),\n idToken: text(\"id_token\"),\n // ID token from OAuth providers\n password: text(\"password\"),\n // Hashed password for credential provider\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n userIdIdx: index(\"accounts_user_id_idx\").on(table.userId),\n providerAccountIdx: uniqueIndex(\"accounts_provider_account_idx\").on(table.providerId, table.accountId)\n}));\nvar verifications = pgTable(\"verifications\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n identifier: text(\"identifier\").notNull(),\n // email or other identifier\n value: text(\"value\").notNull(),\n // verification token\n expiresAt: timestamp(\"expires_at\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n identifierIdx: index(\"verifications_identifier_idx\").on(table.identifier)\n}));\nvar runnerKeys = pgTable(\"runner_keys\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n name: text(\"name\").notNull(),\n // User-friendly name like \"My MacBook\"\n keyHash: text(\"key_hash\").notNull(),\n // SHA-256 hash of the full key\n keyPrefix: text(\"key_prefix\").notNull(),\n // First 8 chars for display: \"sv_abc123...\"\n source: text(\"source\").default(\"web\"),\n // 'web' | 'cli' - how the key was created\n lastUsedAt: timestamp(\"last_used_at\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n revokedAt: timestamp(\"revoked_at\")\n // Soft delete - null means active\n}, (table) => ({\n userIdIdx: index(\"runner_keys_user_id_idx\").on(table.userId),\n keyHashIdx: uniqueIndex(\"runner_keys_key_hash_idx\").on(table.keyHash)\n}));\nvar cliAuthSessions = pgTable(\"cli_auth_sessions\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n token: text(\"token\").notNull().unique(),\n // Random token for session identification\n callbackPort: integer(\"callback_port\").notNull(),\n // Port the CLI is listening on\n callbackHost: text(\"callback_host\").default(\"localhost\"),\n // Host for callback\n state: text(\"state\").notNull().default(\"pending\"),\n // 'pending' | 'authenticated' | 'completed' | 'expired'\n userId: uuid(\"user_id\").references(() => users.id, { onDelete: \"cascade\" }),\n // Set after auth\n runnerKeyId: uuid(\"runner_key_id\").references(() => runnerKeys.id, { onDelete: \"cascade\" }),\n // Created key\n deviceName: text(\"device_name\"),\n // Auto-detected device name\n expiresAt: timestamp(\"expires_at\").notNull(),\n // Session expiration (short-lived)\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n authenticatedAt: timestamp(\"authenticated_at\")\n // When user completed OAuth\n}, (table) => ({\n tokenIdx: uniqueIndex(\"cli_auth_sessions_token_idx\").on(table.token),\n expiresAtIdx: index(\"cli_auth_sessions_expires_at_idx\").on(table.expiresAt)\n}));\nvar projects = pgTable(\"projects\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id, { onDelete: \"set null\" }),\n // Owner of the project (nullable for migration/local mode)\n name: text(\"name\").notNull(),\n slug: text(\"slug\").notNull().unique(),\n description: text(\"description\"),\n originalPrompt: text(\"original_prompt\"),\n icon: text(\"icon\").default(\"Folder\"),\n status: text(\"status\").notNull().default(\"pending\"),\n projectType: text(\"project_type\"),\n detectedFramework: text(\"detected_framework\"),\n // Auto-detected framework (astro, next, vite, etc.)\n path: text(\"path\"),\n // Nullable - deprecated, path should be calculated from slug\n runCommand: text(\"run_command\"),\n port: integer(\"port\"),\n devServerPid: integer(\"dev_server_pid\"),\n devServerPort: integer(\"dev_server_port\"),\n devServerStatus: text(\"dev_server_status\").default(\"stopped\"),\n devServerStatusUpdatedAt: timestamp(\"dev_server_status_updated_at\").defaultNow(),\n tunnelUrl: text(\"tunnel_url\"),\n runnerId: text(\"runner_id\"),\n // Runner that created/manages this project\n generationState: text(\"generation_state\"),\n designPreferences: jsonb(\"design_preferences\"),\n // User-specified design constraints (deprecated - use tags)\n tags: jsonb(\"tags\"),\n // Tag-based configuration system\n lastActivityAt: timestamp(\"last_activity_at\").defaultNow(),\n errorMessage: text(\"error_message\"),\n // GitHub integration fields\n githubRepo: text(\"github_repo\"),\n // e.g., \"owner/repo-name\"\n githubUrl: text(\"github_url\"),\n // Full repository URL\n githubBranch: text(\"github_branch\"),\n // Default branch (e.g., \"main\")\n githubLastPushedAt: timestamp(\"github_last_pushed_at\"),\n // Last push timestamp\n githubAutoPush: boolean(\"github_auto_push\").default(false),\n // Auto-push after builds\n githubLastSyncAt: timestamp(\"github_last_sync_at\"),\n // Last time we synced repo info\n githubMeta: jsonb(\"github_meta\"),\n // Additional metadata (issues count, recent commits, etc.)\n // NeonDB integration fields\n neondbConnectionString: text(\"neondb_connection_string\"),\n // DATABASE_URL (encrypted/partial)\n neondbClaimUrl: text(\"neondb_claim_url\"),\n // URL to claim the database\n neondbHost: text(\"neondb_host\"),\n // Database host endpoint\n neondbDatabase: text(\"neondb_database\"),\n // Database name\n neondbCreatedAt: timestamp(\"neondb_created_at\"),\n // When database was provisioned\n neondbExpiresAt: timestamp(\"neondb_expires_at\"),\n // When unclaimed DB expires (72 hours)\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n // Indexes for performance\n userIdIdx: index(\"projects_user_id_idx\").on(table.userId),\n runnerIdIdx: index(\"projects_runner_id_idx\").on(table.runnerId),\n statusIdx: index(\"projects_status_idx\").on(table.status),\n lastActivityIdx: index(\"projects_last_activity_idx\").on(table.lastActivityAt)\n}));\nvar messages = pgTable(\"messages\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n projectId: uuid(\"project_id\").notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n role: text(\"role\").notNull(),\n content: text(\"content\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow()\n});\nvar portAllocations = pgTable(\"port_allocations\", {\n port: integer(\"port\").primaryKey(),\n framework: text(\"framework\").notNull(),\n projectId: uuid(\"project_id\").references(() => projects.id, { onDelete: \"set null\" }),\n reservedAt: timestamp(\"reserved_at\").defaultNow()\n});\nvar runningProcesses = pgTable(\"running_processes\", {\n projectId: uuid(\"project_id\").primaryKey().notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n pid: integer(\"pid\").notNull(),\n port: integer(\"port\"),\n command: text(\"command\"),\n runnerId: text(\"runner_id\"),\n // Runner that manages this process\n startedAt: timestamp(\"started_at\").notNull().defaultNow(),\n lastHealthCheck: timestamp(\"last_health_check\"),\n healthCheckFailCount: integer(\"health_check_fail_count\").notNull().default(0)\n}, (table) => ({\n // Index for filtering by runner\n runnerIdIdx: index(\"running_processes_runner_id_idx\").on(table.runnerId)\n}));\nvar generationSessions = pgTable(\"generation_sessions\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n projectId: uuid(\"project_id\").notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n buildId: text(\"build_id\").notNull(),\n operationType: text(\"operation_type\"),\n status: text(\"status\").notNull().default(\"active\"),\n startedAt: timestamp(\"started_at\").notNull().defaultNow(),\n endedAt: timestamp(\"ended_at\"),\n summary: text(\"summary\"),\n rawState: jsonb(\"raw_state\"),\n isAutoFix: boolean(\"is_auto_fix\").default(false),\n // Flag for auto-fix sessions triggered by startup errors\n autoFixError: text(\"auto_fix_error\"),\n // The error message that triggered the auto-fix\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n projectIdIdx: index(\"generation_sessions_project_id_idx\").on(table.projectId),\n buildIdUnique: uniqueIndex(\"generation_sessions_build_id_unique\").on(table.buildId)\n}));\nvar generationTodos = pgTable(\"generation_todos\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sessionId: uuid(\"session_id\").notNull().references(() => generationSessions.id, { onDelete: \"cascade\" }),\n todoIndex: integer(\"todo_index\").notNull(),\n content: text(\"content\").notNull(),\n activeForm: text(\"active_form\"),\n status: text(\"status\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n sessionIdIdx: index(\"generation_todos_session_id_idx\").on(table.sessionId),\n sessionIndexUnique: uniqueIndex(\"generation_todos_session_index_unique\").on(table.sessionId, table.todoIndex)\n}));\nvar generationToolCalls = pgTable(\"generation_tool_calls\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sessionId: uuid(\"session_id\").notNull().references(() => generationSessions.id, { onDelete: \"cascade\" }),\n todoIndex: integer(\"todo_index\").notNull(),\n toolCallId: text(\"tool_call_id\").notNull(),\n name: text(\"name\").notNull(),\n input: jsonb(\"input\"),\n output: jsonb(\"output\"),\n state: text(\"state\").notNull(),\n startedAt: timestamp(\"started_at\").notNull().defaultNow(),\n endedAt: timestamp(\"ended_at\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\").notNull().defaultNow()\n}, (table) => ({\n sessionIdIdx: index(\"generation_tool_calls_session_id_idx\").on(table.sessionId),\n toolCallUnique: uniqueIndex(\"generation_tool_calls_call_id_unique\").on(table.sessionId, table.toolCallId)\n}));\nvar generationNotes = pgTable(\"generation_notes\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sessionId: uuid(\"session_id\").notNull().references(() => generationSessions.id, { onDelete: \"cascade\" }),\n todoIndex: integer(\"todo_index\").notNull(),\n textId: text(\"text_id\"),\n kind: text(\"kind\").notNull().default(\"text\"),\n content: text(\"content\").notNull(),\n createdAt: timestamp(\"created_at\").notNull().defaultNow()\n}, (table) => ({\n sessionIdIdx: index(\"generation_notes_session_id_idx\").on(table.sessionId),\n textIdUnique: uniqueIndex(\"generation_notes_text_id_unique\").on(table.sessionId, table.textId).where(sql`${table.textId} is not null`)\n}));\nvar serverOperations = pgTable(\"server_operations\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n projectId: uuid(\"project_id\").notNull().references(() => projects.id, { onDelete: \"cascade\" }),\n operation: text(\"operation\").notNull(),\n // 'start', 'stop', 'restart'\n status: text(\"status\").notNull().default(\"pending\"),\n // 'pending', 'sent', 'ack', 'completed', 'failed', 'timeout'\n runnerId: text(\"runner_id\"),\n port: integer(\"port\"),\n pid: integer(\"pid\"),\n error: text(\"error\"),\n failureReason: text(\"failure_reason\"),\n // 'port_in_use', 'health_check_timeout', 'immediate_crash', etc.\n retryCount: integer(\"retry_count\").notNull().default(0),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n sentAt: timestamp(\"sent_at\"),\n ackAt: timestamp(\"ack_at\"),\n completedAt: timestamp(\"completed_at\")\n}, (table) => ({\n projectIdIdx: index(\"server_operations_project_id_idx\").on(table.projectId),\n statusIdx: index(\"server_operations_status_idx\").on(table.status),\n createdAtIdx: index(\"server_operations_created_at_idx\").on(table.createdAt)\n}));\n\n// src/lib/db/client.ts\nvar { Pool } = pg;\nfunction createPostgresClient() {\n const connectionString = process.env.DATABASE_URL;\n if (!connectionString) {\n throw new Error(\n 'DATABASE_URL is not set. Please configure your database connection:\\n - Run \"openbuilder init\" to set up a Neon database\\n - Or set DATABASE_URL environment variable to your PostgreSQL connection string'\n );\n }\n const pool = new Pool({\n connectionString,\n ssl: process.env.PGSSLMODE === \"disable\" ? false : { rejectUnauthorized: false }\n });\n const client = drizzle(pool, { schema: schema_exports });\n return client;\n}\nasync function initializeDatabase() {\n if (global.__db) {\n return global.__db;\n }\n const client = createPostgresClient();\n global.__db = client;\n return client;\n}\nasync function getDb() {\n if (global.__db) {\n return global.__db;\n }\n return initializeDatabase();\n}\nfunction resetDatabase() {\n global.__db = void 0;\n}\nvar db = new Proxy({}, {\n get(_target, prop) {\n if (!global.__db) {\n global.__db = createPostgresClient();\n }\n return global.__db[prop];\n }\n});\n\n// src/lib/websocket/server.ts\nimport { eq, and, isNull, desc } from \"drizzle-orm\";\nimport { createHash } from \"crypto\";\n\n// src/lib/websocket/http-proxy-manager.ts\nimport { randomUUID } from \"crypto\";\nvar CHUNK_SIZE = 64 * 1024;\nvar REQUEST_TIMEOUT_MS = 3e4;\nvar MAX_SINGLE_RESPONSE_SIZE = 1024 * 1024;\nvar HttpProxyManager = class {\n pendingRequests = /* @__PURE__ */ new Map();\n /**\n * Proxy an HTTP request through the WebSocket connection to a runner\n */\n async proxyRequest(runnerId, projectId, port, request) {\n const requestId = randomUUID();\n if (!buildWebSocketServer.isRunnerConnected(runnerId)) {\n throw new Error(`Runner ${runnerId} is not connected`);\n }\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n const pending = this.pendingRequests.get(requestId);\n if (pending) {\n this.pendingRequests.delete(requestId);\n reject(new Error(`HTTP proxy request timeout after ${REQUEST_TIMEOUT_MS}ms`));\n }\n }, REQUEST_TIMEOUT_MS);\n this.pendingRequests.set(requestId, {\n resolve,\n reject,\n timeout,\n chunks: [],\n runnerId\n });\n const command = {\n id: randomUUID(),\n type: \"http-proxy-request\",\n projectId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n payload: {\n requestId,\n method: request.method,\n path: request.path,\n headers: request.headers,\n body: request.body ? request.body.toString(\"base64\") : null,\n port\n }\n };\n const sent = buildWebSocketServer.sendCommandToRunner(runnerId, command);\n if (!sent) {\n clearTimeout(timeout);\n this.pendingRequests.delete(requestId);\n reject(new Error(`Failed to send HTTP proxy request to runner ${runnerId}`));\n }\n });\n }\n /**\n * Handle HTTP proxy response event from runner\n */\n handleProxyResponse(event) {\n const pending = this.pendingRequests.get(event.requestId);\n if (!pending) {\n console.warn(`[http-proxy] Received response for unknown request: ${event.requestId}`);\n return;\n }\n pending.headers = event.headers;\n pending.statusCode = event.statusCode;\n if (!event.isChunked && event.body !== void 0) {\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(event.requestId);\n pending.resolve({\n statusCode: event.statusCode,\n headers: event.headers,\n body: Buffer.from(event.body, \"base64\")\n });\n }\n }\n /**\n * Handle HTTP proxy chunk event from runner\n */\n handleProxyChunk(event) {\n const pending = this.pendingRequests.get(event.requestId);\n if (!pending) {\n console.warn(`[http-proxy] Received chunk for unknown request: ${event.requestId}`);\n return;\n }\n pending.chunks.push(Buffer.from(event.chunk, \"base64\"));\n if (event.isFinal) {\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(event.requestId);\n const body = Buffer.concat(pending.chunks);\n pending.resolve({\n statusCode: pending.statusCode || 200,\n headers: pending.headers || {},\n body\n });\n }\n }\n /**\n * Handle HTTP proxy error event from runner\n */\n handleProxyError(event) {\n const pending = this.pendingRequests.get(event.requestId);\n if (!pending) {\n console.warn(`[http-proxy] Received error for unknown request: ${event.requestId}`);\n return;\n }\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(event.requestId);\n const error = new Error(event.error);\n error.statusCode = event.statusCode;\n pending.reject(error);\n }\n /**\n * Process a runner event and handle HTTP proxy events\n */\n processEvent(event) {\n switch (event.type) {\n case \"http-proxy-response\":\n this.handleProxyResponse(event);\n return true;\n case \"http-proxy-chunk\":\n this.handleProxyChunk(event);\n return true;\n case \"http-proxy-error\":\n this.handleProxyError(event);\n return true;\n default:\n return false;\n }\n }\n /**\n * Cancel all pending requests for a specific runner (e.g., on disconnect)\n */\n cancelRequestsForRunner(runnerId) {\n for (const [requestId, pending] of this.pendingRequests.entries()) {\n if (pending.runnerId === runnerId) {\n clearTimeout(pending.timeout);\n pending.reject(new Error(\"Runner disconnected\"));\n this.pendingRequests.delete(requestId);\n }\n }\n }\n /**\n * Get stats about pending requests\n */\n getStats() {\n return {\n pendingRequests: this.pendingRequests.size,\n requestsByRunner: Array.from(this.pendingRequests.values()).reduce((acc, req) => {\n acc[req.runnerId] = (acc[req.runnerId] || 0) + 1;\n return acc;\n }, {})\n };\n }\n};\nvar globalKey = \"__httpProxyManager__\";\nfunction getOrCreateManager() {\n if (!globalThis[globalKey]) {\n globalThis[globalKey] = new HttpProxyManager();\n }\n return globalThis[globalKey];\n}\nvar httpProxyManager = getOrCreateManager();\n\n// src/lib/websocket/hmr-proxy-manager.ts\nimport { randomUUID as randomUUID2 } from \"crypto\";\nvar CONNECTION_TIMEOUT_MS = 3e4;\nvar HmrProxyManager = class {\n // Map connectionId -> pending connection info\n connections = /* @__PURE__ */ new Map();\n /**\n * Initiate an HMR connection through the runner\n * \n * @param connectionId - Connection ID from frontend (must be preserved for message correlation)\n * @returns connectionId to track this connection\n */\n connect(connectionId, runnerId, projectId, port, protocol, callbacks) {\n if (!buildWebSocketServer.isRunnerConnected(runnerId)) {\n console.warn(`[hmr-proxy] Runner ${runnerId} is not connected`);\n callbacks?.onError?.(\"Runner not connected\");\n return connectionId;\n }\n this.connections.set(connectionId, {\n projectId,\n runnerId,\n port,\n protocol,\n status: \"connecting\",\n createdAt: Date.now(),\n ...callbacks\n });\n setTimeout(() => {\n const conn = this.connections.get(connectionId);\n if (conn && conn.status === \"connecting\") {\n console.warn(`[hmr-proxy] Connection timeout for ${connectionId}`);\n conn.status = \"error\";\n conn.onError?.(\"Connection timeout\");\n this.connections.delete(connectionId);\n }\n }, CONNECTION_TIMEOUT_MS);\n const command = {\n id: randomUUID2(),\n type: \"hmr-connect\",\n projectId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n payload: {\n connectionId,\n port,\n protocol\n }\n };\n const sent = buildWebSocketServer.sendCommandToRunner(runnerId, command);\n if (!sent) {\n console.error(`[hmr-proxy] Failed to send HMR connect to runner ${runnerId}`);\n this.connections.delete(connectionId);\n callbacks?.onError?.(\"Failed to send connect command\");\n }\n return connectionId;\n }\n /**\n * Send an HMR message through the connection\n */\n send(connectionId, message) {\n const conn = this.connections.get(connectionId);\n if (!conn) {\n console.warn(`[hmr-proxy] No connection found for ${connectionId}`);\n return false;\n }\n if (conn.status !== \"connected\") {\n console.warn(`[hmr-proxy] Connection ${connectionId} not ready (${conn.status})`);\n return false;\n }\n const command = {\n id: randomUUID2(),\n type: \"hmr-message\",\n projectId: conn.projectId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n payload: {\n connectionId,\n message\n }\n };\n return buildWebSocketServer.sendCommandToRunner(conn.runnerId, command);\n }\n /**\n * Disconnect an HMR connection\n */\n disconnect(connectionId) {\n const conn = this.connections.get(connectionId);\n if (!conn) {\n return;\n }\n const command = {\n id: randomUUID2(),\n type: \"hmr-disconnect\",\n projectId: conn.projectId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n payload: {\n connectionId\n }\n };\n buildWebSocketServer.sendCommandToRunner(conn.runnerId, command);\n this.connections.delete(connectionId);\n }\n /**\n * Handle HMR events from runner\n */\n handleConnected(event) {\n const conn = this.connections.get(event.connectionId);\n if (!conn) {\n console.warn(`[hmr-proxy] Received connected for unknown connection: ${event.connectionId}`);\n return;\n }\n conn.status = \"connected\";\n conn.onConnected?.();\n }\n handleMessage(event) {\n const conn = this.connections.get(event.connectionId);\n if (!conn) {\n console.warn(`[hmr-proxy] Received message for unknown connection: ${event.connectionId}`);\n return;\n }\n conn.onMessage?.(event.message);\n }\n handleDisconnected(event) {\n const conn = this.connections.get(event.connectionId);\n if (!conn) {\n console.warn(`[hmr-proxy] Received disconnected for unknown connection: ${event.connectionId}`);\n return;\n }\n conn.status = \"disconnected\";\n conn.onDisconnected?.(event.code, event.reason);\n this.connections.delete(event.connectionId);\n }\n handleError(event) {\n const conn = this.connections.get(event.connectionId);\n if (!conn) {\n console.warn(`[hmr-proxy] Received error for unknown connection: ${event.connectionId}`);\n return;\n }\n console.error(`[hmr-proxy] HMR error for ${event.connectionId}: ${event.error}`);\n conn.status = \"error\";\n conn.onError?.(event.error);\n this.connections.delete(event.connectionId);\n }\n /**\n * Process a runner event and handle HMR events\n * @returns true if the event was an HMR event and was handled\n */\n processEvent(event) {\n switch (event.type) {\n case \"hmr-connected\":\n this.handleConnected(event);\n return true;\n case \"hmr-message\":\n this.handleMessage(event);\n return true;\n case \"hmr-disconnected\":\n this.handleDisconnected(event);\n return true;\n case \"hmr-error\":\n this.handleError(event);\n return true;\n default:\n return false;\n }\n }\n /**\n * Disconnect all HMR connections for a project\n */\n disconnectProject(projectId) {\n for (const [connectionId, conn] of this.connections.entries()) {\n if (conn.projectId === projectId) {\n this.disconnect(connectionId);\n }\n }\n }\n /**\n * Disconnect all HMR connections for a runner (e.g., on runner disconnect)\n */\n disconnectRunner(runnerId) {\n for (const [connectionId, conn] of this.connections.entries()) {\n if (conn.runnerId === runnerId) {\n conn.onDisconnected?.(1001, \"Runner disconnected\");\n this.connections.delete(connectionId);\n }\n }\n }\n /**\n * Get connection by ID\n */\n getConnection(connectionId) {\n return this.connections.get(connectionId);\n }\n /**\n * Get stats about active connections\n */\n getStats() {\n return {\n activeConnections: this.connections.size,\n connectionsByProject: Array.from(this.connections.values()).reduce((acc, conn) => {\n acc[conn.projectId] = (acc[conn.projectId] || 0) + 1;\n return acc;\n }, {}),\n connectionsByStatus: Array.from(this.connections.values()).reduce((acc, conn) => {\n acc[conn.status] = (acc[conn.status] || 0) + 1;\n return acc;\n }, {})\n };\n }\n};\nvar globalKey2 = \"__hmrProxyManager__\";\nfunction getOrCreateManager2() {\n if (!globalThis[globalKey2]) {\n globalThis[globalKey2] = new HmrProxyManager();\n }\n return globalThis[globalKey2];\n}\nvar hmrProxyManager = getOrCreateManager2();\n\n// src/lib/runner/command-queue.ts\nvar DEFAULT_OPTIONS = {\n maxQueueSize: 100,\n defaultTtlMs: 5 * 60 * 1e3,\n // 5 minutes\n defaultMaxAttempts: 3,\n cleanupIntervalMs: 30 * 1e3\n // 30 seconds\n};\nvar RunnerCommandQueue = class {\n queues = /* @__PURE__ */ new Map();\n options;\n cleanupInterval = null;\n sendFunction = null;\n constructor(options = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n this.startCleanup();\n }\n /**\n * Set the function used to send commands to runners\n * This is injected to avoid circular dependencies with WebSocket server\n */\n setSendFunction(fn) {\n this.sendFunction = fn;\n }\n /**\n * Queue a command for delivery to a runner\n * Returns true if command was sent immediately, false if queued\n */\n enqueue(runnerId, command, options = {}) {\n const queuedCommand = {\n command,\n runnerId,\n queuedAt: Date.now(),\n attempts: 0,\n maxAttempts: options.maxAttempts ?? this.options.defaultMaxAttempts,\n ttlMs: options.ttlMs ?? this.options.defaultTtlMs,\n onSuccess: options.onSuccess,\n onFailure: options.onFailure\n };\n if (this.sendFunction) {\n const sent = this.trySend(queuedCommand);\n if (sent) {\n return { sent: true, queued: false };\n }\n }\n return this.addToQueue(runnerId, queuedCommand);\n }\n /**\n * Try to send a command, returns true if successful\n */\n trySend(queuedCommand) {\n if (!this.sendFunction) {\n return false;\n }\n queuedCommand.attempts++;\n const sent = this.sendFunction(queuedCommand.runnerId, queuedCommand.command);\n if (sent) {\n buildLogger.log(\"debug\", \"websocket\", `[command-queue] Command sent: ${queuedCommand.command.type}`, {\n runnerId: queuedCommand.runnerId,\n commandId: queuedCommand.command.id,\n attempts: queuedCommand.attempts\n });\n queuedCommand.onSuccess?.();\n return true;\n }\n return false;\n }\n /**\n * Add a command to the queue\n */\n addToQueue(runnerId, queuedCommand) {\n let queue = this.queues.get(runnerId);\n if (!queue) {\n queue = [];\n this.queues.set(runnerId, queue);\n }\n if (queue.length >= this.options.maxQueueSize) {\n buildLogger.log(\"warn\", \"websocket\", `Queue full for runner ${runnerId}, dropping oldest command`);\n const dropped = queue.shift();\n dropped?.onFailure?.(\"Queue full - command dropped\");\n }\n queue.push(queuedCommand);\n buildLogger.log(\"debug\", \"websocket\", `Command queued: ${queuedCommand.command.type}`, {\n runnerId,\n commandId: queuedCommand.command.id,\n queueSize: queue.length\n });\n return { sent: false, queued: true };\n }\n /**\n * Process queued commands for a runner (call when runner connects/reconnects)\n */\n processQueue(runnerId) {\n const queue = this.queues.get(runnerId);\n if (!queue || queue.length === 0) {\n return { sent: 0, failed: 0, remaining: 0 };\n }\n let sent = 0;\n let failed = 0;\n const remaining = [];\n for (const queuedCommand of queue) {\n if (this.isExpired(queuedCommand)) {\n buildLogger.log(\"debug\", \"websocket\", `Command expired: ${queuedCommand.command.type}`, {\n runnerId,\n commandId: queuedCommand.command.id\n });\n queuedCommand.onFailure?.(\"Command expired\");\n failed++;\n continue;\n }\n if (queuedCommand.attempts >= queuedCommand.maxAttempts) {\n buildLogger.log(\"debug\", \"websocket\", `Command max attempts reached: ${queuedCommand.command.type}`, {\n runnerId,\n commandId: queuedCommand.command.id,\n attempts: queuedCommand.attempts\n });\n queuedCommand.onFailure?.(\"Max retry attempts reached\");\n failed++;\n continue;\n }\n if (this.trySend(queuedCommand)) {\n sent++;\n } else {\n remaining.push(queuedCommand);\n }\n }\n if (remaining.length > 0) {\n this.queues.set(runnerId, remaining);\n } else {\n this.queues.delete(runnerId);\n }\n buildLogger.log(\"info\", \"websocket\", `Processed queue for runner ${runnerId}`, {\n sent,\n failed,\n remaining: remaining.length\n });\n return { sent, failed, remaining: remaining.length };\n }\n /**\n * Check if a command has expired\n */\n isExpired(queuedCommand) {\n return Date.now() - queuedCommand.queuedAt > queuedCommand.ttlMs;\n }\n /**\n * Start the cleanup interval for expired commands\n */\n startCleanup() {\n this.cleanupInterval = setInterval(() => {\n this.cleanup();\n }, this.options.cleanupIntervalMs);\n }\n /**\n * Clean up expired commands from all queues\n */\n cleanup() {\n for (const [runnerId, queue] of this.queues.entries()) {\n const validCommands = queue.filter((cmd) => {\n if (this.isExpired(cmd)) {\n cmd.onFailure?.(\"Command expired\");\n return false;\n }\n return true;\n });\n if (validCommands.length !== queue.length) {\n buildLogger.log(\"debug\", \"websocket\", `Cleaned ${queue.length - validCommands.length} expired commands for runner ${runnerId}`);\n }\n if (validCommands.length === 0) {\n this.queues.delete(runnerId);\n } else {\n this.queues.set(runnerId, validCommands);\n }\n }\n }\n /**\n * Get queue stats\n */\n getStats() {\n const runnerQueues = {};\n let totalQueued = 0;\n for (const [runnerId, queue] of this.queues.entries()) {\n runnerQueues[runnerId] = queue.length;\n totalQueued += queue.length;\n }\n return { totalQueued, runnerQueues };\n }\n /**\n * Clear all queued commands for a runner\n */\n clearQueue(runnerId) {\n const queue = this.queues.get(runnerId);\n const count = queue?.length ?? 0;\n if (queue) {\n for (const cmd of queue) {\n cmd.onFailure?.(\"Queue cleared\");\n }\n }\n this.queues.delete(runnerId);\n return count;\n }\n /**\n * Shutdown the queue (cleanup interval)\n */\n shutdown() {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n }\n};\nvar commandQueue = new RunnerCommandQueue();\n\n// src/lib/websocket/server.ts\nvar getSharedSecret = () => process.env.RUNNER_SHARED_SECRET;\nfunction hashRunnerKey(key) {\n return createHash(\"sha256\").update(key).digest(\"hex\");\n}\nasync function validateRunnerKey(key) {\n if (!key || !key.startsWith(\"sv_\")) {\n return { valid: false };\n }\n const keyHash = hashRunnerKey(key);\n try {\n const results = await db.select({ id: runnerKeys.id, userId: runnerKeys.userId }).from(runnerKeys).where(\n and(\n eq(runnerKeys.keyHash, keyHash),\n isNull(runnerKeys.revokedAt)\n )\n ).limit(1);\n if (results.length > 0) {\n db.update(runnerKeys).set({ lastUsedAt: /* @__PURE__ */ new Date() }).where(eq(runnerKeys.id, results[0].id)).execute().catch(() => {\n });\n return { valid: true, userId: results[0].userId };\n }\n } catch (error) {\n console.error(\"[websocket] Error validating runner key:\", error);\n }\n return { valid: false };\n}\nvar BuildWebSocketServer = class {\n wss = null;\n runnerWss = null;\n clients = /* @__PURE__ */ new Map();\n runnerConnections = /* @__PURE__ */ new Map();\n pendingUpdates = /* @__PURE__ */ new Map();\n batchInterval = null;\n heartbeatInterval = null;\n runnerCleanupInterval = null;\n BATCH_DELAY = 200;\n // ms - batch updates for efficiency\n HEARTBEAT_INTERVAL = 3e4;\n // 30s\n CLIENT_TIMEOUT = 6e4;\n // 60s\n RUNNER_PING_INTERVAL = 3e4;\n // 30s\n RUNNER_HEARTBEAT_TIMEOUT = 9e4;\n // 90s\n // Metrics tracking for runner connections\n runnerTotalEvents = 0;\n runnerTotalCommands = 0;\n runnerTotalErrors = 0;\n // Instance ID for debugging singleton issues\n instanceId = Math.random().toString(36).substring(7);\n initialized = false;\n // Callback for runner status changes (set by app layer)\n onRunnerStatusChangeCallback = null;\n constructor() {\n buildLogger.websocket.serverCreated(this.instanceId);\n }\n /**\n * Initialize WebSocket server for both frontend clients and runners\n */\n initialize(server, path = \"/ws\") {\n if (this.initialized) {\n buildLogger.log(\"debug\", \"websocket\", `Server already initialized (instance: ${this.instanceId}), skipping...`, { instanceId: this.instanceId });\n return;\n }\n buildLogger.log(\"debug\", \"websocket\", `Initializing server (instance: ${this.instanceId})...`, { instanceId: this.instanceId });\n this.initialized = true;\n this.wss = new WebSocketServer({\n noServer: true,\n perMessageDeflate: false\n // Disable compression for lower latency\n });\n this.wss.on(\"connection\", (ws, req) => {\n this.handleConnection(ws, req);\n });\n this.runnerWss = new WebSocketServer({\n noServer: true,\n perMessageDeflate: false\n });\n this.runnerWss.on(\"connection\", (ws, req) => {\n this.handleRunnerConnection(ws, req);\n });\n server.on(\"upgrade\", (request, socket, head) => {\n const pathname = request.url?.split(\"?\")[0] || \"\";\n if (pathname === \"/ws/runner\") {\n this.runnerWss.handleUpgrade(request, socket, head, (ws) => {\n this.runnerWss.emit(\"connection\", ws, request);\n });\n } else if (pathname === path || pathname === \"/ws\") {\n this.wss.handleUpgrade(request, socket, head, (ws) => {\n this.wss.emit(\"connection\", ws, request);\n });\n } else {\n if (pathname && pathname !== \"/\") {\n buildLogger.websocket.unknownUpgradePath(pathname);\n }\n socket.destroy();\n }\n });\n this.batchInterval = setInterval(() => {\n this.processBatchedUpdates();\n }, this.BATCH_DELAY);\n this.heartbeatInterval = setInterval(() => {\n this.sendHeartbeats();\n }, this.HEARTBEAT_INTERVAL);\n this.runnerCleanupInterval = setInterval(() => {\n this.cleanupStaleRunnerConnections();\n }, 6e4);\n commandQueue.setSendFunction((runnerId, command) => {\n return this.sendCommandToRunner(runnerId, command);\n });\n buildLogger.websocket.serverInitialized(path, \"/ws/runner\");\n }\n // ============================================================\n // FRONTEND CLIENT HANDLING\n // ============================================================\n /**\n * Handle new frontend WebSocket connection\n */\n handleConnection(ws, req) {\n const clientId = this.generateClientId();\n const url = new URL(req.url || \"\", `http://${req.headers.host}`);\n const projectId = url.searchParams.get(\"projectId\") || \"\";\n const sessionId = url.searchParams.get(\"sessionId\") || void 0;\n buildLogger.websocket.clientConnected(clientId, projectId, sessionId);\n this.clients.set(clientId, {\n ws,\n projectId,\n sessionId,\n lastHeartbeat: Date.now()\n });\n this.sendMessage(ws, {\n type: \"connected\",\n clientId,\n projectId,\n sessionId,\n timestamp: Date.now()\n });\n ws.on(\"message\", (data) => {\n try {\n const message = JSON.parse(data.toString());\n this.handleClientMessage(clientId, message);\n } catch (error) {\n buildLogger.websocket.error(\"Failed to parse client message\", error, { clientId });\n }\n });\n ws.on(\"close\", () => {\n buildLogger.websocket.clientDisconnected(clientId);\n const client = this.clients.get(clientId);\n if (client?.hmrConnections) {\n for (const connectionId of client.hmrConnections) {\n hmrProxyManager.disconnect(connectionId);\n }\n }\n this.clients.delete(clientId);\n });\n ws.on(\"error\", (error) => {\n buildLogger.websocket.error(\"Client error\", error, { clientId });\n this.clients.delete(clientId);\n });\n }\n // ============================================================\n // RUNNER CONNECTION HANDLING\n // ============================================================\n /**\n * Handle new runner WebSocket connection\n */\n async handleRunnerConnection(ws, req) {\n const sharedSecret = getSharedSecret();\n const authHeader = req.headers[\"authorization\"];\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : authHeader;\n let isAuthenticated = false;\n let runnerUserId;\n if (token) {\n if (token.startsWith(\"sv_\")) {\n const result = await validateRunnerKey(token);\n isAuthenticated = result.valid;\n runnerUserId = result.userId;\n } else if (sharedSecret && token === sharedSecret) {\n isAuthenticated = true;\n }\n }\n if (!isAuthenticated) {\n if (!sharedSecret) {\n buildLogger.websocket.runnerAuthMissing();\n ws.close(1008, \"Server misconfigured\");\n return;\n }\n buildLogger.websocket.runnerAuthRejected();\n ws.close(1008, \"Unauthorized\");\n return;\n }\n const url = new URL(req.url || \"\", `http://${req.headers.host}`);\n const runnerId = url.searchParams.get(\"runnerId\") ?? \"default\";\n buildLogger.websocket.runnerConnected(runnerId);\n const pingInterval = setInterval(() => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.ping();\n }\n }, this.RUNNER_PING_INTERVAL);\n this.runnerConnections.set(runnerId, {\n id: runnerId,\n socket: ws,\n lastHeartbeat: Date.now(),\n pingInterval,\n userId: runnerUserId\n });\n Sentry2.addBreadcrumb({\n category: \"websocket\",\n message: `Runner connected: ${runnerId}`,\n level: \"info\"\n });\n const queueResult = commandQueue.processQueue(runnerId);\n if (queueResult.sent > 0 || queueResult.failed > 0) {\n buildLogger.log(\"info\", \"websocket\", `Runner ${runnerId} reconnected - processed queued commands`, {\n sent: queueResult.sent,\n failed: queueResult.failed,\n remaining: queueResult.remaining\n });\n }\n this.notifyRunnerConnected(runnerId);\n ws.on(\"pong\", () => {\n const conn = this.runnerConnections.get(runnerId);\n if (conn) {\n conn.lastHeartbeat = Date.now();\n }\n });\n ws.on(\"message\", async (data) => {\n try {\n const message = JSON.parse(data.toString());\n if (isRunnerEvent(message)) {\n const event = message;\n if (event.type === \"runner-status\") {\n const conn = this.runnerConnections.get(runnerId);\n if (conn) conn.lastHeartbeat = Date.now();\n }\n this.runnerTotalEvents++;\n await this.processRunnerEvent(event);\n }\n } catch (error) {\n this.runnerTotalErrors++;\n Sentry2.captureException(error, {\n tags: { runnerId, source: \"websocket_message\" },\n level: \"error\"\n });\n buildLogger.websocket.error(\"Failed to handle runner message\", error, { runnerId });\n }\n });\n ws.on(\"close\", (code) => {\n buildLogger.websocket.runnerDisconnected(runnerId, code);\n const conn = this.runnerConnections.get(runnerId);\n if (conn) {\n clearInterval(conn.pingInterval);\n }\n this.runnerConnections.delete(runnerId);\n httpProxyManager.cancelRequestsForRunner(runnerId);\n hmrProxyManager.disconnectRunner(runnerId);\n this.cleanupRunnerProcesses(runnerId);\n Sentry2.addBreadcrumb({\n category: \"websocket\",\n message: `Runner disconnected: ${runnerId}`,\n level: \"info\",\n data: { code }\n });\n });\n ws.on(\"error\", (error) => {\n buildLogger.websocket.error(\"Runner socket error\", error, { runnerId });\n this.runnerTotalErrors++;\n Sentry2.captureException(error, {\n tags: { runnerId, source: \"websocket_error\" },\n level: \"error\"\n });\n const conn = this.runnerConnections.get(runnerId);\n if (conn) {\n clearInterval(conn.pingInterval);\n }\n this.runnerConnections.delete(runnerId);\n });\n }\n /**\n * Process runner event - publish to event stream for WebSocket broadcasts\n * NOTE: Database writes now happen via HTTP from the runner (/api/runner-events, /api/build-events)\n */\n async processRunnerEvent(event) {\n if (httpProxyManager.processEvent(event)) {\n return;\n }\n if (hmrProxyManager.processEvent(event)) {\n return;\n }\n publishRunnerEvent(event);\n }\n /**\n * Queue a command for reliable delivery to a runner\n * Automatically retries if runner is disconnected, with configurable TTL\n */\n queueCommandToRunner(runnerId, command, options) {\n return commandQueue.enqueue(runnerId, command, options);\n }\n /**\n * Send a command to a specific runner (immediate, no queueing)\n */\n sendCommandToRunner(runnerId, command) {\n const connection = this.runnerConnections.get(runnerId);\n if (!connection || connection.socket.readyState !== WebSocket.OPEN) {\n buildLogger.websocket.runnerNotConnected(runnerId, command.type);\n return false;\n }\n try {\n const activeSpan = Sentry2.getActiveSpan();\n const hasTrace = !!activeSpan;\n if (activeSpan) {\n const traceData = Sentry2.getTraceData();\n if (traceData[\"sentry-trace\"]) {\n command._sentry = {\n trace: traceData[\"sentry-trace\"],\n baggage: traceData.baggage\n };\n buildLogger.log(\"debug\", \"websocket\", `Attaching trace to command ${command.type}`, {\n tracePreview: traceData[\"sentry-trace\"].substring(0, 50)\n });\n }\n }\n buildLogger.websocket.commandSent(runnerId, command.type, hasTrace);\n connection.socket.send(JSON.stringify(command));\n this.runnerTotalCommands++;\n return true;\n } catch (error) {\n this.runnerTotalErrors++;\n Sentry2.captureException(error, {\n tags: { runnerId, commandType: command.type },\n level: \"error\"\n });\n buildLogger.websocket.error(\"Failed to send command to runner\", error, { runnerId, commandType: command.type });\n return false;\n }\n }\n /**\n * List all connected runners with their status\n * @param userId - Optional user ID to filter runners (only show runners owned by this user)\n */\n listRunnerConnections(userId) {\n const now = Date.now();\n let connections = Array.from(this.runnerConnections.values());\n if (userId) {\n connections = connections.filter((conn) => conn.userId === userId);\n }\n return connections.map(({ id, lastHeartbeat, userId: connUserId }) => ({\n runnerId: id,\n lastHeartbeat,\n lastHeartbeatAge: now - lastHeartbeat,\n userId: connUserId\n }));\n }\n /**\n * Check if a specific runner is connected\n */\n isRunnerConnected(runnerId) {\n const conn = this.runnerConnections.get(runnerId);\n const isConnected = conn !== void 0 && conn.socket.readyState === WebSocket.OPEN;\n console.log(`[isRunnerConnected] Checking runner '${runnerId}':`, {\n hasConnection: conn !== void 0,\n socketState: conn?.socket.readyState,\n isOpen: conn?.socket.readyState === WebSocket.OPEN,\n result: isConnected,\n allRunners: Array.from(this.runnerConnections.keys())\n });\n return isConnected;\n }\n /**\n * Register a callback to be notified when runner status changes\n * This allows the app layer to emit project events when runners connect/disconnect\n */\n onRunnerStatusChange(callback) {\n this.onRunnerStatusChangeCallback = callback;\n }\n /**\n * Get runner metrics\n */\n getRunnerMetrics() {\n return {\n totalEvents: this.runnerTotalEvents,\n totalCommands: this.runnerTotalCommands,\n totalErrors: this.runnerTotalErrors,\n activeConnections: this.runnerConnections.size\n };\n }\n /**\n * Cleanup stale runner connections\n */\n cleanupStaleRunnerConnections() {\n const now = Date.now();\n for (const [runnerId, conn] of this.runnerConnections.entries()) {\n if (now - conn.lastHeartbeat > this.RUNNER_HEARTBEAT_TIMEOUT) {\n buildLogger.websocket.runnerStaleRemoved(runnerId);\n Sentry2.addBreadcrumb({\n category: \"websocket\",\n message: `Stale runner connection removed: ${runnerId}`,\n level: \"warning\",\n data: { age: now - conn.lastHeartbeat }\n });\n clearInterval(conn.pingInterval);\n conn.socket.close(1e3, \"Heartbeat timeout\");\n this.runnerConnections.delete(runnerId);\n this.cleanupRunnerProcesses(runnerId);\n }\n }\n }\n /**\n * Clean up running processes and update project statuses when a runner disconnects.\n * This ensures the UI shows accurate state when the runner is gone.\n */\n async cleanupRunnerProcesses(runnerId) {\n try {\n buildLogger.log(\"info\", \"websocket\", `Cleaning up processes for disconnected runner: ${runnerId}`, { runnerId });\n const processes = await db.select({ projectId: runningProcesses.projectId }).from(runningProcesses).where(eq(runningProcesses.runnerId, runnerId));\n if (processes.length === 0) {\n buildLogger.log(\"debug\", \"websocket\", `No running processes found for runner: ${runnerId}`, { runnerId });\n return;\n }\n const projectIds = processes.map((p) => p.projectId);\n buildLogger.log(\"info\", \"websocket\", `Found ${projectIds.length} processes to clean up for runner: ${runnerId}`, {\n runnerId,\n projectIds\n });\n await db.delete(runningProcesses).where(eq(runningProcesses.runnerId, runnerId));\n const now = /* @__PURE__ */ new Date();\n for (const projectId of projectIds) {\n await db.update(projects).set({\n devServerStatus: \"stopped\",\n devServerStatusUpdatedAt: now,\n devServerPid: null\n }).where(eq(projects.id, projectId));\n }\n buildLogger.log(\"info\", \"websocket\", `Cleaned up ${projectIds.length} processes for disconnected runner: ${runnerId}`, {\n runnerId,\n projectIds\n });\n Sentry2.addBreadcrumb({\n category: \"websocket\",\n message: `Cleaned up processes for disconnected runner`,\n level: \"info\",\n data: { runnerId, processCount: projectIds.length }\n });\n if (this.onRunnerStatusChangeCallback) {\n try {\n this.onRunnerStatusChangeCallback(runnerId, false, projectIds);\n } catch (callbackError) {\n buildLogger.websocket.error(\"Runner status change callback failed\", callbackError, { runnerId });\n }\n }\n } catch (error) {\n buildLogger.websocket.error(\"Failed to cleanup runner processes\", error, { runnerId });\n Sentry2.captureException(error, {\n tags: { runnerId, source: \"runner_cleanup\" },\n level: \"error\"\n });\n }\n }\n /**\n * Notify app layer when a runner connects so projects can update their UI\n */\n async notifyRunnerConnected(runnerId) {\n if (!this.onRunnerStatusChangeCallback) return;\n try {\n const projectsWithRunner = await db.select({ id: projects.id }).from(projects).where(eq(projects.runnerId, runnerId));\n if (projectsWithRunner.length > 0) {\n const projectIds = projectsWithRunner.map((p) => p.id);\n buildLogger.log(\"info\", \"websocket\", `Runner ${runnerId} connected - notifying ${projectIds.length} projects`, {\n runnerId,\n projectIds\n });\n this.onRunnerStatusChangeCallback(runnerId, true, projectIds);\n }\n } catch (error) {\n buildLogger.websocket.error(\"Failed to notify runner connected\", error, { runnerId });\n }\n }\n /**\n * Handle messages from client (heartbeat, resubscribe, HMR, etc.)\n */\n handleClientMessage(clientId, message) {\n const client = this.clients.get(clientId);\n if (!client) return;\n switch (message.type) {\n case \"heartbeat\":\n client.lastHeartbeat = Date.now();\n this.sendMessage(client.ws, { type: \"heartbeat-ack\", timestamp: Date.now() });\n break;\n case \"subscribe\":\n client.projectId = message.projectId;\n client.sessionId = message.sessionId;\n buildLogger.websocket.clientSubscribed(clientId, message.projectId);\n break;\n case \"get-state\":\n this.sendCurrentState(client);\n break;\n // HMR Proxy Messages from frontend iframe\n case \"hmr-connect\":\n this.handleHmrConnect(clientId, client, message);\n break;\n case \"hmr-send\":\n this.handleHmrSend(message);\n break;\n case \"hmr-disconnect\":\n this.handleHmrDisconnect(clientId, client, message);\n break;\n }\n }\n /**\n * Handle HMR connect request from frontend\n */\n handleHmrConnect(clientId, client, message) {\n const { connectionId, port, protocol, runnerId } = message;\n const targetRunnerId = runnerId || this.getRunnerIdForProject(client.projectId);\n if (!targetRunnerId) {\n this.sendMessage(client.ws, {\n type: \"hmr-error\",\n connectionId,\n error: \"No runner available for project\"\n });\n return;\n }\n if (!client.hmrConnections) {\n client.hmrConnections = /* @__PURE__ */ new Set();\n }\n client.hmrConnections.add(connectionId);\n hmrProxyManager.connect(\n connectionId,\n targetRunnerId,\n client.projectId,\n port,\n protocol,\n {\n onConnected: () => {\n this.sendMessage(client.ws, {\n type: \"hmr-connected\",\n connectionId\n });\n },\n onMessage: (msg) => {\n this.sendMessage(client.ws, {\n type: \"hmr-message\",\n connectionId,\n message: msg\n });\n },\n onDisconnected: (code, reason) => {\n client.hmrConnections?.delete(connectionId);\n this.sendMessage(client.ws, {\n type: \"hmr-closed\",\n connectionId,\n code,\n reason\n });\n },\n onError: (error) => {\n client.hmrConnections?.delete(connectionId);\n this.sendMessage(client.ws, {\n type: \"hmr-error\",\n connectionId,\n error\n });\n }\n }\n );\n }\n /**\n * Handle HMR send request from frontend\n */\n handleHmrSend(message) {\n const { connectionId, message: hmrMessage } = message;\n hmrProxyManager.send(connectionId, hmrMessage);\n }\n /**\n * Handle HMR disconnect request from frontend\n */\n handleHmrDisconnect(clientId, client, message) {\n const { connectionId } = message;\n client.hmrConnections?.delete(connectionId);\n hmrProxyManager.disconnect(connectionId);\n }\n /**\n * Get the runner ID for a project (looks up from connected runners)\n * In a multi-runner setup, this would query the database\n */\n getRunnerIdForProject(projectId) {\n const runners = this.listRunnerConnections();\n return runners.length > 0 ? runners[0].runnerId : null;\n }\n /**\n * @deprecated Use discrete event broadcasts instead (broadcastBuildStarted, broadcastTodosUpdate,\n * broadcastToolCall, broadcastBuildComplete). This method broadcasts full state snapshots which\n * is inefficient for real-time updates. Kept for state recovery scenarios.\n */\n broadcastStateUpdate(projectId, sessionId, state) {\n const key = `${projectId}-${sessionId}`;\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const activeSpan = Sentry2.getActiveSpan();\n const traceContext = activeSpan ? {\n trace: Sentry2.getTraceData()[\"sentry-trace\"],\n baggage: Sentry2.getTraceData().baggage\n } : void 0;\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"state-update\",\n data: state,\n timestamp: Date.now(),\n _sentry: traceContext\n // Optional - won't break if missing\n });\n if (batch.updates.length >= 10) {\n this.flushBatch(key);\n }\n }\n /**\n * Broadcast tool call event\n */\n broadcastToolCall(projectId, sessionId, toolCall) {\n const key = `${projectId}-${sessionId}`;\n if (toolCall.todoIndex < 0) {\n const subscriberCount = Array.from(this.clients.values()).filter(\n (client) => client.projectId === projectId\n ).length;\n buildLogger.websocket.broadcastToolCall(toolCall.name, toolCall.state, subscriberCount);\n }\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const activeSpan = Sentry2.getActiveSpan();\n const traceContext = activeSpan ? {\n trace: Sentry2.getTraceData()[\"sentry-trace\"],\n baggage: Sentry2.getTraceData().baggage\n } : void 0;\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"tool-call\",\n data: toolCall,\n timestamp: Date.now(),\n _sentry: traceContext\n // Optional - won't break if missing\n });\n this.flushBatch(key);\n }\n /**\n * Broadcast build started event\n * This signals a new build has begun - flush immediately\n */\n broadcastBuildStarted(projectId, sessionId, buildId) {\n const key = `${projectId}-${sessionId}`;\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"build-started\",\n data: { buildId, sessionId, projectId },\n timestamp: Date.now()\n });\n this.flushBatch(key);\n }\n /**\n * Broadcast todos update (when TodoWrite tool is called)\n * This establishes or updates the todo list - flush immediately\n * @param phase - Optional phase ('template' | 'build') to distinguish template setup from build tasks\n */\n broadcastTodosUpdate(projectId, sessionId, todos, activeTodoIndex, phase) {\n const key = `${projectId}-${sessionId}`;\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"todos-update\",\n data: { todos, activeTodoIndex, phase },\n timestamp: Date.now()\n });\n this.flushBatch(key);\n }\n /**\n * Broadcast that a specific todo has completed (batch write finished)\n * This signals that all events for this todo have been persisted to DB\n */\n broadcastTodoCompleted(projectId, sessionId, todoIndex) {\n const key = `${projectId}-${sessionId}`;\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"todo-completed\",\n data: { todoIndex, persisted: true },\n timestamp: Date.now()\n });\n this.flushBatch(key);\n }\n /**\n * Broadcast build completed/failed event\n * This is a terminal state event - flush immediately\n */\n broadcastBuildComplete(projectId, sessionId, status, summary) {\n const key = `${projectId}-${sessionId}`;\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"build-complete\",\n data: { status, summary },\n timestamp: Date.now()\n });\n buildLogger.websocket.broadcastBuildComplete(projectId, sessionId, Array.from(this.clients.values()).filter(\n (client) => client.projectId === projectId\n ).length);\n this.flushBatch(key);\n }\n broadcastBuildSummary(projectId, sessionId, summary) {\n const key = `${projectId}-${sessionId}`;\n if (!this.pendingUpdates.has(key)) {\n this.pendingUpdates.set(key, {\n projectId,\n sessionId,\n updates: []\n });\n }\n const batch = this.pendingUpdates.get(key);\n batch.updates.push({\n type: \"build-summary\",\n data: { summary },\n timestamp: Date.now()\n });\n this.flushBatch(key);\n }\n /**\n * Process and send batched updates\n */\n processBatchedUpdates() {\n for (const [key, batch] of this.pendingUpdates.entries()) {\n this.flushBatch(key);\n }\n }\n /**\n * Flush a specific batch to clients\n */\n flushBatch(key) {\n const batch = this.pendingUpdates.get(key);\n if (!batch || batch.updates.length === 0) return;\n const { projectId, sessionId, updates } = batch;\n const subscribers2 = Array.from(this.clients.values()).filter(\n (client) => client.projectId === projectId && (!client.sessionId || client.sessionId === sessionId)\n );\n if (subscribers2.length === 0) {\n this.pendingUpdates.delete(key);\n return;\n }\n const message = {\n type: \"batch-update\",\n projectId,\n sessionId,\n updates,\n timestamp: Date.now()\n };\n subscribers2.forEach((client) => {\n this.sendMessage(client.ws, message);\n });\n this.pendingUpdates.delete(key);\n }\n /**\n * Send heartbeat to all connected clients\n */\n sendHeartbeats() {\n const now = Date.now();\n for (const [clientId, client] of this.clients.entries()) {\n if (now - client.lastHeartbeat > this.CLIENT_TIMEOUT) {\n buildLogger.websocket.clientTimeout(clientId);\n client.ws.close();\n this.clients.delete(clientId);\n continue;\n }\n this.sendMessage(client.ws, { type: \"heartbeat\", timestamp: now });\n }\n }\n /**\n * Send current state to a client (on reconnect)\n * Fetches the active build session from database and sends full state\n */\n async sendCurrentState(client) {\n if (!client.projectId) {\n this.sendMessage(client.ws, {\n type: \"state-recovery\",\n state: null,\n timestamp: Date.now()\n });\n return;\n }\n try {\n const sessions2 = await db.select().from(generationSessions).where(\n and(\n eq(generationSessions.projectId, client.projectId),\n eq(generationSessions.status, \"active\")\n )\n ).orderBy(desc(generationSessions.updatedAt)).limit(1);\n if (sessions2.length === 0) {\n const recentSessions = await db.select().from(generationSessions).where(eq(generationSessions.projectId, client.projectId)).orderBy(desc(generationSessions.updatedAt)).limit(1);\n if (recentSessions.length > 0 && recentSessions[0].rawState) {\n buildLogger.log(\"debug\", \"websocket\", `Sending completed session state for project ${client.projectId}`);\n this.sendMessage(client.ws, {\n type: \"state-recovery\",\n state: recentSessions[0].rawState,\n sessionStatus: recentSessions[0].status,\n timestamp: Date.now()\n });\n return;\n }\n this.sendMessage(client.ws, {\n type: \"state-recovery\",\n state: null,\n timestamp: Date.now()\n });\n return;\n }\n const session = sessions2[0];\n if (session.rawState) {\n buildLogger.log(\"debug\", \"websocket\", `Sending active session state for project ${client.projectId}`);\n this.sendMessage(client.ws, {\n type: \"state-recovery\",\n state: session.rawState,\n sessionId: session.id,\n sessionStatus: session.status,\n timestamp: Date.now()\n });\n return;\n }\n const [todos, toolCalls] = await Promise.all([\n db.select().from(generationTodos).where(eq(generationTodos.sessionId, session.id)).orderBy(generationTodos.todoIndex),\n db.select().from(generationToolCalls).where(eq(generationToolCalls.sessionId, session.id))\n ]);\n const toolsByTodo = {};\n for (const tool of toolCalls) {\n if (!toolsByTodo[tool.todoIndex]) {\n toolsByTodo[tool.todoIndex] = [];\n }\n toolsByTodo[tool.todoIndex].push(tool);\n }\n const activeTodoIndex = todos.findIndex((t) => t.status === \"in_progress\");\n const reconstructedState = {\n id: session.buildId,\n projectId: session.projectId,\n operationType: session.operationType || \"continuation\",\n todos: todos.map((t) => ({\n content: t.content,\n status: t.status,\n activeForm: t.activeForm || t.content\n })),\n toolsByTodo: Object.fromEntries(\n Object.entries(toolsByTodo).map(([idx, tools]) => [\n idx,\n tools.map((t) => ({\n id: t.toolCallId,\n name: t.name,\n input: t.input,\n output: t.output,\n state: t.state,\n startTime: t.startedAt,\n endTime: t.endedAt\n }))\n ])\n ),\n textByTodo: {},\n activeTodoIndex,\n // -1 if no todo is in_progress\n isActive: session.status === \"active\",\n startTime: session.startedAt,\n endTime: session.endedAt,\n buildSummary: session.summary,\n isAutoFix: session.isAutoFix,\n autoFixError: session.autoFixError\n };\n buildLogger.log(\"debug\", \"websocket\", `Sending reconstructed state for project ${client.projectId}`);\n this.sendMessage(client.ws, {\n type: \"state-recovery\",\n state: reconstructedState,\n sessionId: session.id,\n sessionStatus: session.status,\n timestamp: Date.now()\n });\n } catch (error) {\n buildLogger.websocket.error(\"Failed to fetch state for recovery\", error, { projectId: client.projectId });\n this.sendMessage(client.ws, {\n type: \"state-recovery-failed\",\n error: \"Failed to recover state from database\",\n timestamp: Date.now()\n });\n }\n }\n /**\n * Send message to a specific WebSocket\n */\n sendMessage(ws, message) {\n if (ws.readyState === WebSocket.OPEN) {\n try {\n ws.send(JSON.stringify(message));\n } catch (error) {\n buildLogger.websocket.error(\"Failed to send message\", error);\n }\n }\n }\n /**\n * Generate unique client ID\n */\n generateClientId() {\n return `client-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n /**\n * Get connection stats\n */\n getStats() {\n return {\n totalClients: this.clients.size,\n totalRunners: this.runnerConnections.size,\n pendingBatches: this.pendingUpdates.size,\n clientsByProject: this.getClientsByProject(),\n runners: this.listRunnerConnections(),\n runnerMetrics: this.getRunnerMetrics()\n };\n }\n /**\n * Get clients grouped by project\n */\n getClientsByProject() {\n const byProject = /* @__PURE__ */ new Map();\n for (const client of this.clients.values()) {\n const count = byProject.get(client.projectId) || 0;\n byProject.set(client.projectId, count + 1);\n }\n return Object.fromEntries(byProject);\n }\n /**\n * Shutdown WebSocket server\n */\n shutdown() {\n buildLogger.websocket.shutdown();\n if (this.batchInterval) {\n clearInterval(this.batchInterval);\n }\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n }\n if (this.runnerCleanupInterval) {\n clearInterval(this.runnerCleanupInterval);\n }\n for (const client of this.clients.values()) {\n client.ws.close();\n }\n this.clients.clear();\n this.pendingUpdates.clear();\n for (const conn of this.runnerConnections.values()) {\n clearInterval(conn.pingInterval);\n conn.socket.close(1e3, \"Server shutting down\");\n }\n this.runnerConnections.clear();\n if (this.wss) {\n this.wss.close();\n }\n if (this.runnerWss) {\n this.runnerWss.close();\n }\n commandQueue.shutdown();\n buildLogger.websocket.shutdownComplete();\n }\n /**\n * Get command queue stats\n */\n getCommandQueueStats() {\n return commandQueue.getStats();\n }\n};\nif (!globalThis.__buildWebSocketServer) {\n globalThis.__buildWebSocketServer = new BuildWebSocketServer();\n}\nvar buildWebSocketServer = globalThis.__buildWebSocketServer;\n\n// src/lib/db/migrate.ts\nimport { drizzle as drizzle2 } from \"drizzle-orm/node-postgres\";\nimport { migrate } from \"drizzle-orm/node-postgres/migrator\";\nimport pg2 from \"pg\";\nvar { Pool: Pool2 } = pg2;\nasync function runMigrations(migrationsFolder = \"./drizzle\") {\n const connectionString = process.env.DATABASE_URL;\n if (!connectionString) {\n throw new Error(\n 'DATABASE_URL is not set. Please configure your database connection:\\n - Run \"openbuilder init\" to set up a Neon database\\n - Or set DATABASE_URL environment variable to your PostgreSQL connection string'\n );\n }\n const pool = new Pool2({\n connectionString,\n ssl: process.env.PGSSLMODE === \"disable\" ? false : { rejectUnauthorized: false }\n });\n const db2 = drizzle2(pool);\n console.log(\"\\u{1F504} Running PostgreSQL database migrations...\");\n try {\n await migrate(db2, { migrationsFolder });\n console.log(\"\\u2705 Migrations completed successfully\");\n } catch (error) {\n console.error(\"\\u274C Migration failed:\", error);\n throw error;\n } finally {\n await pool.end();\n }\n}\n\n// src/schemas/metadata.ts\nimport { z } from \"zod\";\nvar ProjectMetadataSchema = z.object({\n slug: z.string().describe(\"URL-friendly project identifier (lowercase, hyphens)\"),\n friendlyName: z.string().describe(\"Human-readable project name\"),\n description: z.string().describe(\"Brief description of what the project does\"),\n icon: z.enum([\n \"Folder\",\n \"Code\",\n \"Layout\",\n \"Database\",\n \"Zap\",\n \"Globe\",\n \"Lock\",\n \"Users\",\n \"ShoppingCart\",\n \"Calendar\",\n \"MessageSquare\",\n \"FileText\",\n \"Image\",\n \"Music\",\n \"Video\",\n \"CheckCircle\",\n \"Star\"\n ]).describe(\"Icon name from available Lucide icons\")\n});\nvar TemplateAnalysisSchema = z.object({\n templateId: z.string().describe(\"ID of the selected template\"),\n reasoning: z.string().describe(\"Brief explanation of why this template was chosen\"),\n confidence: z.number().min(0).max(1).describe(\"Confidence score from 0.0 to 1.0\")\n});\nvar ProjectNamingSchema = z.object({\n slug: z.string().describe(\"URL-friendly project identifier (lowercase, hyphens, 2-4 words)\"),\n friendlyName: z.string().describe(\"Human-readable project name (Title Case, 2-5 words)\")\n});\nvar AVAILABLE_ICONS = [\n \"Folder\",\n \"Code\",\n \"Layout\",\n \"Database\",\n \"Zap\",\n \"Globe\",\n \"Lock\",\n \"Users\",\n \"ShoppingCart\",\n \"Calendar\",\n \"MessageSquare\",\n \"FileText\",\n \"Image\",\n \"Music\",\n \"Video\",\n \"CheckCircle\",\n \"Star\"\n];\nexport {\n AVAILABLE_ICONS,\n CLAUDE_SYSTEM_PROMPT,\n CODEX_SYSTEM_PROMPT,\n DEFAULT_AGENT_ID,\n DEFAULT_CLAUDE_MODEL_ID,\n DEFAULT_OPENCODE_MODEL_ID,\n GITHUB_CHAT_MESSAGES,\n LEGACY_MODEL_MAP,\n MODEL_METADATA,\n NEONDB_CHAT_MESSAGES,\n ProjectMetadataSchema,\n ProjectNamingSchema,\n TemplateAnalysisSchema,\n buildLogger,\n buildWebSocketServer,\n db,\n getDb,\n getModelLabel,\n initializeDatabase,\n isRunnerCommand,\n isRunnerEvent,\n normalizeModelId,\n parseModelId,\n resetDatabase,\n resolveAgentStrategy,\n runMigrations,\n setTemplatesPath\n};\n//# sourceMappingURL=index.js.map","/**\n * Native Claude Agent SDK Integration\n * \n * This is the default SDK integration for AI-powered builds.\n * For multi-provider support, set USE_OPENCODE_SDK=1 to use opencode-sdk.ts instead.\n *\n * This module provides direct integration with the official @anthropic-ai/claude-agent-sdk\n * without going through the AI SDK or community provider layers.\n *\n * Benefits:\n * - Native message format (no transformation needed)\n * - Full access to SDK features (hooks, sessions, subagents)\n * - Simpler architecture with fewer dependencies\n * - Direct streaming without adaptation layer\n */\n\nimport { query, type SDKMessage, type Options } from '@anthropic-ai/claude-agent-sdk';\nimport * as Sentry from '@sentry/node';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { createProjectScopedPermissionHandler } from './permissions/project-scoped-handler.js';\nimport { ensureProjectSkills } from './skills.js';\nimport {\n CLAUDE_SYSTEM_PROMPT,\n type ClaudeModelId,\n DEFAULT_CLAUDE_MODEL_ID,\n} from '@openbuilder/agent-core';\n\n// Debug logging helper - suppressed in TUI mode (SILENT_MODE=1)\nconst debugLog = (message: string) => {\n if (process.env.SILENT_MODE !== '1' && process.env.DEBUG_BUILD === '1') {\n debugLog(message);\n }\n};\n\n// Message part types for multi-modal support\ninterface MessagePart {\n type: string;\n text?: string;\n image?: string;\n mimeType?: string;\n fileName?: string;\n}\n\n// Internal message format that matches our transformer expectations\ninterface TransformedMessage {\n type: 'assistant' | 'user' | 'result' | 'system';\n message?: {\n id: string;\n content: Array<{\n type: string;\n text?: string;\n id?: string;\n name?: string;\n input?: unknown;\n tool_use_id?: string;\n content?: string;\n is_error?: boolean;\n }>;\n };\n result?: string;\n usage?: unknown;\n subtype?: string;\n session_id?: string;\n}\n\n/**\n * Transform SDK messages to our internal format\n *\n * The SDK outputs messages in a format very similar to what our message transformer expects,\n * but we need to ensure consistent structure for downstream processing.\n */\nfunction transformSDKMessage(sdkMessage: SDKMessage): TransformedMessage | null {\n switch (sdkMessage.type) {\n case 'assistant': {\n // Assistant messages contain the Claude response with text and tool use blocks\n return {\n type: 'assistant',\n message: {\n id: sdkMessage.uuid || `msg-${Date.now()}`,\n content: sdkMessage.message.content.map((block) => {\n if (block.type === 'text') {\n return { type: 'text', text: block.text };\n } else if (block.type === 'tool_use') {\n return {\n type: 'tool_use',\n id: block.id,\n name: block.name,\n input: block.input,\n };\n } else if (block.type === 'thinking') {\n // Extended thinking blocks - pass through\n return { type: 'thinking', text: (block as { thinking?: string }).thinking };\n }\n return block as { type: string };\n }),\n },\n };\n }\n\n case 'user': {\n // User messages contain tool results\n const content = sdkMessage.message.content;\n const transformedContent = Array.isArray(content)\n ? content.map((block) => {\n if (typeof block === 'object' && block !== null) {\n const typedBlock = block as { type: string; tool_use_id?: string; content?: unknown; is_error?: boolean };\n if (typedBlock.type === 'tool_result') {\n return {\n type: 'tool_result',\n tool_use_id: typedBlock.tool_use_id,\n content: typeof typedBlock.content === 'string'\n ? typedBlock.content\n : JSON.stringify(typedBlock.content),\n is_error: typedBlock.is_error,\n };\n }\n }\n return block as { type: string };\n })\n : [{ type: 'text', text: String(content) }];\n\n return {\n type: 'user',\n message: {\n id: sdkMessage.uuid || `user-${Date.now()}`,\n content: transformedContent,\n },\n };\n }\n\n case 'result': {\n // Final result message with usage stats\n return {\n type: 'result',\n result: sdkMessage.subtype === 'success' ? sdkMessage.result : undefined,\n usage: sdkMessage.usage,\n subtype: sdkMessage.subtype,\n session_id: sdkMessage.session_id,\n };\n }\n\n case 'system': {\n // System messages (init, status, etc.)\n if (sdkMessage.subtype === 'init') {\n // Could emit session info if needed\n return null; // Skip for now - we don't need init messages in output\n }\n return null;\n }\n\n case 'stream_event': {\n // Partial streaming events - skip unless includePartialMessages is true\n // These are handled separately if needed\n return null;\n }\n\n default:\n return null;\n }\n}\n\n/**\n * Build prompt with image support for multi-modal messages\n */\nfunction buildPromptWithImages(prompt: string, messageParts?: MessagePart[]): string {\n // For now, we pass images via the message format rather than prompt string\n // The SDK handles multi-modal via the prompt parameter accepting different formats\n // TODO: Investigate SDK support for image content in prompts\n return prompt;\n}\n\n/**\n * Create a native Claude query function using the official SDK directly\n *\n * This replaces the previous approach of:\n * claudeCode() provider -> AI SDK streamText() -> transformAISDKStream()\n *\n * With:\n * query() SDK function -> minimal transformation -> output\n * \n * Sentry Integration:\n * - The query() function is auto-instrumented by Sentry's claudeCodeAgentSdkIntegration\n * - Instrumentation hooks into @anthropic-ai/claude-agent-sdk via OpenTelemetry\n * - IMPORTANT: Sentry must be initialized BEFORE claude-agent-sdk is imported\n */\nexport function createNativeClaudeQuery(\n modelId: ClaudeModelId = DEFAULT_CLAUDE_MODEL_ID,\n abortController?: AbortController\n) {\n return async function* nativeClaudeQuery(\n prompt: string,\n workingDirectory: string,\n systemPrompt: string,\n _agent?: string,\n _codexThreadId?: string,\n messageParts?: MessagePart[]\n ): AsyncGenerator<TransformedMessage, void, unknown> {\n debugLog('[runner] [native-sdk] 🎯 Starting native SDK query\\n');\n debugLog(`[runner] [native-sdk] Model: ${modelId}\\n`);\n debugLog(`[runner] [native-sdk] Working dir: ${workingDirectory}\\n`);\n debugLog(`[runner] [native-sdk] Prompt length: ${prompt.length}\\n`);\n\n // Build combined system prompt\n const systemPromptSegments: string[] = [CLAUDE_SYSTEM_PROMPT.trim()];\n if (systemPrompt && systemPrompt.trim().length > 0) {\n systemPromptSegments.push(systemPrompt.trim());\n }\n const appendedSystemPrompt = systemPromptSegments.join('\\n\\n');\n\n // Ensure working directory exists\n if (!existsSync(workingDirectory)) {\n console.log(`[native-sdk] Creating working directory: ${workingDirectory}`);\n mkdirSync(workingDirectory, { recursive: true });\n }\n \n // Ensure project has skills copied from bundled skills\n ensureProjectSkills(workingDirectory);\n\n // Check for multi-modal content\n const hasImages = messageParts?.some(p => p.type === 'image');\n if (hasImages) {\n const imageCount = messageParts?.filter(p => p.type === 'image').length || 0;\n debugLog(`[runner] [native-sdk] 🖼️ Multi-modal message with ${imageCount} image(s)\\n`);\n }\n\n // Build the final prompt\n const finalPrompt = buildPromptWithImages(prompt, messageParts);\n\n // Configure SDK options\n const options: Options = {\n model: modelId,\n systemPrompt: {\n type: 'preset',\n preset: 'claude_code',\n append: appendedSystemPrompt,\n },\n cwd: workingDirectory,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true, // Required for bypassPermissions\n maxTurns: 100,\n additionalDirectories: [workingDirectory],\n canUseTool: createProjectScopedPermissionHandler(workingDirectory),\n includePartialMessages: false, // We don't need streaming deltas\n settingSources: ['user', 'project'],\n env: {\n ...process.env,\n CLAUDE_CODE_MAX_OUTPUT_TOKENS: process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS ?? '64000',\n },\n // Use preset tools from Claude Code\n tools: { type: 'preset', preset: 'claude_code' },\n // Pass abort controller for cancellation support\n // NOTE: There is a known bug in the Claude Agent SDK where AbortController\n // signals are not fully respected. When abort() is called, the SDK may\n // continue processing for several more turns before stopping.\n // See: https://github.com/anthropics/claude-code/issues/2970\n // See: https://github.com/anthropics/claude-agent-sdk-typescript/issues/46\n abortController,\n };\n\n debugLog('[runner] [native-sdk] 🚀 Starting SDK query stream\\n');\n\n let messageCount = 0;\n let toolCallCount = 0;\n let textBlockCount = 0;\n\n try {\n // Stream messages directly from the SDK\n // NOTE: query() is auto-instrumented by Sentry's claudeCodeAgentSdkIntegration\n for await (const sdkMessage of query({ prompt: finalPrompt, options })) {\n messageCount++;\n\n // Transform SDK message to our internal format\n const transformed = transformSDKMessage(sdkMessage);\n\n if (transformed) {\n // Track stats for logging\n if (transformed.type === 'assistant' && transformed.message?.content) {\n for (const block of transformed.message.content) {\n if (block.type === 'tool_use') {\n toolCallCount++;\n debugLog(`[runner] [native-sdk] 🔧 Tool call: ${block.name}\\n`);\n } else if (block.type === 'text') {\n textBlockCount++;\n }\n }\n }\n\n yield transformed;\n }\n\n // Log result messages\n if (sdkMessage.type === 'result') {\n if (sdkMessage.subtype === 'success') {\n debugLog(`[runner] [native-sdk] ✅ Query complete - ${sdkMessage.num_turns} turns, $${sdkMessage.total_cost_usd?.toFixed(4)} USD\\n`);\n } else {\n debugLog(`[runner] [native-sdk] ⚠️ Query ended with: ${sdkMessage.subtype}\\n`);\n }\n }\n }\n\n debugLog(`[runner] [native-sdk] 📊 Stream complete - ${messageCount} messages, ${toolCallCount} tool calls, ${textBlockCount} text blocks\\n`);\n } catch (error) {\n debugLog(`[runner] [native-sdk] ❌ Error: ${error instanceof Error ? error.message : String(error)}\\n`);\n Sentry.captureException(error);\n throw error;\n }\n };\n}\n\n/**\n * Feature flag to control which implementation to use\n * \n * Default: Native SDK is enabled (true)\n * Set USE_LEGACY_AI_SDK=1 to use the old AI SDK + community provider path\n */\nexport const USE_NATIVE_SDK = process.env.USE_LEGACY_AI_SDK !== '1';\n\nexport type { TransformedMessage, MessagePart };\n","/**\n * OpenCode SDK Integration\n * \n * This module provides integration with the OpenCode service for AI-powered builds.\n * It replaces the direct Claude Agent SDK integration with a client-server model\n * that supports multiple AI providers.\n * \n * Architecture:\n * - Runner connects to OpenCode Service via HTTP/SSE\n * - OpenCode Service handles AI provider calls and tool execution\n * - Runner receives events and transforms them to SSE format for the frontend\n */\n\nimport * as Sentry from '@sentry/node';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport {\n CLAUDE_SYSTEM_PROMPT,\n type OpenCodeModelId,\n DEFAULT_OPENCODE_MODEL_ID,\n normalizeModelId,\n parseModelId,\n} from '@openbuilder/agent-core';\nimport { ensureProjectSkills } from './skills.js';\n\n// Debug logging helper\nconst debugLog = (message: string) => {\n if (process.env.SILENT_MODE !== '1' && process.env.DEBUG_BUILD === '1') {\n console.error(message);\n }\n};\n\n// Message part types for multi-modal support\ninterface MessagePart {\n type: string;\n text?: string;\n image?: string;\n mimeType?: string;\n fileName?: string;\n}\n\n// Internal message format that matches our transformer expectations\ninterface TransformedMessage {\n type: 'assistant' | 'user' | 'result' | 'system';\n message?: {\n id: string;\n content: Array<{\n type: string;\n text?: string;\n id?: string;\n name?: string;\n input?: unknown;\n tool_use_id?: string;\n content?: string;\n is_error?: boolean;\n }>;\n };\n result?: string;\n usage?: unknown;\n subtype?: string;\n session_id?: string;\n}\n\n/**\n * Get OpenCode service URL\n */\nfunction getOpenCodeUrl(): string {\n const url = process.env.OPENCODE_URL;\n if (url) return url;\n \n // Default to localhost in development/local mode\n if (process.env.OPENBUILDER_LOCAL_MODE === 'true' || process.env.NODE_ENV === 'development') {\n return 'http://localhost:4096';\n }\n \n throw new Error('OPENCODE_URL environment variable is required');\n}\n\n/**\n * Get authentication token for OpenCode service\n */\nfunction getAuthToken(): string | null {\n // Try runner key first\n const runnerKey = process.env.OPENBUILDER_RUNNER_KEY;\n if (runnerKey) return runnerKey;\n \n // Fall back to shared secret\n const sharedSecret = process.env.RUNNER_SHARED_SECRET;\n if (sharedSecret) return sharedSecret;\n \n // Local mode doesn't require auth\n if (process.env.OPENBUILDER_LOCAL_MODE === 'true') {\n return null;\n }\n \n return null;\n}\n\n/**\n * Transform OpenCode SSE event to our internal message format\n */\nfunction transformOpenCodeEvent(event: any, sessionId: string): TransformedMessage | null {\n switch (event.type) {\n case 'message.created':\n case 'message.updated': {\n const message = event.properties?.message;\n if (!message) return null;\n \n if (message.role === 'assistant') {\n const parts = event.properties.parts || [];\n return {\n type: 'assistant',\n message: {\n id: message.id || `msg-${Date.now()}`,\n content: parts.map((part: any) => {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n } else if (part.type === 'tool-invocation') {\n return {\n type: 'tool_use',\n id: part.toolInvocationId,\n name: part.toolName,\n input: part.input,\n };\n }\n return part;\n }),\n },\n };\n }\n return null;\n }\n \n case 'part.created':\n case 'part.updated': {\n const part = event.properties;\n if (!part) return null;\n \n // Text parts\n if (part.type === 'text' && part.text) {\n return {\n type: 'assistant',\n message: {\n id: `part-${Date.now()}`,\n content: [{ type: 'text', text: part.text }],\n },\n };\n }\n \n // Tool invocation start\n if (part.type === 'tool-invocation' && part.state === 'pending') {\n return {\n type: 'assistant',\n message: {\n id: `tool-${part.toolInvocationId}`,\n content: [{\n type: 'tool_use',\n id: part.toolInvocationId,\n name: part.toolName,\n input: part.input,\n }],\n },\n };\n }\n \n // Tool result\n if (part.type === 'tool-invocation' && part.state === 'result') {\n return {\n type: 'user',\n message: {\n id: `result-${part.toolInvocationId}`,\n content: [{\n type: 'tool_result',\n tool_use_id: part.toolInvocationId,\n content: typeof part.result === 'string' ? part.result : JSON.stringify(part.result),\n is_error: part.isError || false,\n }],\n },\n };\n }\n \n return null;\n }\n \n case 'session.completed': {\n return {\n type: 'result',\n result: 'completed',\n session_id: sessionId,\n subtype: 'success',\n };\n }\n \n case 'session.error': {\n return {\n type: 'result',\n result: event.properties?.error || 'Unknown error',\n session_id: sessionId,\n subtype: 'error',\n };\n }\n \n case 'session.aborted': {\n return {\n type: 'result',\n result: 'aborted',\n session_id: sessionId,\n subtype: 'aborted',\n };\n }\n \n default:\n return null;\n }\n}\n\n/**\n * Parse SSE data from event stream\n */\nfunction parseSSEEvent(data: string): any | null {\n try {\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\n\n/**\n * Create OpenCode query function\n * \n * This function connects to the OpenCode service, creates a session,\n * sends the prompt, and streams the response events.\n */\nexport function createOpenCodeQuery(\n modelId: OpenCodeModelId = DEFAULT_OPENCODE_MODEL_ID\n) {\n return async function* openCodeQuery(\n prompt: string,\n workingDirectory: string,\n systemPrompt: string,\n _agent?: string,\n _codexThreadId?: string,\n messageParts?: MessagePart[]\n ): AsyncGenerator<TransformedMessage, void, unknown> {\n debugLog('[runner] [opencode-sdk] Starting OpenCode query');\n debugLog(`[runner] [opencode-sdk] Model: ${modelId}`);\n debugLog(`[runner] [opencode-sdk] Working dir: ${workingDirectory}`);\n debugLog(`[runner] [opencode-sdk] Prompt length: ${prompt.length}`);\n\n // Ensure working directory exists\n if (!existsSync(workingDirectory)) {\n console.log(`[opencode-sdk] Creating working directory: ${workingDirectory}`);\n mkdirSync(workingDirectory, { recursive: true });\n }\n \n // Ensure project has skills\n ensureProjectSkills(workingDirectory);\n\n const baseUrl = getOpenCodeUrl();\n const authToken = getAuthToken();\n \n // Build headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n\n // Build combined system prompt\n const systemPromptSegments: string[] = [CLAUDE_SYSTEM_PROMPT.trim()];\n if (systemPrompt && systemPrompt.trim().length > 0) {\n systemPromptSegments.push(systemPrompt.trim());\n }\n const combinedSystemPrompt = systemPromptSegments.join('\\n\\n');\n\n // Parse model ID\n const { provider: providerID, model: modelID } = parseModelId(normalizeModelId(modelId));\n \n let sessionId: string | null = null;\n \n // Start Sentry AI agent span for the entire OpenCode query\n // This provides visibility into AI operations in Sentry's trace view\n const aiSpan = Sentry.startInactiveSpan({\n name: 'opencode.query',\n op: 'ai.pipeline',\n attributes: {\n 'ai.pipeline.name': 'opencode',\n 'ai.model_id': `${providerID}/${modelID}`,\n 'ai.provider': providerID,\n 'ai.streaming': true,\n 'gen_ai.system': 'opencode',\n 'gen_ai.request.model': modelID,\n },\n });\n\n try {\n // Step 1: Create a session\n debugLog('[runner] [opencode-sdk] Creating session...');\n const sessionResponse = await fetch(`${baseUrl}/session`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n title: `Build ${Date.now()}`,\n }),\n });\n\n if (!sessionResponse.ok) {\n const error = await sessionResponse.text();\n throw new Error(`Failed to create session: ${sessionResponse.status} ${error}`);\n }\n\n const session = await sessionResponse.json();\n sessionId = session.id;\n debugLog(`[runner] [opencode-sdk] Session created: ${sessionId}`);\n \n // Update span with session info\n if (sessionId) {\n aiSpan?.setAttribute('opencode.session_id', sessionId);\n }\n\n // Step 2: Subscribe to events\n debugLog('[runner] [opencode-sdk] Subscribing to events...');\n const eventResponse = await fetch(`${baseUrl}/event`, {\n headers: {\n ...headers,\n 'Accept': 'text/event-stream',\n },\n });\n\n if (!eventResponse.ok) {\n throw new Error(`Failed to subscribe to events: ${eventResponse.status}`);\n }\n\n // Step 3: Build message parts\n const parts: Array<{ type: string; text?: string; image?: string; mimeType?: string }> = [];\n \n // Add images first if present\n if (messageParts) {\n for (const part of messageParts) {\n if (part.type === 'image' && part.image) {\n parts.push({\n type: 'image',\n image: part.image,\n mimeType: part.mimeType || 'image/png',\n });\n debugLog('[runner] [opencode-sdk] Added image part');\n }\n }\n }\n \n // Add text prompt\n parts.push({\n type: 'text',\n text: prompt,\n });\n\n // Step 4: Send the prompt (don't await - we'll stream the response)\n debugLog('[runner] [opencode-sdk] Sending prompt...');\n const promptPromise = fetch(`${baseUrl}/session/${sessionId}/message`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n model: { providerID, modelID },\n system: combinedSystemPrompt,\n parts,\n }),\n });\n\n // Step 5: Process event stream\n const reader = eventResponse.body?.getReader();\n if (!reader) {\n throw new Error('No response body reader');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let completed = false;\n let toolCallCount = 0;\n let messageCount = 0;\n\n try {\n while (!completed) {\n const { done, value } = await reader.read();\n \n if (done) {\n debugLog('[runner] [opencode-sdk] Event stream ended');\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n \n // Process complete SSE events\n const lines = buffer.split('\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n const event = parseSSEEvent(data);\n \n if (!event) continue;\n \n // Only process events for our session\n // Skip events that have a sessionId that doesn't match ours\n // Also skip events with no sessionId unless they reference our session in properties\n const eventSessionId = event.properties?.sessionId || event.properties?.session?.id;\n if (eventSessionId && eventSessionId !== sessionId) {\n continue; // Event belongs to a different session\n }\n if (!eventSessionId && sessionId) {\n // Event has no session identifier - skip it to avoid cross-session contamination\n // unless it's a global event type we explicitly want to handle\n const globalEventTypes = ['ping', 'connected', 'error'];\n if (!globalEventTypes.includes(event.type)) {\n continue;\n }\n }\n\n const transformed = transformOpenCodeEvent(event, sessionId!);\n if (transformed) {\n // Track tool calls and messages for span metrics\n if (transformed.type === 'assistant' && transformed.message?.content) {\n messageCount++;\n for (const content of transformed.message.content) {\n if (content.type === 'tool_use') {\n toolCallCount++;\n }\n }\n }\n \n yield transformed;\n \n // Check for completion\n if (transformed.type === 'result') {\n completed = true;\n break;\n }\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n\n // Ensure prompt request completed\n const promptResponse = await promptPromise;\n if (!promptResponse.ok) {\n const error = await promptResponse.text();\n console.error(`[opencode-sdk] Prompt request failed: ${error}`);\n }\n\n // Yield final result if not already done\n if (!completed) {\n yield {\n type: 'result',\n result: 'completed',\n session_id: sessionId ?? undefined,\n subtype: 'success',\n };\n }\n\n debugLog('[runner] [opencode-sdk] Query complete');\n \n // Update span with final metrics\n aiSpan?.setAttribute('opencode.tool_calls', toolCallCount);\n aiSpan?.setAttribute('opencode.messages', messageCount);\n aiSpan?.setStatus({ code: 1 }); // OK status\n\n } catch (error) {\n debugLog(`[runner] [opencode-sdk] Error: ${error instanceof Error ? error.message : String(error)}`);\n Sentry.captureException(error);\n \n // Mark span as errored\n aiSpan?.setStatus({ code: 2, message: error instanceof Error ? error.message : String(error) });\n \n // Yield error result\n yield {\n type: 'result',\n result: error instanceof Error ? error.message : String(error),\n session_id: sessionId || undefined,\n subtype: 'error',\n };\n \n throw error;\n } finally {\n // End the AI span\n aiSpan?.end();\n }\n };\n}\n\n/**\n * Feature flag to control which implementation to use\n * \n * Default: Claude Agent SDK (native)\n * Set USE_OPENCODE_SDK=1 to enable OpenCode multi-provider support\n * Note: OPENCODE_URL must also be set to the OpenCode service URL\n */\nexport const USE_OPENCODE_SDK = process.env.USE_OPENCODE_SDK === '1' && !!process.env.OPENCODE_URL;\n\nexport type { TransformedMessage, MessagePart };\n","// src/lib/claude/tools.ts\nimport { z } from \"zod\";\nvar genericInput = z.any();\nvar genericObject = z.record(z.string(), z.any());\nvar dynamicMcpTool = {\n description: \"Generic MCP tool passthrough\",\n type: \"dynamic\",\n inputSchema: genericObject\n};\nvar fallbackTool = {\n description: \"Fallback Claude CLI tool\",\n inputSchema: genericInput\n};\nvar builtinTools = {\n Agent: {\n description: \"Launches a nested Claude agent\",\n inputSchema: genericObject\n },\n Bash: {\n description: \"Execute shell commands via Claude CLI\",\n inputSchema: genericObject\n },\n BashOutput: {\n description: \"Fetch output from a background bash process\",\n inputSchema: genericObject\n },\n ExitPlanMode: {\n description: \"Exit plan/approval mode with a summary\",\n inputSchema: genericObject\n },\n Read: {\n description: \"Read file contents\",\n inputSchema: genericObject\n },\n Write: {\n description: \"Write entire file contents\",\n inputSchema: genericObject\n },\n Edit: {\n description: \"Edit part of a file by replacing text\",\n inputSchema: genericObject\n },\n Glob: {\n description: \"Match files using glob patterns\",\n inputSchema: genericObject\n },\n Grep: {\n description: \"Search files for a regex pattern\",\n inputSchema: genericObject\n },\n KillShell: {\n description: \"Stop a running bash session\",\n inputSchema: genericObject\n },\n ListMcpResources: {\n description: \"Enumerate MCP resources\",\n inputSchema: genericObject\n },\n Mcp: {\n description: \"Invoke an MCP tool\",\n inputSchema: genericObject\n },\n NotebookEdit: {\n description: \"Edit Jupyter notebooks\",\n inputSchema: genericObject\n },\n ReadMcpResource: {\n description: \"Read a particular MCP resource\",\n inputSchema: genericObject\n },\n TimeMachine: {\n description: \"Rewind conversation with a course correction\",\n inputSchema: genericObject\n },\n TodoWrite: {\n description: \"Emit TODO status updates\",\n inputSchema: genericObject\n },\n WebFetch: {\n description: \"Fetch and summarize a URL\",\n inputSchema: genericObject\n },\n WebSearch: {\n description: \"Search the web with constraints\",\n inputSchema: genericObject\n },\n MultipleChoiceQuestion: {\n description: \"Ask the user a multiple choice question\",\n inputSchema: genericObject\n },\n // Common aliases seen in telemetry/logs\n LS: {\n description: \"List files in the working directory\",\n inputSchema: genericObject\n },\n TodoRead: {\n description: \"Read TODO state emitted from runner\",\n inputSchema: genericObject\n }\n};\nvar proxyHandler = {\n get(target, prop) {\n if (typeof prop !== \"string\") {\n return Reflect.get(target, prop);\n }\n if (Reflect.has(target, prop)) {\n return Reflect.get(target, prop);\n }\n if (prop.startsWith(\"mcp__\")) {\n return dynamicMcpTool;\n }\n return fallbackTool;\n },\n has(target, prop) {\n if (typeof prop === \"string\") {\n if (Reflect.has(target, prop) || prop.startsWith(\"mcp__\")) {\n return true;\n }\n }\n return Reflect.has(target, prop);\n },\n ownKeys(target) {\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(target, prop) {\n if (Reflect.has(target, prop)) {\n return Object.getOwnPropertyDescriptor(target, prop);\n }\n return void 0;\n }\n};\nfunction createClaudeToolRegistry() {\n return new Proxy(builtinTools, proxyHandler);\n}\nvar CLAUDE_CLI_TOOL_REGISTRY = createClaudeToolRegistry();\nexport {\n CLAUDE_CLI_TOOL_REGISTRY,\n createClaudeToolRegistry\n};\n//# sourceMappingURL=tools.js.map","// src/lib/logging/build-logger.ts\nimport * as Sentry from \"@sentry/node\";\nvar BuildLogger = class {\n buildId = null;\n projectId = null;\n /**\n * Set correlation IDs for the current build\n * Call this at the start of each build to enable correlation tracking\n */\n setBuildContext(buildId, projectId) {\n this.buildId = buildId;\n this.projectId = projectId;\n this.log(\"debug\", \"runner\", `Build context set: ${buildId} / ${projectId}`);\n }\n /**\n * Clear correlation IDs after build completes\n */\n clearBuildContext() {\n this.log(\"debug\", \"runner\", \"Build context cleared\");\n this.buildId = null;\n this.projectId = null;\n }\n /**\n * Core logging method - creates structured log entries\n * Public for custom logging needs\n */\n log(level, context, message, data) {\n if (process.env.SILENT_MODE === \"1\") {\n return;\n }\n if (level === \"info\" || level === \"debug\") {\n if (process.env.DEBUG_BUILD === \"0\") {\n return;\n }\n }\n const entry = {\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n level,\n context,\n buildId: this.buildId ?? void 0,\n projectId: this.projectId ?? void 0,\n message,\n data\n };\n const prefix = `[${context}]`;\n const icon = {\n debug: \"\\u{1F50D}\",\n info: \"\\u{1F4CB}\",\n warn: \"\\u26A0\\uFE0F \",\n error: \"\\u274C\"\n }[level];\n const logFn = level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log;\n if (data && Object.keys(data).length > 0) {\n logFn(`${icon} ${prefix} ${message}`, data);\n } else {\n logFn(`${icon} ${prefix} ${message}`);\n }\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"test\") {\n try {\n if (level === \"warn\" || level === \"error\") {\n Sentry.addBreadcrumb({\n category: `build-logger.${context}`,\n message,\n level: level === \"error\" ? \"error\" : \"warning\",\n data: {\n ...data,\n buildId: this.buildId,\n projectId: this.projectId\n }\n });\n }\n } catch {\n }\n }\n }\n /**\n * Orchestrator-specific logging methods\n */\n orchestrator = {\n newProject: (operationType) => this.log(\"info\", \"orchestrator\", `NEW PROJECT (operationType: ${operationType})`),\n existingProject: (operationType) => this.log(\"info\", \"orchestrator\", `EXISTING PROJECT (operationType: ${operationType})`),\n templateProvided: (templateName, templateId, framework) => this.log(\"info\", \"orchestrator\", `Frontend provided template: ${templateName}`, {\n templateId,\n framework\n }),\n templateSelecting: (method) => this.log(\"info\", \"orchestrator\", `Template selection: ${method}`),\n templateSelected: (templateName, templateId) => this.log(\"info\", \"orchestrator\", `Selected template: ${templateName}`, { templateId }),\n templateDownloading: (templateName, repository, target) => this.log(\"info\", \"orchestrator\", `Downloading template: ${templateName}`, {\n repository,\n target\n }),\n templateDownloaded: (templateName, path, fileTreeSize) => this.log(\"info\", \"orchestrator\", `Template downloaded: ${templateName}`, {\n path,\n fileTreeSize\n }),\n catalogPrepared: (catalogSize) => this.log(\"info\", \"orchestrator\", `Template catalog prepared (${catalogSize} chars)`, {\n catalogSize\n }),\n systemPromptGenerated: (size) => this.log(\"info\", \"orchestrator\", `System prompt generated (${size} chars)`, { size }),\n orchestrationComplete: (data) => this.log(\"info\", \"orchestrator\", \"Orchestration complete\", data),\n error: (message, error) => this.log(\"error\", \"orchestrator\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Message transformer-specific logging methods\n */\n transformer = {\n todoListFound: () => this.log(\"debug\", \"transformer\", \"Found Codex task list, parsing...\"),\n todoListParsed: (todoCount, completed, inProgress, pending) => this.log(\"info\", \"transformer\", `Parsed ${todoCount} todos`, {\n completed,\n inProgress,\n pending\n }),\n todoListInvalidFormat: (expected, got) => this.log(\"error\", \"transformer\", \"Invalid todo format from Codex\", {\n expected,\n got: JSON.stringify(got).substring(0, 200)\n }),\n todoListParseError: (error, rawJson) => this.log(\"error\", \"transformer\", \"Failed to parse Codex todolist\", {\n error: String(error),\n rawJson: rawJson.substring(0, 300)\n }),\n todoListRemoved: () => this.log(\"debug\", \"transformer\", \"Removed task list from chat text\"),\n toolStarted: (toolName, toolId) => this.log(\"debug\", \"transformer\", `Tool started: ${toolName}`, { toolName, toolId }),\n toolCompleted: (toolName, toolId) => this.log(\"debug\", \"transformer\", `Tool completed: ${toolName}`, { toolName, toolId }),\n pathViolationWarning: (toolName, path, workspace) => this.log(\"warn\", \"transformer\", `Path outside workspace: ${path}`, {\n toolName,\n path,\n workspace\n }),\n desktopPathDetected: (path) => this.log(\"error\", \"transformer\", `DESKTOP PATH DETECTED - Likely hallucinated: ${path}`, { path })\n };\n /**\n * Codex query-specific logging methods\n */\n codexQuery = {\n promptBuilding: (workingDirectory, systemPromptSize, userPromptSize) => this.log(\"info\", \"codex-query\", \"Building Codex prompt\", {\n workingDirectory,\n systemPromptSize,\n userPromptSize\n }),\n threadStarting: () => this.log(\"info\", \"codex-query\", \"Starting Codex thread (multi-turn)\"),\n turnStarted: (turnNumber, maxTurns, promptSize) => this.log(\"info\", \"codex-query\", `\\u2550\\u2550\\u2550 Turn ${turnNumber}/${maxTurns} \\u2550\\u2550\\u2550`, {\n turnNumber,\n maxTurns,\n promptSize\n }),\n taskListExtracted: () => this.log(\"info\", \"codex-query\", \"Task list extracted and updated\"),\n taskListStatus: (completed, inProgress, pending, total) => this.log(\"info\", \"codex-query\", `Tasks: ${completed} completed | ${inProgress} in_progress | ${pending} pending (total: ${total})`, {\n completed,\n inProgress,\n pending,\n total\n }),\n taskListTask: (index, content, status, icon) => this.log(\"debug\", \"codex-query\", ` ${icon} ${index + 1}. ${content}`, { status }),\n taskListParseError: (error, rawContent) => this.log(\"error\", \"codex-query\", \"PARSE ERROR: Could not parse task list JSON\", {\n error: String(error),\n rawContent: rawContent.substring(0, 200)\n }),\n taskListMissing: (turnNumber) => this.log(\"warn\", \"codex-query\", `WARNING: No <start-todolist> tags found in Turn ${turnNumber}`, {\n turnNumber\n }),\n turnComplete: (turnNumber, hadToolCalls, messageLength) => this.log(\"info\", \"codex-query\", `Turn ${turnNumber} complete`, {\n hadToolCalls,\n messageLength\n }),\n tasksComplete: (completed, total) => this.log(\"info\", \"codex-query\", `Task status: ${completed}/${total} completed`, {\n completed,\n total\n }),\n allComplete: () => this.log(\"info\", \"codex-query\", \"\\u2705 All MVP tasks complete!\"),\n allTasksComplete: () => this.log(\"info\", \"codex-query\", \"\\u2705 All MVP tasks complete!\"),\n taskCompleteDetected: () => this.log(\"info\", \"codex-query\", \"\\u2705 Task complete (detected completion signal)\"),\n continuePrompting: (reason) => this.log(\"warn\", \"codex-query\", `No tools used but not done - ${reason}`),\n continuing: () => this.log(\"info\", \"codex-query\", \"\\u23ED\\uFE0F Continuing to next turn (had tool calls)\"),\n loopExited: (turnCount, maxTurns) => this.log(\"info\", \"codex-query\", `EXITED WHILE LOOP after ${turnCount} turns`, {\n turnCount,\n maxTurns\n }),\n sessionComplete: (turnCount) => this.log(\"info\", \"codex-query\", `Session complete after ${turnCount} turns`, { turnCount }),\n error: (message, error) => this.log(\"error\", \"codex-query\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Claude query-specific logging methods\n */\n claudeQuery = {\n queryStarted: (model, cwd, maxTurns) => this.log(\"info\", \"claude-query\", `Starting Claude query (${model})`, {\n cwd,\n maxTurns\n }),\n error: (message, error) => this.log(\"error\", \"claude-query\", message, {\n error: error instanceof Error ? error.message : String(error)\n })\n };\n /**\n * Runner-specific logging methods\n */\n runner = {\n workspaceRoot: (path) => this.log(\"info\", \"runner\", `Workspace root: ${path}`, { path }),\n commandReceived: (commandType, projectId) => this.log(\"info\", \"runner\", `Received command: ${commandType}`, { commandType, projectId }),\n buildOperation: (operationType, projectSlug, agentId) => this.log(\"info\", \"runner\", `Build operation: ${operationType}`, {\n operationType,\n projectSlug,\n agentId\n }),\n templateProvided: (templateId) => this.log(\"info\", \"runner\", `Template provided by frontend: ${templateId}`, { templateId }),\n buildStreamCreated: () => this.log(\"info\", \"runner\", \"Build stream created, starting to process chunks...\"),\n firstChunkReceived: (agentLabel) => this.log(\"info\", \"runner\", `First chunk received from ${agentLabel}`, { agentLabel }),\n streamEnded: (chunkCount) => this.log(\"info\", \"runner\", `Stream ended after ${chunkCount} chunks`, { chunkCount }),\n buildCompleted: (projectId) => this.log(\"info\", \"runner\", `Build completed successfully`, { projectId }),\n buildFailed: (error) => this.log(\"error\", \"runner\", `Build failed: ${error}`, { error }),\n portDetected: (port) => this.log(\"info\", \"runner\", `Port detected: ${port}`, { port }),\n tunnelCreated: (port, tunnelUrl) => this.log(\"info\", \"runner\", `Tunnel created: ${tunnelUrl} \\u2192 localhost:${port}`, {\n port,\n tunnelUrl\n }),\n error: (message, error, context) => this.log(\"error\", \"runner\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Build stream-specific logging (tool calls, text, etc.)\n */\n build = {\n agentText: (agentLabel, text) => {\n const truncated = text.length > 200 ? text.slice(0, 200) + \"...\" : text;\n this.log(\"debug\", \"build\", `${agentLabel}: ${truncated}`, {\n agentLabel,\n textLength: text.length\n });\n },\n agentThinking: (thinking) => {\n const truncated = thinking.length > 300 ? thinking.slice(0, 300) + \"...\" : thinking;\n this.log(\"debug\", \"build\", `Thinking: ${truncated}`, {\n thinkingLength: thinking.length\n });\n },\n toolCalled: (toolName, toolId, inputSize) => this.log(\"info\", \"build\", `Tool called: ${toolName} (${toolId})`, {\n toolName,\n toolId,\n inputSize\n }),\n toolResult: (toolId, outputSize, isError) => this.log(isError ? \"error\" : \"info\", \"build\", `Tool result (${toolId})`, {\n toolId,\n outputSize,\n isError\n }),\n runCommandDetected: (runCommand) => this.log(\"info\", \"build\", `Detected runCommand: ${runCommand}`, { runCommand })\n };\n /**\n * WebSocket-specific logging methods\n */\n websocket = {\n serverCreated: (instanceId) => this.log(\"info\", \"websocket\", `WebSocket server instance created`, { instanceId }),\n serverInitialized: (path, runnerPath) => this.log(\"info\", \"websocket\", `Server initialized`, { path, runnerPath }),\n clientConnected: (clientId, projectId, sessionId) => this.log(\"info\", \"websocket\", `Client connected: ${clientId}`, { clientId, projectId, sessionId }),\n clientDisconnected: (clientId) => this.log(\"info\", \"websocket\", `Client disconnected: ${clientId}`, { clientId }),\n clientSubscribed: (clientId, projectId) => this.log(\"info\", \"websocket\", `Client subscribed to project: ${projectId}`, { clientId, projectId }),\n clientTimeout: (clientId) => this.log(\"warn\", \"websocket\", `Client timeout: ${clientId}`, { clientId }),\n runnerConnected: (runnerId) => this.log(\"info\", \"websocket\", `Runner connected: ${runnerId}`, { runnerId }),\n runnerDisconnected: (runnerId, code) => this.log(\"info\", \"websocket\", `Runner disconnected: ${runnerId}`, { runnerId, code }),\n runnerNotConnected: (runnerId, commandType) => this.log(\"warn\", \"websocket\", `Cannot send command to runner ${runnerId}: not connected`, {\n runnerId,\n commandType\n }),\n runnerAuthRejected: () => this.log(\"warn\", \"websocket\", `Runner connection rejected: invalid auth`),\n runnerAuthMissing: () => this.log(\"error\", \"websocket\", `RUNNER_SHARED_SECRET is not configured`),\n runnerStaleRemoved: (runnerId) => this.log(\"info\", \"websocket\", `Removing stale runner connection: ${runnerId}`, { runnerId }),\n commandSent: (runnerId, commandType, traceAttached) => this.log(\"debug\", \"websocket\", `Sent command to runner: ${commandType}`, {\n runnerId,\n commandType,\n traceAttached\n }),\n eventReceived: (runnerId, eventType) => this.log(\"debug\", \"websocket\", `Received event from runner: ${eventType}`, {\n runnerId,\n eventType\n }),\n broadcastToolCall: (toolName, toolState, subscriberCount) => this.log(\"info\", \"websocket\", `Broadcasting planning tool: ${toolName} (state=${toolState})`, {\n toolName,\n toolState,\n subscriberCount\n }),\n broadcastBuildComplete: (projectId, sessionId, subscriberCount) => this.log(\"info\", \"websocket\", `Broadcasting build-complete`, {\n projectId,\n sessionId,\n subscriberCount\n }),\n unknownUpgradePath: (pathname) => this.log(\"warn\", \"websocket\", `Unknown upgrade path: ${pathname}`, { pathname }),\n shutdown: () => this.log(\"info\", \"websocket\", `Shutting down server...`),\n shutdownComplete: () => this.log(\"info\", \"websocket\", `Server shut down`),\n error: (message, error, context) => this.log(\"error\", \"websocket\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Port allocator-specific logging methods\n */\n portAllocator = {\n portAllocated: (port, projectId) => this.log(\"info\", \"port-allocator\", `Port allocated: ${port}`, { port, projectId }),\n portReleased: (port, projectId) => this.log(\"info\", \"port-allocator\", `Port released: ${port}`, { port, projectId }),\n portInUse: (port) => this.log(\"warn\", \"port-allocator\", `Port ${port} is already in use`, { port }),\n portRangeExhausted: (minPort, maxPort) => this.log(\"error\", \"port-allocator\", `No available ports in range ${minPort}-${maxPort}`, {\n minPort,\n maxPort\n }),\n portConflict: (port, projectId, existingProjectId) => this.log(\"warn\", \"port-allocator\", `Port ${port} conflict detected`, {\n port,\n projectId,\n existingProjectId\n }),\n allocationsCleared: (count) => this.log(\"info\", \"port-allocator\", `Cleared ${count} port allocations`, { count }),\n error: (message, error, context) => this.log(\"error\", \"port-allocator\", message, {\n error: error instanceof Error ? error.message : String(error),\n ...context\n })\n };\n /**\n * Process manager-specific logging methods\n */\n processManager = {\n processStarting: (projectId, command, cwd) => this.log(\"info\", \"process-manager\", `Starting process: ${command}`, {\n projectId,\n command,\n cwd\n }),\n processStarted: (projectId, pid) => this.log(\"info\", \"process-manager\", `Process started`, { projectId, pid }),\n processOutput: (projectId, output) => this.log(\"debug\", \"process-manager\", `Process output: ${output.substring(0, 100)}`, {\n projectId,\n outputLength: output.length\n }),\n processError: (projectId, error) => this.log(\"error\", \"process-manager\", `Process error: ${error}`, { projectId, error }),\n processExited: (projectId, code, signal) => this.log(\"info\", \"process-manager\", `Process exited`, { projectId, code, signal }),\n processStopped: (projectId) => this.log(\"info\", \"process-manager\", `Process stopped`, { projectId }),\n processNotFound: (projectId) => this.log(\"warn\", \"process-manager\", `Process not found for project: ${projectId}`, { projectId }),\n processKilled: (projectId, signal) => this.log(\"info\", \"process-manager\", `Process killed with signal: ${signal}`, {\n projectId,\n signal\n }),\n processCleanup: (projectId) => this.log(\"info\", \"process-manager\", `Cleaning up process`, { projectId }),\n processListRetrieved: (count) => this.log(\"debug\", \"process-manager\", `Retrieved ${count} running processes`, { count }),\n error: (message, error, context) => this.log(\"error\", \"process-manager\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n /**\n * Build events-specific logging methods\n */\n buildEvents = {\n eventReceived: (eventType, projectId, sessionId) => this.log(\"info\", \"build-events\", `Received event: ${eventType}`, {\n eventType,\n projectId,\n sessionId\n }),\n eventProcessed: (eventType, projectId) => this.log(\"debug\", \"build-events\", `Processed event: ${eventType}`, { eventType, projectId }),\n buildStarted: (projectId, sessionId) => this.log(\"info\", \"build-events\", `Build started`, { projectId, sessionId }),\n buildCompleted: (projectId, sessionId, success) => this.log(\"info\", \"build-events\", `Build ${success ? \"completed\" : \"failed\"}`, {\n projectId,\n sessionId,\n success\n }),\n portDetected: (projectId, port) => this.log(\"info\", \"build-events\", `Port detected: ${port}`, { projectId, port }),\n devServerStarted: (projectId, port, url) => this.log(\"info\", \"build-events\", `Dev server started: ${url}`, { projectId, port, url }),\n devServerError: (projectId, error) => this.log(\"error\", \"build-events\", `Dev server error: ${error}`, { projectId, error }),\n toolCallReceived: (toolName, toolId) => this.log(\"debug\", \"build-events\", `Tool call: ${toolName}`, { toolName, toolId }),\n logChunkReceived: (projectId, chunkSize) => this.log(\"debug\", \"build-events\", `Log chunk received`, { projectId, chunkSize }),\n invalidEvent: (reason) => this.log(\"warn\", \"build-events\", `Invalid event: ${reason}`, { reason }),\n error: (message, error, context) => this.log(\"error\", \"build-events\", message, {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0,\n ...context\n })\n };\n};\nvar buildLogger = new BuildLogger();\nexport {\n buildLogger\n};\n//# sourceMappingURL=build-logger.js.map","var __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/types/design.ts\nvar MOOD_GUIDANCE;\nvar init_design = __esm({\n \"src/types/design.ts\"() {\n MOOD_GUIDANCE = {\n \"Modern\": \"Clean lines, ample white space, contemporary patterns\",\n \"Professional\": \"Polished, consistent, attention to detail\",\n \"Playful\": \"Rounded shapes, friendly interactions, lighthearted touches\",\n \"Minimal\": \"Essential elements only, generous spacing, restrained palette use\",\n \"Luxurious\": \"Premium feel, refined details, sophisticated presentation\",\n \"Trustworthy\": \"Clear hierarchy, readable typography, familiar patterns\",\n \"Friendly\": \"Approachable, warm colors, inviting interactions\",\n \"Bold\": \"Strong contrasts, large typography, confident visual statements\",\n \"Elegant\": \"Refined details, subtle transitions, sophisticated spacing\",\n \"Energetic\": \"Vibrant colors, dynamic layouts, active feeling\",\n \"Clean\": \"Uncluttered, focused, clear visual hierarchy\",\n \"Sophisticated\": \"Refined aesthetics, balanced composition, mature style\",\n \"Vibrant\": \"Rich colors, high energy, lively presence\",\n \"Warm\": \"Inviting colors, soft edges, approachable feel\",\n \"Tech-forward\": \"Sharp edges, monospace accents, futuristic elements\"\n };\n }\n});\n\n// src/config/tags.ts\nfunction findTagDefinition(key) {\n for (const def of TAG_DEFINITIONS) {\n if (def.key === key) return def;\n if (def.children) {\n const child = def.children.find((c) => c.key === key);\n if (child) return child;\n }\n }\n return void 0;\n}\nvar TAG_DEFINITIONS;\nvar init_tags = __esm({\n \"src/config/tags.ts\"() {\n TAG_DEFINITIONS = [\n // Model Selection (explicit provider + model mapping)\n {\n key: \"model\",\n label: \"Model\",\n description: \"AI agent and model to use for generation\",\n category: \"model\",\n inputType: \"select\",\n options: [\n {\n value: \"claude-sonnet-4-5\",\n label: \"Claude Sonnet 4.5\",\n description: \"Anthropic Claude - Balanced performance and speed\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-sonnet-4-5\"\n },\n {\n value: \"claude-opus-4-5\",\n label: \"Claude Opus 4.5\",\n description: \"Anthropic Claude - Most capable for complex tasks\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-opus-4-5\"\n },\n {\n value: \"claude-haiku-4-5\",\n label: \"Claude Haiku 4.5\",\n description: \"Anthropic Claude - Fastest, good for iterations\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-haiku-4-5\"\n },\n {\n value: \"gpt-5.2-codex\",\n label: \"GPT-5.2 Codex\",\n description: \"OpenAI Codex - Advanced code generation\",\n logo: \"/openai.png\",\n provider: \"openai-codex\",\n model: \"openai/gpt-5.2-codex\"\n }\n ]\n },\n // Framework Selection\n {\n key: \"framework\",\n label: \"Framework\",\n description: \"Frontend framework to use\",\n category: \"framework\",\n inputType: \"select\",\n options: [\n {\n value: \"next\",\n label: \"Next.js\",\n description: \"Full-stack React with SSR, App Router, and file-based routing\",\n logo: \"/logos/nextjs.svg\",\n repository: \"github:codyde/template-nextjs\",\n branch: \"main\"\n },\n {\n value: \"tanstack\",\n label: \"TanStack Start\",\n description: \"Minimal TanStack Start foundation with React 19, Router, Query, and Tailwind\",\n logo: \"/logos/tanstack.png\",\n repository: \"github:codyde/template-tanstackstart\",\n branch: \"main\"\n },\n {\n value: \"vite\",\n label: \"React + Vite\",\n description: \"Fast React SPA with Vite - perfect for client-side apps\",\n logo: \"/logos/react.svg\",\n repository: \"github:codyde/template-reactvite\",\n branch: \"main\"\n },\n {\n value: \"astro\",\n label: \"Astro\",\n description: \"Content-focused static sites with islands architecture\",\n logo: \"/astro.png\",\n repository: \"github:codyde/template-astro\",\n branch: \"main\"\n }\n ],\n promptTemplate: \"CRITICAL: You MUST use the {label} template. Clone it using: npx degit {repository}#{branch} {{projectName}}\"\n },\n // Runner Selection (options populated dynamically)\n {\n key: \"runner\",\n label: \"Runner\",\n description: \"Build runner to execute the build\",\n category: \"runner\",\n inputType: \"select\",\n options: []\n // Populated dynamically from connected runners\n },\n // Design Configuration (nested)\n {\n key: \"design\",\n label: \"Design\",\n description: \"Visual design preferences\",\n category: \"design\",\n inputType: \"nested\",\n children: [\n // Brand Themes\n {\n key: \"brand\",\n label: \"Brand\",\n description: \"Pre-configured brand color themes\",\n category: \"design\",\n inputType: \"select\",\n maxSelections: 1,\n options: [\n {\n value: \"sentry\",\n label: \"Sentry\",\n description: \"Error monitoring and performance - vibrant purple and pink\",\n logo: \"/logos/sentry.svg\",\n values: {\n primaryColor: \"#9D58BF\",\n secondaryColor: \"#FF708C\",\n accentColor: \"#FF9838\",\n neutralLight: \"#F0ECF3\",\n neutralDark: \"#2B2233\"\n }\n },\n {\n value: \"stripe\",\n label: \"Stripe\",\n description: \"Modern payments aesthetic\",\n logo: \"/logos/stripe.svg\",\n values: {\n primaryColor: \"#635bff\",\n secondaryColor: \"#0a2540\",\n accentColor: \"#00d4ff\",\n neutralLight: \"#f6f9fc\",\n neutralDark: \"#0a2540\"\n }\n },\n {\n value: \"vercel\",\n label: \"Vercel\",\n description: \"Clean developer tools\",\n logo: \"/logos/vercel.svg\",\n values: {\n primaryColor: \"#000000\",\n secondaryColor: \"#ffffff\",\n accentColor: \"#0070f3\",\n neutralLight: \"#fafafa\",\n neutralDark: \"#000000\"\n }\n },\n {\n value: \"linear\",\n label: \"Linear\",\n description: \"Sleek project management\",\n logo: \"/logos/linear.svg\",\n values: {\n primaryColor: \"#5e6ad2\",\n secondaryColor: \"#26b5ce\",\n accentColor: \"#f2994a\",\n neutralLight: \"#f7f8f8\",\n neutralDark: \"#1a1a1a\"\n }\n },\n {\n value: \"notion\",\n label: \"Notion\",\n description: \"Warm productivity\",\n logo: \"/logos/notion.svg\",\n values: {\n primaryColor: \"#2383e2\",\n secondaryColor: \"#e69138\",\n accentColor: \"#d44c47\",\n neutralLight: \"#f7f6f3\",\n neutralDark: \"#37352f\"\n }\n },\n {\n value: \"github\",\n label: \"GitHub\",\n description: \"Developer-first\",\n logo: \"/logos/github.svg\",\n values: {\n primaryColor: \"#238636\",\n secondaryColor: \"#1f6feb\",\n accentColor: \"#f85149\",\n neutralLight: \"#f6f8fa\",\n neutralDark: \"#24292f\"\n }\n },\n {\n value: \"airbnb\",\n label: \"Airbnb\",\n description: \"Friendly travel\",\n logo: \"/logos/airbnb.svg\",\n values: {\n primaryColor: \"#ff385c\",\n secondaryColor: \"#00a699\",\n accentColor: \"#fc642d\",\n neutralLight: \"#f7f7f7\",\n neutralDark: \"#222222\"\n }\n },\n {\n value: \"spotify\",\n label: \"Spotify\",\n description: \"Bold music streaming\",\n logo: \"/logos/spotify.svg\",\n values: {\n primaryColor: \"#1db954\",\n secondaryColor: \"#191414\",\n accentColor: \"#1ed760\",\n neutralLight: \"#f6f6f6\",\n neutralDark: \"#000000\"\n }\n }\n ],\n promptTemplate: \"Use the {value} brand aesthetic with the following color palette: Primary: {primaryColor}, Secondary: {secondaryColor}, Accent: {accentColor}, Neutral Light: {neutralLight}, Neutral Dark: {neutralDark}. Match the design style and feel of {value}.\"\n }\n ]\n }\n ];\n }\n});\n\n// src/lib/tags/resolver.ts\nfunction resolveTags(appliedTags) {\n const resolved = {};\n try {\n if (!appliedTags || !Array.isArray(appliedTags)) {\n console.warn(\"[resolveTags] Invalid appliedTags:\", appliedTags);\n return resolved;\n }\n const brandTag = appliedTags.find((t) => t.key === \"brand\");\n if (brandTag?.expandedValues) {\n Object.assign(resolved, brandTag.expandedValues);\n resolved.brand = brandTag.value;\n }\n const modelTag = appliedTags.find((t) => t.key === \"model\");\n if (modelTag) {\n resolved.model = modelTag.value;\n }\n const frameworkTag = appliedTags.find((t) => t.key === \"framework\");\n if (frameworkTag) {\n resolved.framework = frameworkTag.value;\n }\n const runnerTag = appliedTags.find((t) => t.key === \"runner\");\n if (runnerTag) {\n resolved.runner = runnerTag.value;\n }\n return resolved;\n } catch (error) {\n console.error(\"[resolveTags] Error resolving tags:\", error);\n return resolved;\n }\n}\nfunction generatePromptFromTags(resolved, projectName, isNewProject) {\n const sections = [];\n sections.push(`\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\\u{1F3AF} USER-SPECIFIED DESIGN (HIGHEST PRIORITY - OVERRIDES ALL DEFAULTS)\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\n\nCRITICAL PRIORITY LEVELS:\n[PRIORITY 1] User's explicit tag selections (below) - MUST be implemented exactly\n[PRIORITY 2] Template functionality and structure - keep this \n[PRIORITY 3] Base design system defaults - use only if no tags specified\n\n${isNewProject ? `\n\\u26A0\\uFE0F TEMPLATE TRANSFORMATION REQUIRED \\u26A0\\uFE0F\n\nYou are working with a template that has its own existing design.\nYour job: TRANSFORM the template's visual design to match the specifications below.\n\nDO NOT just add styles on top - REPLACE the template's design language:\n- Modify the template's CSS/styling files \n- Update component designs (buttons, cards, layouts, navigation)\n- Change visual aesthetics while preserving functionality\n- The template STRUCTURE is fine, but its VISUAL DESIGN must change\n` : \"\"}`);\n if (resolved.framework) {\n const frameworkDef = findTagDefinition(\"framework\");\n const frameworkOption = frameworkDef?.options?.find((o) => o.value === resolved.framework);\n if (frameworkOption && frameworkDef?.promptTemplate) {\n let prompt = frameworkDef.promptTemplate.replace(\"{label}\", frameworkOption.label).replace(\"{value}\", frameworkOption.value).replace(\"{repository}\", frameworkOption.repository || \"\").replace(\"{branch}\", frameworkOption.branch || \"main\").replace(\"{{projectName}}\", projectName || \"<project-name>\");\n sections.push(`## Framework Requirement (MANDATORY)\n\n${prompt}`);\n } else {\n sections.push(`## Framework Requirement (MANDATORY)\n\nCRITICAL: The user has explicitly selected ${resolved.framework} as the framework.\nYou MUST use ${resolved.framework} for this project. Do NOT suggest or use any other framework.\n\nSet up the project structure according to ${resolved.framework} best practices and conventions.`);\n }\n }\n if (resolved.brand) {\n sections.push(\"\\n## Design Constraints (MANDATORY - User-Specified)\\n\");\n sections.push(\"CRITICAL: The user has explicitly configured these design preferences. Follow these specifications precisely:\\n\");\n const brandDef = findTagDefinition(\"brand\");\n const brandOption = brandDef?.options?.find((o) => o.value === resolved.brand);\n if (brandOption) {\n sections.push(`**Brand Aesthetic (MANDATORY):**`);\n sections.push(`Match the visual style and feel of ${brandOption.label} (${brandOption.description}).`);\n }\n sections.push(`\n**Color Palette (MANDATORY - DO NOT DEVIATE):**`);\n sections.push(`- Primary: ${resolved.primaryColor} (use for CTAs, primary buttons, brand elements)`);\n sections.push(`- Secondary: ${resolved.secondaryColor} (use for secondary actions, supporting elements)`);\n sections.push(`- Accent: ${resolved.accentColor} (use for highlights, badges, important elements)`);\n sections.push(`- Neutral Light: ${resolved.neutralLight} (use for light backgrounds, cards, containers)`);\n sections.push(`- Neutral Dark: ${resolved.neutralDark} (use for text, dark backgrounds, borders)`);\n sections.push(`\nYou MUST use ONLY these 5 colors. Do NOT introduce any additional colors outside this palette.`);\n sections.push(\"\\n**Technical Requirements:**\");\n sections.push(\"- Define all colors as CSS custom properties (e.g., --color-primary, --color-secondary)\");\n sections.push(\"- NEVER hardcode hex values directly in components\");\n sections.push(\"- Use semantic color names that reference the custom properties\");\n sections.push(\"- NEVER use emojis in the UI. Instead, use Lucide React icons for all visual elements\");\n } else {\n sections.push(\"\\n**UI Guidelines:**\");\n sections.push(\"- NEVER use emojis in the UI. Instead, use Lucide React icons for all visual elements\");\n }\n return sections.filter((s) => s).join(\"\\n\");\n}\nvar init_resolver = __esm({\n \"src/lib/tags/resolver.ts\"() {\n init_tags();\n }\n});\n\n// src/lib/agents/claude-strategy.ts\nvar claude_strategy_exports = {};\n__export(claude_strategy_exports, {\n default: () => claude_strategy_default\n});\nfunction buildClaudeSections(context) {\n const sections = [];\n if (context.tags && context.tags.length > 0) {\n const resolved = resolveTags(context.tags);\n const tagPrompt = generatePromptFromTags(resolved, context.projectName, context.isNewProject);\n if (tagPrompt) {\n sections.push(tagPrompt);\n }\n } else if (context.designPreferences) {\n const prefs = context.designPreferences;\n const moodGuidance = prefs.mood.map((m) => `- ${m}: ${MOOD_GUIDANCE[m] || \"\"}`).join(\"\\n\");\n sections.push(`## Design Constraints (User-Specified)\n\nCRITICAL: The user has specified EXACT design preferences. Follow these specifications precisely:\n\n**Color Palette (MANDATORY - DO NOT DEVIATE):**\n- Primary: ${prefs.colors.primary} (use for CTAs, primary buttons, brand elements)\n- Secondary: ${prefs.colors.secondary} (use for secondary actions, supporting elements)\n- Accent: ${prefs.colors.accent} (use for highlights, badges, important elements)\n- Neutral Light: ${prefs.colors.neutralLight} (use for light backgrounds, cards, containers)\n- Neutral Dark: ${prefs.colors.neutralDark} (use for text, dark backgrounds, borders)\n\nYou MUST use ONLY these colors. Define them as CSS custom properties in your design system:\n\n\\`\\`\\`css\n:root {\n --color-primary: ${prefs.colors.primary};\n --color-secondary: ${prefs.colors.secondary};\n --color-accent: ${prefs.colors.accent};\n --color-neutral-light: ${prefs.colors.neutralLight};\n --color-neutral-dark: ${prefs.colors.neutralDark};\n}\n\\`\\`\\`\n\n**Typography (MANDATORY):**\n- Heading Font: ${prefs.typography.heading} (use for all h1, h2, h3, h4, h5, h6)\n- Body Font: ${prefs.typography.body} (use for paragraphs, labels, body text, UI elements)\n\nImport these fonts from Google Fonts or use system fonts as specified.\n\n**Style Direction:**\nThe user wants a design that feels: ${prefs.mood.join(\", \")}\n\nInterpret these mood descriptors to guide your design decisions:\n${moodGuidance}\n\n**Critical Reminders:**\n- Do NOT add any colors outside the specified 5-color palette\n- Do NOT use any fonts other than the 2 specified\n- Match the mood descriptors in your typography scale, spacing, and component design\n- Define colors as CSS variables, never use hex values directly in components`);\n }\n if (context.isNewProject) {\n sections.push(`## New Project: Template Prepared\n\n- Project name: ${context.projectName}\n- Location: ${context.workingDirectory}\n- Operation type: ${context.operationType}\n\nThe template has already been downloaded. Install dependencies and customize the scaffold to satisfy the request.`);\n } else {\n let existingProjectSection = `## Existing Project Context\n\n- Project location: ${context.workingDirectory}\n- Operation type: ${context.operationType}\n\nReview the current codebase and apply the requested changes without re-scaffolding.`;\n if (context.conversationHistory && context.conversationHistory.length > 0) {\n existingProjectSection += `\n\n**Recent Conversation History:**\n`;\n existingProjectSection += `You have access to the recent conversation history. Use this to understand the context and what has been discussed:\n\n`;\n context.conversationHistory.forEach((msg, index) => {\n const roleLabel = msg.role === \"user\" ? \"User\" : \"Assistant\";\n const timestamp = msg.timestamp instanceof Date ? msg.timestamp.toISOString() : msg.timestamp;\n const content = msg.content.length > 500 ? msg.content.substring(0, 500) + \"...[truncated]\" : msg.content;\n existingProjectSection += `${index + 1}. ${roleLabel} (${timestamp}):\n${content}\n\n`;\n });\n existingProjectSection += `Use this conversation history to understand:\n- What has been built or discussed so far\n- The user's preferences and requirements\n- References to \"it\", \"the app\", \"the project\", etc.\n- Any previous decisions or implementations\n\nApply the current request in the context of this conversation.`;\n }\n sections.push(existingProjectSection);\n }\n sections.push(`## Workspace Rules\n- Use relative paths within the project.\n- Work inside the existing project structure.\n- Provide complete updates without placeholders.`);\n if (context.fileTree) {\n sections.push(`## Project Structure Snapshot\n${context.fileTree}`);\n }\n if (context.templateName) {\n sections.push(`## Template Details\n- Template: ${context.templateName}\n- Framework: ${context.templateFramework ?? \"unknown\"}`);\n }\n return sections;\n}\nfunction buildFullPrompt(context, basePrompt) {\n if (!context.isNewProject) {\n return basePrompt;\n }\n return `${basePrompt}\n\nCRITICAL: The template has already been prepared in ${context.workingDirectory}. Do not scaffold a new project.`;\n}\nvar claudeStrategy, claude_strategy_default;\nvar init_claude_strategy = __esm({\n \"src/lib/agents/claude-strategy.ts\"() {\n init_design();\n init_resolver();\n claudeStrategy = {\n buildSystemPromptSections: buildClaudeSections,\n buildFullPrompt,\n shouldDownloadTemplate(context) {\n return context.isNewProject && !context.skipTemplates;\n },\n postTemplateSelected(context, template) {\n context.templateName = template.name;\n context.templateFramework = template.framework;\n context.fileTree = template.fileTree;\n }\n };\n claude_strategy_default = claudeStrategy;\n }\n});\n\n// src/lib/agents/codex/template-catalog.ts\nfunction buildCodexTemplateCatalogSection(catalog) {\n return `## Template Catalog\n${catalog}`;\n}\nvar init_template_catalog = __esm({\n \"src/lib/agents/codex/template-catalog.ts\"() {\n }\n});\n\n// src/lib/agents/codex/events.ts\nfunction sortPhases(phases) {\n return [...phases].sort((a, b) => {\n const idxA = CODEX_PHASE_ORDER.indexOf(a.id);\n const idxB = CODEX_PHASE_ORDER.indexOf(b.id);\n const safeA = idxA === -1 ? CODEX_PHASE_ORDER.length + 1 : idxA;\n const safeB = idxB === -1 ? CODEX_PHASE_ORDER.length + 1 : idxB;\n if (safeA === safeB) {\n return (a.title ?? \"\").localeCompare(b.title ?? \"\");\n }\n return safeA - safeB;\n });\n}\nfunction toStringOr(value, fallback) {\n if (value === void 0 || value === null) return fallback;\n return String(value);\n}\nfunction toOptionalString(value) {\n if (value === void 0 || value === null) return void 0;\n return String(value);\n}\nfunction toOptionalStringArray(values) {\n if (!Array.isArray(values)) return void 0;\n const mapped = values.map((value) => toOptionalString(value)?.trim()).filter((item) => !!item);\n return mapped.length > 0 ? mapped : void 0;\n}\nfunction processCodexEvent(state, rawEvent) {\n const timestampValue = rawEvent.timestamp;\n const timestamp = timestampValue ? new Date(timestampValue) : /* @__PURE__ */ new Date();\n switch (rawEvent.type) {\n case \"codex-phase-start\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId) return state;\n let found = false;\n const phases = state.phases.map((phase) => {\n if (phase.id === phaseId) {\n found = true;\n return {\n ...phase,\n title: toOptionalString(rawEvent.title) ?? phase.title,\n description: toOptionalString(rawEvent.description) ?? phase.description,\n status: \"active\",\n startedAt: phase.startedAt ?? timestamp,\n spotlight: toOptionalString(rawEvent.spotlight) ?? phase.spotlight\n };\n }\n if (phase.status === \"active\" && phase.completedAt === void 0) {\n return {\n ...phase,\n status: \"completed\",\n completedAt: timestamp\n };\n }\n return phase;\n });\n const next = found ? phases : [\n ...phases,\n {\n id: phaseId,\n title: toStringOr(rawEvent.title, \"In Progress\"),\n description: toStringOr(rawEvent.description, \"\"),\n status: \"active\",\n startedAt: timestamp,\n spotlight: toOptionalString(rawEvent.spotlight)\n }\n ];\n return {\n ...state,\n phases: sortPhases(next)\n };\n }\n case \"codex-phase-complete\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId) return state;\n return {\n ...state,\n phases: sortPhases(\n state.phases.map(\n (phase) => phase.id === phaseId ? {\n ...phase,\n title: toOptionalString(rawEvent.title) ?? phase.title,\n description: toOptionalString(rawEvent.description) ?? phase.description,\n status: \"completed\",\n completedAt: timestamp,\n spotlight: toOptionalString(rawEvent.spotlight) ?? phase.spotlight\n } : phase\n )\n )\n };\n }\n case \"codex-phase-blocked\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId) return state;\n return {\n ...state,\n phases: state.phases.map(\n (phase) => phase.id === phaseId ? {\n ...phase,\n status: \"blocked\",\n spotlight: toOptionalString(rawEvent.reason) ?? toOptionalString(rawEvent.spotlight) ?? phase.spotlight\n } : phase\n )\n };\n }\n case \"codex-phase-spotlight\": {\n const phaseId = rawEvent.phaseId;\n if (!phaseId || !rawEvent.spotlight) return state;\n return {\n ...state,\n phases: state.phases.map(\n (phase) => phase.id === phaseId ? { ...phase, spotlight: toOptionalString(rawEvent.spotlight) ?? phase.spotlight } : phase\n )\n };\n }\n case \"codex-template-decision\": {\n return {\n ...state,\n templateDecision: {\n templateId: toStringOr(rawEvent.templateId, \"unknown-template\"),\n templateName: toOptionalString(rawEvent.templateName) ?? toOptionalString(rawEvent.displayName) ?? \"Selected Template\",\n repository: toOptionalString(rawEvent.repository),\n branch: toOptionalString(rawEvent.branch),\n confidence: typeof rawEvent.confidence === \"number\" ? rawEvent.confidence : void 0,\n rationale: toOptionalString(rawEvent.rationale) ?? toOptionalString(rawEvent.reason),\n decidedAt: timestamp\n }\n };\n }\n case \"codex-workspace-verified\": {\n return {\n ...state,\n workspaceVerification: {\n directory: toOptionalString(rawEvent.directory) ?? toOptionalString(rawEvent.path) ?? \"\",\n exists: rawEvent.exists !== void 0 ? Boolean(rawEvent.exists) : true,\n discoveredEntries: toOptionalStringArray(rawEvent.entries),\n notes: toOptionalString(rawEvent.notes) ?? toOptionalString(rawEvent.summary),\n verifiedAt: timestamp\n }\n };\n }\n case \"codex-task-summary\": {\n const bullets = Array.isArray(rawEvent.bullets) ? toOptionalStringArray(rawEvent.bullets) ?? [] : typeof rawEvent.summary === \"string\" ? rawEvent.summary.split(\"\\n\").map((line) => line.trim()).filter(Boolean) : [];\n return {\n ...state,\n taskSummary: {\n headline: toOptionalString(rawEvent.headline) ?? toOptionalString(rawEvent.title) ?? \"Key Tasks Identified\",\n bullets,\n capturedAt: timestamp\n }\n };\n }\n case \"codex-execution-insight\": {\n const text = rawEvent.text ?? rawEvent.message ?? \"\";\n if (!text) return state;\n const tone = [\"success\", \"warning\", \"error\", \"info\"].includes(\n toStringOr(rawEvent.tone, \"\")\n ) ? rawEvent.tone : \"info\";\n const insight = {\n id: toOptionalString(rawEvent.id) ?? `insight-${Date.now()}`,\n text: toStringOr(text, \"\"),\n tone,\n timestamp\n };\n const existing = state.executionInsights ?? [];\n const existingIndex = existing.findIndex((item) => item.id === insight.id);\n const nextInsights = existingIndex >= 0 ? existing.map((item) => item.id === insight.id ? insight : item) : [...existing.slice(-19), insight];\n return {\n ...state,\n executionInsights: nextInsights\n };\n }\n default:\n return state;\n }\n}\nvar CODEX_PHASE_ORDER;\nvar init_events = __esm({\n \"src/lib/agents/codex/events.ts\"() {\n CODEX_PHASE_ORDER = [\n \"prompt-analysis\",\n \"template-selection\",\n \"template-clone\",\n \"workspace-verification\",\n \"task-synthesis\",\n \"execution\"\n ];\n }\n});\n\n// src/lib/templates/config.server.ts\nvar config_server_exports = {};\n__export(config_server_exports, {\n getAllTemplates: () => getAllTemplates,\n getTemplateById: () => getTemplateById,\n getTemplateSelectionContext: () => getTemplateSelectionContext,\n loadTemplateConfig: () => loadTemplateConfig,\n selectTemplateFromPrompt: () => selectTemplateFromPrompt,\n setTemplatesPath: () => setTemplatesPath\n});\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nfunction setTemplatesPath(path) {\n configuredPath = path;\n process.env.TEMPLATES_JSON_PATH = path;\n cachedConfig = null;\n}\nfunction getTemplatesPath() {\n const path = configuredPath ?? process.env.TEMPLATES_JSON_PATH ?? join(process.cwd(), \"templates.json\");\n if (process.env.DEBUG_TEMPLATES === \"1\") {\n console.log(\"[templates] getTemplatesPath called:\");\n console.log(` configuredPath: ${configuredPath}`);\n console.log(` env.TEMPLATES_JSON_PATH: ${process.env.TEMPLATES_JSON_PATH}`);\n console.log(` resolved path: ${path}`);\n }\n return path;\n}\nasync function loadTemplateConfig() {\n if (cachedConfig) {\n return cachedConfig;\n }\n const configPath = getTemplatesPath();\n const content = await readFile(configPath, \"utf-8\");\n cachedConfig = JSON.parse(content);\n console.log(`\\u2705 Loaded ${cachedConfig.templates.length} templates from ${configPath}`);\n return cachedConfig;\n}\nasync function getTemplateById(id) {\n const config = await loadTemplateConfig();\n return config.templates.find((t) => t.id === id) ?? null;\n}\nasync function getAllTemplates() {\n const config = await loadTemplateConfig();\n return config.templates;\n}\nasync function getTemplateSelectionContext() {\n const templates = await getAllTemplates();\n let context = \"\\u{1F3AF} AVAILABLE TEMPLATES:\\n\\n\";\n for (const template of templates) {\n context += `**${template.name}** (ID: ${template.id})\n`;\n context += `${template.description}\n\n`;\n context += `\\u{1F4E6} Clone command:\n`;\n context += ` npx degit ${template.repository}#${template.branch} \"<project-name>\"\n\n`;\n context += `Best for:\n${template.selection.useCases.map((uc) => ` \\u2022 ${uc}`).join(\"\\n\")}\n\n`;\n context += `Example user requests:\n${template.selection.examples.map((ex) => ` \\u2022 \"${ex}\"`).join(\"\\n\")}\n\n`;\n context += `Tech Stack: ${template.tech.framework} ${template.tech.version}, ${template.tech.language}, ${template.tech.styling}`;\n if (template.tech.uiLibrary) {\n context += `, ${template.tech.uiLibrary}`;\n }\n context += \"\\n\\n\";\n context += \"---\\n\\n\";\n }\n return context;\n}\nasync function selectTemplateFromPrompt(userPrompt) {\n const templates = await getAllTemplates();\n const prompt = userPrompt.toLowerCase();\n const scores = templates.map((template) => {\n const keywords = template.selection.keywords;\n const matches = keywords.filter(\n (keyword) => prompt.includes(keyword.toLowerCase())\n );\n return {\n template,\n score: matches.length,\n matchedKeywords: matches\n };\n });\n scores.sort((a, b) => b.score - a.score);\n if (scores[0].score > 0) {\n console.log(`\\u{1F3AF} Auto-selected template: ${scores[0].template.name}`);\n console.log(` Matched keywords: ${scores[0].matchedKeywords.join(\", \")}`);\n return scores[0].template;\n }\n console.log(`\\u{1F3AF} No keyword matches, defaulting to react-vite (basic template)`);\n return templates.find((t) => t.id === \"react-vite\") ?? templates[0];\n}\nvar cachedConfig, configuredPath;\nvar init_config_server = __esm({\n \"src/lib/templates/config.server.ts\"() {\n cachedConfig = null;\n }\n});\n\n// src/lib/templates/load-template-context.server.ts\nvar load_template_context_server_exports = {};\n__export(load_template_context_server_exports, {\n loadTemplateSelectionContext: () => loadTemplateSelectionContext\n});\nasync function loadTemplateSelectionContext(context) {\n if (context.templateSelectionContext) {\n return context.templateSelectionContext;\n }\n if (typeof window !== \"undefined\") {\n return void 0;\n }\n const { getTemplateSelectionContext: getTemplateSelectionContext2 } = await Promise.resolve().then(() => (init_config_server(), config_server_exports));\n return getTemplateSelectionContext2();\n}\nvar init_load_template_context_server = __esm({\n \"src/lib/templates/load-template-context.server.ts\"() {\n }\n});\n\n// src/lib/templates/load-template-context.ts\nasync function loadTemplateSelectionContext2(context) {\n if (context.templateSelectionContext) {\n return context.templateSelectionContext;\n }\n if (typeof window !== \"undefined\") {\n return void 0;\n }\n const loader = await Promise.resolve().then(() => (init_load_template_context_server(), load_template_context_server_exports));\n return loader.loadTemplateSelectionContext(context);\n}\nvar init_load_template_context = __esm({\n \"src/lib/templates/load-template-context.ts\"() {\n }\n});\n\n// src/lib/agents/codex-strategy.ts\nvar codex_strategy_exports = {};\n__export(codex_strategy_exports, {\n default: () => codex_strategy_default\n});\nfunction getParentDirectory(filePath) {\n if (!filePath) return filePath;\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const trimmed = normalized.replace(/\\/+$|\\/+$|\\/*$/, \"\");\n const lastSlash = trimmed.lastIndexOf(\"/\");\n if (lastSlash <= 0) {\n return \"/\";\n }\n return trimmed.slice(0, lastSlash);\n}\nfunction buildCodexSections(context) {\n const sections = [];\n if (context.tags && context.tags.length > 0) {\n const resolved = resolveTags(context.tags);\n const tagPrompt = generatePromptFromTags(resolved, context.projectName, context.isNewProject);\n if (tagPrompt) {\n sections.push(tagPrompt);\n }\n }\n if (context.isNewProject) {\n if (context.templateMetadata) {\n sections.push(`## Template Already Selected\n\n- Template: ${context.templateName ?? \"Selected template\"}\n- Repository: ${context.templateMetadata.repository}#${context.templateMetadata.branch}\n- The template has been chosen based on your analysis of the user's request\n- Clone command: npx degit ${context.templateMetadata.repository}#${context.templateMetadata.branch} ${context.projectName}\n- CRITICAL: After cloning, prefix EVERY bash command with \"cd ${context.projectName} &&\"\n- Follow the setup instructions exactly before implementing the request`);\n } else {\n sections.push(`## Template Selection and Setup\n\n- Codex selects the appropriate template using the provided catalog\n- After cloning, prefix EVERY bash command with \"cd ${context.projectName} &&\"\n- Remember: bash commands run in fresh shells - cd does not persist\n- Follow the setup instructions exactly before implementing the request`);\n }\n } else {\n let existingProjectSection = `## Existing Project Context\n\n- Project location: ${context.workingDirectory}\n- Modify the existing codebase to satisfy the request.`;\n if (context.conversationHistory && context.conversationHistory.length > 0) {\n existingProjectSection += `\n\n**Recent Conversation History:**\n`;\n existingProjectSection += `You have access to recent conversation history. Use this to understand context:\n\n`;\n context.conversationHistory.forEach((msg, index) => {\n const roleLabel = msg.role === \"user\" ? \"User\" : \"Assistant\";\n const timestamp = msg.timestamp instanceof Date ? msg.timestamp.toISOString() : msg.timestamp;\n const content = msg.content.length > 500 ? msg.content.substring(0, 500) + \"...[truncated]\" : msg.content;\n existingProjectSection += `${index + 1}. ${roleLabel} (${timestamp}):\n${content}\n\n`;\n });\n existingProjectSection += `Use this history to understand:\n- What has been built or discussed\n- User preferences and requirements\n- References to \"it\", \"the app\", \"the project\"\n- Previous decisions or implementations\n\nApply the current request in context of this conversation.`;\n }\n sections.push(existingProjectSection);\n }\n sections.push(`## Workspace Rules\n- ${context.isNewProject ? `After cloning, prefix ALL bash commands with \"cd ${context.projectName} &&\"` : \"Operate inside the workspace directory\"}\n- Each bash command runs in a fresh shell - cd does not persist between commands\n- ${context.isNewProject ? `Example: bash -lc 'cd ${context.projectName} && npm install'` : \"Use relative paths for file operations\"}\n- Provide complete file contents for every modification`);\n sections.push(`## Task Tracking - Internal System (NOT A TOOL)\n\nIMPORTANT: Task tracking is done by including JSON in your text responses.\nThis is NOT a tool to call, NOT a command to run, NOT something to install.\n\nSimply include a JSON code block in your response like this:\n\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Clone template\",\"status\":\"completed\",\"activeForm\":\"Cloned template\"},\n {\"content\":\"Install dependencies\",\"status\":\"in_progress\",\"activeForm\":\"Installing dependencies\"},\n {\"content\":\"Implement features\",\"status\":\"pending\",\"activeForm\":\"Implementing features\"}\n]}\n\\`\\`\\`\n\nThe system automatically extracts this from your response text.\nDO NOT try to call it as a tool, run it as a command, or install it as a binary.\nJust include the JSON code block in your message.`);\n if (context.templateSelectionContext && !context.templateMetadata) {\n sections.push(buildCodexTemplateCatalogSection(context.templateSelectionContext));\n }\n return sections;\n}\nfunction buildFullPrompt2(context, basePrompt) {\n if (!context.isNewProject) {\n return basePrompt;\n }\n if (context.templateMetadata) {\n const { repository, branch } = context.templateMetadata;\n return `USER REQUEST: ${basePrompt}\n\nWORKFLOW INSTRUCTIONS:\n\nYou will complete this request in ONE continuous session by following these exact steps:\n\nSTEP 1: CREATE TASK BREAKDOWN\nFirst, analyze the request and determine what specific tasks need to be done.\n\nCreate AS MANY TASKS AS NEEDED to properly build the MVP. This could be:\n- Simple request: 3-4 tasks\n- Medium request: 5-8 tasks\n- Complex request: 10-15+ tasks\n\nThink through ALL the work required.\n\nThen include a JSON code block in your response:\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Clone and configure template\",\"status\":\"in_progress\",\"activeForm\":\"Cloning and configuring template\"},\n {\"content\":\"Install dependencies\",\"status\":\"pending\",\"activeForm\":\"Installing dependencies\"},\n {\"content\":\"Implement features\",\"status\":\"pending\",\"activeForm\":\"Implementing features\"},\n ...as many as needed...\n {\"content\":\"Verify build\",\"status\":\"pending\",\"activeForm\":\"Verifying build\"}\n]}\n\\`\\`\\`\n\nThe system will automatically extract this. Do NOT try to call it as a tool or command.\n\nSTEP 2: CLONE AND CONFIGURE\n bash -lc 'npx degit ${repository}#${branch} ${context.projectName}'\n bash -lc 'ls ${context.projectName}'\n bash -lc 'cd ${context.projectName} && cat > .npmrc << EOF\nsave-exact=true\nlegacy-peer-deps=false\nengine-strict=true\nEOF'\n bash -lc 'cd ${context.projectName} && npm pkg set name=\"${context.projectName}\"'\n\nAfter setup, include updated JSON code block (mark setup as \"completed\")\n\nSTEP 3: INSTALL DEPENDENCIES\n bash -lc 'cd ${context.projectName} && npm install'\n\nAfter installing, include updated JSON code block\n\nSTEP 4: IMPLEMENT ALL FEATURES\n - Modify template files to deliver the requested functionality\n - Use: bash -lc 'cd ${context.projectName} && cat > filepath << EOF\n...\nEOF'\n - Implement EVERY requested feature completely\n - After each major feature, include updated JSON code block\n\nSTEP 5: VERIFY BUILD\n bash -lc 'cd ${context.projectName} && npm run build'\n\nAfter successful build, include final JSON code block with all tasks \"completed\"\n\nCRITICAL: You MUST complete ALL 5 steps in this single session.\nEach bash command runs in a fresh shell - prefix with \"cd ${context.projectName} &&\"\nOnly respond \"Implementation complete\" after ALL steps are verified.`;\n }\n return `USER REQUEST: ${basePrompt}\n\nWORKFLOW INSTRUCTIONS:\n\nYou will complete this request in ONE continuous session by following these exact steps:\n\nSTEP 1: CREATE TASK BREAKDOWN\nFirst, analyze the request and determine what tasks are needed.\n\nCreate AS MANY TASKS AS NEEDED to properly build the MVP. This could be:\n- Simple request: 3-4 tasks\n- Medium request: 5-8 tasks\n- Complex request: 10-15+ tasks\n\nThink through ALL the work required.\n\nThen include a JSON code block in your response:\n\\`\\`\\`json\n{\"todos\":[\n {\"content\":\"Select and clone template\",\"status\":\"in_progress\",\"activeForm\":\"Selecting and cloning template\"},\n {\"content\":\"Install dependencies\",\"status\":\"pending\",\"activeForm\":\"Installing dependencies\"},\n ...as many tasks as needed...\n {\"content\":\"Verify build\",\"status\":\"pending\",\"activeForm\":\"Verifying build\"}\n]}\n\\`\\`\\`\n\nThe system automatically extracts this. Do NOT try to call it as a tool or command.\n\nSTEP 2: CLONE AND CONFIGURE\n Choose appropriate template from available options\n bash -lc 'npx degit <repository>#<branch> ${context.projectName}'\n bash -lc 'ls ${context.projectName}'\n bash -lc 'cd ${context.projectName} && cat > .npmrc << EOF\nsave-exact=true\nEOF'\n bash -lc 'cd ${context.projectName} && npm pkg set name=\"${context.projectName}\"'\n\nAfter setup, include updated JSON code block (mark setup as \"completed\")\n\nSTEP 3: INSTALL DEPENDENCIES\n bash -lc 'cd ${context.projectName} && npm install'\n\nAfter installing, include updated JSON code block\n\nSTEP 4: IMPLEMENT ALL FEATURES\n - Modify template files to deliver requested functionality\n - ALL commands: bash -lc 'cd ${context.projectName} && ...'\n - Implement EVERY requested feature completely\n - After each major feature, include updated JSON code block\n\nSTEP 5: VERIFY BUILD\n bash -lc 'cd ${context.projectName} && npm run build'\n\nAfter successful build, include final JSON code block with all tasks \"completed\"\n\nCRITICAL: Complete ALL 5 steps in this single session.\nEach bash command runs in a fresh shell - prefix with \"cd ${context.projectName} &&\"\nOnly respond \"Implementation complete\" after ALL steps are verified.`;\n}\nvar codexStrategy, codex_strategy_default;\nvar init_codex_strategy = __esm({\n \"src/lib/agents/codex-strategy.ts\"() {\n init_template_catalog();\n init_events();\n init_load_template_context();\n init_resolver();\n codexStrategy = {\n buildSystemPromptSections: buildCodexSections,\n buildFullPrompt: buildFullPrompt2,\n shouldDownloadTemplate() {\n return false;\n },\n resolveWorkingDirectory(context) {\n if (!context.isNewProject) {\n return context.workingDirectory;\n }\n return getParentDirectory(context.workingDirectory);\n },\n async getTemplateSelectionContext(context) {\n return loadTemplateSelectionContext2(context);\n },\n processRunnerEvent(state, event) {\n if (!state || typeof state !== \"object\") {\n return state;\n }\n const codexLike = state;\n if (!Array.isArray(codexLike?.phases)) {\n return state;\n }\n const next = processCodexEvent(codexLike, event);\n return next;\n }\n };\n codex_strategy_default = codexStrategy;\n }\n});\n\n// src/lib/agents/strategy.ts\nvar strategyRegistry = /* @__PURE__ */ new Map();\nfunction registerAgentStrategy(agentId, strategy) {\n strategyRegistry.set(agentId, strategy);\n}\nfunction getAgentStrategy(agentId) {\n const strategy = strategyRegistry.get(agentId);\n if (!strategy) {\n throw new Error(`No strategy registered for agent: ${agentId}`);\n }\n return strategy;\n}\n\n// src/lib/agents/index.ts\nvar initialized = false;\nasync function ensureRegistry() {\n if (initialized) {\n return;\n }\n const [{ default: claudeStrategy2 }, { default: codexStrategy2 }] = await Promise.all([\n Promise.resolve().then(() => (init_claude_strategy(), claude_strategy_exports)),\n Promise.resolve().then(() => (init_codex_strategy(), codex_strategy_exports))\n ]);\n registerAgentStrategy(\"claude-code\", claudeStrategy2);\n registerAgentStrategy(\"openai-codex\", codexStrategy2);\n initialized = true;\n}\nasync function resolveAgentStrategy(agentId) {\n await ensureRegistry();\n return getAgentStrategy(agentId);\n}\nexport {\n getAgentStrategy,\n registerAgentStrategy,\n resolveAgentStrategy\n};\n//# sourceMappingURL=index.js.map","import { existsSync, mkdirSync } from 'node:fs';\nimport path from 'node:path';\nimport type { AgentId, ClaudeModelId } from '@openbuilder/agent-core/types/agent';\nimport { resolveAgentStrategy } from '@openbuilder/agent-core/lib/agents';\nimport { ensureProjectSkills } from '../skills.js';\n\n// Debug logging helper - suppressed in TUI mode (SILENT_MODE=1)\nconst debugLog = (message: string) => {\n if (process.env.SILENT_MODE !== '1' && process.env.DEBUG_BUILD === '1') {\n debugLog(message);\n }\n};\n\ninterface MessagePart {\n type: string;\n text?: string;\n image?: string;\n mimeType?: string;\n fileName?: string;\n toolCallId?: string;\n toolName?: string;\n input?: unknown;\n output?: unknown;\n state?: string;\n}\n\ntype BuildQueryFn = (\n prompt: string,\n workingDirectory: string,\n systemPrompt: string,\n agent?: AgentId,\n codexThreadId?: string, // For resuming Codex threads\n messageParts?: MessagePart[] // Multi-modal content\n) => AsyncGenerator<unknown, void, unknown>;\n\ninterface BuildStreamOptions {\n projectId: string;\n projectName: string;\n prompt: string;\n messageParts?: MessagePart[]; // Multi-modal content (text, images, etc.)\n operationType: string;\n context?: Record<string, unknown>;\n query: BuildQueryFn;\n workingDirectory: string;\n systemPrompt: string;\n agent: AgentId;\n isNewProject?: boolean;\n claudeModel?: ClaudeModelId;\n codexThreadId?: string; // For resuming Codex threads\n}\n\n/**\n * Create a build stream that executes the Claude query and returns a stream\n */\nexport async function createBuildStream(options: BuildStreamOptions): Promise<ReadableStream> {\n const { prompt, messageParts, query, context, workingDirectory, systemPrompt, agent, isNewProject } = options;\n\n // For Codex on NEW projects, use parent directory as CWD (Codex will create the project dir)\n // For everything else, use the project directory\n const strategy = await resolveAgentStrategy(agent);\n const projectName = options.projectName || path.basename(workingDirectory);\n const strategyContext = {\n projectId: options.projectId,\n projectName,\n prompt,\n workingDirectory,\n operationType: options.operationType,\n isNewProject: !!isNewProject,\n };\n\n const resolvedDir = strategy.resolveWorkingDirectory?.(strategyContext);\n const actualWorkingDir = resolvedDir ?? workingDirectory;\n\n if (resolvedDir) {\n if (process.env.DEBUG_BUILD === '1') console.log(`[engine] Strategy adjusted CWD to: ${actualWorkingDir}`);\n } else if (!existsSync(workingDirectory)) {\n mkdirSync(workingDirectory, { recursive: true });\n }\n \n // Ensure project has skills copied from bundled skills\n ensureProjectSkills(actualWorkingDir);\n\n if (!resolvedDir) {\n if (process.env.DEBUG_BUILD === '1') console.log(`[engine] Using project directory as CWD: ${actualWorkingDir}`);\n }\n\n // Store the original CWD to restore it later\n const originalCwd = process.cwd();\n\n // Change to the appropriate directory\n process.chdir(actualWorkingDir);\n\n // Build the full prompt with context\n let fullPrompt = prompt;\n\n if (context && Object.keys(context).length > 0) {\n fullPrompt = `${fullPrompt}\\n\\nContext: ${JSON.stringify(context, null, 2)}`;\n }\n\n // Pass prompt, working directory, and system prompt to the query function\n // The buildQuery wrapper will configure the SDK with all options\n // Use actualWorkingDir so the query function gets the correct CWD\n\n debugLog('[runner] [build-engine] 🚀 Creating generator with query function...\\n');\n const generator = query(fullPrompt, actualWorkingDir, systemPrompt, agent, options.codexThreadId, messageParts);\n\n debugLog('[runner] [build-engine] 📦 Creating ReadableStream from generator...\\n');\n // Create a ReadableStream from the AsyncGenerator\n const stream = new ReadableStream({\n async start(controller) {\n debugLog('[runner] [build-engine] ▶️ Stream start() called, beginning to consume generator...\\n');\n let chunkCount = 0;\n try {\n for await (const chunk of generator) {\n chunkCount++;\n if (chunkCount % 5 === 0) {\n debugLog(`[runner] [build-engine] Processed ${chunkCount} chunks from generator\\n`);\n }\n // Convert chunk to appropriate format\n if (typeof chunk === 'string') {\n controller.enqueue(new TextEncoder().encode(chunk));\n } else if (chunk instanceof Uint8Array) {\n controller.enqueue(chunk);\n } else if (typeof chunk === 'object') {\n controller.enqueue(new TextEncoder().encode(JSON.stringify(chunk)));\n }\n }\n debugLog(`[runner] [build-engine] ✅ Generator exhausted after ${chunkCount} chunks, closing stream\\n`);\n controller.close();\n } catch (error) {\n debugLog(`[runner] [build-engine] ❌ Error consuming generator: ${error}\\n`);\n controller.error(error);\n } finally {\n // Restore the original working directory\n process.chdir(originalCwd);\n }\n },\n });\n\n debugLog('[runner] [build-engine] ✅ Stream created and returned\\n');\n return stream;\n}\n","import { spawn, ChildProcess } from 'node:child_process';\nimport { EventEmitter } from 'node:events';\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { createServer } from 'node:net';\nimport { buildLogger } from '@openbuilder/agent-core/lib/logging/build-logger';\nimport { join } from 'node:path';\n\n// Silent mode for TUI\nlet isSilentMode = false;\n\nexport function setSilentMode(silent: boolean): void {\n isSilentMode = silent;\n}\n\n/**\n * Process lifecycle states\n */\nexport enum ProcessState {\n IDLE = 'idle',\n STARTING = 'starting',\n RUNNING = 'running',\n STOPPING = 'stopping',\n STOPPED = 'stopped',\n FAILED = 'failed'\n}\n\n/**\n * Failure reason classification\n */\nexport enum FailureReason {\n PORT_IN_USE = 'port_in_use',\n COMMAND_NOT_FOUND = 'command_not_found',\n DIRECTORY_MISSING = 'directory_missing',\n PERMISSION_DENIED = 'permission_denied',\n IMMEDIATE_CRASH = 'immediate_crash',\n HEALTH_CHECK_TIMEOUT = 'health_check_timeout',\n HEALTH_CHECK_FAILED = 'health_check_failed',\n UNKNOWN = 'unknown'\n}\n\n/**\n * Get API configuration (evaluated at runtime, not module load time)\n */\nfunction getAPIConfig() {\n return {\n apiBase: process.env.API_BASE_URL || 'http://localhost:3000',\n secret: process.env.RUNNER_SHARED_SECRET,\n };\n}\n\n/**\n * Make authenticated API call to frontend\n */\nasync function callAPI(endpoint: string, options: RequestInit = {}) {\n const { apiBase, secret } = getAPIConfig();\n\n try {\n const response = await fetch(`${apiBase}${endpoint}`, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${secret}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`API call failed (${response.status}): ${error}`);\n }\n\n return await response.json();\n } catch (error) {\n buildLogger.log('error', 'process-manager', `API call to ${endpoint} failed`, { error: error instanceof Error ? error.message : String(error) });\n throw error;\n }\n}\n\ninterface DevServerOptions {\n projectId: string;\n command: string;\n cwd: string;\n env: Record<string, string>;\n port?: number;\n}\n\ninterface DevServerProcess {\n projectId: string;\n process: ChildProcess;\n emitter: EventEmitter;\n port?: number;\n tunnelUrl?: string;\n state: ProcessState;\n command: string;\n cwd: string;\n startedAt: Date;\n lastHealthCheck?: Date;\n stopReason?: string;\n failureReason?: FailureReason;\n earlyStderr?: string; // Capture stderr from first 5 seconds for debugging\n hasExited?: boolean; // Track if process has exited\n}\n\nconst activeProcesses = new Map<string, DevServerProcess>();\n\n/**\n * Check if a port is in use (listening)\n * Tries both localhost and 0.0.0.0 to catch servers bound to either interface\n */\nexport async function checkPortInUse(port: number): Promise<boolean> {\n // Try localhost first (most common for dev servers)\n const localhostInUse = await checkSingleAddress(port, 'localhost');\n if (localhostInUse) {\n return true;\n }\n \n // Then try 0.0.0.0\n return checkSingleAddress(port, '0.0.0.0');\n}\n\n/**\n * Find an available port starting from a given port\n * Scans up to maxAttempts ports from the starting port\n * \n * @param startPort - The port to start scanning from\n * @param maxAttempts - Maximum number of ports to try (default: 100)\n * @returns The first available port found, or null if none found\n */\nexport async function findAvailablePort(startPort: number, maxAttempts = 100): Promise<number | null> {\n for (let i = 0; i < maxAttempts; i++) {\n const port = startPort + i;\n const inUse = await checkPortInUse(port);\n if (!inUse) {\n buildLogger.log('info', 'process-manager', `Found available port ${port}`, { port, startPort, attempts: i + 1 });\n return port;\n }\n }\n buildLogger.log('error', 'process-manager', `No available port found after ${maxAttempts} attempts starting from ${startPort}`, { startPort, maxAttempts });\n return null;\n}\n\n/**\n * Check if a port is in use on a specific address\n */\nfunction checkSingleAddress(port: number, host: string): Promise<boolean> {\n return new Promise((resolve) => {\n const server = createServer();\n \n server.once('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'EADDRINUSE') {\n buildLogger.log('debug', 'process-manager', `Port ${port} is IN USE on ${host}`, { port, host });\n resolve(true); // Port is in use\n } else {\n buildLogger.log('debug', 'process-manager', `Port ${port} check error on ${host}: ${err.code}`, { port, host, code: err.code });\n resolve(false);\n }\n });\n \n server.once('listening', () => {\n buildLogger.log('debug', 'process-manager', `Port ${port} is FREE on ${host}`, { port, host });\n server.close();\n resolve(false); // Port is free\n });\n \n server.listen(port, host);\n });\n}\n\n/**\n * Verify server health after start\n * @param port - Port to check\n * @param projectId - Project ID to check process status\n * @param maxAttempts - Maximum number of health check attempts (default: 10)\n * @returns Health check result\n */\nasync function verifyServerHealth(\n port: number,\n projectId?: string,\n maxAttempts = 10\n): Promise<{\n healthy: boolean;\n error?: string;\n}> {\n if (!isSilentMode) {\n buildLogger.log('debug', 'process-manager', `Starting health check for port ${port}`, { port });\n }\n\n for (let i = 0; i < maxAttempts; i++) {\n try {\n // Check if process has exited during health check\n if (projectId) {\n const devProcess = activeProcesses.get(projectId);\n if (devProcess?.hasExited) {\n let errorMsg = `Process exited during health check (after ${i}s)`;\n if (devProcess.earlyStderr) {\n errorMsg += `\\n\\nProcess stderr:\\n${devProcess.earlyStderr}`;\n }\n return {\n healthy: false,\n error: errorMsg,\n };\n }\n }\n\n // Check if port is listening\n const isListening = await checkPortInUse(port);\n\n if (!isListening) {\n // Port is still free, server hasn't started yet\n if (!isSilentMode && i % 5 === 0) {\n buildLogger.log('debug', 'process-manager', `Waiting for port ${port} to be listening... (${i}s)`, { port, seconds: i });\n }\n await new Promise((r) => setTimeout(r, 1000));\n continue;\n }\n\n // Port is listening! For dev servers, this is good enough.\n // Many frameworks (Astro, Vite, Next) listen on the port but continue\n // building/bundling before serving HTTP requests.\n // Waiting for HTTP responses can cause false timeouts.\n\n if (!isSilentMode) {\n buildLogger.log('info', 'process-manager', `Health check passed - port ${port} is listening (after ${i}s)`, { port, seconds: i });\n }\n return { healthy: true };\n } catch (error) {\n return {\n healthy: false,\n error: `Health check failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n // Health check timed out - include stderr if available\n let errorMsg = `Server failed to start listening on port ${port} within ${maxAttempts} seconds`;\n if (projectId) {\n const devProcess = activeProcesses.get(projectId);\n if (devProcess?.earlyStderr) {\n errorMsg += `\\n\\nProcess stderr:\\n${devProcess.earlyStderr}`;\n }\n }\n\n return {\n healthy: false,\n error: errorMsg,\n };\n}\n\n/**\n * Classify startup error to provide better error messages\n */\nfunction classifyStartupError(error: unknown, processInfo: Partial<DevServerProcess>): {\n reason: FailureReason;\n message: string;\n suggestion: string;\n} {\n const errorStr = String(error);\n \n if (errorStr.includes('EADDRINUSE')) {\n return {\n reason: FailureReason.PORT_IN_USE,\n message: `Port ${processInfo.port} is already in use`,\n suggestion: 'Another process is using this port. Stop it or the system will reallocate.'\n };\n }\n \n if (errorStr.includes('ENOENT') || errorStr.includes('command not found')) {\n return {\n reason: FailureReason.COMMAND_NOT_FOUND,\n message: `Command not found: ${processInfo.command}`,\n suggestion: 'Check that dependencies are installed (npm install, pnpm install, etc.)'\n };\n }\n \n if (errorStr.includes('EACCES') || errorStr.includes('permission denied')) {\n return {\n reason: FailureReason.PERMISSION_DENIED,\n message: 'Permission denied',\n suggestion: 'Check file permissions and ownership'\n };\n }\n \n if (processInfo.cwd && !existsSync(processInfo.cwd)) {\n return {\n reason: FailureReason.DIRECTORY_MISSING,\n message: `Working directory does not exist: ${processInfo.cwd}`,\n suggestion: 'Project may have been deleted or moved'\n };\n }\n \n // If process exited within 3 seconds of starting\n if (processInfo.startedAt && Date.now() - processInfo.startedAt.getTime() < 3000) {\n return {\n reason: FailureReason.IMMEDIATE_CRASH,\n message: 'Process crashed immediately after starting',\n suggestion: 'Check logs for syntax errors or missing dependencies'\n };\n }\n \n return {\n reason: FailureReason.UNKNOWN,\n message: errorStr,\n suggestion: 'Check the logs for more details'\n };\n}\n\n/**\n * Start a development server for a project with pre-flight port check\n * \n * This is the preferred way to start a dev server as it verifies the port\n * is actually available before spawning the process.\n * \n * @param options - DevServerOptions including port\n * @param maxPortWaitMs - Maximum time to wait for port to become available (default: 5000)\n * @returns Promise<DevServerProcess> - The dev server process\n * @throws Error if port is not available after waiting\n */\nexport async function startDevServerAsync(\n options: DevServerOptions,\n maxPortWaitMs = 5000\n): Promise<DevServerProcess> {\n const { projectId, port } = options;\n\n // Pre-flight check: verify port is available before spawning\n if (port) {\n const portInUse = await checkPortInUse(port);\n if (portInUse) {\n buildLogger.log('warn', 'process-manager', `Port ${port} is in use, waiting for release...`, { port, projectId });\n \n // Wait for port to become available\n const portReleased = await waitForPortRelease(port, maxPortWaitMs);\n if (!portReleased) {\n const error = new Error(`Port ${port} is still in use after ${maxPortWaitMs}ms. Please stop the process using this port.`);\n buildLogger.log('error', 'process-manager', error.message, { port, projectId });\n throw error;\n }\n }\n \n buildLogger.log('info', 'process-manager', `Port ${port} is available, starting dev server`, { port, projectId });\n }\n\n // Port is available, start the server\n return startDevServer(options);\n}\n\n/**\n * Start a development server for a project (synchronous version)\n * \n * Note: Prefer startDevServerAsync() which includes port availability checks.\n * This synchronous version is kept for compatibility but does not verify port availability.\n * The caller is responsible for stopping any existing process before calling this function.\n */\nexport function startDevServer(options: DevServerOptions): DevServerProcess {\n const { projectId, command, cwd, env } = options;\n\n buildLogger.processManager.processStarting(projectId, command, cwd);\n\n const emitter = new EventEmitter();\n\n // Verify CWD exists\n if (!existsSync(cwd)) {\n const error = new Error(`Working directory does not exist: ${cwd}`);\n buildLogger.processManager.error('Failed to spawn process', error, { projectId });\n emitter.emit('error', error);\n // Return a dummy process since we can't spawn\n return {\n projectId,\n process: null as any,\n emitter,\n port: options.port,\n state: ProcessState.FAILED,\n command,\n cwd,\n startedAt: new Date(),\n failureReason: FailureReason.DIRECTORY_MISSING,\n };\n }\n\n // Use shell to execute the full command (handles complex args better)\n const childProcess = spawn(command, [], {\n cwd,\n env: { ...process.env, ...env },\n stdio: 'pipe',\n shell: '/bin/bash', // Explicitly use bash instead of default shell\n });\n\n if (childProcess.pid) {\n buildLogger.processManager.processStarted(projectId, childProcess.pid);\n }\n\n const devProcess: DevServerProcess = {\n projectId,\n process: childProcess,\n emitter,\n port: options.port,\n state: ProcessState.STARTING,\n command,\n cwd,\n startedAt: new Date(),\n };\n\n activeProcesses.set(projectId, devProcess);\n\n // Register process with API\n if (childProcess.pid) {\n const runnerId = process.env.RUNNER_ID || 'unknown';\n callAPI('/api/runner/process/register', {\n method: 'POST',\n body: JSON.stringify({\n projectId,\n pid: childProcess.pid,\n command,\n runnerId,\n startedAt: new Date().toISOString(),\n }),\n })\n .then(() => {\n buildLogger.log('info', 'process-manager', `Registered process via API: PID ${childProcess.pid}, Runner ${runnerId}`, { pid: childProcess.pid, runnerId, projectId });\n })\n .catch((err: unknown) => {\n buildLogger.log('error', 'process-manager', 'Failed to register process via API', { error: err instanceof Error ? err.message : String(err), projectId });\n });\n }\n\n // Capture early stderr for debugging (first 5 seconds)\n const stderrBuffer: string[] = [];\n const captureWindow = 5000; // 5 seconds\n\n // Handle stdout - just forward logs (port is pre-allocated by API)\n childProcess.stdout?.on('data', (data: Buffer) => {\n const text = data.toString();\n emitter.emit('log', { type: 'stdout', data: text });\n });\n\n // Handle stderr - capture early output for debugging\n childProcess.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n\n // Capture stderr from first 5 seconds for debugging startup failures\n if (Date.now() - devProcess.startedAt.getTime() < captureWindow) {\n stderrBuffer.push(text);\n devProcess.earlyStderr = stderrBuffer.join('');\n }\n\n emitter.emit('log', { type: 'stderr', data: text });\n });\n\n // Handle exit\n childProcess.on('exit', (code, signal) => {\n // Mark as exited\n devProcess.hasExited = true;\n\n // Update state based on exit\n if (code === 0 || devProcess.state === ProcessState.STOPPING) {\n devProcess.state = ProcessState.STOPPED;\n } else {\n devProcess.state = ProcessState.FAILED;\n\n // Classify the failure\n const classification = classifyStartupError(\n new Error(`Process exited with code ${code}, signal ${signal}`),\n devProcess\n );\n devProcess.failureReason = classification.reason;\n\n if (!isSilentMode) {\n buildLogger.log('error', 'process-manager', classification.message, { \n reason: classification.reason,\n suggestion: classification.suggestion,\n projectId \n });\n\n // Log captured stderr if available and process failed quickly\n if (devProcess.earlyStderr && Date.now() - devProcess.startedAt.getTime() < 10000) {\n buildLogger.log('error', 'process-manager', 'Process stderr output', { \n stderr: devProcess.earlyStderr,\n projectId \n });\n }\n }\n }\n\n emitter.emit('exit', { \n code, \n signal, \n state: devProcess.state,\n failureReason: devProcess.failureReason,\n stderr: devProcess.earlyStderr || undefined,\n });\n activeProcesses.delete(projectId);\n\n // Unregister process via API\n callAPI(`/api/runner/process/${projectId}`, {\n method: 'DELETE',\n })\n .then(() => {\n buildLogger.log('info', 'process-manager', 'Unregistered process via API', { projectId });\n })\n .catch((err: unknown) => {\n buildLogger.log('error', 'process-manager', 'Failed to unregister process via API', { error: err instanceof Error ? err.message : String(err), projectId });\n });\n });\n\n // Handle errors\n childProcess.on('error', (error) => {\n devProcess.state = ProcessState.FAILED;\n \n // Classify the error\n const classification = classifyStartupError(error, devProcess);\n devProcess.failureReason = classification.reason;\n \n buildLogger.log('error', 'process-manager', `Process error: ${classification.message}`, { \n reason: classification.reason,\n suggestion: classification.suggestion,\n projectId \n });\n \n emitter.emit('error', error);\n });\n\n return devProcess;\n}\n\n/**\n * Stop a development server for a project with graceful shutdown\n * @param projectId - The project ID to stop\n * @param options - Shutdown options\n * @returns Promise<boolean> - true if stopped, false if no process found\n */\nexport async function stopDevServer(\n projectId: string,\n options?: {\n timeout?: number;\n reason?: string;\n tunnelManager?: any; // TunnelManager instance\n port?: number;\n forceKillPort?: boolean; // If true, kill any process on the port\n }\n): Promise<boolean> {\n const { timeout = 10000, reason = 'manual', tunnelManager, port, forceKillPort = false } = options || {};\n \n const devProcess = activeProcesses.get(projectId);\n if (!devProcess) {\n // Even if no process is tracked, we might need to kill port\n if (forceKillPort && port) {\n const { killProcessOnPort } = await import('../cli/utils/process-killer.js');\n buildLogger.log('info', 'process-manager', `Force killing process on port ${port}`, { port, projectId });\n await killProcessOnPort(port);\n }\n return false;\n }\n\n if (!isSilentMode) {\n buildLogger.log('info', 'process-manager', `Stopping dev server for ${projectId} (reason: ${reason})`, { projectId, reason });\n }\n\n // Update state to STOPPING\n devProcess.state = ProcessState.STOPPING;\n devProcess.stopReason = reason;\n\n // Step 1: Close tunnel first (if tunnelManager and port provided)\n const tunnelPort = port || devProcess.port;\n if (tunnelManager && tunnelPort) {\n try {\n buildLogger.log('info', 'process-manager', `Closing tunnel for port ${tunnelPort}`, { port: tunnelPort, projectId });\n await tunnelManager.closeTunnel(tunnelPort);\n devProcess.tunnelUrl = undefined;\n } catch (error) {\n buildLogger.log('error', 'process-manager', 'Failed to close tunnel', { error: error instanceof Error ? error.message : String(error), projectId });\n // Continue anyway - we still need to stop the process\n }\n }\n\n // Step 2: Send SIGTERM for graceful shutdown\n buildLogger.log('info', 'process-manager', `Sending SIGTERM to PID ${devProcess.process.pid}`, { pid: devProcess.process.pid, projectId });\n devProcess.process.kill('SIGTERM');\n\n // Step 3: Wait for exit with timeout\n const exitPromise = new Promise<void>((resolve) => {\n devProcess.emitter.once('exit', () => resolve());\n });\n\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n\n await Promise.race([exitPromise, timeoutPromise]);\n\n // Step 4: Force kill if still running\n if (devProcess.process.exitCode === null && !devProcess.process.killed) {\n buildLogger.log('warn', 'process-manager', `Process ${projectId} didn't exit gracefully, sending SIGKILL`, { projectId });\n devProcess.process.kill('SIGKILL');\n // Wait a bit for SIGKILL to take effect\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n // Step 5: Force kill port if requested (handles stuck processes)\n if (forceKillPort && tunnelPort) {\n const { killProcessOnPort } = await import('../cli/utils/process-killer.js');\n buildLogger.log('info', 'process-manager', `Force killing any remaining process on port ${tunnelPort}`, { port: tunnelPort, projectId });\n await killProcessOnPort(tunnelPort);\n // Wait for port to be released\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n\n // Step 6: Cleanup\n activeProcesses.delete(projectId);\n \n buildLogger.processManager.processStopped(projectId);\n \n return true;\n}\n\n/**\n * Wait for a port to become available by polling\n * @param port - Port to wait for\n * @param maxWaitMs - Maximum time to wait in milliseconds (default: 10000)\n * @param pollIntervalMs - How often to check in milliseconds (default: 500)\n * @returns Promise<boolean> - true if port became available, false if timeout\n */\nexport async function waitForPortRelease(\n port: number,\n maxWaitMs = 10000,\n pollIntervalMs = 500\n): Promise<boolean> {\n const start = Date.now();\n \n buildLogger.log('info', 'process-manager', `Waiting for port ${port} to be released...`, { port, maxWaitMs });\n \n while (Date.now() - start < maxWaitMs) {\n const inUse = await checkPortInUse(port);\n if (!inUse) {\n const elapsed = Date.now() - start;\n buildLogger.log('info', 'process-manager', `Port ${port} released after ${elapsed}ms`, { port, elapsed });\n return true;\n }\n await new Promise(resolve => setTimeout(resolve, pollIntervalMs));\n }\n \n buildLogger.log('warn', 'process-manager', `Timeout waiting for port ${port} to be released`, { port, maxWaitMs });\n return false;\n}\n\n/**\n * Attempt to fix port configuration in package.json\n * Looks for --port flags in dev/start scripts and replaces with correct port\n * @param cwd - Working directory where package.json is located\n * @param targetPort - The port we want to use\n * @returns true if package.json was modified, false otherwise\n */\nfunction fixPackageJsonPort(cwd: string, targetPort: number): boolean {\n const packageJsonPath = join(cwd, 'package.json');\n \n if (!existsSync(packageJsonPath)) {\n buildLogger.log('debug', 'process-manager', 'No package.json found to fix', { cwd });\n return false;\n }\n\n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content);\n \n if (!packageJson.scripts) {\n buildLogger.log('debug', 'process-manager', 'No scripts section in package.json', { cwd });\n return false;\n }\n\n let modified = false;\n const scripts = packageJson.scripts;\n\n // Common script names that might have port configurations\n const scriptNames = ['dev', 'start', 'serve', 'preview'];\n \n for (const scriptName of scriptNames) {\n if (scripts[scriptName]) {\n const originalScript = scripts[scriptName];\n let newScript = originalScript;\n\n // Pattern 1: --port 3000 or --port=3000\n const portFlagPattern = /--port[=\\s]+\\d+/g;\n if (portFlagPattern.test(originalScript)) {\n newScript = originalScript.replace(portFlagPattern, `--port ${targetPort}`);\n modified = true;\n buildLogger.log('info', 'process-manager', \n `Fixed --port flag in ${scriptName} script`, \n { scriptName, oldScript: originalScript, newScript }\n );\n }\n\n // Pattern 2: -p 3000 or -p=3000 (short form, common in some frameworks)\n const shortPortPattern = /-p[=\\s]+\\d+/g;\n if (shortPortPattern.test(originalScript)) {\n newScript = newScript.replace(shortPortPattern, `-p ${targetPort}`);\n modified = true;\n buildLogger.log('info', 'process-manager', \n `Fixed -p flag in ${scriptName} script`, \n { scriptName, oldScript: originalScript, newScript }\n );\n }\n\n // Pattern 3: PORT=3000 (environment variable inline)\n const envPortPattern = /PORT=\\d+/g;\n if (envPortPattern.test(originalScript)) {\n newScript = newScript.replace(envPortPattern, `PORT=${targetPort}`);\n modified = true;\n buildLogger.log('info', 'process-manager', \n `Fixed PORT env var in ${scriptName} script`, \n { scriptName, oldScript: originalScript, newScript }\n );\n }\n\n scripts[scriptName] = newScript;\n }\n }\n\n if (modified) {\n // Write back with pretty formatting\n const updatedContent = JSON.stringify(packageJson, null, 2) + '\\n';\n writeFileSync(packageJsonPath, updatedContent, 'utf-8');\n buildLogger.log('info', 'process-manager', \n 'Successfully updated package.json with correct port', \n { cwd, targetPort }\n );\n return true;\n }\n\n return false;\n } catch (error) {\n buildLogger.log('error', 'process-manager', \n 'Failed to fix package.json port', \n { error: error instanceof Error ? error.message : String(error), cwd }\n );\n return false;\n }\n}\n\n/**\n * Run health check on a dev server and update state\n * @param projectId - Project ID to health check\n * @param port - Port to check\n * @returns Health check result including whether port was fixed\n */\nexport async function runHealthCheck(projectId: string, port: number): Promise<{\n healthy: boolean;\n error?: string;\n portFixed?: boolean;\n}> {\n const devProcess = activeProcesses.get(projectId);\n if (!devProcess) {\n return { healthy: false, error: 'Process not found', portFixed: false };\n }\n\n const result = await verifyServerHealth(port, projectId);\n\n if (result.healthy) {\n devProcess.state = ProcessState.RUNNING;\n devProcess.lastHealthCheck = new Date();\n return { healthy: true, portFixed: false };\n } else {\n // Health check failed - try to fix package.json port configuration\n buildLogger.log('error', 'process-manager', \n `Health check failed after maximum retries`, \n { projectId, port, error: result.error }\n );\n \n // Attempt to fix port in package.json\n buildLogger.log('info', 'process-manager', \n `Attempting to fix port configuration in package.json`, \n { projectId, port, cwd: devProcess.cwd }\n );\n \n const portFixed = fixPackageJsonPort(devProcess.cwd, port);\n \n if (portFixed) {\n buildLogger.log('info', 'process-manager', \n `Port configuration fixed in package.json, preparing to retry`, \n { projectId, port }\n );\n } else {\n buildLogger.log('warn', 'process-manager', \n `Could not automatically fix port configuration`, \n { projectId, port }\n );\n }\n \n // Mark as failed and kill the process\n devProcess.state = ProcessState.FAILED;\n devProcess.failureReason = FailureReason.HEALTH_CHECK_FAILED;\n \n // Kill the process since it's not responding properly\n if (devProcess.process && !devProcess.hasExited) {\n buildLogger.log('info', 'process-manager', \n `Killing failed process`, \n { projectId }\n );\n devProcess.process.kill('SIGTERM');\n \n // Give it 2 seconds to die gracefully, then SIGKILL\n setTimeout(() => {\n if (devProcess.process && !devProcess.hasExited) {\n buildLogger.log('warn', 'process-manager', \n `Process didn't exit after health check failure, sending SIGKILL`, \n { projectId }\n );\n devProcess.process.kill('SIGKILL');\n }\n }, 2000);\n }\n\n return { \n healthy: false, \n error: result.error,\n portFixed \n };\n }\n}\n\n/**\n * Get active process for a project\n */\nexport function getDevServer(projectId: string): DevServerProcess | undefined {\n return activeProcesses.get(projectId);\n}\n\n/**\n * Get all active project IDs\n */\nexport function getAllActiveProjectIds(): string[] {\n return Array.from(activeProcesses.keys());\n}\n\n/**\n * Stop all running dev servers\n */\nexport async function stopAllDevServers(tunnelManager?: any): Promise<void> {\n const projectIds = getAllActiveProjectIds();\n \n // Stop all processes in parallel\n await Promise.allSettled(\n projectIds.map(projectId => \n stopDevServer(projectId, { \n tunnelManager,\n reason: 'shutdown' \n })\n )\n );\n}\n\n/**\n * Get process state for debugging/monitoring\n */\nexport function getProcessState(projectId: string): ProcessState | undefined {\n return activeProcesses.get(projectId)?.state;\n}\n","import { resolve } from 'node:path';\nimport { existsSync } from 'node:fs';\n\n/**\n * Get the workspace root directory for the runner.\n * This is where projects will be stored.\n */\nexport function getWorkspaceRoot(): string {\n // Check environment variable first\n const envWorkspace = process.env.WORKSPACE_ROOT;\n if (envWorkspace && existsSync(envWorkspace)) {\n return resolve(envWorkspace);\n }\n\n // Default to a workspace directory in the user's home\n const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';\n const defaultWorkspace = resolve(homeDir, 'openbuilder-workspace');\n\n return defaultWorkspace;\n}\n","/**\n * Transform Claude Agent SDK messages into the SSE format expected by the frontend\n * Includes message lifecycle tracking and path violation detection\n */\n\n// Use namespace import for buildLogger to work around CommonJS/ESM interop\nimport * as AgentCore from '@openbuilder/agent-core';\nconst { buildLogger } = AgentCore;\n\ninterface SSEEvent {\n type: string;\n [key: string]: any;\n}\n\ninterface TransformerState {\n currentMessageId: string | null;\n messageStarted: boolean;\n expectedCwd?: string;\n commandMetadata: Map<string, { command?: string }>;\n toolNames: Map<string, string>; // Track tool names by tool call ID\n}\n\n// Track state across transformations\nlet transformerState: TransformerState = {\n currentMessageId: null,\n messageStarted: false,\n commandMetadata: new Map(),\n toolNames: new Map(),\n};\n\nexport function resetTransformerState() {\n transformerState = {\n currentMessageId: null,\n messageStarted: false,\n commandMetadata: new Map(),\n toolNames: new Map(),\n };\n}\n\nexport function setExpectedCwd(cwd: string) {\n transformerState.expectedCwd = cwd;\n}\n\n/**\n * Path violation detection - warns about absolute paths\n */\nfunction detectPathViolations(toolName: string, input: any, expectedCwd?: string) {\n if (!['Bash', 'Read', 'Write', 'Edit'].includes(toolName)) {\n return;\n }\n\n const pathToCheck = input?.command || input?.file_path || input?.path || '';\n\n if (typeof pathToCheck === 'string') {\n // Only warn if absolute path is OUTSIDE the workspace entirely\n if (expectedCwd && pathToCheck.startsWith('/')) {\n // Get workspace root (parent of project directory)\n const workspaceRoot = expectedCwd.split('/').slice(0, -1).join('/');\n\n // Allow paths within workspace (project or parent workspace directory)\n const isWithinWorkspace = pathToCheck.startsWith(expectedCwd) || pathToCheck.startsWith(workspaceRoot);\n\n if (!isWithinWorkspace) {\n buildLogger.transformer.pathViolationWarning(toolName, pathToCheck, workspaceRoot);\n }\n }\n\n // Always warn about Desktop paths (hallucination indicator)\n if (pathToCheck.includes('/Desktop/')) {\n buildLogger.transformer.desktopPathDetected(pathToCheck);\n }\n }\n}\n\nexport function transformAgentMessageToSSE(agentMessage: any): SSEEvent[] {\n const events: SSEEvent[] = [];\n\n if (agentMessage.type === 'assistant' && agentMessage.message) {\n const message = agentMessage.message;\n const assistantMessageId = message.id || `msg-${Date.now()}`;\n\n // Start new message if this is a different message ID\n if (assistantMessageId !== transformerState.currentMessageId) {\n // Finish previous message if one was open\n if (transformerState.messageStarted && transformerState.currentMessageId) {\n events.push({\n type: 'finish',\n });\n }\n\n // Start new message\n transformerState.currentMessageId = assistantMessageId;\n transformerState.messageStarted = true;\n events.push({\n type: 'start',\n messageId: assistantMessageId,\n });\n }\n\n // Process each content block\n if (message.content && Array.isArray(message.content)) {\n /**\n * Extract JSON with balanced braces for TODO_WRITE markers\n */\n const extractBalancedJsonForMarker = (text: string, startPos: number): { json: string; endPos: number } | null => {\n let braceCount = 0;\n let inString = false;\n let escapeNext = false;\n let startBraceFound = false;\n\n for (let i = startPos; i < text.length; i++) {\n const char = text[i];\n\n if (escapeNext) {\n escapeNext = false;\n continue;\n }\n\n if (char === '\\\\') {\n escapeNext = true;\n continue;\n }\n\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n\n if (inString) continue;\n\n if (char === '{') {\n if (!startBraceFound) startBraceFound = true;\n braceCount++;\n } else if (char === '}') {\n braceCount--;\n if (braceCount === 0 && startBraceFound) {\n // Found matching closing brace\n return {\n json: text.substring(startPos, i + 1),\n endPos: i + 1\n };\n }\n }\n }\n\n return null; // No matching brace found\n };\n\n const processTodoWriteMarkers = (text: string) => {\n let cleaned = '';\n let lastIndex = 0;\n\n // Find all TODO_WRITE markers\n const markerPattern = /TODO_WRITE\\s*:\\s*/g;\n let match: RegExpExecArray | null;\n\n while ((match = markerPattern.exec(text)) !== null) {\n const matchEnd = match.index + match[0].length;\n\n // Extract balanced JSON starting after the colon\n const extracted = extractBalancedJsonForMarker(text, matchEnd);\n\n if (!extracted) {\n if (process.env.DEBUG_BUILD === '1') {\n console.warn('⚠️ Failed to find balanced JSON for TODO_WRITE marker at position', match.index);\n }\n continue;\n }\n\n const jsonText = extracted.json;\n const fullMatch = text.substring(match.index, extracted.endPos);\n\n try {\n const payload = JSON.parse(jsonText);\n const toolCallId =\n typeof payload.toolCallId === 'string' && payload.toolCallId.length > 0\n ? payload.toolCallId\n : `codex-todo-${Date.now()}-${Math.random().toString(16).slice(2)}`;\n\n events.push({\n type: 'tool-input-available',\n toolCallId,\n toolName: 'TodoWrite',\n input: payload,\n });\n\n if (process.env.DEBUG_BUILD === '1') {\n console.log('✅ Parsed TODO_WRITE with', payload.todos?.length || 0, 'todos');\n }\n } catch (error) {\n if (process.env.DEBUG_BUILD === '1') {\n console.warn('⚠️ Failed to parse TODO_WRITE payload:', error);\n console.warn(' JSON (first 200 chars):', jsonText.substring(0, 200));\n }\n }\n\n cleaned += text.slice(lastIndex, match.index);\n lastIndex = extracted.endPos;\n }\n\n cleaned += text.slice(lastIndex);\n return cleaned;\n };\n\n for (const block of message.content) {\n if (block.type === 'text' && block.text) {\n let text = String(block.text);\n\n // CRITICAL: Remove ALL task status formats from text BEFORE processing\n // We handle task status via synthetic TodoWrite events in the runner\n // Any task status in the text should be ignored to prevent conflicts\n\n text = processTodoWriteMarkers(text);\n\n // Remove old XML format completely\n text = text.replace(/<start-todolist>[\\s\\S]*?<\\/start-todolist>/g, '').trim();\n text = text.replace(/<end-todolist>/g, '').trim();\n\n // Remove new structured format completely\n text = text.replace(/---TASK_STATUS---[\\s\\S]*?---END_TASK_STATUS---/g, '').trim();\n\n // DO NOT PARSE TASK STATUS FROM TEXT\n // The runner sends synthetic TodoWrite events with the authoritative state\n // Parsing from text causes stale/incorrect data\n\n const trimmed = text.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n const textBlockId = `${assistantMessageId}-text-${Date.now()}-${Math.random()}`;\n\n // Send all text as regular text-delta events for the chat\n // The UI will handle displaying it appropriately\n events.push({\n type: 'text-start',\n id: textBlockId,\n });\n\n events.push({\n type: 'text-delta',\n id: textBlockId,\n delta: text,\n });\n\n events.push({\n type: 'text-end',\n id: textBlockId,\n });\n } else if (block.type === 'tool_use') {\n // Detect path violations\n detectPathViolations(block.name, block.input, transformerState.expectedCwd);\n\n // Store tool name for later retrieval when output arrives\n transformerState.toolNames.set(block.id, block.name);\n\n // Send tool input with available state\n events.push({\n type: 'tool-input-available',\n toolCallId: block.id,\n toolName: block.name,\n input: block.input,\n });\n\n if (block.name === 'command_execution') {\n const command =\n typeof block.input?.command === 'string'\n ? block.input.command\n : '';\n transformerState.commandMetadata.set(block.id, { command });\n\n events.push({\n type: 'command_start',\n command,\n id: block.id,\n });\n }\n }\n }\n }\n } else if (agentMessage.type === 'user' && agentMessage.message) {\n // Process tool results\n const message = agentMessage.message;\n if (message.content && Array.isArray(message.content)) {\n for (const block of message.content) {\n if (block.type === 'tool_result') {\n const toolId = block.tool_use_id;\n let output = block.content;\n if (Array.isArray(output)) {\n output = output\n .map((c: any) => (typeof c?.text === 'string' ? c.text : JSON.stringify(c)))\n .join('\\n');\n } else if (typeof output !== 'string') {\n output = JSON.stringify(output);\n }\n\n // Process TodoWrite markers in command outputs\n if (typeof output === 'string' && output.includes('TODO_WRITE')) {\n const regex = /TODO_WRITE\\s*:\\s*(\\{[\\s\\S]*?\\})(?=$|\\n)/g;\n let match: RegExpExecArray | null;\n while ((match = regex.exec(output)) !== null) {\n try {\n const payload = JSON.parse(match[1]);\n events.push({\n type: 'tool-input-available',\n toolCallId: payload.toolCallId ?? toolId ?? `todo-${Date.now()}`,\n toolName: 'TodoWrite',\n input: payload,\n });\n } catch (error) {\n if (process.env.DEBUG_BUILD === '1') console.warn('⚠️ Failed to parse TODO_WRITE payload from tool result:', error);\n }\n }\n }\n\n // Retrieve stored tool name for this tool call\n const toolName = transformerState.toolNames.get(block.tool_use_id);\n\n events.push({\n type: 'tool-output-available',\n toolCallId: block.tool_use_id,\n toolName, // Include tool name so API can broadcast to WebSocket\n output, // Use processed string output, not raw block.content\n });\n\n // Clean up tool name after use\n if (toolName) {\n transformerState.toolNames.delete(block.tool_use_id);\n }\n\n const commandMeta = transformerState.commandMetadata.get(toolId);\n if (commandMeta) {\n events.push({\n type: 'command_complete',\n id: toolId,\n command: commandMeta.command,\n output,\n exitCode: block.exit_code,\n status: block.status ?? (block.is_error ? 'failed' : 'completed'),\n });\n transformerState.commandMetadata.delete(toolId);\n }\n }\n }\n }\n } else if (agentMessage.type === 'result') {\n // Finish the current message if still open\n if (transformerState.messageStarted && transformerState.currentMessageId) {\n events.push({\n type: 'finish',\n });\n transformerState.messageStarted = false;\n transformerState.currentMessageId = null;\n }\n\n // Final result message\n events.push({\n type: 'result',\n result: agentMessage.result,\n });\n }\n\n return events;\n}\n","import { streamLog } from './file-logger.js';\nimport * as Sentry from '@sentry/node';\n\n// Debug logging helper - suppressed in TUI mode (SILENT_MODE=1)\nconst debugLog = (message: string) => {\n if (process.env.SILENT_MODE !== '1' && process.env.DEBUG_BUILD === '1') {\n debugLog(message);\n }\n};\n\n/**\n * Truncate strings for logging to prevent excessive output\n */\nfunction truncate(str: string, maxLength: number = 200): string {\n if (str.length <= maxLength) return str;\n return str.substring(0, maxLength) + '...';\n}\n\n/**\n * Truncate JSON objects for logging\n */\nfunction truncateJSON(obj: unknown, maxLength: number = 200): string {\n const json = JSON.stringify(obj, null, 2);\n return truncate(json, maxLength);\n}\n\n/**\n * Adapter to transform AI SDK fullStream events into the format expected by our message transformer\n *\n * AI SDK stream events have types like:\n * - start, start-step, stream-start, response-metadata\n * - tool-input-start, tool-input-delta, tool-input-end\n * - tool-call, tool-error, tool-result\n * - text-start, text-delta, text-end\n * - finish, finish-step, error\n *\n * We need to transform these into the format the message transformer expects:\n * {\n * type: 'assistant',\n * message: {\n * id: '...',\n * content: [\n * { type: 'text', text: '...' },\n * { type: 'tool_use', id: '...', name: '...', input: {...} },\n * ]\n * }\n * }\n */\n\ninterface AISDKStreamPart {\n type: string;\n [key: string]: unknown;\n}\n\ninterface AssistantMessage {\n type: 'assistant';\n message: {\n id: string;\n content: Array<{\n type: string;\n text?: string;\n id?: string;\n name?: string;\n input?: unknown;\n tool_use_id?: string;\n content?: string;\n }>;\n };\n}\n\ninterface UserMessage {\n type: 'user';\n message: {\n id: string;\n content: Array<{\n type: string;\n tool_use_id?: string;\n content?: string;\n is_error?: boolean;\n }>;\n };\n}\n\ntype TransformedMessage = AssistantMessage | UserMessage;\n\n/**\n * Transforms AI SDK stream events into messages compatible with our message transformer\n */\nexport async function* transformAISDKStream(\n stream: AsyncIterable<AISDKStreamPart>\n): AsyncGenerator<TransformedMessage, void, unknown> {\n const DEBUG = process.env.DEBUG_BUILD === '1';\n\n let currentMessageId: string = `msg-${Date.now()}`; // Always have a default ID\n let currentTextContent = '';\n const toolInputBuffer: Map<string, { name: string; input: string }> = new Map();\n const toolResults: Map<string, unknown> = new Map();\n let eventCount = 0;\n let yieldCount = 0;\n\n // Track active tool spans for proper duration measurement\n const activeToolSpans: Map<string, Sentry.Span> = new Map();\n\n // ALWAYS log start - write to stderr to bypass TUI console interceptor\n debugLog('[runner] [ai-sdk-adapter] ✅ Starting stream transformation...\\n');\n streamLog.info('━━━ STREAM TRANSFORMATION STARTED ━━━');\n\n for await (const part of stream) {\n eventCount++;\n\n // Log ALL events to file (first 50)\n if (eventCount <= 50) {\n streamLog.event(eventCount, part.type, part);\n }\n\n // DEBUG: Log first 20 events with full JSON to see what we're actually getting\n if (DEBUG && eventCount <= 20) {\n debugLog(`[runner] [ai-sdk-adapter] Event #${eventCount}: type=\"${part.type}\"\\n`);\n debugLog(`[runner] [ai-sdk-adapter] Full JSON: ${truncateJSON(part, 500)}\\n`);\n }\n\n if (DEBUG) console.log('[ai-sdk-adapter] Event:', part.type, part);\n\n // DEBUG: Log every 10 events to show progress\n if (DEBUG && eventCount % 10 === 0) {\n debugLog(`[runner] [ai-sdk-adapter] Processed ${eventCount} events, yielded ${yieldCount} messages\\n`);\n }\n\n switch (part.type) {\n case 'start':\n case 'start-step':\n // Update message ID if provided\n if (part.id) {\n currentMessageId = part.id as string;\n if (DEBUG) debugLog(`[runner] [ai-sdk-adapter] Updated message ID: ${currentMessageId}\\n`);\n }\n break;\n\n case 'text-start':\n // Capture message ID from text-start event\n if (part.id) {\n currentMessageId = part.id as string;\n if (DEBUG) debugLog(`[runner] [ai-sdk-adapter] Message ID from text-start: ${currentMessageId}\\n`);\n }\n break;\n\n case 'text-delta':\n // Just accumulate text content - DON'T yield for every token!\n // We'll only yield when there's a tool call or the message finishes\n const textChunk = part.delta ?? part.text ?? part.textDelta;\n if (typeof textChunk === 'string') {\n currentTextContent += textChunk;\n\n // Update message ID if provided in the event\n if (part.id) {\n currentMessageId = part.id as string;\n }\n }\n break;\n\n case 'tool-input-start':\n // Start buffering tool input\n toolInputBuffer.set(part.id as string, {\n name: part.toolName as string,\n input: '',\n });\n break;\n\n case 'tool-input-delta':\n // Accumulate tool input\n const buffer = toolInputBuffer.get(part.id as string) as { name: string; input: string } | undefined;\n if (buffer) {\n buffer.input += part.delta || '';\n }\n break;\n\n case 'tool-input-end':\n case 'tool-call':\n // Tool call is complete - emit it\n const toolCallId = part.toolCallId || part.id;\n const toolName = part.toolName as string;\n let toolInput = part.args || part.input;\n\n // If we have buffered input, parse it\n if (!toolInput && toolInputBuffer.has(toolCallId as string) && typeof toolCallId === 'string') {\n const buffered = toolInputBuffer.get(toolCallId) as { name: string; input?: string } | undefined;\n if (buffered?.input) {\n if (typeof buffered.input === 'string') {\n try {\n toolInput = JSON.parse(buffered.input) as unknown;\n } catch {\n toolInput = { raw: buffered.input };\n }\n }\n try {\n toolInput = JSON.parse(buffered.input) as unknown;\n } catch {\n toolInput = { raw: buffered.input };\n }\n }\n toolInputBuffer.delete(toolCallId as string);\n }\n\n if (toolName) {\n // First, yield any accumulated text as a separate message\n if (currentTextContent.trim().length > 0) {\n const textMessage = {\n type: 'assistant' as const,\n message: {\n id: currentMessageId,\n content: [{ type: 'text', text: currentTextContent }],\n },\n };\n yieldCount++;\n debugLog(`[runner] [ai-sdk-adapter] 💬 Yielding text before tool: ${currentTextContent.length} chars\\n`);\n yield textMessage;\n // Reset so it's not included in the tool message\n currentTextContent = '';\n }\n\n // Now yield the tool call as a separate message\n const toolMessage = {\n type: 'assistant' as const,\n message: {\n id: `${currentMessageId}-tool-${toolCallId}`,\n content: [\n {\n type: 'tool_use',\n id: toolCallId,\n name: toolName,\n input: toolInput || {},\n },\n ],\n },\n };\n yieldCount++;\n debugLog(`[runner] [ai-sdk-adapter] 🔧 Tool call: ${toolName}\\n`);\n debugLog(`[runner] [ai-sdk-adapter] Tool input: ${truncateJSON(toolInput)}\\n`);\n\n // Log to file\n streamLog.yield('tool-call', { toolName, toolCallId, toolInput, message: toolMessage });\n\n yield toolMessage as TransformedMessage;\n }\n break;\n\n case 'tool-result':\n // Store tool result\n const resultId = part.toolCallId;\n const toolResult = part.result ?? part.output;\n toolResults.set(resultId as string, toolResult as unknown);\n\n // Emit tool result as a user message\n const resultMessage = {\n type: 'user' as const,\n message: {\n id: `result-${resultId}`,\n content: [\n {\n type: 'tool_result',\n tool_use_id: resultId,\n content: JSON.stringify(toolResult),\n },\n ],\n },\n };\n yieldCount++;\n debugLog(`[runner] [ai-sdk-adapter] 📥 Tool result for: ${part.toolName || resultId}\\n`);\n\n // Special handling for verbose tool results\n if (part.toolName === 'TodoWrite') {\n debugLog(`[runner] [ai-sdk-adapter] Result: ✓ Todos updated\\n`);\n } else {\n debugLog(`[runner] [ai-sdk-adapter] Result: ${truncateJSON(toolResult)}\\n`);\n }\n\n yield resultMessage as UserMessage;\n break;\n\n case 'tool-error':\n\n // Emit tool error as a user message\n const errorId = part.toolCallId || part.id;\n const errorMessage = {\n type: 'user' as const,\n message: {\n id: `error-${errorId}`,\n content: [\n {\n type: 'tool_result',\n tool_use_id: errorId,\n content: JSON.stringify({ error: part.error }),\n is_error: true,\n },\n ],\n },\n };\n yieldCount++;\n debugLog(`[runner] [ai-sdk-adapter] ⚠️ Tool error: ${part.toolName || errorId}\\n`);\n debugLog(`[runner] [ai-sdk-adapter] Error: ${truncate(JSON.stringify(part.error), 150)}\\n`);\n yield errorMessage as UserMessage;\n break;\n\n case 'text-end':\n // Text block is complete - yield the accumulated text\n if (currentTextContent.trim().length > 0) {\n const message = {\n type: 'assistant' as const,\n message: {\n id: currentMessageId,\n content: [{ type: 'text', text: currentTextContent }],\n },\n };\n yieldCount++;\n debugLog(`[runner] [ai-sdk-adapter] Yielding complete text block: ${currentTextContent.length} chars\\n`);\n yield message as TransformedMessage;\n // Reset text content for next block\n currentTextContent = '';\n }\n break;\n\n case 'finish':\n case 'finish-step':\n // Final message - yield any remaining text\n if (currentTextContent.trim().length > 0) {\n yieldCount++;\n if (DEBUG) debugLog(`[runner] [ai-sdk-adapter] Yielding final text: ${currentTextContent.length} chars\\n`);\n yield {\n type: 'assistant' as const,\n message: {\n id: currentMessageId,\n content: [{ type: 'text', text: currentTextContent }],\n },\n };\n }\n break;\n\n case 'error':\n // Emit error\n const errorPayload = part.error ?? { message: 'Unknown Claude stream error' };\n const errorText =\n typeof errorPayload === 'object' && errorPayload !== null\n ? JSON.stringify(errorPayload)\n : String(errorPayload);\n\n const wrappedError = new Error(`Claude stream error: ${errorText}`);\n Object.assign(wrappedError, { cause: errorPayload });\n\n debugLog(`[runner] [ai-sdk-adapter] ❌ Stream error: ${errorText}\\n`);\n throw wrappedError;\n\n // Ignore other event types\n case 'stream-start':\n case 'response-metadata':\n break;\n\n default:\n // Log unknown event types for debugging\n if (process.env.DEBUG_BUILD === '1') {\n console.log('[ai-sdk-adapter] Unknown event type:', part.type);\n }\n break;\n }\n }\n\n // Clean up any orphaned tool spans (tool calls that never received results)\n if (activeToolSpans.size > 0) {\n debugLog(`[runner] [ai-sdk-adapter] ⚠️ Cleaning up ${activeToolSpans.size} orphaned tool spans\\n`);\n for (const [toolId, span] of activeToolSpans) {\n span.setStatus({ code: 2, message: 'Tool execution incomplete - no result received' });\n span.end();\n debugLog(`[runner] [ai-sdk-adapter] 📊 Ended orphaned span: ${toolId}\\n`);\n }\n activeToolSpans.clear();\n }\n\n // DEBUG: Log completion stats\n if (DEBUG) {\n debugLog(`[runner] [ai-sdk-adapter] ✅ Stream complete - processed ${eventCount} events, yielded ${yieldCount} messages\\n`);\n }\n\n streamLog.info('━━━ STREAM TRANSFORMATION COMPLETE ━━━');\n streamLog.info(`Total events: ${eventCount}`);\n streamLog.info(`Total yields: ${yieldCount}`);\n}\n","/**\n * Adapter to transform Codex SDK events into the unified format expected by message transformer\n *\n * Codex SDK uses a different event structure than AI SDK:\n * - thread.runStreamed().events yields ThreadEvent types\n * - We need to transform these to match our unified message format\n *\n * This allows the frontend to work with both Claude (AI SDK) and Codex (Codex SDK)\n * without knowing the difference.\n */\n\nimport { fileLog, streamLog } from './file-logger.js';\n\n// Use Codex SDK's actual event type (it's a union of various event types)\n// Since we can't import types from Codex SDK directly, we use a flexible type\ntype CodexThreadEvent = {\n type: string;\n item?: {\n type?: string;\n id?: string;\n text?: string;\n command?: string;\n aggregated_output?: string;\n exit_code?: number;\n status?: string;\n changes?: unknown[];\n // MCP tool call fields\n server?: string;\n tool?: string;\n query?: unknown;\n arguments?: unknown;\n // Web search fields\n search_query?: string;\n results?: unknown[];\n // Error fields\n error?: string;\n error_type?: string;\n error_code?: string;\n stack?: string;\n message?: string;\n // Todo list fields\n items?: unknown[];\n [key: string]: unknown;\n };\n thread_id?: string;\n usage?: unknown;\n finalResponse?: string;\n error?: unknown;\n message?: string;\n [key: string]: unknown;\n}\n\ninterface TransformedMessage {\n type: 'assistant' | 'user';\n message: {\n id: string;\n content: Array<{\n type: string;\n text?: string;\n id?: string;\n name?: string;\n input?: any;\n tool_use_id?: string;\n content?: string;\n is_error?: boolean;\n }>;\n };\n}\n\n/**\n * Extract item type from Codex event\n */\nfunction getItemType(item: CodexThreadEvent['item']): string {\n if (!item) return '';\n if (typeof item.type === 'string') return item.type;\n return '';\n}\n\n/**\n * Extract tool call ID from item\n */\nfunction getToolId(item: CodexThreadEvent['item']): string {\n if (!item) return `tool-${Date.now()}`;\n const candidates = ['id', 'tool_call_id', 'item_id'];\n for (const key of candidates) {\n const value = item[key];\n if (typeof value === 'string' && value.length > 0) return value;\n }\n return `tool-${Date.now()}`;\n}\n\n/**\n * Extract tool input from item\n */\nfunction getToolInput(item: CodexThreadEvent['item']): any {\n if (!item) return {};\n const candidates = ['arguments', 'args', 'input'];\n for (const key of candidates) {\n const value = item[key];\n if (value !== undefined) return value;\n }\n return {};\n}\n\n/**\n * Extract tool output from item\n */\nfunction getToolOutput(item: CodexThreadEvent['item']): any {\n if (!item) return null;\n const candidates = ['aggregated_output', 'output', 'result', 'content'];\n for (const key of candidates) {\n const value = item[key];\n if (value !== undefined) return value;\n }\n return null;\n}\n\n/**\n * Helper to extract command name and filename from a full command string\n * Example: \"cd /path/to/project && npm install\" -> \"npm install\"\n * Example: \"cat /long/path/to/file.ts\" -> \"cat file.ts\"\n */\nfunction simplifyCommand(fullCommand: string): string {\n // Remove cd commands and everything before &&\n let cmd = fullCommand.replace(/^.*&&\\s*/, '').trim();\n \n // Strip leading and trailing quotes (single or double)\n cmd = cmd.replace(/^[\"']|[\"']$/g, '');\n \n // For file operation commands (cat, grep, edit, etc.), extract just filename\n const fileOpMatch = cmd.match(/^(\\w+)\\s+(.+)$/);\n if (fileOpMatch) {\n const [, command, args] = fileOpMatch;\n // Split by spaces to handle multiple arguments\n const argParts = args.split(/\\s+/);\n const simplifiedArgs = argParts.map(arg => {\n // Strip quotes from individual arguments\n const cleanArg = arg.replace(/^[\"']|[\"']$/g, '');\n // If it looks like a file path, extract basename\n if (cleanArg.includes('/')) {\n return cleanArg.split('/').pop() || cleanArg;\n }\n return cleanArg;\n });\n return `${command} ${simplifiedArgs.join(' ')}`;\n }\n \n return cmd;\n}\n\n/**\n * Helper to extract just the filename from a path\n */\nfunction getBasename(path: string): string {\n return path.split('/').pop() || path;\n}\n\n/**\n * Convert JavaScript object notation to strict JSON\n * Handles unquoted keys like: { todos: [...] } → { \"todos\": [...] }\n */\nfunction convertJSObjectToJSON(text: string): string {\n // Replace unquoted keys with quoted keys\n // Match pattern: word characters followed by colon (but not inside strings)\n return text.replace(/([{,]\\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*:/g, '$1\"$2\":');\n}\n\n/**\n * Extract JSON with balanced braces starting from a position\n * Returns the JSON string and the end position, or null if invalid\n */\nfunction extractBalancedJson(text: string, startPos: number): { json: string; endPos: number } | null {\n let braceCount = 0;\n let inString = false;\n let escapeNext = false;\n let startBraceFound = false;\n\n for (let i = startPos; i < text.length; i++) {\n const char = text[i];\n\n if (escapeNext) {\n escapeNext = false;\n continue;\n }\n\n if (char === '\\\\') {\n escapeNext = true;\n continue;\n }\n\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n\n if (inString) continue;\n\n if (char === '{') {\n if (!startBraceFound) startBraceFound = true;\n braceCount++;\n } else if (char === '}') {\n braceCount--;\n if (braceCount === 0 && startBraceFound) {\n // Found matching closing brace\n return {\n json: text.substring(startPos, i + 1),\n endPos: i + 1\n };\n }\n }\n }\n\n return null; // No matching brace found\n}\n\n/**\n * Extract TodoWrite calls from Codex text and convert to TODO_WRITE marker format\n *\n * Codex outputs: TodoWrite({ \"todos\": [...] })\n * We need: TODO_WRITE : {\"todos\": [...]}\n *\n * This allows the message transformer to recognize and process todo updates\n */\nfunction extractAndConvertTodoWrite(text: string): string {\n if (!text) return text;\n\n let result = text;\n const replacements: Array<{ original: string; replacement: string; startPos: number }> = [];\n\n // Find all TodoWrite occurrences\n const todoWritePattern = /TodoWrite\\s*\\(/g;\n let match: RegExpExecArray | null;\n\n while ((match = todoWritePattern.exec(text)) !== null) {\n const matchStart = match.index;\n const matchEnd = match.index + match[0].length;\n\n // Extract balanced JSON starting after the opening paren\n const extracted = extractBalancedJson(text, matchEnd);\n\n if (!extracted) {\n streamLog.warn(`[Codex Adapter] Failed to find matching braces for TodoWrite at position ${matchStart}`);\n continue;\n }\n\n // Check if there's a closing paren after the JSON\n const nextChar = text[extracted.endPos];\n if (nextChar !== ')') {\n streamLog.warn(`[Codex Adapter] Expected ')' after TodoWrite JSON at position ${extracted.endPos}`);\n continue;\n }\n\n const jsonText = extracted.json;\n const fullMatch = text.substring(matchStart, extracted.endPos + 1);\n\n try {\n // Convert JS object notation to strict JSON (handles unquoted keys)\n const strictJSON = convertJSObjectToJSON(jsonText);\n\n // Validate that it's valid JSON\n const parsed = JSON.parse(strictJSON);\n\n // Check if it has the expected todos structure\n if (parsed.todos && Array.isArray(parsed.todos)) {\n // Validate todos have required fields\n const validTodos = parsed.todos.filter((t: any) =>\n t && typeof t === 'object' && (t.content || t.activeForm)\n );\n\n if (validTodos.length > 0) {\n // Convert to TODO_WRITE marker format using STRICT JSON\n const todoWriteMarker = `TODO_WRITE : ${strictJSON}`;\n replacements.push({ original: fullMatch, replacement: todoWriteMarker, startPos: matchStart });\n\n streamLog.info(`[Codex Adapter] Extracted TodoWrite with ${validTodos.length} todos`);\n streamLog.info(`[Codex Adapter] JSON length: ${strictJSON.length} chars`);\n streamLog.info(`[Codex Adapter] First todo: ${JSON.stringify(validTodos[0])}`);\n } else {\n streamLog.warn('[Codex Adapter] TodoWrite has no valid todos, skipping');\n }\n }\n } catch (error) {\n // If JSON is invalid, leave it as-is\n streamLog.warn('[Codex Adapter] Failed to parse TodoWrite JSON:', error);\n streamLog.warn('[Codex Adapter] Original JSON (first 200 chars):', jsonText.substring(0, 200));\n streamLog.warn('[Codex Adapter] Converted JSON (first 200 chars):', convertJSObjectToJSON(jsonText).substring(0, 200));\n }\n }\n\n // Apply all replacements in reverse order to preserve positions\n for (const { original, replacement } of replacements.reverse()) {\n result = result.replace(original, replacement);\n }\n\n // ALSO extract from JSON code blocks: ```json\\n{\"todos\":[...]}\\n```\n const codeBlockPattern = /```json\\s*\\n([\\s\\S]*?)\\n```/g;\n let codeBlockMatch: RegExpExecArray | null;\n\n while ((codeBlockMatch = codeBlockPattern.exec(result)) !== null) {\n const jsonText = codeBlockMatch[1].trim();\n\n try {\n // Convert JS object notation to strict JSON\n const strictJSON = convertJSObjectToJSON(jsonText);\n const parsed = JSON.parse(strictJSON);\n\n // Check if it's a todos array (with or without wrapper)\n const todosArray = parsed.todos || (Array.isArray(parsed) ? parsed : null);\n\n if (todosArray && Array.isArray(todosArray)) {\n const validTodos = todosArray.filter((t: any) =>\n t && typeof t === 'object' && (t.content || t.activeForm)\n );\n\n if (validTodos.length > 0) {\n // Convert code block to TODO_WRITE marker\n const todoWriteMarker = `TODO_WRITE : ${JSON.stringify({ todos: validTodos })}`;\n result = result.replace(codeBlockMatch[0], todoWriteMarker);\n\n streamLog.info(`[Codex Adapter] Extracted ${validTodos.length} todos from JSON code block`);\n streamLog.info(`[Codex Adapter] First todo: ${JSON.stringify(validTodos[0])}`);\n }\n }\n } catch (error) {\n // Not a valid todos structure, leave code block as-is\n streamLog.warn('[Codex Adapter] Code block is not valid todos JSON:', error);\n }\n }\n\n // ALSO extract standalone JSON objects: {\"todos\":[...]}\n // Codex often outputs these directly without TodoWrite() wrapper or code blocks\n // Look for objects that start with {\"todos\" (more specific than just any brace)\n const standaloneJsonPattern = /\\{\\s*[\"']?todos[\"']?\\s*:/g;\n let jsonMatch: RegExpExecArray | null;\n const standaloneReplacements: Array<{ original: string; replacement: string }> = [];\n\n while ((jsonMatch = standaloneJsonPattern.exec(result)) !== null) {\n // Start position is the opening brace (first character of the match)\n const startPos = jsonMatch.index;\n \n // Try to extract balanced JSON starting from the brace\n const extracted = extractBalancedJson(result, startPos);\n \n if (!extracted) {\n continue;\n }\n\n try {\n // Convert JS object notation to strict JSON\n const strictJSON = convertJSObjectToJSON(extracted.json);\n const parsed = JSON.parse(strictJSON);\n\n // Check if it's a todos structure\n if (parsed.todos && Array.isArray(parsed.todos)) {\n const validTodos = parsed.todos.filter((t: any) =>\n t && typeof t === 'object' && (t.content || t.activeForm)\n );\n\n if (validTodos.length > 0) {\n // Convert to TODO_WRITE marker\n const todoWriteMarker = `TODO_WRITE : ${JSON.stringify({ todos: validTodos })}`;\n standaloneReplacements.push({\n original: extracted.json,\n replacement: todoWriteMarker\n });\n\n streamLog.info(`[Codex Adapter] Extracted ${validTodos.length} todos from standalone JSON`);\n streamLog.info(`[Codex Adapter] First todo: ${JSON.stringify(validTodos[0])}`);\n }\n }\n } catch (error) {\n // Not valid JSON or not a todos structure, continue searching\n continue;\n }\n }\n\n // Apply standalone replacements\n for (const { original, replacement } of standaloneReplacements) {\n result = result.replace(original, replacement);\n }\n\n return result;\n}\n\n/**\n * Transform Codex SDK event stream to unified message format\n * \n * IMPORTANT: This function must consume the entire event stream directly from\n * thread.runStreamed().events to preserve Sentry's async context for AI spans.\n * Do NOT wrap individual events in intermediate generators as this breaks the\n * AsyncLocalStorage context that Sentry uses for instrumentation.\n * \n * ✅ Correct: transformCodexStream(streamedTurn.events)\n * ❌ Incorrect: for (event of events) { transformCodexStream(singleEvent()) }\n * \n * @param stream AsyncIterable of ThreadEvent from Codex SDK\n */\nexport async function* transformCodexStream(\n stream: AsyncIterable<any> // Use any to avoid type conflicts with Codex SDK's ThreadEvent union\n): AsyncGenerator<TransformedMessage, void, unknown> {\n let currentMessageId = `codex-${Date.now()}`;\n let eventCount = 0;\n let yieldCount = 0;\n\n // Track in-progress tools to match started → completed events\n const inProgressTools = new Map<string, {\n type: string;\n command?: string;\n changes?: any[];\n }>();\n\n streamLog.info('━━━ CODEX STREAM TRANSFORMATION STARTED ━━━');\n\n for await (const event of stream) {\n eventCount++;\n\n // Log first 50 events\n if (eventCount <= 50) {\n streamLog.event(eventCount, event.type, event);\n }\n\n const itemType = getItemType(event.item);\n\n // Handle different Codex event types\n switch (event.type) {\n case 'item.started': {\n // Tool execution started - emit tool call\n if (!event.item) break;\n\n const toolId = getToolId(event.item);\n const itemType = event.item.type;\n\n if (itemType === 'command_execution') {\n const fullCommand = event.item.command || '';\n const displayCommand = simplifyCommand(fullCommand);\n \n // Store tool info for matching with completion\n inProgressTools.set(toolId, {\n type: 'command_execution',\n command: fullCommand,\n });\n\n // Emit tool call immediately with simplified command for display\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: 'Bash',\n input: { command: displayCommand },\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('tool-call-start', { toolName: 'Bash', toolId, command: displayCommand });\n yield toolMessage;\n } else if (itemType === 'file_change') {\n // Store file change info\n const changes = event.item.changes || [];\n inProgressTools.set(toolId, {\n type: 'file_change',\n changes,\n });\n\n // Emit tool call immediately with simplified paths for display\n const displayPaths = changes.map((c: any) => getBasename(c.path)).join(', ');\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: 'Write',\n input: { paths: displayPaths },\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('tool-call-start', { toolName: 'Write', toolId, paths: displayPaths });\n yield toolMessage;\n } else if (itemType === 'mcp_tool_call') {\n // MCP tool call started\n const mcpToolName = event.item.tool || event.item.server || 'MCPTool';\n const mcpQuery = event.item.query || event.item.arguments || {};\n \n inProgressTools.set(toolId, {\n type: 'mcp_tool_call',\n });\n\n // Emit tool call immediately\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: mcpToolName,\n input: mcpQuery,\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('tool-call-start', { \n toolName: mcpToolName, \n toolId, \n server: event.item.server,\n tool: event.item.tool,\n });\n yield toolMessage;\n } else if (itemType === 'web_search') {\n // Web search started\n const searchQuery = event.item.query || event.item.search_query || '';\n \n inProgressTools.set(toolId, {\n type: 'web_search',\n });\n\n // Emit tool call immediately\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: 'WebSearch',\n input: { query: searchQuery },\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('tool-call-start', { \n toolName: 'WebSearch', \n toolId, \n query: searchQuery,\n });\n yield toolMessage;\n }\n\n // Update message ID\n if (event.item) {\n currentMessageId = `codex-${Date.now()}-${toolId}`;\n }\n break;\n }\n\n case 'turn.started':\n // New turn started\n if (event.item) {\n currentMessageId = `codex-${Date.now()}-${getToolId(event.item)}`;\n }\n break;\n\n case 'item.completed': {\n // Tool execution completed - emit tool result only\n if (!event.item) break;\n\n const itemType = event.item.type;\n const toolId = getToolId(event.item);\n\n // Handle different Codex item types\n if (itemType === 'command_execution') {\n // Command execution completed - emit result\n const toolInfo = inProgressTools.get(toolId);\n\n // If we didn't track the start (shouldn't happen), emit the tool call now\n if (!toolInfo) {\n streamLog.warn(`[Codex Adapter] Tool ${toolId} completed without start event, emitting both`);\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: 'Bash',\n input: { command: event.item.command },\n }],\n },\n };\n yieldCount++;\n yield toolMessage;\n }\n\n // Emit result\n let output = event.item.aggregated_output || '';\n\n // CRITICAL: Extract TodoWrite from bash command outputs\n // Codex doesn't have TodoWrite as a tool, so it uses printf/echo to output it\n\n // FIRST: Check for raw JSON from Codex's custom todo scripts\n // Format: {\"todos\": [{\"content\": \"...\", \"status\": \"...\", \"activeForm\": \"\"}]}\n const rawJsonMatch = output.match(/\\{\"todos\":\\s*\\[[\\s\\S]*?\\]\\}/);\n if (rawJsonMatch) {\n try {\n const parsed = JSON.parse(rawJsonMatch[0]);\n if (parsed.todos && Array.isArray(parsed.todos)) {\n streamLog.info(`[Codex Adapter] 🎯 Found raw JSON in bash output: ${parsed.todos.length} todos`);\n\n // Emit as TodoWrite so persistent processor tracks it\n const todoWriteMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'tool_use',\n id: `bash-todo-${toolId}`,\n name: 'TodoWrite',\n input: { todos: parsed.todos },\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('bash-json-todo', { toolId, count: parsed.todos.length });\n yield todoWriteMessage;\n\n streamLog.info('[Codex Adapter] ✅ Converted bash JSON to TodoWrite');\n }\n } catch (error) {\n streamLog.warn('[Codex Adapter] Failed to parse JSON from bash output:', error);\n }\n }\n\n // SECOND: Check for TodoWrite({...}) format\n const extractedTodoWrite = extractAndConvertTodoWrite(output);\n if (extractedTodoWrite !== output) {\n // TodoWrite was found and converted, emit as text\n streamLog.info('[Codex Adapter] Extracted TodoWrite function call from bash output');\n const todoTextMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'text',\n text: extractedTodoWrite,\n }],\n },\n };\n yieldCount++;\n yield todoTextMessage;\n }\n\n const resultMessage: TransformedMessage = {\n type: 'user',\n message: {\n id: `result-${toolId}`,\n content: [{\n type: 'tool_result',\n tool_use_id: toolId,\n content: output,\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('tool-result', { toolId, output: output.substring(0, 100) });\n yield resultMessage;\n\n // Clean up tracking\n inProgressTools.delete(toolId);\n } else if (itemType === 'file_change') {\n // File change completed - emit result\n const toolInfo = inProgressTools.get(toolId);\n const changes = event.item.changes || [];\n const paths = changes.map((c: any) => c.path).join(', ');\n\n // If we didn't track the start (shouldn't happen), emit the tool call now\n if (!toolInfo) {\n streamLog.warn(`[Codex Adapter] Tool ${toolId} completed without start event, emitting both`);\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: 'Write',\n input: { paths: changes },\n }],\n },\n };\n yieldCount++;\n yield toolMessage;\n }\n\n // Emit result\n const resultMessage: TransformedMessage = {\n type: 'user',\n message: {\n id: `result-${toolId}`,\n content: [{\n type: 'tool_result',\n tool_use_id: toolId,\n content: `File changes applied: ${paths}`,\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('tool-result', { toolId, changes });\n yield resultMessage;\n\n // Clean up tracking\n inProgressTools.delete(toolId);\n } else if (itemType === 'agent_message' || itemType === 'reasoning') {\n // Agent message/reasoning → Text message\n let text = event.item.text as string;\n if (text && text.trim().length > 0) {\n // Strip markdown bold from reasoning (Codex outputs short bolded titles)\n // Convert \"**Title**\" to just \"Title\"\n text = text.replace(/^\\*\\*(.*?)\\*\\*$/g, '$1').trim();\n\n // Extract TodoWrite calls and convert to TODO_WRITE markers\n // Codex outputs: TodoWrite({ \"todos\": [...] })\n // We need: TODO_WRITE : {\"todos\": [...]}\n text = extractAndConvertTodoWrite(text);\n\n // Only yield if there's actual content (skip empty or very short reasoning)\n if (text.length > 5) {\n const textMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'text',\n text: text,\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('text', { length: text.length });\n yield textMessage;\n }\n }\n } else if (itemType === 'todo_list') {\n // Handle explicit todo_list items from Codex\n // These are structured todo updates that should be converted to TodoWrite format\n if (event.item.items && Array.isArray(event.item.items)) {\n const todos = event.item.items.map((item: any) => {\n // Normalize status values to match expected format\n let status = item.status || 'pending';\n // Handle variations: 'in-progress', 'in_progress', 'inprogress'\n if (status.toLowerCase().replace(/[-_\\s]/g, '') === 'inprogress') {\n status = 'in_progress';\n }\n\n return {\n content: item.content || item.description || '',\n activeForm: item.activeForm || item.content || item.description || '',\n status: status as 'pending' | 'in_progress' | 'completed',\n };\n });\n\n // Validate at least some todos have content\n const validTodos = todos.filter((t: { content: string; activeForm: string; status: string }) =>\n t.content && t.content.length > 0\n );\n if (validTodos.length === 0) {\n streamLog.warn('[Codex Adapter] todo_list has no valid todos, skipping');\n break;\n }\n\n // Convert to TODO_WRITE marker format\n const todoWriteMarker = `TODO_WRITE : ${JSON.stringify({ todos: validTodos })}`;\n const textMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'text',\n text: todoWriteMarker,\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('todo-list', { count: validTodos.length });\n streamLog.info(`[Codex Adapter] Converted todo_list to TodoWrite with ${validTodos.length} todos`);\n yield textMessage;\n }\n } else if (itemType === 'mcp_tool_call') {\n // MCP (Model Context Protocol) tool invocation\n const toolInfo = inProgressTools.get(toolId);\n \n // If we didn't track the start, emit the tool call now\n if (!toolInfo) {\n streamLog.info(`[Codex Adapter] MCP tool call ${toolId} completed without start event`);\n const mcpToolName = event.item.tool || event.item.server || 'MCPTool';\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: mcpToolName,\n input: event.item.query || event.item.arguments || {},\n }],\n },\n };\n yieldCount++;\n yield toolMessage;\n }\n\n // Emit result\n const mcpOutput = getToolOutput(event.item);\n const mcpToolName = event.item.tool;\n\n // Special handling for todo MCP tools - convert to TodoWrite format\n if (mcpToolName === 'todo-list-tool' || mcpToolName === 'todo-update-tool') {\n try {\n const outputObj = typeof mcpOutput === 'string' ? JSON.parse(mcpOutput) : mcpOutput;\n\n if (outputObj && outputObj.todos && Array.isArray(outputObj.todos)) {\n streamLog.info(`[Codex Adapter] 🎯 MCP ${mcpToolName} returned ${outputObj.todos.length} todos`);\n\n // Emit as TodoWrite so persistent processor picks it up\n const todoWriteMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'tool_use',\n id: `mcp-todo-${toolId}`,\n name: 'TodoWrite',\n input: { todos: outputObj.todos },\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('mcp-todo-converted', { toolId, count: outputObj.todos.length });\n yield todoWriteMessage;\n\n streamLog.info(`[Codex Adapter] ✅ Converted MCP ${mcpToolName} to TodoWrite`);\n }\n } catch (error) {\n streamLog.warn('[Codex Adapter] Failed to parse MCP todo tool output:', error);\n }\n }\n\n const resultMessage: TransformedMessage = {\n type: 'user',\n message: {\n id: `result-${toolId}`,\n content: [{\n type: 'tool_result',\n tool_use_id: toolId,\n content: typeof mcpOutput === 'string' ? mcpOutput : JSON.stringify(mcpOutput),\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('mcp-tool-result', {\n toolId,\n server: event.item.server,\n tool: event.item.tool,\n });\n yield resultMessage;\n\n // Clean up tracking\n inProgressTools.delete(toolId);\n } else if (itemType === 'web_search') {\n // Web search query and results\n const toolInfo = inProgressTools.get(toolId);\n const searchQuery = event.item.query || event.item.search_query || '';\n \n // If we didn't track the start, emit the tool call now\n if (!toolInfo) {\n streamLog.info(`[Codex Adapter] Web search ${toolId} completed without start event`);\n const toolMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: `${currentMessageId}-tool-${toolId}`,\n content: [{\n type: 'tool_use',\n id: toolId,\n name: 'WebSearch',\n input: { query: searchQuery },\n }],\n },\n };\n yieldCount++;\n yield toolMessage;\n }\n\n // Emit search results\n const searchResults = event.item.results || event.item.aggregated_output || '';\n const resultMessage: TransformedMessage = {\n type: 'user',\n message: {\n id: `result-${toolId}`,\n content: [{\n type: 'tool_result',\n tool_use_id: toolId,\n content: typeof searchResults === 'string' ? searchResults : JSON.stringify(searchResults),\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('web-search-result', { \n toolId, \n query: searchQuery,\n result_count: Array.isArray(event.item.results) ? event.item.results.length : 'unknown',\n });\n yield resultMessage;\n\n // Clean up tracking\n inProgressTools.delete(toolId);\n } else if (itemType === 'error') {\n // Enhanced error handling with detailed context\n const errorMessage = event.item.message || event.item.error || 'Unknown error';\n const errorDetails = {\n message: errorMessage,\n type: event.item.error_type,\n code: event.item.error_code,\n stack: event.item.stack,\n };\n \n streamLog.error('[Codex Adapter] Error item:', errorDetails);\n fileLog.error('Codex error item:', errorDetails);\n\n // Emit error as text message so frontend can display it\n const errorTextMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'text',\n text: `⚠️ Error: ${errorMessage}`,\n }],\n },\n };\n\n yieldCount++;\n yield errorTextMessage;\n }\n\n break;\n }\n\n case 'turn.completed':\n // Track usage statistics for cost and performance monitoring\n if (event.usage) {\n streamLog.info('Turn usage statistics:', event.usage);\n fileLog.info('Codex turn usage:', {\n usage: event.usage,\n turn_number: eventCount,\n });\n }\n\n // Turn completed - might have final response text\n if (event.finalResponse && typeof event.finalResponse === 'string') {\n const textMessage: TransformedMessage = {\n type: 'assistant',\n message: {\n id: currentMessageId,\n content: [{\n type: 'text',\n text: event.finalResponse,\n }],\n },\n };\n\n yieldCount++;\n streamLog.yield('text', { length: event.finalResponse.length });\n yield textMessage;\n }\n break;\n\n case 'error':\n // Error event\n fileLog.error('Codex stream error:', event.error);\n break;\n\n default:\n // Log unknown event types\n if (eventCount <= 20) {\n fileLog.debug(`Unknown Codex event type: ${event.type}`);\n }\n break;\n }\n }\n\n streamLog.info('━━━ CODEX STREAM TRANSFORMATION COMPLETE ━━━');\n streamLog.info(`Total events: ${eventCount}`);\n streamLog.info(`Total yields: ${yieldCount}`);\n}\n","import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface Template {\n id: string;\n name: string;\n description: string;\n repository: string;\n branch: string;\n selection: {\n keywords: string[];\n useCases: string[];\n examples: string[];\n };\n tech: {\n framework: string;\n version: string;\n language: string;\n styling: string;\n uiLibrary?: string;\n packageManager: string;\n nodeVersion: string;\n };\n setup: {\n defaultPort: number;\n installCommand: string;\n devCommand: string;\n buildCommand: string;\n };\n ai: {\n systemPromptAddition: string;\n includedFeatures: string[];\n };\n}\n\nexport interface TemplateConfig {\n version: string;\n templates: Template[];\n}\n\nlet cachedConfig: TemplateConfig | null = null;\n\n/**\n * Get the configured templates path from environment variable\n * This is set by setTemplatesPath() in agent-core\n */\nfunction getTemplatesPath(): string {\n const path = process.env.TEMPLATES_JSON_PATH ?? join(process.cwd(), 'templates.json');\n return path;\n}\n\n/**\n * Load template configuration from templates.json\n */\nexport async function loadTemplateConfig(): Promise<TemplateConfig> {\n if (cachedConfig) {\n return cachedConfig;\n }\n\n const configPath = getTemplatesPath();\n const content = await readFile(configPath, 'utf-8');\n cachedConfig = JSON.parse(content) as TemplateConfig;\n\n if (process.env.DEBUG_BUILD === '1') console.log(`✅ Loaded ${cachedConfig.templates.length} templates from ${configPath}`);\n return cachedConfig;\n}\n\n/**\n * Get template by ID\n */\nexport async function getTemplateById(id: string): Promise<Template | null> {\n const config = await loadTemplateConfig();\n return config.templates.find(t => t.id === id) ?? null;\n}\n\n/**\n * Get all templates\n */\nexport async function getAllTemplates(): Promise<Template[]> {\n const config = await loadTemplateConfig();\n return config.templates;\n}\n\n/**\n * Generate AI context for template selection\n * This is injected into the system prompt\n */\nexport async function getTemplateSelectionContext(): Promise<string> {\n const templates = await getAllTemplates();\n\n let context = '🎯 AVAILABLE TEMPLATES:\\n\\n';\n\n for (const template of templates) {\n context += `**${template.name}** (ID: ${template.id})\\n`;\n context += `${template.description}\\n\\n`;\n context += `Best for:\\n${template.selection.useCases.map(uc => ` • ${uc}`).join('\\n')}\\n\\n`;\n context += `Example user requests:\\n${template.selection.examples.map(ex => ` • \"${ex}\"`).join('\\n')}\\n\\n`;\n context += `Tech Stack: ${template.tech.framework} ${template.tech.version}, ${template.tech.language}, ${template.tech.styling}`;\n if (template.tech.uiLibrary) {\n context += `, ${template.tech.uiLibrary}`;\n }\n context += '\\n\\n';\n context += '---\\n\\n';\n }\n\n return context;\n}\n\n/**\n * AI-based template selection from user prompt\n * Scores templates based on keyword matches\n */\nexport async function selectTemplateFromPrompt(userPrompt: string): Promise<Template> {\n const templates = await getAllTemplates();\n const prompt = userPrompt.toLowerCase();\n\n // Score each template based on keyword matches\n const scores = templates.map(template => {\n const keywords = template.selection.keywords;\n const matches = keywords.filter(keyword =>\n prompt.includes(keyword.toLowerCase())\n );\n\n return {\n template,\n score: matches.length,\n matchedKeywords: matches,\n };\n });\n\n // Sort by score (highest first)\n scores.sort((a, b) => b.score - a.score);\n\n // Return best match if score > 0\n if (scores[0].score > 0) {\n if (process.env.DEBUG_BUILD === '1') console.log(`🎯 Auto-selected template: ${scores[0].template.name}`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Matched keywords: ${scores[0].matchedKeywords.join(', ')}`);\n return scores[0].template;\n }\n\n // Default to React + Vite if no matches (simplest option)\n if (process.env.DEBUG_BUILD === '1') console.log(`🎯 No keyword matches, defaulting to react-vite (basic template)`);\n return templates.find(t => t.id === 'react-vite') ?? templates[0];\n}\n","import { existsSync } from 'node:fs';\nimport { readFile, writeFile, rm } from 'node:fs/promises';\nimport type { Template } from './config.js';\nimport { join } from 'node:path';\nimport { getWorkspaceRoot } from '../workspace.js';\nimport { simpleGit } from 'simple-git';\n\n/**\n * Download template from GitHub using degit\n * degit is faster than git clone (no history, just files)\n */\nexport async function downloadTemplate(\n template: Template,\n targetPath: string\n): Promise<string> {\n if (process.env.DEBUG_BUILD === '1') console.log(`📥 Downloading template: ${template.name}`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Repository: ${template.repository}`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Branch: ${template.branch}`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Target: ${targetPath}`);\n\n // Check if target already exists and add random suffix if needed\n let finalTargetPath = targetPath;\n if (existsSync(targetPath)) {\n // Generate a unique 4-character suffix\n const randomSuffix = Math.random().toString(36).substring(2, 6);\n finalTargetPath = `${targetPath}-${randomSuffix}`;\n \n console.log(`[downloader] ⚠️ Directory already exists: ${targetPath}`);\n console.log(`[downloader] 📁 Using unique path: ${finalTargetPath}`);\n }\n\n // Use degit to download template\n // Format: github:username/repo#branch\n const repoUrl = template.branch !== 'main'\n ? `${template.repository}#${template.branch}`\n : template.repository;\n\n // Use simple-git directly (no spawn issues)\n return await downloadTemplateWithGit(template, finalTargetPath);\n}\n\n/**\n * Alternative: Use git clone (fallback if degit unavailable)\n */\nexport async function downloadTemplateWithGit(\n template: Template,\n targetPath: string\n): Promise<string> {\n\n if (process.env.DEBUG_BUILD === '1') console.log(`📥 Cloning template with simple-git: ${template.name}`);\n\n // Parse GitHub URL\n // \"github:username/repo\" → \"https://github.com/username/repo.git\"\n const repoUrl = template.repository.replace('github:', 'https://github.com/') + '.git';\n\n if (process.env.DEBUG_BUILD === '1') console.log(` Repository: ${repoUrl}`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Branch: ${template.branch}`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Target: ${targetPath}`);\n\n try {\n const git = simpleGit();\n\n // Clone with depth 1 (shallow clone)\n await git.clone(repoUrl, targetPath, [\n '--depth', '1',\n '--branch', template.branch,\n '--single-branch'\n ]);\n\n if (process.env.DEBUG_BUILD === '1') console.log(`✅ Template cloned successfully`);\n\n // Verify files were actually downloaded\n const { readdir } = await import('node:fs/promises');\n const downloadedFiles = await readdir(targetPath);\n if (process.env.DEBUG_BUILD === '1') console.log(` Downloaded ${downloadedFiles.length} files/directories`);\n if (process.env.DEBUG_BUILD === '1') console.log(` Files: ${downloadedFiles.slice(0, 10).join(', ')}${downloadedFiles.length > 10 ? '...' : ''}`);\n\n if (downloadedFiles.length === 0) {\n throw new Error('Template clone succeeded but directory is empty!');\n }\n\n // Remove .git directory (we don't need version history)\n try {\n await rm(join(targetPath, '.git'), { recursive: true, force: true });\n if (process.env.DEBUG_BUILD === '1') console.log(` Cleaned .git directory`);\n } catch (error) {\n console.warn(` Failed to remove .git:`, error);\n }\n\n // Create .npmrc to isolate from monorepo workspace\n await createNpmrc(targetPath);\n\n // Extract project name from path\n const projectName = targetPath.split('/').pop() || 'project';\n\n // Update package.json name(s)\n await updatePackageName(targetPath, projectName);\n\n // Remove hardcoded ports from dev scripts to allow dynamic port allocation\n await removeHardcodedPorts(targetPath);\n\n // Ensure vite.config has PORT env var support for Vite-based projects\n await ensureVitePortConfig(targetPath);\n\n // Handle multi-package projects with client/server subdirectories\n const clientPkgPath = join(targetPath, 'client', 'package.json');\n const serverPkgPath = join(targetPath, 'server', 'package.json');\n\n if (existsSync(clientPkgPath)) {\n await updatePackageName(join(targetPath, 'client'), `${projectName}-client`);\n await removeHardcodedPorts(join(targetPath, 'client'));\n await ensureVitePortConfig(join(targetPath, 'client'));\n }\n if (existsSync(serverPkgPath)) {\n await updatePackageName(join(targetPath, 'server'), `${projectName}-server`);\n await removeHardcodedPorts(join(targetPath, 'server'));\n await ensureVitePortConfig(join(targetPath, 'server'));\n }\n\n return targetPath;\n\n } catch (error) {\n console.error(`❌ Failed to clone template:`, error);\n throw new Error(`Template download failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n}\n\n/**\n * Create .npmrc to isolate project from monorepo workspace\n */\nasync function createNpmrc(projectPath: string): Promise<void> {\n const npmrcPath = join(projectPath, '.npmrc');\n const npmrcContent = `# Disable workspace mode - treat as standalone project\nenable-modules-dir=true\nshamefully-hoist=false\n`;\n\n try {\n await writeFile(npmrcPath, npmrcContent);\n if (process.env.DEBUG_BUILD === '1') console.log(` Created .npmrc to isolate from workspace`);\n } catch (error) {\n console.warn(` Failed to create .npmrc:`, error);\n }\n}\n\n/**\n * Update package.json name field\n */\nasync function updatePackageName(projectPath: string, newName: string): Promise<void> {\n const pkgPath = join(projectPath, 'package.json');\n\n if (!existsSync(pkgPath)) {\n if (process.env.DEBUG_BUILD === '1') console.log(` No package.json found in ${projectPath}, skipping name update`);\n return;\n }\n\n try {\n const content = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(content);\n pkg.name = newName;\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2));\n\n if (process.env.DEBUG_BUILD === '1') console.log(` Updated package.json name to: ${newName}`);\n } catch (error) {\n console.warn(` Failed to update package.json:`, error);\n }\n}\n\n/**\n * Remove hardcoded ports from dev scripts to allow dynamic port allocation\n * This ensures projects respect PORT environment variable instead of hardcoded values\n */\nasync function removeHardcodedPorts(projectPath: string): Promise<void> {\n const pkgPath = join(projectPath, 'package.json');\n\n if (!existsSync(pkgPath)) {\n return;\n }\n\n try {\n const content = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(content);\n\n if (!pkg.scripts) return;\n\n let modified = false;\n const scriptsToFix = ['dev', 'start', 'serve', 'preview'];\n\n for (const scriptName of scriptsToFix) {\n if (pkg.scripts[scriptName]) {\n const original = pkg.scripts[scriptName];\n // Remove hardcoded port patterns like --port 3000, -p 3000, --port=3000\n const fixed = original\n .replace(/\\s+--port[=\\s]+\\d+/g, '')\n .replace(/\\s+-p[=\\s]+\\d+/g, '')\n .replace(/\\s+--host\\s+[\\d.]+/g, '')\n .replace(/\\s+--strictPort/g, '')\n .trim();\n\n if (fixed !== original) {\n pkg.scripts[scriptName] = fixed;\n modified = true;\n if (process.env.DEBUG_BUILD === '1') {\n console.log(` Removed hardcoded port from ${scriptName}: \"${original}\" → \"${fixed}\"`);\n }\n }\n }\n }\n\n if (modified) {\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2));\n if (process.env.DEBUG_BUILD === '1') {\n console.log(` ✅ Fixed hardcoded ports in package.json scripts`);\n }\n }\n } catch (error) {\n console.warn(` Failed to fix hardcoded ports:`, error);\n }\n}\n\n/**\n * Ensure vite.config.ts/js has server config that respects PORT environment variable\n * This is needed for Vite-based frameworks (including TanStack Start) to use dynamic ports\n */\nasync function ensureVitePortConfig(projectPath: string): Promise<void> {\n const viteConfigTs = join(projectPath, 'vite.config.ts');\n const viteConfigJs = join(projectPath, 'vite.config.js');\n const viteConfigMts = join(projectPath, 'vite.config.mts');\n\n let configPath: string | null = null;\n if (existsSync(viteConfigTs)) configPath = viteConfigTs;\n else if (existsSync(viteConfigMts)) configPath = viteConfigMts;\n else if (existsSync(viteConfigJs)) configPath = viteConfigJs;\n\n if (!configPath) return;\n\n try {\n let content = await readFile(configPath, 'utf-8');\n\n // Check if server config already has port configuration\n if (content.includes('process.env.PORT') || content.includes('server:') && content.includes('port:')) {\n if (process.env.DEBUG_BUILD === '1') {\n console.log(` vite.config already has port configuration, skipping`);\n }\n return;\n }\n\n // Look for existing server config and add port if missing\n const serverConfigRegex = /server:\\s*\\{([^}]*)\\}/s;\n const match = content.match(serverConfigRegex);\n\n // Use port 3200 as fallback (end of our defined range 3101-3200)\n // This avoids conflicts with openbuilder (3000) and is within our allocated range\n const fallbackPort = '3200';\n\n if (match) {\n // Server config exists, add port to it\n const existingConfig = match[1];\n const newServerConfig = `server: {\n port: parseInt(process.env.PORT || '${fallbackPort}'),\n host: '0.0.0.0',${existingConfig}\n }`;\n content = content.replace(serverConfigRegex, newServerConfig);\n } else {\n // No server config, add it before the closing of defineConfig\n // Look for the last } before export default or the end\n const defineConfigMatch = content.match(/(defineConfig\\s*\\(\\s*\\{)([\\s\\S]*?)(\\}\\s*\\))/);\n if (defineConfigMatch) {\n const [fullMatch, start, middle, end] = defineConfigMatch;\n const serverConfig = `\n server: {\n port: parseInt(process.env.PORT || '${fallbackPort}'),\n host: '0.0.0.0',\n },`;\n // Add server config at the beginning of the config object\n content = content.replace(fullMatch, `${start}${serverConfig}${middle}${end}`);\n }\n }\n\n await writeFile(configPath, content);\n if (process.env.DEBUG_BUILD === '1') {\n console.log(` ✅ Updated ${configPath.split('/').pop()} with PORT env var support`);\n }\n } catch (error) {\n console.warn(` Failed to update vite config for PORT support:`, error);\n }\n}\n\n/**\n * Get project file tree (for AI context)\n * Shows directory structure to help AI understand what's included\n */\nexport async function getProjectFileTree(projectPath: string): Promise<string> {\n // Simplified version - just return the path\n // TODO: Implement tree generation without execAsync\n return `Project path: ${projectPath}`;\n}\n\n/**\n * Get summary of key files in template (for AI context)\n */\nexport async function getTemplateFileSummary(projectPath: string): Promise<string> {\n const keyFiles = [\n 'package.json',\n 'tsconfig.json',\n 'README.md',\n 'next.config.ts',\n 'next.config.js',\n 'vite.config.ts',\n 'astro.config.mjs',\n ];\n\n const summary: string[] = [];\n\n for (const file of keyFiles) {\n const filePath = join(projectPath, file);\n if (existsSync(filePath)) {\n summary.push(file);\n }\n }\n\n // Check for key directories\n const keyDirs = ['app', 'src', 'components', 'pages', 'client', 'server'];\n for (const dir of keyDirs) {\n const dirPath = join(projectPath, dir);\n if (existsSync(dirPath)) {\n summary.push(`${dir}/`);\n }\n }\n\n return summary.join(', ');\n}\n","/**\n * Build Orchestrator - Handles complete build workflow\n * This replicates the functionality from the old /api/projects/[id]/generate route\n */\n\nimport { existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { selectTemplateFromPrompt, type Template } from './templates/config.js';\nimport { downloadTemplate, getProjectFileTree } from './templates/downloader.js';\nimport { getWorkspaceRoot } from './workspace.js';\nimport { type AgentId } from '@openbuilder/agent-core/types/agent';\nimport { resolveAgentStrategy, type AgentStrategyContext } from '@openbuilder/agent-core/lib/agents';\nimport { buildLogger } from '@openbuilder/agent-core/lib/logging/build-logger';\nimport type { DesignPreferences } from '@openbuilder/agent-core/types/design';\nimport type { AppliedTag } from '@openbuilder/agent-core/types/tags';\n\nexport interface MessagePart {\n type: string;\n text?: string;\n image?: string;\n mimeType?: string;\n fileName?: string;\n toolCallId?: string;\n toolName?: string;\n input?: unknown;\n output?: unknown;\n state?: string;\n}\n\nexport interface BuildContext {\n projectId: string;\n projectName: string;\n prompt: string;\n messageParts?: MessagePart[]; // Multi-modal content (text, images, etc.)\n operationType: string;\n workingDirectory: string;\n agent: AgentId;\n template?: {\n id: string;\n name: string;\n framework: string;\n port: number;\n runCommand: string;\n repository: string;\n branch: string;\n }; // Frontend-provided template (NEW: from analysis endpoint)\n designPreferences?: DesignPreferences; // User-specified design constraints (deprecated - use tags)\n tags?: AppliedTag[]; // Tag-based configuration system\n conversationHistory?: Array<{\n role: string;\n content: string;\n timestamp: Date;\n }>; // Recent conversation messages for context in enhancements\n}\n\nexport interface OrchestrationResult {\n isNewProject: boolean;\n template: Template | null;\n fileTree: string;\n systemPrompt: string;\n fullPrompt: string;\n projectPath: string;\n templateEvents: Array<{type: string; data: Record<string, unknown>}>; // Events to send to UI\n projectMetadata?: {\n path: string;\n projectType: string;\n runCommand: string;\n port: number;\n };\n}\n\n/**\n * Orchestrate the build - handle templates, prompts, context\n */\nexport async function orchestrateBuild(context: BuildContext): Promise<OrchestrationResult> {\n const { projectId, projectName, prompt, workingDirectory, agent, operationType, template: providedTemplate, designPreferences, tags, conversationHistory } = context;\n const workspaceRoot = getWorkspaceRoot();\n\n // Log conversation history if present\n if (conversationHistory && conversationHistory.length > 0) {\n buildLogger.log('info', 'orchestrator', `Conversation history available: ${conversationHistory.length} messages`);\n }\n\n // Check if this is a NEW project or EXISTING project\n // Use operationType as the source of truth - 'initial-build' ALWAYS means new project\n const isNewProject = operationType === 'initial-build';\n let selectedTemplate: Template | null = null;\n let fileTree = '';\n const templateEvents: Array<{type: string; data: Record<string, unknown>}> = [];\n const strategy = await resolveAgentStrategy(agent);\n const strategyContext: AgentStrategyContext = {\n projectId,\n projectName,\n prompt,\n workingDirectory,\n operationType,\n isNewProject,\n workspaceRoot,\n designPreferences, // Pass through to strategy (deprecated - use tags)\n tags, // Tag-based configuration\n conversationHistory, // Pass conversation context to strategies\n };\n\n // PRIORITY: Check if tags specify a framework - if so, enforce it (tags override everything)\n if (tags && tags.length > 0) {\n const frameworkTag = tags.find(t => t.key === 'framework');\n if (frameworkTag) {\n buildLogger.log('info', 'orchestrator', `✓ Framework enforced from tags: ${frameworkTag.value}`);\n\n // Load all templates and filter to only those matching the framework\n const { getAllTemplates } = await import('./templates/config.js');\n const allTemplates = (await getAllTemplates?.()) || [];\n const matchingTemplate = allTemplates.find((t: Template) =>\n t.tech.framework.toLowerCase() === frameworkTag.value.toLowerCase()\n );\n\n if (matchingTemplate) {\n selectedTemplate = matchingTemplate;\n buildLogger.orchestrator.templateSelected(matchingTemplate.name, matchingTemplate.id);\n } else {\n throw new Error(`No template found for framework: ${frameworkTag.value}. Available templates must match the tag selection.`);\n }\n }\n }\n\n // If no framework tag, check if frontend provided a template (from analysis endpoint)\n if (!selectedTemplate && providedTemplate) {\n buildLogger.orchestrator.templateProvided(\n providedTemplate.name,\n providedTemplate.id,\n providedTemplate.framework\n );\n\n // Find full template object from templates.json\n const { getAllTemplates } = await import('./templates/config.js');\n const allTemplates = (await getAllTemplates?.()) || [];\n const fullTemplate = allTemplates.find((t: Template) => t.id === providedTemplate.id);\n\n if (fullTemplate) {\n selectedTemplate = fullTemplate;\n buildLogger.orchestrator.templateSelected(fullTemplate.name, fullTemplate.id);\n } else {\n buildLogger.orchestrator.error(\n `Template ${providedTemplate.id} not found in templates.json, will use metadata`,\n new Error('Template not in templates.json')\n );\n // Even if not found, we can still use the provided metadata\n }\n }\n\n // Log the determination\n if (isNewProject) {\n buildLogger.orchestrator.newProject(operationType);\n } else {\n buildLogger.orchestrator.existingProject(operationType);\n }\n\n // Verify directory state for logging\n try {\n if (existsSync(workingDirectory)) {\n const files = await readdir(workingDirectory);\n if (process.env.DEBUG_BUILD === '1') console.log(`[orchestrator] Directory status: ${files.length} files found`);\n\n // If initial-build but files exist, we should clean them first\n if (isNewProject && files.length > 0) {\n if (process.env.DEBUG_BUILD === '1') console.log(`[orchestrator] WARNING: initial-build but directory not empty - will overwrite`);\n }\n } else {\n if (process.env.DEBUG_BUILD === '1') console.log(`[orchestrator] Directory doesn't exist - will create`);\n }\n } catch (error) {\n if (process.env.DEBUG_BUILD === '1') console.log(`[orchestrator] Directory check failed:`, error);\n }\n\n // Handle NEW projects - download template\n const SKIP_TEMPLATES = process.env.SKIP_TEMPLATES === 'true';\n strategyContext.skipTemplates = SKIP_TEMPLATES;\n\n // Check if strategy wants template pre-downloaded (Claude) or agent-cloned (Codex)\n const shouldPreDownload = strategy.shouldDownloadTemplate(strategyContext);\n\n // CONDITIONAL: Handle template download based on agent strategy\n if (isNewProject && !SKIP_TEMPLATES && shouldPreDownload) {\n if (providedTemplate) {\n // Frontend provided a template - download it for Claude\n buildLogger.orchestrator.templateSelecting('auto');\n\n if (!selectedTemplate) {\n buildLogger.orchestrator.error(\n `selectedTemplate is null for ${providedTemplate.id}`,\n new Error('Template not found in templates.json')\n );\n throw new Error(`Template ${providedTemplate.id} not found in runner's templates.json. Cannot download.`);\n }\n\n buildLogger.log('info', 'orchestrator', `Downloading frontend-selected template for ${agent}...`);\n buildLogger.orchestrator.templateDownloading(\n selectedTemplate.name,\n selectedTemplate.repository,\n workingDirectory\n );\n\n const downloadedPath = await downloadTemplate(selectedTemplate, workingDirectory);\n fileTree = await getProjectFileTree(downloadedPath);\n\n buildLogger.orchestrator.templateDownloaded(\n selectedTemplate.name,\n downloadedPath,\n fileTree.length\n );\n\n // Emit template-selected event for UI\n templateEvents.push({\n type: 'template-selected',\n data: {\n templateId: providedTemplate.id,\n templateName: providedTemplate.name,\n framework: providedTemplate.framework,\n repository: providedTemplate.repository,\n selectedBy: 'frontend-analysis',\n },\n });\n } else {\n // No template provided - auto-select and download for Claude\n buildLogger.log('info', 'orchestrator', `Auto-selecting and downloading template for ${agent}...`);\n\n // Send initial setup todos (phase: 'template' to distinguish from agent build todos)\n templateEvents.push({\n type: 'tool-input-available',\n data: {\n toolCallId: 'setup-todo-1',\n toolName: 'TodoWrite',\n phase: 'template',\n input: {\n phase: 'template',\n todos: [\n { content: 'Select appropriate template', status: 'in_progress', activeForm: 'Selecting template' },\n { content: 'Download template from GitHub', status: 'pending', activeForm: 'Downloading template' },\n ],\n },\n },\n });\n\n // Auto-select template\n selectedTemplate = await selectTemplateFromPrompt(prompt);\n buildLogger.orchestrator.templateSelected(selectedTemplate.name, selectedTemplate.id);\n\n // Update todo: template selected\n templateEvents.push({\n type: 'tool-input-available',\n data: {\n toolCallId: 'setup-todo-2',\n toolName: 'TodoWrite',\n phase: 'template',\n input: {\n phase: 'template',\n todos: [\n { content: `Selected: ${selectedTemplate.name}`, status: 'completed', activeForm: 'Selecting template' },\n { content: `Download template: ${selectedTemplate.repository}`, status: 'in_progress', activeForm: 'Downloading template' },\n ],\n },\n },\n });\n\n buildLogger.orchestrator.templateDownloading(\n selectedTemplate.name,\n selectedTemplate.repository,\n workingDirectory\n );\n\n const downloadedPath = await downloadTemplate(selectedTemplate, workingDirectory);\n fileTree = await getProjectFileTree(downloadedPath);\n\n buildLogger.orchestrator.templateDownloaded(\n selectedTemplate.name,\n downloadedPath,\n fileTree.length\n );\n\n // Update todo: template downloaded\n templateEvents.push({\n type: 'tool-input-available',\n data: {\n toolCallId: 'setup-todo-3',\n toolName: 'TodoWrite',\n phase: 'template',\n input: {\n phase: 'template',\n todos: [\n { content: `Selected: ${selectedTemplate.name}`, status: 'completed', activeForm: 'Selecting template' },\n { content: `Downloaded to: ${projectName}`, status: 'completed', activeForm: 'Downloading template' },\n ],\n },\n },\n });\n\n // Complete template todos\n templateEvents.push({\n type: 'tool-output-available',\n data: {\n toolCallId: 'setup-todo-1',\n output: `Template selection completed`,\n },\n });\n templateEvents.push({\n type: 'tool-output-available',\n data: {\n toolCallId: 'setup-todo-2',\n output: `Template selected: ${selectedTemplate.name}`,\n },\n });\n templateEvents.push({\n type: 'tool-output-available',\n data: {\n toolCallId: 'setup-todo-3',\n output: `Template downloaded to ${downloadedPath}`,\n },\n });\n }\n } else if (isNewProject && !SKIP_TEMPLATES && !shouldPreDownload) {\n // Agent handles template cloning itself (Codex)\n buildLogger.log('info', 'orchestrator', `Agent ${agent} will handle template cloning - skipping pre-download`);\n\n // Still set selectedTemplate for metadata, but don't download\n if (providedTemplate && selectedTemplate) {\n buildLogger.log('info', 'orchestrator', `Template metadata available: ${selectedTemplate.name}`);\n\n // Emit template-selected event so UI knows what template is being used\n templateEvents.push({\n type: 'template-selected',\n data: {\n templateId: providedTemplate.id,\n templateName: providedTemplate.name,\n framework: providedTemplate.framework,\n repository: providedTemplate.repository,\n selectedBy: 'agent-will-clone',\n },\n });\n }\n\n // No fileTree yet - agent will create it\n fileTree = '';\n } else {\n buildLogger.log('info', 'orchestrator', 'EXISTING PROJECT - Skipping template download');\n buildLogger.log('info', 'orchestrator', `Project location: ${workingDirectory}`);\n buildLogger.log('info', 'orchestrator', `Operation type: ${operationType}`);\n fileTree = await getProjectFileTree(workingDirectory);\n buildLogger.log('info', 'orchestrator', `File tree loaded: ${fileTree.length} chars`);\n }\n\n strategyContext.fileTree = fileTree;\n strategyContext.templateName = selectedTemplate?.name;\n strategyContext.templateFramework = selectedTemplate?.tech.framework;\n\n // Add template metadata to context for Codex to use\n if (providedTemplate) {\n strategyContext.templateMetadata = providedTemplate;\n }\n\n if (selectedTemplate) {\n strategy.postTemplateSelected?.(strategyContext, {\n name: selectedTemplate.name,\n framework: selectedTemplate.tech.framework,\n fileTree,\n });\n }\n\n // Resolve working directory for agent (Codex uses parent dir for cloning)\n const resolvedWorkingDirectory = strategy.resolveWorkingDirectory\n ? strategy.resolveWorkingDirectory(strategyContext)\n : workingDirectory;\n buildLogger.log('info', 'orchestrator', `Working directory resolved: ${resolvedWorkingDirectory}`);\n\n // Prepare project metadata (for new projects with templates)\n // NEW: If template was provided by frontend, BOTH agents get metadata immediately\n const projectMetadata = isNewProject && (selectedTemplate || providedTemplate) ? {\n path: resolvedWorkingDirectory,\n projectType: selectedTemplate?.tech.framework ?? providedTemplate?.framework ?? 'unknown',\n runCommand: selectedTemplate?.setup.devCommand ?? providedTemplate?.runCommand ?? 'npm run dev',\n port: selectedTemplate?.setup.defaultPort ?? providedTemplate?.port ?? 3000,\n } : undefined;\n\n // Generate dynamic system prompt\n buildLogger.log('info', 'orchestrator', 'GENERATING SYSTEM PROMPT', {\n isNewProject,\n template: selectedTemplate?.name || 'none',\n fileTreeSize: fileTree.length,\n hasConversationHistory: !!(conversationHistory && conversationHistory.length > 0),\n conversationHistoryCount: conversationHistory?.length || 0,\n });\n\n const systemPromptSections = await strategy.buildSystemPromptSections(strategyContext);\n const systemPrompt = systemPromptSections.join('\\n\\n');\n\n buildLogger.orchestrator.systemPromptGenerated(systemPrompt.length);\n \n // Log snippet of system prompt for debugging\n if (!isNewProject && systemPrompt.includes('Recent Conversation History')) {\n buildLogger.log('info', 'orchestrator', '✅ System prompt includes conversation history');\n } else if (!isNewProject) {\n buildLogger.log('warn', 'orchestrator', '⚠️ No conversation history in system prompt for existing project');\n }\n\n const fullPrompt = await strategy.buildFullPrompt(strategyContext, prompt);\n\n buildLogger.orchestrator.orchestrationComplete({\n isNewProject,\n hasTemplate: !!selectedTemplate,\n hasMetadata: !!projectMetadata\n });\n\n return {\n isNewProject,\n template: selectedTemplate,\n fileTree,\n systemPrompt,\n fullPrompt,\n projectPath: resolvedWorkingDirectory,\n templateEvents,\n projectMetadata,\n };\n}\n\n/**\n * Generate dynamic system prompt based on project context\n *\n * NOTE: This function returns ONLY the context-specific sections.\n * The base prompts (CLAUDE_SYSTEM_PROMPT or CODEX_SYSTEM_PROMPT) are added\n * by the respective query functions (createClaudeQuery/createCodexQuery) in index.ts.\n * This prevents double-injection of the base prompts.\n */\nasync function generateSystemPrompt(context: {\n isNewProject: boolean;\n template: Template | null;\n projectName: string;\n projectPath: string;\n workspaceRoot: string;\n fileTree: string;\n agent: AgentId;\n templateSelectionContext?: string;\n}): Promise<string> {\n const {\n isNewProject,\n template,\n projectName,\n projectPath,\n workspaceRoot,\n fileTree,\n agent,\n } = context;\n\n const sections: string[] = [];\n\n if (agent === 'openai-codex') {\n if (isNewProject) {\n sections.push(`## Template Selection and Setup\n\nEXACT CLONE COMMANDS (use these exactly as shown):\n\n**For React/Vite projects:**\n npx degit github:codyde/template-reactvite#main \"${projectName}\"\n\n**For Next.js projects:**\n npx degit github:codyde/template-nextjs#main \"${projectName}\"\n\n**For Astro projects:**\n npx degit github:codyde/template-astro#main \"${projectName}\"\n\n**For React + Node.js:**\n npx degit github:codyde/template-reactnode#main \"${projectName}\"\n\nSelect based on user's request:\n- Astro, static, blog, docs, landing page → Use Astro template\n- Next.js, full-stack, API, database, auth → Use Next.js template\n- React + backend, SPA + API → Use React + Node template\n- Simple React app, prototype, basic UI → Use React/Vite template\n\nAfter cloning:\n1. cd ${projectName}\n2. Create .npmrc containing:\n enable-modules-dir=true\n shamefully-hoist=false\n3. Update package.json \"name\" field to \"${projectName}\"\n4. Implement the user's request by modifying the template files`);\n } else {\n sections.push(`## Existing Project Context\n\n- Project location: ${projectPath}\n- Inspect the current codebase and apply the requested changes without re-scaffolding.`);\n }\n\n sections.push(`## Workspace Rules\n- You are currently in the workspace directory.\n- After cloning, all commands should be run from inside the \\`${projectName}\\` directory.\n- Use relative paths from the project root (e.g., \\`src/pages/index.astro\\`).\n- Never use absolute paths.`);\n\n sections.push(`## Quality Expectations\n- Narrate key decisions and outcomes in the chat stream.\n- Provide complete file contents—no placeholders or partial updates.\n- Conclude with a summary, validation notes (tests, lint, manual checks), and clear next steps.`);\n\n return sections.join('\\n\\n');\n }\n\n if (isNewProject && template) {\n sections.push(`## New Project: Template Prepared\n\n- Template: ${template.name}\n- Location: ${projectPath}\n- Framework: ${template.tech.framework}\n\nProject structure snapshot:\n${fileTree}\n\nBefore customizing, run:\n1. \\`cd ${projectName} && npm install\\`\n2. Review the scaffold to understand existing routes, components, and configs.\n3. Implement the requested features directly inside this template—do **not** scaffold a fresh project.\n\nTemplate notes:\n${template.ai?.systemPromptAddition || 'No additional template notes provided.'}\n\nIncluded features:\n${template.ai?.includedFeatures?.map(f => `- ${f}`).join('\\n') || '- (template features not listed)'}\n\nKey commands:\n- Install: ${template.setup.installCommand}\n- Dev: ${template.setup.devCommand}\n- Build: ${template.setup.buildCommand}`);\n } else if (!isNewProject) {\n sections.push(`## Existing Project Context\n\n- Project location: ${projectPath}\n- Objective: update the existing codebase to satisfy the latest request.\n\nCurrent structure snapshot:\n${fileTree}\n\nReview the relevant files, confirm dependencies, and plan how your changes integrate without breaking current behavior.`);\n }\n\n sections.push(`## Workspace Rules\n- Your command cwd is ${workspaceRoot}. Stay inside this workspace unless explicitly instructed otherwise.\n- Refer to the project as \\`${projectName}\\` and use relative paths (e.g., \\`${projectName}/src/App.tsx\\`).\n- Avoid absolute paths that include user directories (e.g., \\`/Users/.../${projectName}\\`).`);\n\n sections.push(`## Build & Runtime Expectations\n- Manage dependencies with npm: \\`cd ${projectName} && npm install\\`.\n- After completing all build tasks, start the dev server to test the application.\n- Verify the server starts successfully and check for any errors.\n- After testing is complete, stop the dev server (Ctrl+C) - do NOT leave it running.\n- For Vite projects, ensure \\`vite.config.*\\` allows Cloudflare tunnels:\n\n\\`\\`\\`ts\nexport default defineConfig({\n server: {\n allowedHosts: ['.trycloudflare.com'],\n },\n});\n\\`\\`\\`\n\n- In TypeScript projects with \\`verbatimModuleSyntax\\`, prefer explicit type imports (\\`import type {...}\\`).`);\n\n sections.push(`## Communication & Quality\n- Narrate major steps and results in the chat so progress stays visible.\n- When editing files, provide complete, production-ready content—no placeholders.\n- Close with a concise summary covering shipped features, validation (tests, lint, manual checks), and follow-up work.`);\n\n return sections.join('\\n\\n');\n}\n","// src/config/tags.ts\nvar TAG_DEFINITIONS = [\n // Model Selection (explicit provider + model mapping)\n {\n key: \"model\",\n label: \"Model\",\n description: \"AI agent and model to use for generation\",\n category: \"model\",\n inputType: \"select\",\n options: [\n {\n value: \"claude-sonnet-4-5\",\n label: \"Claude Sonnet 4.5\",\n description: \"Anthropic Claude - Balanced performance and speed\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-sonnet-4-5\"\n },\n {\n value: \"claude-opus-4-5\",\n label: \"Claude Opus 4.5\",\n description: \"Anthropic Claude - Most capable for complex tasks\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-opus-4-5\"\n },\n {\n value: \"claude-haiku-4-5\",\n label: \"Claude Haiku 4.5\",\n description: \"Anthropic Claude - Fastest, good for iterations\",\n logo: \"/claude.png\",\n provider: \"claude-code\",\n model: \"claude-haiku-4-5\"\n },\n {\n value: \"gpt-5.2-codex\",\n label: \"GPT-5.2 Codex\",\n description: \"OpenAI Codex - Advanced code generation\",\n logo: \"/openai.png\",\n provider: \"openai-codex\",\n model: \"openai/gpt-5.2-codex\"\n }\n ]\n },\n // Framework Selection\n {\n key: \"framework\",\n label: \"Framework\",\n description: \"Frontend framework to use\",\n category: \"framework\",\n inputType: \"select\",\n options: [\n {\n value: \"next\",\n label: \"Next.js\",\n description: \"Full-stack React with SSR, App Router, and file-based routing\",\n logo: \"/logos/nextjs.svg\",\n repository: \"github:codyde/template-nextjs\",\n branch: \"main\"\n },\n {\n value: \"tanstack\",\n label: \"TanStack Start\",\n description: \"Minimal TanStack Start foundation with React 19, Router, Query, and Tailwind\",\n logo: \"/logos/tanstack.png\",\n repository: \"github:codyde/template-tanstackstart\",\n branch: \"main\"\n },\n {\n value: \"vite\",\n label: \"React + Vite\",\n description: \"Fast React SPA with Vite - perfect for client-side apps\",\n logo: \"/logos/react.svg\",\n repository: \"github:codyde/template-reactvite\",\n branch: \"main\"\n },\n {\n value: \"astro\",\n label: \"Astro\",\n description: \"Content-focused static sites with islands architecture\",\n logo: \"/astro.png\",\n repository: \"github:codyde/template-astro\",\n branch: \"main\"\n }\n ],\n promptTemplate: \"CRITICAL: You MUST use the {label} template. Clone it using: npx degit {repository}#{branch} {{projectName}}\"\n },\n // Runner Selection (options populated dynamically)\n {\n key: \"runner\",\n label: \"Runner\",\n description: \"Build runner to execute the build\",\n category: \"runner\",\n inputType: \"select\",\n options: []\n // Populated dynamically from connected runners\n },\n // Design Configuration (nested)\n {\n key: \"design\",\n label: \"Design\",\n description: \"Visual design preferences\",\n category: \"design\",\n inputType: \"nested\",\n children: [\n // Brand Themes\n {\n key: \"brand\",\n label: \"Brand\",\n description: \"Pre-configured brand color themes\",\n category: \"design\",\n inputType: \"select\",\n maxSelections: 1,\n options: [\n {\n value: \"sentry\",\n label: \"Sentry\",\n description: \"Error monitoring and performance - vibrant purple and pink\",\n logo: \"/logos/sentry.svg\",\n values: {\n primaryColor: \"#9D58BF\",\n secondaryColor: \"#FF708C\",\n accentColor: \"#FF9838\",\n neutralLight: \"#F0ECF3\",\n neutralDark: \"#2B2233\"\n }\n },\n {\n value: \"stripe\",\n label: \"Stripe\",\n description: \"Modern payments aesthetic\",\n logo: \"/logos/stripe.svg\",\n values: {\n primaryColor: \"#635bff\",\n secondaryColor: \"#0a2540\",\n accentColor: \"#00d4ff\",\n neutralLight: \"#f6f9fc\",\n neutralDark: \"#0a2540\"\n }\n },\n {\n value: \"vercel\",\n label: \"Vercel\",\n description: \"Clean developer tools\",\n logo: \"/logos/vercel.svg\",\n values: {\n primaryColor: \"#000000\",\n secondaryColor: \"#ffffff\",\n accentColor: \"#0070f3\",\n neutralLight: \"#fafafa\",\n neutralDark: \"#000000\"\n }\n },\n {\n value: \"linear\",\n label: \"Linear\",\n description: \"Sleek project management\",\n logo: \"/logos/linear.svg\",\n values: {\n primaryColor: \"#5e6ad2\",\n secondaryColor: \"#26b5ce\",\n accentColor: \"#f2994a\",\n neutralLight: \"#f7f8f8\",\n neutralDark: \"#1a1a1a\"\n }\n },\n {\n value: \"notion\",\n label: \"Notion\",\n description: \"Warm productivity\",\n logo: \"/logos/notion.svg\",\n values: {\n primaryColor: \"#2383e2\",\n secondaryColor: \"#e69138\",\n accentColor: \"#d44c47\",\n neutralLight: \"#f7f6f3\",\n neutralDark: \"#37352f\"\n }\n },\n {\n value: \"github\",\n label: \"GitHub\",\n description: \"Developer-first\",\n logo: \"/logos/github.svg\",\n values: {\n primaryColor: \"#238636\",\n secondaryColor: \"#1f6feb\",\n accentColor: \"#f85149\",\n neutralLight: \"#f6f8fa\",\n neutralDark: \"#24292f\"\n }\n },\n {\n value: \"airbnb\",\n label: \"Airbnb\",\n description: \"Friendly travel\",\n logo: \"/logos/airbnb.svg\",\n values: {\n primaryColor: \"#ff385c\",\n secondaryColor: \"#00a699\",\n accentColor: \"#fc642d\",\n neutralLight: \"#f7f7f7\",\n neutralDark: \"#222222\"\n }\n },\n {\n value: \"spotify\",\n label: \"Spotify\",\n description: \"Bold music streaming\",\n logo: \"/logos/spotify.svg\",\n values: {\n primaryColor: \"#1db954\",\n secondaryColor: \"#191414\",\n accentColor: \"#1ed760\",\n neutralLight: \"#f6f6f6\",\n neutralDark: \"#000000\"\n }\n }\n ],\n promptTemplate: \"Use the {value} brand aesthetic with the following color palette: Primary: {primaryColor}, Secondary: {secondaryColor}, Accent: {accentColor}, Neutral Light: {neutralLight}, Neutral Dark: {neutralDark}. Match the design style and feel of {value}.\"\n }\n ]\n }\n];\nfunction findTagDefinition(key) {\n for (const def of TAG_DEFINITIONS) {\n if (def.key === key) return def;\n if (def.children) {\n const child = def.children.find((c) => c.key === key);\n if (child) return child;\n }\n }\n return void 0;\n}\nfunction getAllTagKeys() {\n const keys = [];\n for (const def of TAG_DEFINITIONS) {\n keys.push(def.key);\n if (def.children) {\n keys.push(...def.children.map((c) => c.key));\n }\n }\n return keys;\n}\nfunction getTagsByCategory(category) {\n return TAG_DEFINITIONS.filter((def) => def.category === category);\n}\nexport {\n TAG_DEFINITIONS,\n findTagDefinition,\n getAllTagKeys,\n getTagsByCategory\n};\n//# sourceMappingURL=tags.js.map","/**\n * Project Analyzer Module\n * \n * Handles AI-based project analysis before builds:\n * - Template selection (or uses framework tag fast-path)\n * - Project name/slug generation\n * - Project metadata generation (icon, description)\n * \n * This consolidates AI calls that were previously split between frontend and runner,\n * ensuring the runner is the single source of truth for all project decisions.\n */\n\nimport { query, type Options } from '@anthropic-ai/claude-agent-sdk';\nimport { z } from 'zod';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { existsSync, mkdirSync } from 'fs';\nimport * as Sentry from '@sentry/node';\nimport type { AgentId, ClaudeModelId } from '@openbuilder/agent-core/types/agent';\nimport type { AppliedTag } from '@openbuilder/agent-core/types/tags';\nimport {\n ProjectMetadataSchema,\n ProjectNamingSchema,\n TemplateAnalysisSchema,\n} from '@openbuilder/agent-core';\nimport { getAllTemplates, type Template } from './templates/config.js';\nimport { TAG_DEFINITIONS } from '@openbuilder/agent-core/config/tags';\nimport type { RunnerEvent } from '@openbuilder/agent-core';\n\n// Map model IDs to Claude Agent SDK model names\nconst MODEL_MAP: Record<string, string> = {\n 'claude-haiku-4-5': 'claude-sonnet-4-5', // Haiku 4.5 not yet available, use Sonnet\n 'claude-sonnet-4-5': 'claude-sonnet-4-5',\n 'claude-opus-4-5': 'claude-opus-4-5',\n};\n\nfunction resolveModelName(modelId: string): string {\n return MODEL_MAP[modelId] || 'claude-sonnet-4-5';\n}\n\n/**\n * Get a clean env object with only string values\n */\nfunction getCleanEnv(): Record<string, string> {\n const env: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (value !== undefined) {\n env[key] = value;\n }\n }\n if (!env.PATH) {\n env.PATH = '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin';\n }\n return env;\n}\n\n/**\n * Ensure a directory exists\n */\nfunction ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Generate structured output using Claude Agent SDK\n */\nasync function generateStructuredOutput<T extends z.ZodType>(options: {\n model: string;\n schema: T;\n prompt: string;\n system?: string;\n}): Promise<{ object: z.infer<T> }> {\n const modelName = resolveModelName(options.model);\n const jsonSchema = z.toJSONSchema(options.schema);\n \n const jsonInstructions = `You must respond with ONLY valid JSON that matches this schema. Do not include any text before or after the JSON object. Do not wrap in markdown code blocks.\n\nJSON Schema:\n${JSON.stringify(jsonSchema, null, 2)}\n\nCRITICAL: Your response must START with { and END with }. Output only the JSON object.`;\n\n const fullPrompt = options.system \n ? `${options.system}\\n\\n${jsonInstructions}\\n\\nUser request: ${options.prompt}`\n : `${jsonInstructions}\\n\\nUser request: ${options.prompt}`;\n\n const tempDir = path.join(os.tmpdir(), 'runner-ai');\n ensureDir(tempDir);\n \n const sdkOptions: Options = {\n model: modelName,\n maxTurns: 1,\n tools: [],\n cwd: tempDir,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n env: getCleanEnv(),\n };\n\n let responseText = '';\n\n try {\n for await (const message of query({ prompt: fullPrompt, options: sdkOptions })) {\n if (message.type === 'assistant') {\n for (const block of message.message.content) {\n if (block.type === 'text') {\n responseText += block.text;\n }\n }\n }\n }\n } catch (error) {\n console.error('[project-analyzer] SDK query failed:', error);\n Sentry.captureException(error);\n throw error;\n }\n\n if (!responseText) {\n throw new Error('No text response from Claude Agent SDK');\n }\n\n // Clean up any markdown code blocks if present\n let jsonText = responseText.trim();\n const codeBlockMatch = jsonText.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/);\n if (codeBlockMatch) {\n jsonText = codeBlockMatch[1].trim();\n }\n \n const jsonMatch = jsonText.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n jsonText = jsonMatch[0];\n }\n\n const parsed = JSON.parse(jsonText);\n const validated = options.schema.parse(parsed);\n \n return { object: validated };\n}\n\n/**\n * Generate project name/slug from user prompt\n */\nasync function generateProjectName(\n prompt: string,\n model: string\n): Promise<{ slug: string; friendlyName: string }> {\n const namePrompt = `Extract the core project concept from this request and create appropriate names:\n\nUser's project request: \"${prompt}\"\n\nIMPORTANT: Extract only the PROJECT TYPE/CONCEPT. Ignore all conversational phrases:\n- Ignore: \"I want\", \"I need\", \"I would like\", \"please\", \"can you\", \"build me\", \"create me\", \"make me\"\n- Ignore: \"a\", \"an\", \"the\", \"using\", \"with\", \"for me\"\n- Focus ONLY on WHAT is being built, not how the user asked for it\n\nGenerate:\n1. A URL-friendly slug (lowercase, hyphens, 2-4 words, max 30 chars)\n2. A human-readable friendly name (Title Case, 2-5 words)\n\nExamples:\n- \"I want to build a todo app\" → slug: \"todo-app\", friendlyName: \"Todo App\"\n- \"I want a workflow automation tool\" → slug: \"workflow-automation\", friendlyName: \"Workflow Automation\"\n- \"Can you create an error monitoring dashboard for me\" → slug: \"error-monitoring\", friendlyName: \"Error Monitoring Dashboard\"\n- \"I need a chat app with real-time messaging please\" → slug: \"realtime-chat\", friendlyName: \"Realtime Chat\"\n\nRequirements:\n- Slug: lowercase, hyphens only, no special characters, max 30 chars\n- Friendly name: Title Case, readable, professional, 2-5 words\n- NEVER include words like \"want\", \"need\", \"please\", \"build\", \"create\", \"make\" in the output\n- Focus on the core product/application concept`;\n\n try {\n console.log('[project-analyzer] Generating project name...');\n const result = await generateStructuredOutput({\n model,\n schema: ProjectNamingSchema,\n prompt: namePrompt,\n });\n\n const { slug, friendlyName } = result.object;\n\n // Validate slug format\n if (slug.length < 2 || slug.length > 100 || !/^[a-z0-9-]+$/.test(slug)) {\n throw new Error('Generated slug is invalid format');\n }\n\n console.log(`[project-analyzer] Generated name: ${friendlyName} (${slug})`);\n return { slug, friendlyName };\n } catch (error) {\n console.error('[project-analyzer] Name generation failed, using fallback:', error);\n \n // Fallback: extract words from prompt\n const words = prompt\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '')\n .split(/\\s+/)\n .filter(w => w.length > 2)\n .filter(w => !['the', 'and', 'for', 'with', 'build', 'create', 'make', 'want', 'need', 'please', 'can', 'you', 'help', 'using'].includes(w))\n .slice(0, 4);\n\n const slug = words.length > 0 ? words.join('-') : 'new-project';\n const friendlyName = words.length > 0\n ? words.map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')\n : 'New Project';\n\n return { slug, friendlyName };\n }\n}\n\n/**\n * Generate project metadata (icon, description)\n */\nasync function generateProjectMetadata(\n prompt: string,\n model: string\n): Promise<{ icon: string; description: string }> {\n const metadataPrompt = `Based on this project request, generate appropriate metadata:\n\nUser's request: \"${prompt}\"\n\nAvailable icons: Folder, Code, Layout, Database, Zap, Globe, Lock, Users, ShoppingCart, Calendar, MessageSquare, FileText, Image, Music, Video, CheckCircle, Star\n\nGenerate:\n- icon: Most appropriate icon from the list above\n- description: 1-2 sentences describing what the project does\n\nIMPORTANT: Focus on the actual functionality being requested.`;\n\n try {\n console.log('[project-analyzer] Generating project metadata...');\n const result = await generateStructuredOutput({\n model,\n schema: ProjectMetadataSchema.pick({ icon: true, description: true }).extend({\n slug: z.string().optional(),\n friendlyName: z.string().optional(),\n }),\n prompt: metadataPrompt,\n });\n\n console.log(`[project-analyzer] Generated icon: ${result.object.icon}`);\n return { \n icon: result.object.icon, \n description: result.object.description \n };\n } catch (error) {\n console.error('[project-analyzer] Metadata generation failed, using defaults:', error);\n return {\n icon: 'Code',\n description: prompt.substring(0, 150),\n };\n }\n}\n\n/**\n * Select template based on prompt (AI analysis)\n */\nasync function selectTemplateWithAI(\n prompt: string,\n templates: Template[],\n model: string\n): Promise<{ template: Template; reasoning: string; confidence: number }> {\n const templateContext = templates.map(t => `\n## ${t.name} (ID: ${t.id})\n${t.description}\nKeywords: ${t.selection.keywords.join(', ')}\nUse cases: ${t.selection.useCases.join('; ')}\nTech: ${t.tech.framework} ${t.tech.version}, ${t.tech.language}\n`).join('\\n---\\n');\n\n const selectionPrompt = `Select the best template for this project:\n\nUser's request: \"${prompt}\"\n\nAvailable templates:\n${templateContext}\n\nSelection guidelines:\n- react-vite: Simple SPAs, prototypes, basic UIs\n- nextjs-fullstack: Full-stack apps needing auth, database, API routes, SSR\n- astro-static: Blogs, documentation, landing pages\n\nReturn the template ID, your reasoning, and confidence score.\nVALID templateId values: ${templates.map(t => t.id).join(', ')}`;\n\n try {\n console.log('[project-analyzer] Analyzing prompt for template selection...');\n const result = await generateStructuredOutput({\n model,\n schema: TemplateAnalysisSchema,\n prompt: selectionPrompt,\n });\n\n const template = templates.find(t => t.id === result.object.templateId);\n if (!template) {\n throw new Error(`Template ${result.object.templateId} not found`);\n }\n\n console.log(`[project-analyzer] Selected template: ${template.name} (confidence: ${result.object.confidence})`);\n console.log(`[project-analyzer] Reasoning: ${result.object.reasoning}`);\n \n return {\n template,\n reasoning: result.object.reasoning,\n confidence: result.object.confidence,\n };\n } catch (error) {\n console.error('[project-analyzer] Template selection failed, using fallback:', error);\n \n // Fallback to keyword-based selection\n const promptLower = prompt.toLowerCase();\n let template = templates.find(t => t.id === 'react-vite'); // Default\n \n if (promptLower.includes('next') || promptLower.includes('full-stack') || promptLower.includes('database') || promptLower.includes('auth')) {\n template = templates.find(t => t.id === 'nextjs-fullstack') || template;\n } else if (promptLower.includes('blog') || promptLower.includes('landing') || promptLower.includes('static') || promptLower.includes('docs')) {\n template = templates.find(t => t.id === 'astro-static') || template;\n }\n \n return {\n template: template!,\n reasoning: 'Fallback keyword-based selection',\n confidence: 0.5,\n };\n }\n}\n\n/**\n * Get template from framework tag (fast path - no AI)\n */\nfunction getTemplateFromTag(\n templates: Template[],\n tags: AppliedTag[]\n): Template | null {\n const frameworkTag = tags.find(t => t.key === 'framework');\n if (!frameworkTag) return null;\n\n // Find template matching the framework tag\n const matchingTemplate = templates.find(t =>\n t.tech.framework.toLowerCase() === frameworkTag.value.toLowerCase()\n );\n\n if (matchingTemplate) {\n console.log(`[project-analyzer] Using template from framework tag: ${matchingTemplate.name}`);\n return matchingTemplate;\n }\n\n // Try to get template info from TAG_DEFINITIONS\n const frameworkDef = TAG_DEFINITIONS.find(d => d.key === 'framework');\n const frameworkOption = frameworkDef?.options?.find(o => o.value === frameworkTag.value);\n \n if (frameworkOption?.repository) {\n console.log(`[project-analyzer] Framework tag found but no matching template, using tag metadata`);\n // Return null - caller should use tag metadata directly\n return null;\n }\n\n return null;\n}\n\nexport interface AnalyzeProjectOptions {\n prompt: string;\n agent: AgentId;\n claudeModel?: ClaudeModelId;\n tags?: AppliedTag[];\n}\n\nexport interface AnalyzeProjectResult {\n slug: string;\n friendlyName: string;\n description: string;\n icon: string;\n template: {\n id: string;\n name: string;\n framework: string;\n port: number;\n runCommand: string;\n repository: string;\n branch: string;\n };\n}\n\n/**\n * Main analysis function - orchestrates all AI calls\n * \n * Sends events via callback as analysis progresses:\n * - analysis-started\n * - project-metadata (with results)\n * - analysis-complete\n */\nexport async function analyzeProject(\n options: AnalyzeProjectOptions,\n sendEvent: (event: RunnerEvent) => void,\n commandId: string\n): Promise<AnalyzeProjectResult> {\n const { prompt, agent, claudeModel, tags } = options;\n const model = claudeModel || 'claude-sonnet-4-5';\n \n console.log('[project-analyzer] Starting project analysis...');\n console.log(`[project-analyzer] Agent: ${agent}, Model: ${model}`);\n \n // Emit analysis started\n sendEvent({\n type: 'analysis-started',\n commandId,\n timestamp: new Date().toISOString(),\n } as RunnerEvent);\n\n // Load templates\n const templates = await getAllTemplates();\n console.log(`[project-analyzer] Loaded ${templates.length} templates`);\n\n // Step 1: Template Selection\n let selectedTemplate: Template | null = null;\n\n // Fast path: Check if framework tag is present\n if (tags && tags.length > 0) {\n const tagTemplate = getTemplateFromTag(templates, tags);\n if (tagTemplate) {\n selectedTemplate = tagTemplate;\n console.log('[project-analyzer] FAST PATH: Using template from framework tag');\n } else {\n // Check if we have tag metadata without matching template\n const frameworkTag = tags.find(t => t.key === 'framework');\n if (frameworkTag) {\n const frameworkDef = TAG_DEFINITIONS.find(d => d.key === 'framework');\n const frameworkOption = frameworkDef?.options?.find(o => o.value === frameworkTag.value);\n \n if (frameworkOption?.repository) {\n // Build synthetic template from tag\n selectedTemplate = {\n id: `${frameworkTag.value}-default`,\n name: frameworkOption.label,\n description: `Template for ${frameworkOption.label}`,\n repository: frameworkOption.repository,\n branch: frameworkOption.branch || 'main',\n selection: { keywords: [], useCases: [], examples: [] },\n tech: {\n framework: frameworkTag.value,\n version: 'latest',\n language: 'TypeScript',\n styling: 'Tailwind CSS',\n packageManager: 'pnpm',\n nodeVersion: '20',\n },\n setup: {\n defaultPort: 3000,\n installCommand: 'pnpm install',\n devCommand: 'pnpm dev',\n buildCommand: 'pnpm build',\n },\n ai: { systemPromptAddition: '', includedFeatures: [] },\n };\n console.log('[project-analyzer] FAST PATH: Built template from tag metadata');\n }\n }\n }\n }\n\n // Slow path: AI template selection (if not already selected via tag)\n if (!selectedTemplate) {\n console.log('[project-analyzer] Running AI template selection...');\n const selection = await selectTemplateWithAI(prompt, templates, model);\n selectedTemplate = selection.template;\n }\n\n // At this point selectedTemplate is guaranteed to be assigned\n const finalTemplate = selectedTemplate;\n\n // Step 2: Generate project name (parallel-capable but keeping sequential for simplicity)\n const { slug, friendlyName } = await generateProjectName(prompt, model);\n\n // Step 3: Generate metadata (icon, description)\n const { icon, description } = await generateProjectMetadata(prompt, model);\n\n // Build result\n const result: AnalyzeProjectResult = {\n slug,\n friendlyName,\n description,\n icon,\n template: {\n id: finalTemplate.id,\n name: finalTemplate.name,\n framework: finalTemplate.tech.framework,\n port: finalTemplate.setup.defaultPort,\n runCommand: finalTemplate.setup.devCommand,\n repository: finalTemplate.repository,\n branch: finalTemplate.branch,\n },\n };\n\n // Emit project metadata\n sendEvent({\n type: 'project-metadata',\n commandId,\n timestamp: new Date().toISOString(),\n payload: {\n path: '', // Not yet created\n projectType: result.template.framework,\n runCommand: result.template.runCommand,\n port: result.template.port,\n detectedFramework: result.template.framework,\n slug: result.slug,\n friendlyName: result.friendlyName,\n description: result.description,\n icon: result.icon,\n template: result.template,\n },\n } as RunnerEvent);\n\n // Emit analysis complete\n sendEvent({\n type: 'analysis-complete',\n commandId,\n timestamp: new Date().toISOString(),\n } as RunnerEvent);\n\n console.log('[project-analyzer] Analysis complete!');\n console.log(`[project-analyzer] Project: ${friendlyName} (${slug})`);\n console.log(`[project-analyzer] Template: ${finalTemplate.name}`);\n console.log(`[project-analyzer] Icon: ${icon}`);\n\n return result;\n}\n","import { createConnection } from 'node:net';\n\n\n// Silent mode for TUI\nlet isSilentMode = false;\n\nexport function setSilentMode(silent: boolean): void {\n isSilentMode = silent;\n}\n\n/**\n * Check if a port is actually listening and ready to accept connections\n * @param port The port to check\n * @param host The host to check (default: localhost)\n * @param timeoutMs Timeout in milliseconds (default: 1000)\n * @returns Promise that resolves to true if port is ready, false otherwise\n */\nexport async function isPortReady(\n port: number,\n host: string = 'localhost',\n timeoutMs: number = 1000\n): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = createConnection({ port, host });\n\n const cleanup = () => {\n socket.destroy();\n };\n\n const timeout = setTimeout(() => {\n cleanup();\n resolve(false);\n }, timeoutMs);\n\n socket.on('connect', () => {\n clearTimeout(timeout);\n cleanup();\n resolve(true);\n });\n\n socket.on('error', () => {\n clearTimeout(timeout);\n cleanup();\n resolve(false);\n });\n });\n}\n\n/**\n * Wait for a port to become ready with retries\n * @param port The port to check\n * @param maxRetries Maximum number of retries (default: 10)\n * @param delayMs Delay between retries in milliseconds (default: 500)\n * @returns Promise that resolves to true if port becomes ready, false otherwise\n */\nexport async function waitForPort(\n port: number,\n maxRetries: number = 10,\n delayMs: number = 500\n): Promise<boolean> {\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n if (await isPortReady(port)) {\n if (!isSilentMode) console.log(`✅ Port ${port} is ready (attempt ${attempt}/${maxRetries})`);\n return true;\n }\n\n if (attempt < maxRetries) {\n if (!isSilentMode) console.log(`⏳ Port ${port} not ready yet, retrying in ${delayMs}ms... (${attempt}/${maxRetries})`);\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n\n if (!isSilentMode) console.error(`❌ Port ${port} never became ready after ${maxRetries} attempts`);\n return false;\n}\n","/**\n * HMR Proxy Manager for Runner\n * \n * Manages WebSocket connections to local Vite/webpack HMR servers\n * and forwards messages through the main runner WebSocket connection.\n */\n\nimport WebSocket from 'ws';\n\nexport interface HmrConnection {\n id: string;\n port: number;\n protocol?: string;\n ws: WebSocket;\n projectId: string;\n}\n\ntype MessageCallback = (connectionId: string, message: string) => void;\ntype ConnectedCallback = (connectionId: string) => void;\ntype DisconnectedCallback = (connectionId: string, code?: number, reason?: string) => void;\ntype ErrorCallback = (connectionId: string, error: string) => void;\n\nclass HmrProxyManager {\n private connections = new Map<string, HmrConnection>();\n private onMessage: MessageCallback | null = null;\n private onConnected: ConnectedCallback | null = null;\n private onDisconnected: DisconnectedCallback | null = null;\n private onError: ErrorCallback | null = null;\n\n /**\n * Set callbacks for HMR events\n */\n setCallbacks(callbacks: {\n onMessage: MessageCallback;\n onConnected: ConnectedCallback;\n onDisconnected: DisconnectedCallback;\n onError: ErrorCallback;\n }) {\n this.onMessage = callbacks.onMessage;\n this.onConnected = callbacks.onConnected;\n this.onDisconnected = callbacks.onDisconnected;\n this.onError = callbacks.onError;\n }\n\n /**\n * Connect to a local HMR WebSocket server\n */\n connect(connectionId: string, port: number, projectId: string, protocol?: string): void {\n // Close existing connection if any\n this.disconnect(connectionId);\n\n const wsUrl = `ws://localhost:${port}`;\n\n try {\n const ws = protocol \n ? new WebSocket(wsUrl, protocol)\n : new WebSocket(wsUrl);\n\n const connection: HmrConnection = {\n id: connectionId,\n port,\n protocol,\n ws,\n projectId,\n };\n\n ws.on('open', () => {\n this.connections.set(connectionId, connection);\n this.onConnected?.(connectionId);\n });\n\n ws.on('message', (data: WebSocket.Data) => {\n const message = data.toString();\n this.onMessage?.(connectionId, message);\n });\n\n ws.on('close', (code, reason) => {\n this.connections.delete(connectionId);\n this.onDisconnected?.(connectionId, code, reason.toString());\n });\n\n ws.on('error', (error) => {\n this.onError?.(connectionId, error.message);\n });\n\n // Store connection even before open (in case we need to close it)\n this.connections.set(connectionId, connection);\n\n } catch (error) {\n this.onError?.(connectionId, error instanceof Error ? error.message : 'Failed to connect');\n }\n }\n\n /**\n * Send a message to the HMR server\n */\n send(connectionId: string, message: string): boolean {\n const connection = this.connections.get(connectionId);\n if (!connection) {\n return false;\n }\n\n if (connection.ws.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n try {\n connection.ws.send(message);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Disconnect from HMR server\n */\n disconnect(connectionId: string): void {\n const connection = this.connections.get(connectionId);\n if (connection) {\n try {\n connection.ws.close();\n } catch (error) {\n // Ignore close errors\n }\n this.connections.delete(connectionId);\n }\n }\n\n /**\n * Disconnect all HMR connections for a project\n */\n disconnectProject(projectId: string): void {\n for (const [connectionId, connection] of this.connections.entries()) {\n if (connection.projectId === projectId) {\n this.disconnect(connectionId);\n }\n }\n }\n\n /**\n * Disconnect all HMR connections\n */\n disconnectAll(): void {\n for (const connectionId of this.connections.keys()) {\n this.disconnect(connectionId);\n }\n }\n\n /**\n * Check if a connection exists and is open\n */\n isConnected(connectionId: string): boolean {\n const connection = this.connections.get(connectionId);\n return connection?.ws.readyState === WebSocket.OPEN;\n }\n\n /**\n * Get stats about active connections\n */\n getStats() {\n return {\n activeConnections: this.connections.size,\n connections: Array.from(this.connections.values()).map(c => ({\n id: c.id,\n port: c.port,\n projectId: c.projectId,\n readyState: c.ws.readyState,\n })),\n };\n }\n}\n\n// Export singleton instance\nexport const hmrProxyManager = new HmrProxyManager();\n","// Sentry is initialized via --import flag (see package.json scripts)\n// This ensures instrumentation loads before any other modules\nimport * as Sentry from \"@sentry/node\";\nimport { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport { Codex } from \"@openai/codex-sdk\";\nimport { fileLog, setFileLoggerTuiMode } from \"./lib/file-logger.js\";\nimport { config as loadEnv } from \"dotenv\";\nimport { resolve, join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { streamText, generateText, type TextPart, type ImagePart, type ToolSet } from \"ai\";\nimport { claudeCode } from \"ai-sdk-provider-claude-code\";\nimport { createNativeClaudeQuery, USE_NATIVE_SDK } from \"./lib/native-claude-sdk.js\";\nimport { createOpenCodeQuery, USE_OPENCODE_SDK } from \"./lib/opencode-sdk.js\";\nimport WebSocket from \"ws\";\nimport os from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport express from \"express\";\nimport type { Server } from \"http\";\nimport {\n CLAUDE_SYSTEM_PROMPT,\n CODEX_SYSTEM_PROMPT, // Codex-specific prompt without TodoWrite tool references\n DEFAULT_CLAUDE_MODEL_ID,\n DEFAULT_OPENCODE_MODEL_ID,\n normalizeModelId,\n type RunnerCommand,\n type RunnerEvent,\n type AgentId,\n type ClaudeModelId,\n type OpenCodeModelId,\n setTemplatesPath,\n} from \"@openbuilder/agent-core\";\nimport { CLAUDE_CLI_TOOL_REGISTRY } from \"@openbuilder/agent-core/lib/claude/tools\";\nimport { buildLogger } from \"@openbuilder/agent-core/lib/logging/build-logger\";\nimport { createBuildStream } from \"./lib/build/engine.js\";\nimport { startDevServer, startDevServerAsync, stopDevServer, checkPortInUse, findAvailablePort } from \"./lib/process-manager.js\";\nimport { getWorkspaceRoot } from \"./lib/workspace.js\";\nimport {\n transformAgentMessageToSSE,\n resetTransformerState,\n setExpectedCwd,\n} from \"./lib/message-transformer.js\";\nimport { transformAISDKStream } from \"./lib/ai-sdk-adapter.js\";\nimport { transformCodexStream } from \"./lib/codex-sdk-adapter.js\";\n\nimport { orchestrateBuild } from \"./lib/build-orchestrator.js\";\nimport { analyzeProject } from \"./lib/project-analyzer.js\";\nimport { tunnelManager } from \"./lib/tunnel/manager.js\";\nimport { waitForPort } from \"./lib/port-checker.js\";\nimport { createProjectScopedPermissionHandler } from \"./lib/permissions/project-scoped-handler.js\";\nimport { hmrProxyManager } from \"./lib/hmr-proxy-manager.js\";\nimport { ensureProjectSkills } from \"./lib/skills.js\";\nimport { \n initRunnerLogger, \n getLogger,\n type RunnerLoggerOptions \n} from \"./lib/logging/index.js\";\n\nglobalThis.AI_SDK_LOG_WARNINGS = false;\n\n/**\n * Truncate strings for logging to prevent excessive output\n */\nfunction truncate(str: string, maxLength: number = 200): string {\n if (str.length <= maxLength) return str;\n return str.substring(0, maxLength) + '...';\n}\n\n/**\n * Truncate JSON objects for logging\n */\nfunction truncateJSON(obj: unknown, maxLength: number = 200): string {\n const json = JSON.stringify(obj, null, 2);\n return truncate(json, maxLength);\n}\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nsetTemplatesPath(resolve(__dirname, \"../templates.json\"));\n\nloadEnv({ path: resolve(__dirname, \"../.env.local\"), override: true });\n\nexport interface RunnerOptions {\n wsUrl?: string;\n apiUrl?: string;\n sharedSecret?: string;\n runnerId?: string;\n workspace?: string;\n heartbeatInterval?: number;\n silent?: boolean; // Suppress console output (for TUI mode)\n verbose?: boolean; // Enable verbose logging\n tuiMode?: boolean; // Enable TUI dashboard (default: true)\n}\n\nlet isSilentMode = false;\nlet isVerboseMode = false;\nlet isTuiMode = true;\n\n// Build logging can be controlled separately\nconst DEBUG_BUILD = process.env.DEBUG_BUILD === \"1\" || false;\n\n\n\n/**\n * Log a message through the unified logger\n * Falls back to console.log if logger not initialized\n */\nconst log = (...args: unknown[]) => {\n const message = args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ');\n \n try {\n const logger = getLogger();\n logger.info('system', message);\n } catch {\n // Logger not yet initialized - use console\n console.log(\"[runner]\", ...args);\n }\n};\n\n/**\n * Log a build-related message\n */\nconst buildLog = (...args: unknown[]) => {\n const message = args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ');\n \n try {\n const logger = getLogger();\n logger.info('build', message);\n } catch {\n // Logger not yet initialized - use console \n console.log(\"[runner] [build]\", ...args);\n }\n};\n\n/**\n * Log a debug/verbose message (only shown in verbose mode)\n */\nconst debugLog = (...args: unknown[]) => {\n if (!isVerboseMode && !DEBUG_BUILD) return;\n \n const message = args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ');\n \n try {\n const logger = getLogger();\n logger.debug('system', message);\n } catch {\n console.log(\"[runner] [debug]\", ...args);\n }\n};\n\nconst DEFAULT_AGENT: AgentId = \"claude-code\";\nconst CODEX_MODEL = \"gpt-5-codex\";\n\n// Stderr debug logging - suppressed in TUI mode (SILENT_MODE=1)\nconst stderrDebug = (message: string) => {\n if (process.env.SILENT_MODE !== '1' && DEBUG_BUILD) {\n process.stderr.write(message);\n }\n};\n\ntype CodexEvent = {\n type: string;\n item?: Record<string, unknown>;\n finalResponse?: string;\n usage?: unknown;\n error?: unknown;\n};\n\ninterface MessagePart {\n type: string;\n text?: string;\n image?: string;\n mimeType?: string;\n fileName?: string;\n toolCallId?: string;\n toolName?: string;\n input?: unknown;\n output?: unknown;\n state?: string;\n}\n\ntype BuildQueryFn = (\n prompt: string,\n workingDirectory: string,\n systemPrompt: string,\n agent?: AgentId,\n codexThreadId?: string,\n messageParts?: MessagePart[]\n) => AsyncGenerator<unknown, void, unknown>;\n\nfunction resolveCodexItemType(\n item: Record<string, unknown> | undefined\n): string {\n if (!item) return \"\";\n if (typeof item.type === \"string\") return item.type;\n if (typeof (item as { item_type?: unknown }).item_type === \"string\") {\n return String((item as { item_type?: unknown }).item_type);\n }\n return \"\";\n}\n\nfunction resolveCodexItemId(item: Record<string, unknown> | undefined): string {\n if (!item) return randomUUID();\n const candidateKeys = [\n \"id\",\n \"item_id\",\n \"tool_call_id\",\n \"tool_use_id\",\n ] as const;\n for (const key of candidateKeys) {\n const value = item[key as keyof typeof item];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n }\n return randomUUID();\n}\n\n/**\n * Helper to extract just the filename from a path\n */\nfunction getBasename(path: string): string {\n return path.split('/').pop() || path;\n}\n\n/**\n * Helper to extract command name and filename from a full command string\n * Example: \"cd /path/to/project && npm install\" -> \"npm install\"\n * Example: \"cat /long/path/to/file.ts\" -> \"cat file.ts\"\n */\nfunction simplifyCommand(fullCommand: string): string {\n // Remove cd commands and everything before &&\n let cmd = fullCommand.replace(/^.*&&\\s*/, '').trim();\n \n // Strip leading and trailing quotes (single or double)\n cmd = cmd.replace(/^[\"']|[\"']$/g, '');\n \n // For file operation commands (cat, grep, edit, etc.), extract just filename\n const fileOpMatch = cmd.match(/^(\\w+)\\s+(.+)$/);\n if (fileOpMatch) {\n const [, command, args] = fileOpMatch;\n // Split by spaces to handle multiple arguments\n const argParts = args.split(/\\s+/);\n const simplifiedArgs = argParts.map(arg => {\n // Strip quotes from individual arguments\n const cleanArg = arg.replace(/^[\"']|[\"']$/g, '');\n // If it looks like a file path, extract basename\n if (cleanArg.includes('/')) {\n return cleanArg.split('/').pop() || cleanArg;\n }\n return cleanArg;\n });\n return `${command} ${simplifiedArgs.join(' ')}`;\n }\n \n return cmd;\n}\n\nfunction extractCodexToolInput(item: Record<string, unknown> | undefined) {\n if (!item) return {};\n const possibleKeys = [\"arguments\", \"args\", \"input\"] as const;\n for (const key of possibleKeys) {\n const value = item[key as keyof typeof item];\n if (value !== undefined) {\n // Simplify paths in tool inputs for better display\n if (typeof value === 'object' && value !== null) {\n const inputObj = { ...value } as Record<string, unknown>;\n \n // Simplify file_path or path parameters\n if (typeof inputObj.file_path === 'string') {\n inputObj.file_path = getBasename(inputObj.file_path);\n }\n if (typeof inputObj.path === 'string') {\n inputObj.path = getBasename(inputObj.path);\n }\n if (typeof inputObj.target_file === 'string') {\n inputObj.target_file = getBasename(inputObj.target_file);\n }\n \n return inputObj;\n }\n return value;\n }\n }\n return {};\n}\n\nfunction extractCodexToolOutput(item: Record<string, unknown> | undefined) {\n if (!item) return null;\n const possibleKeys = [\n \"aggregated_output\",\n \"output\",\n \"stdout\",\n \"result\",\n \"response\",\n \"content\",\n ] as const;\n for (const key of possibleKeys) {\n const value = item[key as keyof typeof item];\n if (value !== undefined) {\n return value;\n }\n }\n return null;\n}\n\nasync function* convertCodexEventsToAgentMessages(\n events: AsyncIterable<unknown>\n): AsyncGenerator<Record<string, unknown>, void, unknown> {\n let eventCount = 0;\n for await (const rawEvent of events) {\n eventCount++;\n const event = rawEvent as CodexEvent;\n\n // Log every single raw event from Codex\n console.log(\n `[codex-events] ═══════════════════════════════════════════════`\n );\n if (!isSilentMode && DEBUG_BUILD)\n console.log(`[codex-events] RAW EVENT #${eventCount}`);\n if (!isSilentMode && DEBUG_BUILD)\n console.log(`[codex-events] Type: ${event.type}`);\n if (!isSilentMode && DEBUG_BUILD)\n console.log(\n `[codex-events] Full event: ${JSON.stringify(event, null, 2)}`\n );\n console.log(\n `[codex-events] ═══════════════════════════════════════════════`\n );\n\n const item = (event.item ?? undefined) as unknown as\n | Record<string, unknown>\n | undefined;\n const itemType = resolveCodexItemType(item);\n const itemId = resolveCodexItemId(item);\n\n switch (event.type) {\n case \"item.started\": {\n if (itemType === \"tool_call\" || itemType === \"mcp_tool_call\") {\n yield {\n type: \"assistant\",\n message: {\n id: itemId,\n content: [\n {\n type: \"tool_use\",\n id: itemId,\n name:\n (item?.name as string) ||\n (item?.tool_name as string) ||\n \"tool_call\",\n input: extractCodexToolInput(item),\n },\n ],\n },\n };\n } else if (itemType === \"command_execution\") {\n const fullCommand = (item?.command as string) || (item?.cmd as string) || \"\";\n const displayCommand = simplifyCommand(fullCommand);\n yield {\n type: \"assistant\",\n message: {\n id: itemId,\n content: [\n {\n type: \"tool_use\",\n id: itemId,\n name: \"command_execution\",\n input: {\n command: displayCommand,\n },\n },\n ],\n },\n };\n } else if (itemType === \"file_change\") {\n // Convert file_change events to tool_use for UI display\n const changes =\n (item?.changes as { kind: string; path: string }[]) || [];\n const filePaths = changes.map((c) => getBasename(c.path) || \"unknown\").join(\", \");\n yield {\n type: \"assistant\",\n message: {\n id: itemId,\n content: [\n {\n type: \"tool_use\",\n id: itemId,\n name: \"file_change\",\n input: {\n changes: changes,\n summary: `Modified ${changes.length} file(s): ${filePaths}`,\n },\n },\n ],\n },\n };\n }\n break;\n }\n case \"item.completed\": {\n if (itemType === \"assistant_message\" || itemType === \"agent_message\") {\n const text = (item?.text as string) || \"\";\n if (text.trim().length > 0) {\n yield {\n type: \"assistant\",\n message: {\n id: itemId,\n content: [\n {\n type: \"text\",\n text,\n },\n ],\n },\n };\n }\n } else if (itemType === \"reasoning\") {\n const reasoning = (item?.text as string) || \"\";\n if (reasoning.trim().length > 0) {\n yield {\n type: \"assistant\",\n message: {\n id: itemId,\n content: [\n {\n type: \"text\",\n text: reasoning,\n },\n ],\n },\n };\n }\n } else if (\n itemType === \"command_execution\" ||\n itemType === \"tool_call\" ||\n itemType === \"mcp_tool_call\" ||\n itemType === \"file_change\"\n ) {\n const output = extractCodexToolOutput(item);\n const exitCode =\n typeof item?.exit_code === \"number\" ? item.exit_code : undefined;\n const status =\n typeof item?.status === \"string\" ? item.status : undefined;\n const isError =\n typeof exitCode === \"number\"\n ? exitCode !== 0\n : status === \"failed\" || status === \"error\";\n\n // For file_change, create a more readable output\n let finalOutput = output;\n if (itemType === \"file_change\" && !output) {\n const changes =\n (item?.changes as { kind: string; path: string }[]) || [];\n finalOutput = changes\n .map((c) => `${c.kind || \"modified\"}: ${c.path}`)\n .join(\"\\n\");\n }\n\n yield {\n type: \"user\",\n message: {\n content: [\n {\n type: \"tool_result\",\n tool_use_id: itemId,\n content: finalOutput,\n is_error: isError || undefined,\n status,\n exit_code: exitCode,\n },\n ],\n },\n };\n }\n break;\n }\n case \"turn.completed\": {\n yield {\n type: \"result\",\n result: event.finalResponse ?? null,\n usage: event.usage,\n };\n break;\n }\n case \"error\": {\n yield {\n type: \"error\",\n error: event.error,\n };\n break;\n }\n default:\n break;\n }\n }\n}\n\n/**\n * Create Claude query function using AI SDK\n *\n * NOTE: This function prepends CLAUDE_SYSTEM_PROMPT to the systemPrompt from orchestrator.\n * The orchestrator provides context-specific sections only (no base prompt).\n */\nfunction createClaudeQuery(\n modelId: ClaudeModelId = DEFAULT_CLAUDE_MODEL_ID\n): BuildQueryFn {\n return async function* (prompt, workingDirectory, systemPrompt, agent, codexThreadId, messageParts) {\n // Note: query is auto-instrumented by Sentry's claudeCodeAgentSdkIntegration via OpenTelemetry\n\n stderrDebug(\n \"[runner] [createClaudeQuery] 🎯 Query function called\\n\"\n );\n stderrDebug(`[runner] [createClaudeQuery] Model: ${modelId}\\n`);\n stderrDebug(\n `[runner] [createClaudeQuery] Working dir: ${workingDirectory}\\n`\n );\n stderrDebug(\n `[runner] [createClaudeQuery] Prompt length: ${prompt.length}\\n`\n );\n\n // Check if we have image parts\n const hasImages = messageParts?.some(p => p.type === 'image');\n if (hasImages) {\n const imageCount = messageParts?.filter(p => p.type === 'image').length || 0;\n stderrDebug(\n `[runner] [createClaudeQuery] 🖼️ Multi-modal message with ${imageCount} image(s)\\n`\n );\n }\n\n // Build combined system prompt\n const systemPromptSegments: string[] = [CLAUDE_SYSTEM_PROMPT.trim()];\n if (systemPrompt && systemPrompt.trim().length > 0) {\n systemPromptSegments.push(systemPrompt.trim());\n }\n const appendedSystemPrompt = systemPromptSegments.join(\"\\n\\n\");\n\n // Use the full model ID as-is (claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-5)\n const aiSdkModelId = modelId || \"claude-haiku-4-5\";\n\n // Ensure working directory exists before passing to Claude Code\n if (!existsSync(workingDirectory)) {\n console.log(`[createClaudeQuery] Creating working directory: ${workingDirectory}`);\n mkdirSync(workingDirectory, { recursive: true });\n }\n \n // Ensure project has skills copied from bundled skills\n ensureProjectSkills(workingDirectory);\n\n // NOTE: The community provider (ai-sdk-provider-claude-code) bundles an older\n // version of the SDK types. We cast to `any` to avoid type conflicts.\n // This legacy path is deprecated in favor of the native SDK implementation.\n const model = claudeCode(aiSdkModelId, {\n queryFunction: query as any, // Cast to avoid SDK version type conflict\n systemPrompt: {\n type: \"preset\",\n preset: \"claude_code\",\n append: appendedSystemPrompt,\n },\n cwd: workingDirectory,\n permissionMode: \"bypassPermissions\",\n maxTurns: 100,\n additionalDirectories: [workingDirectory],\n env: {\n // Claude Code CLI default output cap is 32k; bumping to 64k per\n // https://docs.claude.com/en/docs/claude-code/settings#environment-variables\n CLAUDE_CODE_MAX_OUTPUT_TOKENS:\n process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS ?? \"64000\",\n },\n // Explicitly allow all tools to prevent \"No tools are available\" errors\n canUseTool: createProjectScopedPermissionHandler(workingDirectory) as any, // Cast for type compat\n streamingInput: \"always\", // REQUIRED when using canUseTool - enables tool callbacks\n includePartialMessages: true,\n settingSources: [\"user\", \"project\"], // Load skills from user and project directories\n });\n\n // Build user message - either simple text or multi-part with images\n let userMessage: string | Array<TextPart | ImagePart>;\n\n if (messageParts && messageParts.length > 0) {\n // Multi-part message with images\n const contentParts: Array<TextPart | ImagePart> = [];\n\n // Add image parts first (Claude best practice)\n for (const part of messageParts) {\n if (part.type === 'image' && part.image) {\n // AI SDK expects images as data URLs, which we already have\n contentParts.push({\n type: 'image',\n image: part.image, // Already a base64 data URL\n });\n\n // Extract media type for logging\n const match = part.image.match(/^data:(.+);base64,/);\n if (match) {\n stderrDebug(\n `[runner] [createClaudeQuery] ✅ Added image part (${match[1]})\\n`\n );\n }\n } else if (part.type === 'text' && part.text) {\n contentParts.push({\n type: 'text',\n text: part.text\n });\n }\n }\n\n // Add prompt text if not already in parts\n if (!contentParts.some(p => p.type === 'text')) {\n contentParts.push({\n type: 'text',\n text: prompt\n });\n }\n\n userMessage = contentParts;\n stderrDebug(\n `[runner] [createClaudeQuery] 📦 Built multi-part message with ${contentParts.length} part(s)\\n`\n );\n } else {\n // Simple text message (existing behavior)\n userMessage = prompt;\n }\n\n // Stream with telemetry enabled for Sentry\n // Use 'messages' param for multi-part content, 'prompt' for simple text\n // IMPORTANT: experimental_telemetry is REQUIRED for the Vercel AI SDK integration to work\n const streamOptions = {\n model,\n tools: CLAUDE_CLI_TOOL_REGISTRY as ToolSet,\n experimental_telemetry: {\n isEnabled: true,\n functionId: 'createClaudeQuery',\n recordInputs: true,\n recordOutputs: true,\n },\n } as const;\n\n const result = Array.isArray(userMessage)\n ? streamText({\n ...streamOptions,\n messages: [{ role: 'user', content: userMessage }],\n })\n : streamText({\n ...streamOptions,\n prompt: userMessage,\n });\n\n // Transform AI SDK stream format to our message format\n if (process.env.DEBUG_BUILD === \"1\") {\n console.log(\"[createClaudeQuery] Starting stream consumption...\");\n }\n\n for await (const message of transformAISDKStream(result.fullStream)) {\n if (process.env.DEBUG_BUILD === \"1\") {\n console.log(\"[createClaudeQuery] Yielding message:\", message.type);\n }\n yield message;\n }\n\n if (process.env.DEBUG_BUILD === \"1\") {\n console.log(\"[createClaudeQuery] Stream consumption complete\");\n }\n };\n}\n\n/**\n * Create Codex query function using ORIGINAL Codex SDK (NOT AI SDK)\n *\n * NOTE: This function prepends CLAUDE_SYSTEM_PROMPT to the systemPrompt from orchestrator.\n * UNIFIED: Both Claude and Codex now use the same base prompt for consistency.\n * The orchestrator provides context-specific sections only (no base prompt).\n *\n * Uses two-phase execution:\n * 1. Planning phase: Get structured task list with JSON schema\n * 2. Execution phase: Work through tasks sequentially\n */\nfunction createCodexQuery(): BuildQueryFn {\n return async function* codexQuery(\n prompt: string,\n workingDirectory: string,\n systemPrompt: string,\n agent?: AgentId,\n codexThreadId?: string,\n messageParts?: MessagePart[]\n ) {\n buildLogger.codexQuery.promptBuilding(\n workingDirectory,\n CLAUDE_SYSTEM_PROMPT.length + (systemPrompt?.length || 0),\n prompt.length\n );\n\n fileLog.info(\"━━━ CODEX QUERY STARTED ━━━\");\n fileLog.info(\"Working directory:\", workingDirectory);\n fileLog.info(\"Prompt length:\", prompt.length);\n\n // Note: Codex is auto-instrumented by Sentry's openAIIntegration via OTel\n const codex = new Codex();\n\n const systemParts: string[] = [CODEX_SYSTEM_PROMPT.trim()]; // Use Codex-specific prompt (no TodoWrite tool)\n if (systemPrompt && systemPrompt.trim().length > 0) {\n systemParts.push(systemPrompt.trim());\n }\n\n // Combine system prompt and user prompt\n // Note: Codex SDK doesn't have system prompt configuration, so we prepend it to the user prompt\n const combinedPrompt = `${systemParts.join(\"\\n\\n\")}\\n\\n${prompt}`;\n\n fileLog.info('Using CODEX_SYSTEM_PROMPT (TodoWrite references replaced with JSON code blocks)');\n\n // Resume existing thread for enhancements, start new for initial builds\n let thread;\n\n // NOTE: MCP server configuration\n // The Codex SDK doesn't support mcpServers in ThreadOptions (checked types)\n // MCP servers are auto-discovered from ~/.codex/config or environment\n // TODO: Research proper MCP configuration method for Codex SDK\n\n if (codexThreadId) {\n log(`🔄 [codex-query] Resuming thread: ${codexThreadId}`);\n fileLog.info('Resuming Codex thread:', codexThreadId);\n thread = codex.resumeThread(codexThreadId, {\n sandboxMode: \"danger-full-access\",\n model: CODEX_MODEL,\n workingDirectory,\n skipGitRepoCheck: true,\n });\n } else {\n log('🆕 [codex-query] Starting new thread');\n fileLog.info('Starting new Codex thread');\n thread = codex.startThread({\n sandboxMode: \"danger-full-access\",\n model: CODEX_MODEL,\n workingDirectory,\n skipGitRepoCheck: true,\n });\n }\n\n buildLogger.codexQuery.threadStarting();\n\n // ========================================\n // AUTONOMOUS MULTI-TURN LOOP\n // ========================================\n // Like basic_streaming.ts but with automatic continuation\n // Keep calling runStreamed() on same thread until work complete\n log(\"🎯 [codex-query] Starting autonomous Codex execution...\");\n\n const MAX_TURNS = 50;\n let turnCount = 0;\n let capturedThreadId: string | null = null;\n let lastTurnText = '';\n let allTodosDone = false;\n\n while (turnCount < MAX_TURNS) {\n turnCount++;\n\n // Capture thread ID\n if (!capturedThreadId && thread.id) {\n capturedThreadId = thread.id;\n fileLog.info('Codex thread ID captured:', capturedThreadId);\n\n // Send thread ID to frontend\n const threadIdEvent = {\n type: \"assistant\",\n message: {\n id: `codex-thread-${Date.now()}`,\n content: [\n {\n type: \"metadata\",\n metadata_type: \"codex_thread_id\",\n thread_id: capturedThreadId,\n }\n ],\n },\n };\n yield threadIdEvent;\n fileLog.info('Thread ID sent to frontend:', capturedThreadId);\n }\n\n // Determine prompt for this turn\n const turnPrompt = turnCount === 1\n ? combinedPrompt\n : \"Continue working on the next step. Call todo-update-tool to track your progress.\";\n\n log(`🚀 [codex-query] Turn ${turnCount}: ${turnCount === 1 ? 'Initial request' : 'Continuing work'}...`);\n\n // Log full prompt being sent to Codex\n if (turnCount === 1) {\n Sentry.logger.info(\n Sentry.logger.fmt`Full Codex prompt (Turn 1) ${{\n prompt: turnPrompt,\n promptLength: turnPrompt.length,\n promptPreview: turnPrompt.substring(0, 200),\n operation: 'codex_query',\n turnCount: 1,\n }}`\n );\n\n // Also log to file\n fileLog.info('━━━ FULL CODEX PROMPT ━━━');\n fileLog.info(turnPrompt);\n fileLog.info(`━━━ END PROMPT (${turnPrompt.length} chars) ━━━`);\n } else {\n fileLog.info(`Turn ${turnCount} prompt:`, turnPrompt);\n }\n\n // Execute turn (like basic_streaming.ts but automated)\n const { events } = await thread.runStreamed(turnPrompt);\n\n // Stream events from this turn through adapter\n // transformCodexStream expects the full event stream\n let turnHadContent = false;\n for await (const message of transformCodexStream(events)) {\n turnHadContent = true;\n\n // Track text for completion detection\n if (message.type === 'assistant' && message.message.content) {\n for (const block of message.message.content) {\n if (block.type === 'text' && block.text) {\n lastTurnText = block.text.toLowerCase();\n }\n }\n }\n\n yield message;\n }\n\n // Check for completion signals\n const hasCompletionSignal = lastTurnText.includes('implementation complete') ||\n lastTurnText.includes('build complete') ||\n lastTurnText.includes('all steps verified');\n\n if (hasCompletionSignal) {\n log(\"✅ [codex-query] Codex signaled completion\");\n allTodosDone = true;\n break;\n }\n\n // Safety: Stop if turn produced no content\n if (!turnHadContent) {\n log(\"⚠️ [codex-query] Turn produced no content, stopping\");\n break;\n }\n\n // Log turn completion\n fileLog.info(`Turn ${turnCount} complete, checking if more work needed...`);\n }\n\n buildLogger.codexQuery.sessionComplete(turnCount);\n fileLog.info(\"━━━ CODEX QUERY COMPLETE ━━━\");\n fileLog.info(`Total turns: ${turnCount}`);\n };\n}\n\nfunction createBuildQuery(\n agent: AgentId,\n modelId?: ClaudeModelId | OpenCodeModelId,\n abortController?: AbortController\n): BuildQueryFn {\n // When OpenCode SDK is enabled, route ALL requests through it (including Codex)\n if (USE_OPENCODE_SDK) {\n // Map openai-codex agent to the correct OpenCode model\n const normalizedModel = agent === \"openai-codex\"\n ? \"openai/gpt-5.2-codex\"\n : modelId ? normalizeModelId(modelId) : DEFAULT_OPENCODE_MODEL_ID;\n \n console.log(`[runner] 🔄 Using OpenCode SDK (multi-provider) - Model: ${normalizedModel}`);\n return createOpenCodeQuery(normalizedModel);\n }\n\n // Fallback: Direct Codex SDK with thread resumption (when OpenCode is disabled)\n if (agent === \"openai-codex\") {\n console.log('[runner] 🔄 Using direct Codex SDK (fallback mode)');\n return createCodexQuery();\n }\n\n // Use legacy AI SDK path when explicitly requested\n if (!USE_NATIVE_SDK) {\n console.log('[runner] 🔄 Using AI SDK with claude-code provider (legacy mode)');\n return createClaudeQuery((modelId as ClaudeModelId) ?? DEFAULT_CLAUDE_MODEL_ID);\n }\n\n // Default: Use native Claude Agent SDK (direct integration)\n console.log('[runner] 🔄 Using NATIVE Claude Agent SDK v0.1.76');\n return createNativeClaudeQuery((modelId as ClaudeModelId) ?? DEFAULT_CLAUDE_MODEL_ID, abortController);\n}\n\n/**\n * Retry a fetch call with exponential backoff\n */\nasync function fetchWithRetry(\n url: string,\n options: RequestInit,\n maxAttempts = 3\n): Promise<Response> {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const response = await fetch(url, options);\n return response;\n } catch (error) {\n lastError = error as Error;\n if (attempt < maxAttempts) {\n const delay = 1000 * attempt; // 1s, 2s, 3s\n console.log(\n ` ⏳ Attempt ${attempt}/${maxAttempts} failed, retrying in ${delay}ms...`\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * Cleanup orphaned processes on startup\n */\nasync function cleanupOrphanedProcesses(\n apiBaseUrl: string,\n runnerSharedSecret: string,\n runnerId: string\n) {\n if (!isSilentMode) {\n console.log(\"🧹 Cleaning up orphaned processes from previous runs...\");\n }\n\n try {\n // Get list of processes from API (filtered by this runner's ID)\n const response = await fetchWithRetry(\n `${apiBaseUrl}/api/runner/process/list?runnerId=${encodeURIComponent(\n runnerId\n )}`,\n {\n headers: {\n Authorization: `Bearer ${runnerSharedSecret}`,\n },\n },\n 3\n );\n\n if (!response.ok) {\n console.error(\"❌ Failed to fetch process list for cleanup\");\n return;\n }\n\n const { processes } = await response.json();\n if (!isSilentMode) {\n console.log(\n ` Found ${processes.length} processes to check for this runner`\n );\n }\n\n for (const row of processes) {\n try {\n // Check if process still exists locally (signal 0 = check existence, doesn't kill)\n process.kill(row.pid, 0);\n if (!isSilentMode && DEBUG_BUILD)\n console.log(\n ` ✅ Process ${row.pid} (project ${row.projectId.slice(\n 0,\n 8\n )}) still running`\n );\n } catch (err) {\n // Process doesn't exist - orphaned, unregister via API\n console.log(\n ` ❌ Orphaned process ${row.pid} (project ${row.projectId.slice(\n 0,\n 8\n )}), cleaning up`\n );\n\n await fetchWithRetry(\n `${apiBaseUrl}/api/runner/process/${row.projectId}`,\n {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${runnerSharedSecret}`,\n },\n },\n 3\n );\n }\n }\n\n if (!isSilentMode) {\n if (!isSilentMode && DEBUG_BUILD)\n console.log(\"✅ Orphaned process cleanup complete\");\n }\n } catch (error) {\n console.error(\"❌ Error during cleanup:\", error);\n throw error;\n }\n}\n\n/**\n * Start periodic health checks for running processes\n */\nfunction startPeriodicHealthChecks(\n apiBaseUrl: string,\n runnerSharedSecret: string,\n runnerId: string\n) {\n if (!isSilentMode) {\n console.log(\"🏥 Starting periodic port health checks (every 30s)...\");\n }\n\n const doHealthCheck = async () => {\n try {\n // Get list of processes to health check from API (filtered by this runner's ID)\n const response = await fetchWithRetry(\n `${apiBaseUrl}/api/runner/process/list?runnerId=${encodeURIComponent(\n runnerId\n )}`,\n {\n headers: {\n Authorization: `Bearer ${runnerSharedSecret}`,\n },\n },\n 3\n );\n\n if (!response.ok) {\n console.error(\"❌ Failed to fetch process list for health check\");\n return;\n }\n\n const { processes } = await response.json();\n\n for (const row of processes) {\n if (!row.port) continue; // Skip if no port detected yet\n\n // Check port locally (runner can access localhost)\n const isListening = await checkPortInUse(row.port);\n\n if (!isSilentMode && DEBUG_BUILD)\n console.log(\n ` 🔍 Health check for port ${row.port}: ${\n isListening ? \"HEALTHY ✅\" : \"UNHEALTHY ❌\"\n }`\n );\n\n const newFailCount = isListening\n ? 0\n : (row.healthCheckFailCount || 0) + 1;\n\n if (!isListening && newFailCount >= 3) {\n // Failed 3 times - kill the process locally and report to API\n console.log(\n ` ❌ Port ${\n row.port\n } not in use after 3 checks, killing process for project ${row.projectId.slice(\n 0,\n 8\n )}`\n );\n\n // Stop the process if it still exists\n try {\n process.kill(row.pid, \"SIGTERM\");\n console.log(` Sent SIGTERM to PID ${row.pid}`);\n } catch (err) {\n // Process already dead\n }\n }\n\n // Report health status to API\n await fetchWithRetry(\n `${apiBaseUrl}/api/runner/process/${row.projectId}/health`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${runnerSharedSecret}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n port: row.port,\n status: isListening ? \"healthy\" : \"unhealthy\",\n failCount: newFailCount,\n }),\n },\n 3\n );\n\n if (!isListening) {\n console.log(\n ` ⚠️ Port ${\n row.port\n } not in use (fail ${newFailCount}/3) for project ${row.projectId.slice(\n 0,\n 8\n )}`\n );\n }\n }\n } catch (error) {\n console.error(\"❌ Error during health check:\", error);\n }\n };\n\n // Run health check every 30 seconds\n setInterval(doHealthCheck, 30000);\n}\n\n/**\n * Start the runner with the given options\n */\nexport async function startRunner(options: RunnerOptions = {}) {\n // Set mode flags\n isSilentMode = options.silent || false;\n isVerboseMode = options.verbose || process.env.VERBOSE === '1' || false;\n isTuiMode = options.tuiMode !== false; // Default to true\n\n // Initialize the unified logger\n const loggerOptions: RunnerLoggerOptions = {\n verbose: isVerboseMode,\n tuiMode: isTuiMode && !isSilentMode,\n };\n const logger = initRunnerLogger(loggerOptions);\n\n // Enable TUI mode in file-logger to suppress terminal output\n if (isTuiMode && !isSilentMode) {\n setFileLoggerTuiMode(true);\n }\n\n // Also set silent mode for all modules\n if (isSilentMode) {\n const { setSilentMode: setProcessManagerSilent } = await import(\n \"./lib/process-manager.js\"\n );\n setProcessManagerSilent(true);\n\n const { setSilentMode: setPortCheckerSilent } = await import(\n \"./lib/port-checker.js\"\n );\n setPortCheckerSilent(true);\n\n // Set silent mode on tunnel manager globally\n tunnelManager.setSilent(true);\n }\n\n // Note: Port cleanup is handled by the web app, not the runner\n // The runner is stateless and doesn't manage database operations directly\n\n const WORKSPACE_ROOT = options.workspace || getWorkspaceRoot();\n log(\"workspace root:\", WORKSPACE_ROOT);\n\n // Railway-aware RUNNER_ID: Prefer explicit config, then Railway replica ID, fallback to hostname\n const RUNNER_ID = options.runnerId ||\n process.env.RUNNER_ID ||\n process.env.RAILWAY_REPLICA_ID ||\n `runner-${os.hostname()}`;\n \n // WebSocket URL for direct connection to Next.js server\n // Supports both new RUNNER_WS_URL and legacy RUNNER_BROKER_URL for backward compatibility\n const WS_URL =\n options.wsUrl ||\n process.env.RUNNER_WS_URL ||\n process.env.RUNNER_BROKER_URL || // Legacy fallback\n \"ws://localhost:3000/ws/runner\";\n \n const SHARED_SECRET =\n options.sharedSecret || process.env.RUNNER_SHARED_SECRET;\n const HEARTBEAT_INTERVAL_MS = options.heartbeatInterval || 15_000;\n\n // Get API URL from options, env, or fallback to deriving from WebSocket URL\n const apiBaseUrl =\n options.apiUrl ||\n process.env.API_BASE_URL ||\n (() => {\n // Fallback: derive from WebSocket URL (same host, http/https protocol)\n const wsUrl = new URL(WS_URL);\n const protocol = wsUrl.protocol === \"wss:\" ? \"https:\" : \"http:\";\n return `${protocol}//${wsUrl.host}`;\n })();\n\n // Startup validation - fail fast if required config missing\n const missingConfig: string[] = [];\n if (!SHARED_SECRET) missingConfig.push('RUNNER_SHARED_SECRET');\n if (!WS_URL) missingConfig.push('RUNNER_WS_URL');\n if (!WORKSPACE_ROOT) missingConfig.push('WORKSPACE_ROOT');\n\n if (missingConfig.length > 0) {\n console.error(\"❌ Missing required configuration:\");\n missingConfig.forEach(cfg => console.error(` - ${cfg}`));\n process.exit(1);\n }\n\n const runnerSharedSecret = SHARED_SECRET!; // Guaranteed to be string after validation check\n\n // Ensure workspace directory exists\n if (!existsSync(WORKSPACE_ROOT)) {\n console.log(`📁 Creating workspace directory: ${WORKSPACE_ROOT}`);\n mkdirSync(WORKSPACE_ROOT, { recursive: true });\n }\n\n // Set environment variables for process-manager and other modules\n process.env.API_BASE_URL = apiBaseUrl;\n process.env.RUNNER_SHARED_SECRET = runnerSharedSecret;\n process.env.RUNNER_ID = RUNNER_ID;\n\n // Log startup configuration using the unified logger\n logger.header({\n runnerId: RUNNER_ID,\n serverUrl: WS_URL,\n workspace: WORKSPACE_ROOT,\n apiUrl: apiBaseUrl,\n });\n\n debugLog(\"api base url:\", apiBaseUrl);\n debugLog(\"runner id:\", RUNNER_ID);\n debugLog(\"workspace root:\", WORKSPACE_ROOT);\n\n // Start HTTP health endpoint for Railway health checks\n const isServiceMode = process.env.NODE_ENV === 'production' || process.env.RAILWAY_ENVIRONMENT;\n let healthServer: Server | null = null;\n\n if (isServiceMode) {\n const healthApp = express();\n const healthPort = process.env.HEALTH_PORT || 8080;\n\n healthApp.get('/health', (req, res) => {\n res.json({\n status: 'healthy',\n runner: {\n id: RUNNER_ID,\n connected: socket?.readyState === WebSocket.OPEN,\n workspace: WORKSPACE_ROOT,\n workspaceExists: existsSync(WORKSPACE_ROOT),\n },\n uptime: process.uptime(),\n timestamp: new Date().toISOString(),\n });\n });\n\n healthApp.get('/ready', (req, res) => {\n const isReady = socket?.readyState === WebSocket.OPEN && existsSync(WORKSPACE_ROOT);\n res.status(isReady ? 200 : 503).json({\n ready: isReady,\n runnerId: RUNNER_ID,\n });\n });\n\n const portNumber = typeof healthPort === 'string' ? parseInt(healthPort, 10) : healthPort;\n healthServer = healthApp.listen(portNumber, () => {\n console.log(`✅ Health endpoint listening on port ${portNumber}`);\n });\n }\n\n // Cleanup orphaned processes on startup\n cleanupOrphanedProcesses(apiBaseUrl, runnerSharedSecret, RUNNER_ID).catch(\n (err) => {\n console.error(\"❌ Failed to cleanup orphaned processes on startup:\", err);\n }\n );\n\n // Start periodic health checks\n startPeriodicHealthChecks(apiBaseUrl, runnerSharedSecret, RUNNER_ID);\n\n let socket: WebSocket | null = null;\n let heartbeatTimer: NodeJS.Timeout | null = null;\n let pingTimer: NodeJS.Timeout | null = null;\n let loggedFirstChunk = false;\n let reconnectAttempts = 0;\n let isShuttingDown = false; // Prevent reconnection during shutdown\n const MAX_RECONNECT_DELAY = 30000; // 30 seconds max\n const MAX_RECONNECT_ATTEMPTS = 50; // ~30 minutes of reconnection attempts\n const PING_INTERVAL = 30000; // Ping every 30 seconds\n const PONG_TIMEOUT = 45000; // 45 seconds (1.5x ping interval)\n const CONNECTION_HANDSHAKE_TIMEOUT = 10000; // 10 second connection timeout\n const COMMAND_RECEIVE_TIMEOUT = 1800000; // 30 minutes - force reconnect if no commands received (was 5 min, too aggressive for idle sessions)\n const INITIAL_CONNECTION_DELAY = 5000; // Wait 5 seconds before first connection (allows server to start)\n const SUPPRESS_ERRORS_UNTIL_ATTEMPT = 3; // Don't log ECONNREFUSED for first N attempts (expected during startup)\n let lastPongReceived = Date.now();\n let lastCommandReceived = Date.now(); // BUG FIX: Track when we last received a command\n\n // ============================================================\n // HTTP PERSISTENCE FOR PROPER DISTRIBUTED TRACE CONTEXT\n // DB writes now go via HTTP to ensure traces are properly linked\n // ============================================================\n\n interface BuildContext {\n commandId: string;\n sessionId: string;\n projectId: string;\n buildId: string;\n agentId: string;\n claudeModelId?: string;\n // For auto-start dev server after build\n projectDirectory?: string;\n projectSlug?: string;\n detectedFramework?: string;\n // For cancellation support\n abortController?: AbortController;\n }\n\n const activeBuildContexts = new Map<string, BuildContext>();\n\n /**\n * Direct persistence for special events (TodoWrite, start)\n * These bypass the buffer and go directly to the original endpoint.\n * Includes Sentry trace headers for distributed tracing.\n */\n /**\n * Helper function to retry HTTP requests\n */\n async function fetchWithRetry(\n url: string,\n options: RequestInit,\n maxRetries: number = 1\n ): Promise<Response> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const response = await fetch(url, options);\n\n // Retry on 5xx errors\n if (!response.ok && response.status >= 500 && attempt < maxRetries) {\n console.warn(`[runner] Persist failed (${response.status}), retrying...`);\n await new Promise(resolve => setTimeout(resolve, 100));\n continue;\n }\n\n return response;\n } catch (error) {\n lastError = error as Error;\n if (attempt < maxRetries) {\n console.warn(`[runner] Persist error, retrying:`, error);\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n }\n }\n\n throw lastError || new Error('Persistence failed after retries');\n }\n\n async function persistBuildEventDirect(\n context: BuildContext,\n event: Record<string, unknown>\n ): Promise<void> {\n return Sentry.startSpan(\n {\n name: `persist.build-event.${event.type}`,\n op: 'http.client',\n attributes: {\n 'http.method': 'POST',\n 'http.url': `${apiBaseUrl}/api/build-events`,\n 'event.type': event.type as string,\n 'event.tool_name': event.toolName as string || undefined,\n },\n },\n async () => {\n // Get trace context for propagation\n const traceData = Sentry.getTraceData();\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${runnerSharedSecret}`,\n 'Content-Type': 'application/json',\n };\n\n // Add Sentry trace headers for distributed tracing\n if (traceData['sentry-trace']) {\n headers['sentry-trace'] = traceData['sentry-trace'];\n }\n if (traceData.baggage) {\n headers['baggage'] = traceData.baggage;\n }\n\n const response = await fetchWithRetry(\n `${apiBaseUrl}/api/build-events`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({\n commandId: context.commandId,\n sessionId: context.sessionId,\n projectId: context.projectId,\n buildId: context.buildId,\n agentId: context.agentId,\n claudeModelId: context.claudeModelId,\n event,\n }),\n },\n 1 // Max 1 retry\n );\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n }\n );\n }\n\n /**\n * Send a build event to the HTTP persistence endpoint.\n * This ensures DB writes are properly linked in distributed traces.\n *\n * SIMPLIFIED: Only persists meaningful events:\n * - start: Session status update\n * - tool-input-available: Tool calls and TodoWrite\n * - tool-output-available: Tool completion\n *\n * SKIPPED (no DB persistence needed):\n * - text-delta: Streaming text (handled via WebSocket for UI only)\n * - reasoning/data-reasoning: Claude's thinking (not persisted)\n * - finish: Message completion (no longer needed)\n */\n // Track event counts for debugging\n const eventCounts = new Map<string, number>();\n\n // Track which sessions have had their start event sent to avoid duplicates\n const startedSessions = new Set<string>();\n\n async function persistBuildEvent(\n context: BuildContext,\n event: Record<string, unknown>\n ): Promise<void> {\n const eventType = event.type as string;\n\n // SKIPPED EVENTS - don't send to server at all\n // These are handled via WebSocket for real-time UI, no DB persistence needed\n const SKIPPED_EVENTS = [\n 'text-delta', // Streaming text (UI only via WebSocket)\n 'reasoning', // Claude's thinking (UI only)\n 'data-reasoning', // Structured reasoning (UI only)\n 'finish', // Message completion marker (not needed)\n 'text-start', // Text block start (UI only)\n 'text-end', // Text block end (UI only)\n 'tool-input-start', // Tool streaming start (UI only)\n 'tool-input-delta', // Tool streaming chunks (UI only)\n 'tool-input-end', // Tool streaming end (UI only)\n ];\n\n if (SKIPPED_EVENTS.includes(eventType)) {\n return; // Skip entirely - no network call\n }\n\n // Skip duplicate 'start' events - only send the first one per session\n if (eventType === 'start') {\n if (startedSessions.has(context.sessionId)) {\n // Silently skip - this is expected and not worth logging\n return;\n }\n debugLog(`Sending first start event for session=${context.sessionId}`);\n startedSessions.add(context.sessionId);\n }\n\n // Track event counts\n const count = eventCounts.get(eventType || 'undefined') || 0;\n eventCounts.set(eventType || 'undefined', count + 1);\n\n // All non-skipped events sent immediately to /api/build-events\n // ONLY persist these build events:\n // - start: Build session begins (first one only)\n // - tool-input-available: Tool calls (including TodoWrite for todos)\n // - tool-output-available: Tool completions\n // - tool-error: Tool errors\n try {\n await persistBuildEventDirect(context, event);\n } catch (error) {\n console.error(`[runner] ⚠️ Failed to persist ${eventType} event:`, error);\n // Don't throw - persistence failure shouldn't crash the build\n }\n }\n\n function printEventSummary() {\n console.log('\\n[runner] 📊 Event Persistence Summary:');\n let total = 0;\n for (const [eventType, count] of eventCounts.entries()) {\n console.log(` ${eventType}: ${count}`);\n total += count;\n }\n console.log(` TOTAL HTTP CALLS: ${total}\\n`);\n eventCounts.clear();\n }\n\n /**\n * Send a runner lifecycle event to the HTTP persistence endpoint.\n */\n async function persistRunnerEvent(\n event: Record<string, unknown>\n ): Promise<void> {\n // Wrap in Sentry span to create proper trace hierarchy\n return Sentry.startSpan(\n {\n name: `persist.runner-event.${event.type}`,\n op: 'http.client',\n attributes: {\n 'http.method': 'POST',\n 'http.url': `${apiBaseUrl}/api/runner/events`,\n 'event.type': event.type as string,\n },\n },\n async () => {\n try {\n const response = await fetch(`${apiBaseUrl}/api/runner/events`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${runnerSharedSecret}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(event),\n });\n\n if (!response.ok) {\n console.error(`[runner] Failed to persist runner event: ${response.status}`);\n }\n } catch (error) {\n console.error('[runner] Error persisting runner event:', error);\n throw error; // Re-throw so Sentry span records the error\n }\n }\n );\n }\n\n // Event types that trigger DB writes and should be persisted via HTTP\n const DB_WORTHY_RUNNER_EVENTS = [\n 'project-metadata',\n 'build-completed',\n 'build-summary',\n 'build-failed',\n 'tunnel-created',\n 'tunnel-closed',\n 'port-conflict',\n 'process-exited',\n 'error',\n 'ack',\n ];\n\n\n // ============================================================\n\n function assertNever(value: never): never {\n throw new Error(`Unhandled runner command: ${JSON.stringify(value)}`);\n }\n\n function sendEvent(event: RunnerEvent) {\n if (!socket || socket.readyState !== WebSocket.OPEN) {\n log(\n `[runner] Cannot send event ${event.type}: WebSocket not connected (state: ${socket?.readyState})`\n );\n return;\n }\n \n\n const sendOperation = () => {\n try {\n // Attach trace context to ALL events for distributed tracing\n // This allows events to be linked back to the originating frontend request\n const span = Sentry.getActiveSpan();\n if (span) {\n const traceData = Sentry.getTraceData();\n event._sentry = {\n trace: traceData['sentry-trace'],\n baggage: traceData.baggage,\n };\n }\n\n const eventJson = JSON.stringify(event);\n\n // Only log important events\n if (event.type === \"error\") {\n log(`❌ Error: ${event.error}`);\n if (event.stack) {\n log(`Stack: ${event.stack.substring(0, 500)}`);\n }\n } else if (event.type === \"port-detected\") {\n log(`🔌 Port detected: ${event.port}`);\n } else if (event.type === \"tunnel-created\") {\n log(`🔗 Tunnel created: ${event.tunnelUrl} -> localhost:${event.port}`);\n } else if (event.type === \"build-completed\") {\n log(`✅ Build completed for project: ${event.projectId}`);\n } else if (event.type === \"build-failed\") {\n log(`❌ Build failed: ${event.error}`);\n }\n // Suppress: build-stream, runner-status, ack, etc.\n\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(eventJson);\n }\n } catch (error) {\n log(`❌ Failed to send event ${event.type}:`, error);\n }\n };\n\n // REMOVED: Manual Sentry span creation - rely on automatic instrumentation\n sendOperation();\n\n // ALSO persist DB-worthy events via HTTP for proper trace linking\n if (DB_WORTHY_RUNNER_EVENTS.includes(event.type) && event.projectId) {\n // Get session ID from active build context if available\n const context = event.commandId ? activeBuildContexts.get(event.commandId) : null;\n \n const eventPayload: Record<string, unknown> = {\n type: event.type,\n projectId: event.projectId,\n commandId: event.commandId,\n sessionId: (event as { sessionId?: string }).sessionId ?? context?.sessionId,\n };\n \n // Include event-specific fields\n if ('payload' in event) eventPayload.payload = event.payload;\n if ('tunnelUrl' in event) eventPayload.tunnelUrl = event.tunnelUrl;\n if ('port' in event) eventPayload.port = event.port;\n if ('exitCode' in event) eventPayload.exitCode = event.exitCode;\n if ('signal' in event) eventPayload.signal = event.signal;\n if ('error' in event) eventPayload.error = event.error;\n if ('message' in event) eventPayload.message = event.message;\n if ('failureReason' in event) eventPayload.failureReason = event.failureReason;\n if ('stderr' in event) eventPayload.stderr = event.stderr;\n \n // Fire and forget - don't await to avoid blocking\n persistRunnerEvent(eventPayload);\n }\n }\n\n function buildEventBase(projectId?: string, commandId?: string) {\n return {\n projectId,\n commandId,\n timestamp: new Date().toISOString(),\n } as const;\n }\n\n async function handleCommand(command: RunnerCommand) {\n // Handle analyze-project specially - no projectId yet\n if (command.type === 'analyze-project') {\n debugLog(`Received command: analyze-project`);\n debugLog(`Command ID: ${command.id}`);\n debugLog(`Timestamp: ${command.timestamp}`);\n \n // Send ack without projectId\n sendEvent({\n type: \"ack\",\n commandId: command.id,\n timestamp: new Date().toISOString(),\n message: `Command analyze-project accepted`,\n });\n \n // Handle the analyze-project command\n try {\n log('🔍 Starting project analysis...');\n await analyzeProject(\n {\n prompt: command.payload.prompt,\n agent: command.payload.agent,\n claudeModel: command.payload.claudeModel,\n tags: command.payload.tags,\n },\n sendEvent,\n command.id\n );\n log('✅ Project analysis complete');\n } catch (error) {\n log('❌ Project analysis failed:', error);\n sendEvent({\n type: 'error',\n commandId: command.id,\n timestamp: new Date().toISOString(),\n error: error instanceof Error ? error.message : 'Analysis failed',\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n return;\n }\n\n // All other commands have projectId\n const projectId = command.projectId;\n \n // Log command receipt - only verbose details in debug mode\n debugLog(`Received command: ${command.type} for project: ${projectId}`);\n debugLog(`Command ID: ${command.id}`);\n debugLog(`Timestamp: ${command.timestamp}`);\n\n // Log command-specific details (verbose only)\n if (command.type === \"start-build\") {\n debugLog(`Build operation: ${command.payload.operationType}`);\n debugLog(`Project slug: ${command.payload.projectSlug}`);\n debugLog(`Prompt length: ${command.payload.prompt?.length || 0} chars`);\n } else if (command.type === \"start-dev-server\") {\n logger.devServer({ port: command.payload.preferredPort || 3000, status: 'starting' });\n debugLog(`Working directory: ${command.payload.workingDirectory}`);\n debugLog(`Run command: ${command.payload.runCommand}`);\n } else if (\n command.type === \"start-tunnel\" ||\n command.type === \"stop-tunnel\"\n ) {\n debugLog(`Port: ${command.payload.port}`);\n }\n\n sendEvent({\n type: \"ack\",\n ...buildEventBase(projectId, command.id),\n message: `Command ${command.type} accepted`,\n });\n\n switch (command.type) {\n case \"runner-health-check\": {\n publishStatus(command.projectId, command.id);\n break;\n }\n case \"start-dev-server\": {\n try {\n const {\n runCommand: runCmd,\n workingDirectory,\n env = {},\n preferredPort,\n } = command.payload;\n\n // Port is pre-allocated in the database by the API route\n // We use the port from the payload (which includes env vars with PORT set)\n const allocatedPort = preferredPort ?? null;\n \n // Track the final port to use (may be reallocated if original is in use)\n let finalPort: number | null = allocatedPort;\n \n if (allocatedPort) {\n log(`🔌 Using pre-allocated port ${allocatedPort} for project ${command.projectId}`);\n\n // IMPORTANT: First, stop any existing process for this project\n // This handles the case where the UI was reset but the process is still running\n log(`🧹 Stopping any existing process for project ${command.projectId}...`);\n const { stopDevServer } = await import('./lib/process-manager.js');\n const wasStopped = await stopDevServer(command.projectId, {\n tunnelManager,\n reason: 'restart',\n port: allocatedPort,\n });\n \n if (wasStopped) {\n log(`✅ Stopped existing process for project ${command.projectId}`);\n // Wait a bit for the port to be released by the OS\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n // Now check if port is in use (might be another unrelated process)\n const portInUse = await checkPortInUse(allocatedPort);\n if (portInUse) {\n log(`⚠️ Port ${allocatedPort} is in use, searching for available port...`);\n \n // Find an available port starting from the allocated port\n const availablePort = await findAvailablePort(allocatedPort);\n \n if (!availablePort) {\n const conflictMessage = `Port ${allocatedPort} is in use and no available port found in range ${allocatedPort}-${allocatedPort + 99}`;\n log(`❌ ${conflictMessage}`);\n\n sendEvent({\n type: \"port-conflict\",\n ...buildEventBase(command.projectId, command.id),\n port: allocatedPort,\n message: conflictMessage,\n });\n\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: conflictMessage,\n });\n\n return;\n }\n \n // Use the available port instead\n log(`✅ Found available port ${availablePort} (originally tried ${allocatedPort})`);\n finalPort = availablePort;\n \n // Notify frontend about the port change so it can update the database\n sendEvent({\n type: \"port-reallocated\",\n ...buildEventBase(command.projectId, command.id),\n originalPort: allocatedPort,\n newPort: availablePort,\n message: `Port ${allocatedPort} was in use, using ${availablePort} instead`,\n });\n }\n } else {\n // No pre-allocated port - we need to find one\n log(`⚠️ No port pre-allocated, searching for available port...`);\n const availablePort = await findAvailablePort(3000); // Start from common dev port\n \n if (!availablePort) {\n const conflictMessage = `No available port found in range 3000-3099`;\n log(`❌ ${conflictMessage}`);\n\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: conflictMessage,\n });\n\n return;\n }\n \n log(`✅ Found available port ${availablePort}`);\n finalPort = availablePort;\n }\n\n // Merge port enforcement environment variables\n const envVars: Record<string, string> = {};\n for (const [key, value] of Object.entries({\n ...process.env,\n ...env,\n })) {\n if (value !== undefined) {\n envVars[key] = String(value);\n }\n }\n\n const startTime = Date.now();\n\n // Use async version with port availability check\n const devProcess = await startDevServerAsync({\n projectId: command.projectId,\n command: runCmd,\n cwd: workingDirectory,\n env: envVars,\n port: finalPort ?? undefined,\n });\n\n // Track errors for potential auto-fix\n let errorBuffer: string[] = [];\n let lastErrorTime = 0;\n let serverStarted = false;\n const ERROR_DEBOUNCE_MS = 3000; // Wait 3s after last error before triggering fix\n const ERROR_COOLDOWN_MS = 10000; // Don't report errors in first 10s (startup noise)\n const serverStartTimestamp = Date.now();\n\n // Error patterns that indicate real problems (not just warnings or info)\n const REAL_ERROR_PATTERNS = [\n /Error: Cannot find module/i,\n /Module not found/i,\n /SyntaxError:/i,\n /TypeError:/i,\n /ReferenceError:/i,\n /failed to compile/i,\n /Build error occurred/i,\n /Unhandled Runtime Error/i,\n /ENOENT:/i,\n /EACCES:/i,\n ];\n\n // Patterns to ignore (common in dev server output but not errors)\n const IGNORE_PATTERNS = [\n /Compiling/i,\n /compiled.*successfully/i,\n /Fast Refresh/i,\n /waiting.*changes/i,\n /ready.*http/i,\n /warn.*experimental/i,\n ];\n\n // Forward logs to API\n devProcess.emitter.on(\"log\", (logEvent) => {\n sendEvent({\n type: \"log-chunk\",\n ...buildEventBase(command.projectId, command.id),\n stream: logEvent.type,\n data: logEvent.data,\n cursor: randomUUID(),\n });\n\n // Track when server has successfully started\n if (/ready|compiled.*successfully|listening/i.test(logEvent.data)) {\n serverStarted = true;\n }\n\n // Only check for errors after cooldown period and if server started\n const timeSinceStart = Date.now() - serverStartTimestamp;\n if (timeSinceStart < ERROR_COOLDOWN_MS) {\n return; // Skip error detection during startup\n }\n\n // Check if this is a real error (not just stderr or warning)\n const shouldIgnore = IGNORE_PATTERNS.some(pattern => pattern.test(logEvent.data));\n if (shouldIgnore) {\n return;\n }\n\n const isRealError = REAL_ERROR_PATTERNS.some(pattern => pattern.test(logEvent.data));\n if (isRealError && logEvent.data.trim().length > 10) {\n errorBuffer.push(logEvent.data);\n lastErrorTime = Date.now();\n\n // Debounce: wait for errors to settle, then send for auto-fix\n setTimeout(() => {\n if (Date.now() - lastErrorTime >= ERROR_DEBOUNCE_MS && errorBuffer.length > 0) {\n const collectedErrors = errorBuffer.join('\\n');\n errorBuffer = []; // Reset buffer\n\n log(`🔧 Real dev server error detected, sending for auto-fix...`);\n sendEvent({\n type: \"dev-server-error\",\n ...buildEventBase(command.projectId, command.id),\n error: collectedErrors,\n message: \"Dev server error detected - auto-fix triggered\",\n } as RunnerEvent);\n }\n }, ERROR_DEBOUNCE_MS + 100);\n }\n });\n\n // Handle process exit\n devProcess.emitter.on(\"exit\", async ({ code, signal, state, failureReason, stderr }) => {\n // Close tunnel if one exists for this port\n if (allocatedPort) {\n log(`🔗 Closing tunnel for port ${allocatedPort}`);\n await tunnelManager.closeTunnel(allocatedPort);\n }\n\n sendEvent({\n type: \"process-exited\",\n ...buildEventBase(command.projectId, command.id),\n exitCode: code ?? null,\n signal: signal ?? null,\n durationMs: Date.now() - startTime,\n state,\n failureReason,\n stderr, // Pass stderr for immediate crashes to enable auto-fix\n });\n });\n\n // Handle process errors\n devProcess.emitter.on(\"error\", (error: unknown) => {\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error ? error.message : \"Unknown runner error\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n });\n\n // Run health check if port is allocated\n if (allocatedPort) {\n log(`🔍 Running health check for port ${allocatedPort}...`);\n \n const { runHealthCheck, startDevServerAsync } = await import('./lib/process-manager.js');\n const healthResult = await runHealthCheck(command.projectId, allocatedPort);\n \n if (healthResult.healthy) {\n log(`✅ Dev server started and healthy for project ${command.projectId} on port ${allocatedPort}`);\n \n sendEvent({\n type: \"ack\",\n ...buildEventBase(command.projectId, command.id),\n message: `Dev server is running and healthy on port ${allocatedPort}`,\n });\n } else if (healthResult.portFixed) {\n // Port was fixed in package.json - wait for process to exit, then retry\n log(`🔧 Port configuration fixed, waiting for process cleanup before retry...`);\n \n // Send a status update that we're fixing and retrying (keeps status as 'starting')\n sendEvent({\n type: \"ack\",\n ...buildEventBase(command.projectId, command.id),\n message: `Port configuration fixed, cleaning up and retrying...`,\n });\n \n // Wait 3 seconds for the process to fully exit and cleanup\n await new Promise(resolve => setTimeout(resolve, 3000));\n \n log(`🔄 Retrying dev server start with fixed port configuration...`);\n \n // Send another status update for retry\n sendEvent({\n type: \"ack\",\n ...buildEventBase(command.projectId, command.id),\n message: `Retrying server start with corrected port configuration...`,\n });\n \n // Retry starting the dev server with port check\n const retryProcess = await startDevServerAsync({\n projectId: command.projectId,\n command: command.payload.runCommand,\n cwd: command.payload.workingDirectory,\n env: command.payload.env || {},\n port: allocatedPort,\n });\n\n // Set up event handlers for the retry\n retryProcess.emitter.on(\"log\", ({ type, data }) => {\n sendEvent({\n type: \"log-chunk\",\n ...buildEventBase(command.projectId, command.id),\n data,\n stream: type,\n } as RunnerEvent);\n });\n\n retryProcess.emitter.on(\"exit\", async ({ code, signal, state, failureReason }) => {\n if (allocatedPort) {\n log(`🔗 Closing tunnel for port ${allocatedPort}`);\n await tunnelManager.closeTunnel(allocatedPort);\n }\n\n sendEvent({\n type: \"process-exited\",\n ...buildEventBase(command.projectId, command.id),\n exitCode: code ?? null,\n signal: signal ?? null,\n durationMs: Date.now() - startTime,\n state,\n failureReason,\n });\n });\n\n retryProcess.emitter.on(\"error\", (error: unknown) => {\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: error instanceof Error ? error.message : \"Unknown runner error\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n });\n\n // Run health check on the retry\n log(`🔍 Running health check for retry on port ${allocatedPort}...`);\n const retryHealthResult = await runHealthCheck(command.projectId, allocatedPort);\n \n if (retryHealthResult.healthy) {\n log(`✅ Dev server retry successful and healthy on port ${allocatedPort}`);\n sendEvent({\n type: \"ack\",\n ...buildEventBase(command.projectId, command.id),\n message: `Dev server is running and healthy on port ${allocatedPort}`,\n });\n } else {\n log(`❌ Dev server retry failed: ${retryHealthResult.error}`);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: `Health check failed after port fix: ${retryHealthResult.error}`,\n });\n }\n } else {\n log(`⚠️ Dev server started but health check failed: ${healthResult.error}`);\n \n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: `Health check failed: ${healthResult.error}`,\n });\n }\n } else {\n // No port allocated - just log spawn\n log(`✅ Dev server process spawned for project ${command.projectId}`);\n }\n\n } catch (error) {\n console.error(\"Failed to start dev server\", error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error\n ? error.message\n : \"Failed to start dev server\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"stop-dev-server\": {\n try {\n const stopped = await stopDevServer(command.projectId, {\n tunnelManager,\n reason: 'manual'\n });\n \n if (!stopped) {\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: \"No running dev server found for project\",\n });\n } else {\n // Successfully stopped - send ack\n sendEvent({\n type: \"ack\",\n ...buildEventBase(command.projectId, command.id),\n message: \"Dev server stopped successfully\",\n });\n }\n } catch (error) {\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: error instanceof Error ? error.message : \"Failed to stop dev server\",\n });\n }\n break;\n }\n case \"start-tunnel\": {\n const tunnelStartTime = Date.now();\n try {\n const { port } = command.payload;\n log(`🔗 Starting tunnel for port ${port}...`);\n\n // Wait for the port to be ready before creating tunnel\n log(`⏳ Waiting for port ${port} to be ready...`);\n const isReady = await waitForPort(port, 15, 1000); // 15 retries, 1s apart = max 15s\n\n if (!isReady) {\n throw new Error(`Port ${port} is not ready or not accessible`);\n }\n\n // Ensure tunnel manager is in silent mode\n tunnelManager.setSilent(isSilentMode);\n\n // Create tunnel\n const tunnelUrl = await tunnelManager.createTunnel(port);\n logger.tunnel({ port, url: tunnelUrl, status: 'created' });\n\n // Instrument tunnel startup timing\n const tunnelDuration = Date.now() - tunnelStartTime;\n\n Sentry.metrics.distribution('tunnel_startup_duration', tunnelDuration, {\n unit: 'millisecond',\n attributes: {\n port: port.toString(),\n success: 'true'\n }\n });\n\n sendEvent({\n type: \"tunnel-created\",\n ...buildEventBase(command.projectId, command.id),\n port,\n tunnelUrl,\n });\n } catch (error) {\n console.error(\"Failed to create tunnel:\", error);\n\n // Instrument failed tunnel startup timing\n const tunnelDuration = Date.now() - tunnelStartTime;\n Sentry.metrics.distribution('tunnel_startup_duration', tunnelDuration, {\n unit: 'millisecond',\n attributes: {\n port: command.payload.port.toString(),\n success: 'false',\n error_type: error instanceof Error ? error.constructor.name : 'unknown'\n }\n });\n\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error\n ? error.message\n : \"Failed to create tunnel\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"stop-tunnel\": {\n try {\n const { port } = command.payload;\n debugLog(`Stopping tunnel for port ${port}...`);\n\n // Ensure tunnel manager is in silent mode\n tunnelManager.setSilent(isSilentMode);\n\n await tunnelManager.closeTunnel(port);\n logger.tunnel({ port, status: 'closed' });\n\n sendEvent({\n type: \"tunnel-closed\",\n ...buildEventBase(command.projectId, command.id),\n port,\n });\n } catch (error) {\n console.error(\"Failed to close tunnel:\", error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error ? error.message : \"Failed to close tunnel\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"fetch-logs\": {\n log(\"fetch-logs not yet implemented\");\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error: \"fetch-logs not yet implemented in prototype\",\n });\n break;\n }\n case \"delete-project-files\": {\n try {\n const { slug } = command.payload;\n const projectPath = join(WORKSPACE_ROOT, slug);\n\n console.log(`[runner] 🗑️ Deleting project files for slug: ${slug}`);\n console.log(`[runner] Path: ${projectPath}`);\n\n // First, stop any running dev server for this project to release file locks\n const wasStopped = await stopDevServer(command.projectId, {\n tunnelManager,\n reason: 'deletion'\n });\n if (wasStopped) {\n console.log(`[runner] Stopped dev server before deletion`);\n // Wait a bit for processes to fully exit and release file locks\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n\n // Use multiple strategies for robust deletion\n const { spawn } = await import(\"child_process\");\n\n // Strategy 1: Try using /bin/rm -rf with full path to rm binary\n try {\n await new Promise<void>((resolve, reject) => {\n const proc = spawn(\"/bin/rm\", [\"-rf\", projectPath], {\n stdio: \"pipe\",\n });\n\n let stderr = \"\";\n proc.stderr?.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`rm exited with code ${code}: ${stderr}`));\n }\n });\n\n proc.on(\"error\", reject);\n });\n\n console.log(\n `[runner] ✅ Successfully deleted project files: ${projectPath}`\n );\n } catch (rmError) {\n log(`[runner] ⚠️ rm -rf failed, trying fs.rm with maxRetries...`);\n log(\n `[runner] Error:`,\n rmError instanceof Error ? rmError.message : String(rmError)\n );\n\n // Strategy 2: Fall back to fs.rm with maxRetries option\n const { rm } = await import(\"node:fs/promises\");\n await rm(projectPath, {\n recursive: true,\n force: true,\n maxRetries: 3,\n retryDelay: 500,\n });\n\n console.log(\n `[runner] ✅ Successfully deleted project files with fs.rm`\n );\n }\n\n sendEvent({\n type: \"files-deleted\",\n ...buildEventBase(command.projectId, command.id),\n slug,\n });\n } catch (error) {\n console.error(\"[runner] ❌ Failed to delete project files:\", error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error\n ? error.message\n : \"Failed to delete project files\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"read-file\": {\n try {\n const { slug, filePath } = command.payload;\n const projectPath = join(WORKSPACE_ROOT, slug);\n const fullPath = join(projectPath, filePath);\n\n console.log(\n `[runner] 📖 Reading file: ${filePath} from project: ${slug}`\n );\n\n // Security: Ensure path is within project directory\n if (!fullPath.startsWith(projectPath)) {\n throw new Error(\"Invalid file path - outside project directory\");\n }\n\n const { readFile, stat } = await import(\"node:fs/promises\");\n const stats = await stat(fullPath);\n const content = await readFile(fullPath, \"utf-8\");\n\n console.log(\n `[runner] ✅ File read successfully (${stats.size} bytes)`\n );\n\n sendEvent({\n type: \"file-content\",\n ...buildEventBase(command.projectId, command.id),\n slug,\n filePath,\n content,\n size: stats.size,\n });\n } catch (error) {\n console.error(\"[runner] ❌ Failed to read file:\", error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error ? error.message : \"Failed to read file\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"write-file\": {\n try {\n const { slug, filePath, content } = command.payload;\n const projectPath = join(WORKSPACE_ROOT, slug);\n const fullPath = join(projectPath, filePath);\n\n console.log(\n `[runner] 💾 Writing file: ${filePath} to project: ${slug}`\n );\n\n // Security: Ensure path is within project directory\n if (!fullPath.startsWith(projectPath)) {\n throw new Error(\"Invalid file path - outside project directory\");\n }\n\n const { writeFile } = await import(\"node:fs/promises\");\n await writeFile(fullPath, content, \"utf-8\");\n\n console.log(\n `[runner] ✅ File written successfully (${content.length} bytes)`\n );\n\n sendEvent({\n type: \"file-written\",\n ...buildEventBase(command.projectId, command.id),\n slug,\n filePath,\n });\n } catch (error) {\n console.error(\"[runner] ❌ Failed to write file:\", error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error ? error.message : \"Failed to write file\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"list-files\": {\n try {\n const { slug, path: subPath } = command.payload;\n const projectPath = join(WORKSPACE_ROOT, slug);\n const targetPath = subPath ? join(projectPath, subPath) : projectPath;\n\n console.log(`[runner] 📁 Listing files for project: ${slug}`);\n console.log(`[runner] Path: ${targetPath}`);\n\n // Security: Ensure path is within project directory\n if (!targetPath.startsWith(projectPath)) {\n throw new Error(\"Invalid path - outside project directory\");\n }\n\n const { readdir, stat } = await import(\"node:fs/promises\");\n const entries = await readdir(targetPath);\n\n const files = await Promise.all(\n entries.map(async (name) => {\n const entryPath = join(targetPath, name);\n const relativePath = subPath ? join(subPath, name) : name;\n const stats = await stat(entryPath);\n\n return {\n name,\n type: stats.isDirectory()\n ? (\"directory\" as const)\n : (\"file\" as const),\n path: relativePath,\n size: stats.isFile() ? stats.size : undefined,\n };\n })\n );\n\n if (!isSilentMode && DEBUG_BUILD)\n console.log(`[runner] ✅ Found ${files.length} entries`);\n\n sendEvent({\n type: \"file-list\",\n ...buildEventBase(command.projectId, command.id),\n slug,\n files,\n });\n } catch (error) {\n console.error(\"[runner] ❌ Failed to list files:\", error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(command.projectId, command.id),\n error:\n error instanceof Error ? error.message : \"Failed to list files\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n break;\n }\n case \"start-build\": {\n // Use unified logger for build received\n const agent = (command.payload?.agent as string) || DEFAULT_AGENT;\n const claudeModelFromPayload = command.payload?.claudeModel;\n const model = agent === 'claude-code' && \n (claudeModelFromPayload === 'claude-haiku-4-5' || \n claudeModelFromPayload === 'claude-sonnet-4-5' || \n claudeModelFromPayload === 'claude-opus-4-5')\n ? claudeModelFromPayload\n : DEFAULT_CLAUDE_MODEL_ID;\n\n logger.buildReceived({\n commandId: command.id,\n projectId: command.projectId,\n projectSlug: command.payload?.projectSlug || command.projectId,\n projectName: command.payload?.projectName,\n prompt: command.payload?.prompt || '',\n operation: command.payload?.operationType || 'initial-build',\n agent,\n model,\n });\n\n fileLog.info(\"━━━ START-BUILD COMMAND RECEIVED ━━━\");\n fileLog.info(\"Project ID:\", command.projectId);\n fileLog.info(\"Command ID:\", command.id);\n fileLog.info(\"Prompt:\", command.payload?.prompt);\n fileLog.info(\"Operation:\", command.payload?.operationType);\n fileLog.info(\"Agent:\", command.payload?.agent);\n fileLog.info(\"Template:\", command.payload?.template);\n\n // REMOVED: Manual Sentry span creation - rely on automatic instrumentation\n // await Sentry.startSpan({ name: \"runner.build\", op: \"ai.build\", ... }, async () => {\n // Build operation (previously wrapped in Sentry span)\n try {\n loggedFirstChunk = false;\n if (!command.payload?.prompt || !command.payload?.operationType) {\n throw new Error(\"Invalid build payload\");\n }\n\n // Calculate the project directory using slug\n const projectSlug =\n command.payload.projectSlug || command.projectId;\n const projectName = command.payload.projectName || projectSlug;\n const projectDirectory = resolve(WORKSPACE_ROOT, projectSlug);\n\n log(\"project directory:\", projectDirectory);\n log(\"project slug:\", projectSlug);\n log(\"project name:\", projectName);\n\n // Determine agent to use for this build\n const agent =\n (command.payload.agent as AgentId | undefined) ?? DEFAULT_AGENT;\n const agentLabel = agent === \"openai-codex\" ? \"Codex\" : \"Claude\";\n log(\"selected agent:\", agent);\n const claudeModel: ClaudeModelId =\n agent === \"claude-code\" &&\n (command.payload.claudeModel === \"claude-haiku-4-5\" ||\n command.payload.claudeModel === \"claude-sonnet-4-5\" ||\n command.payload.claudeModel === \"claude-opus-4-5\")\n ? command.payload.claudeModel\n : DEFAULT_CLAUDE_MODEL_ID;\n\n // Create AbortController for cancellation support\n const buildAbortController = new AbortController();\n\n // Register build context for HTTP persistence\n // Using commandId as correlation key (server will look up sessionId)\n const buildContextId = command.id;\n activeBuildContexts.set(buildContextId, {\n commandId: command.id,\n sessionId: command.payload.sessionId || '', // Use sessionId from command if provided\n projectId: command.projectId,\n buildId: `build-${command.id}`, // Correlation ID for session lookup\n agentId: agent,\n claudeModelId: agent === 'claude-code' ? claudeModel : undefined,\n // Store for auto-start after build completion\n projectDirectory,\n projectSlug,\n // Store abort controller for cancellation\n abortController: buildAbortController,\n });\n\n if (agent === \"claude-code\") {\n log(\"claude model:\", claudeModel);\n }\n\n const agentQuery = createBuildQuery(agent, claudeModel, buildAbortController);\n\n // Reset transformer state for new build\n resetTransformerState();\n setExpectedCwd(projectDirectory);\n\n // Orchestrate the build - handle templates, generate dynamic prompt\n log(\"orchestrating build...\");\n\n // Log template if provided\n if (command.payload.templateId) {\n log(\n \"template provided by frontend:\",\n command.payload.templateId\n );\n }\n\n const orchestration = await orchestrateBuild({\n projectId: command.projectId,\n projectName: projectSlug,\n prompt: command.payload.prompt,\n messageParts: (command.payload as unknown as { messageParts: MessagePart[] }).messageParts, // Multi-modal content (images, etc.)\n operationType: command.payload.operationType,\n workingDirectory: projectDirectory,\n agent,\n template: command.payload.template, // NEW: Pass template from frontend\n designPreferences: command.payload.designPreferences, // User-specified design constraints (deprecated - use tags)\n tags: command.payload.tags, // Tag-based configuration\n conversationHistory: (command.payload as unknown as { conversationHistory: Array<{ role: string; content: string; timestamp: Date }> }).conversationHistory, // Pass conversation context (type will be updated after rebuild)\n });\n\n // Log template selection\n if (orchestration.template) {\n logger.template({\n name: orchestration.template.name,\n id: orchestration.template.id,\n fileCount: orchestration.fileTree?.length,\n status: 'selected',\n });\n }\n\n debugLog(\"orchestration complete:\", {\n isNewProject: orchestration.isNewProject,\n hasTemplate: !!orchestration.template,\n templateEventsCount: orchestration.templateEvents.length,\n hasMetadata: !!orchestration.projectMetadata,\n });\n\n // Send project metadata if available (template download sets path, runCommand, etc.)\n if (orchestration.projectMetadata) {\n sendEvent({\n type: \"project-metadata\",\n ...buildEventBase(command.projectId, command.id),\n payload: orchestration.projectMetadata,\n } as RunnerEvent);\n }\n\n // Send template events (TodoWrite for template selection/download)\n const buildContextForTemplates = activeBuildContexts.get(command.id);\n for (const templateEvent of orchestration.templateEvents) {\n // Persist template events via HTTP (filtering happens in persistBuildEvent)\n if (buildContextForTemplates && templateEvent.type && templateEvent.data) {\n // Merge type into event data for persistence\n const fullEvent = {\n type: templateEvent.type,\n ...(templateEvent.data as Record<string, unknown>),\n };\n persistBuildEvent(buildContextForTemplates, fullEvent);\n }\n\n const payload = `data: ${JSON.stringify(\n templateEvent.data\n )}\\n\\n`;\n sendEvent({\n type: \"build-stream\",\n ...buildEventBase(command.projectId, command.id),\n data: payload,\n });\n }\n\n buildLog(\n ` 🚀 Starting build stream for project: ${command.projectId}`\n );\n buildLog(` Directory: ${projectDirectory}`);\n buildLog(` Is new project: ${orchestration.isNewProject}`);\n buildLog(\n ` Template: ${orchestration.template?.name || \"none\"}`\n );\n\n const stream = await createBuildStream({\n projectId: command.projectId,\n projectName,\n prompt: orchestration.fullPrompt,\n messageParts: (command.payload as unknown as { messageParts: MessagePart[] }).messageParts,\n operationType: command.payload.operationType,\n context: command.payload.context,\n query: agentQuery,\n workingDirectory: projectDirectory,\n systemPrompt: orchestration.systemPrompt,\n agent,\n claudeModel: agent === \"claude-code\" ? claudeModel : undefined,\n isNewProject: orchestration.isNewProject,\n });\n\n buildLog(\n ` 📡 Build stream created, starting to process chunks...`\n );\n\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n\n let chunkCount = 0;\n \n // Track files modified and todos for build summary\n const filesModified = new Set<string>();\n const completedTodos: string[] = [];\n \n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n buildLog(\n ` Stream reader reports DONE after ${chunkCount} chunks`\n );\n break;\n }\n if (value === undefined || value === null) continue;\n chunkCount++;\n\n // Decode the chunk to get the agent message object\n let agentMessage: unknown;\n if (typeof value === \"string\") {\n try {\n agentMessage = JSON.parse(value);\n } catch {\n agentMessage = { raw: value };\n }\n } else if (value instanceof Uint8Array) {\n const text = decoder.decode(value, { stream: true });\n try {\n agentMessage = JSON.parse(text);\n } catch {\n agentMessage = { raw: text };\n }\n } else if (ArrayBuffer.isView(value)) {\n const view = value as ArrayBufferView;\n const text = decoder.decode(\n new Uint8Array(\n view.buffer,\n view.byteOffset,\n view.byteLength\n ),\n { stream: true }\n );\n try {\n agentMessage = JSON.parse(text);\n } catch {\n agentMessage = { raw: text };\n }\n } else if (value instanceof ArrayBuffer) {\n const text = decoder.decode(new Uint8Array(value), {\n stream: true,\n });\n try {\n agentMessage = JSON.parse(text);\n } catch {\n agentMessage = { raw: text };\n }\n } else if (typeof value === \"object\") {\n agentMessage = value;\n } else {\n log(\n \"Unsupported chunk type from build stream:\",\n typeof value\n );\n continue;\n }\n\n if (!loggedFirstChunk) {\n buildLog(` 📨 First chunk received from ${agentLabel}`);\n loggedFirstChunk = true;\n }\n\n // Log generation and tool usage\n if (typeof agentMessage === \"object\" && agentMessage !== null) {\n const msg = agentMessage as Record<string, unknown>;\n\n // The actual message is nested in a 'message' property\n const actualMessage =\n (msg.message as Record<string, unknown>) || msg;\n\n // Handle assistant messages (conversation turn format)\n if (\n msg.type === \"assistant\" &&\n actualMessage.content &&\n Array.isArray(actualMessage.content)\n ) {\n for (const block of actualMessage.content) {\n // Log text content\n if (block.type === \"text\" && block.text) {\n buildLog(\n ` 💭 ${agentLabel}: ${block.text.slice(0, 200)}${\n block.text.length > 200 ? \"...\" : \"\"\n }`\n );\n }\n\n // Log thinking blocks\n if (block.type === \"thinking\" && block.thinking) {\n buildLog(\n ` 🤔 Thinking: ${block.thinking.slice(0, 300)}${\n block.thinking.length > 300 ? \"...\" : \"\"\n }`\n );\n }\n\n // Log tool use via unified logger\n if (block.type === \"tool_use\") {\n const toolName = block.name;\n logger.tool(toolName, block.input as Record<string, unknown>);\n \n if (DEBUG_BUILD) {\n buildLog(` Input: ${truncateJSON(block.input, 200)}`);\n }\n }\n }\n }\n\n // Handle user messages (tool results)\n if (\n msg.type === \"user\" &&\n actualMessage.content &&\n Array.isArray(actualMessage.content)\n ) {\n for (const block of actualMessage.content) {\n if (block.type === \"tool_result\") {\n const toolId = block.tool_use_id;\n const isError = block.is_error;\n\n // Handle different content formats\n let content = \"\";\n if (typeof block.content === \"string\") {\n content = block.content;\n } else if (Array.isArray(block.content)) {\n // Content might be an array of content blocks\n content = (\n block.content as Array<{\n type: string;\n text?: string;\n }>\n )\n .map((c) => {\n if (c.type === \"text\" && c.text) return c.text;\n return JSON.stringify(c);\n })\n .join(\"\\n\");\n } else {\n content = JSON.stringify(block.content);\n }\n\n // DEBUG: Log tool results (adapter already logs this)\n if (DEBUG_BUILD) {\n if (isError) {\n buildLog(` ❌ Tool error (${toolId}):`);\n buildLog(` ${truncate(content, 200)}`);\n } else {\n buildLog(` ✅ Tool result (${toolId}):`);\n buildLog(` ${truncate(content, 200)}`);\n }\n }\n }\n }\n }\n }\n\n // Transform agent message to SSE events\n const sseEvents = transformAgentMessageToSSE(agentMessage);\n\n // Filter and send events - exclude high-volume events that don't affect UI\n const IMPORTANT_EVENT_TYPES = [\n 'start',\n 'finish',\n 'tool-input-available',\n 'tool-output-available',\n 'text-start',\n 'text-delta', // Needed for streaming text content (e.g., GITHUB_RESULT parsing)\n 'text-end',\n 'error',\n // NOT reasoning (high volume, only for DB persistence if needed)\n ];\n\n // Get build context for HTTP persistence\n const buildContext = activeBuildContexts.get(command.id);\n\n for (const event of sseEvents) {\n // Track files modified via Edit/Write tools for summary context\n if (event.type === 'tool-input-available') {\n const toolEvent = event as { toolName?: string; input?: unknown };\n if ((toolEvent.toolName === 'Edit' || toolEvent.toolName === 'Write') && toolEvent.input) {\n const input = toolEvent.input as { file_path?: string; filePath?: string };\n const filePath = input.file_path || input.filePath;\n if (filePath) {\n // Extract just the filename/relative path for cleaner summary\n const relativePath = filePath.includes('/') \n ? filePath.split('/').slice(-2).join('/')\n : filePath;\n filesModified.add(relativePath);\n }\n }\n // Track completed todos for summary context\n if (toolEvent.toolName === 'TodoWrite' && toolEvent.input) {\n const input = toolEvent.input as { todos?: Array<{ id?: string; content: string; status: string; priority?: string }> };\n if (input.todos) {\n // Update the logger's todo list for the build panel\n const todoItems = input.todos.map(t => ({\n id: t.id || `todo-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n content: t.content,\n status: t.status as 'pending' | 'in_progress' | 'completed' | 'cancelled',\n priority: t.priority as 'high' | 'medium' | 'low' | undefined,\n }));\n logger.updateTodos(todoItems);\n \n // Get completed todos (excluding any \"summarize\" todos from old prompts)\n const completed = input.todos\n .filter(t => t.status === 'completed' && !t.content.toLowerCase().includes('summarize'))\n .map(t => t.content);\n // Update our list with the latest completed todos\n completedTodos.length = 0;\n completedTodos.push(...completed);\n }\n }\n }\n \n // Persist events via HTTP (filtering happens in persistBuildEvent)\n // AWAIT to ensure input writes before output arrives (prevents race condition)\n if (buildContext) {\n await persistBuildEvent(buildContext, event);\n }\n\n // Only send important events via WebSocket for frontend UI\n if (!IMPORTANT_EVENT_TYPES.includes(event.type)) {\n continue;\n }\n\n const payload = `data: ${JSON.stringify(event)}\\n\\n`;\n sendEvent({\n type: \"build-stream\",\n ...buildEventBase(command.projectId, command.id),\n data: payload,\n });\n }\n }\n\n buildLog(` ═══════════════════════════════════════════════`);\n buildLog(` STREAM ENDED - Processing final chunks`);\n buildLog(` ═══════════════════════════════════════════════`);\n\n const finalChunk = decoder.decode();\n if (finalChunk) {\n buildLog(` Final chunk decoded: ${finalChunk.length} chars`);\n let payload = finalChunk.startsWith(\"data:\")\n ? finalChunk\n : `data: ${finalChunk}`;\n if (!payload.endsWith(\"\\n\\n\")) {\n payload = `${payload}\\n\\n`;\n }\n sendEvent({\n type: \"build-stream\",\n ...buildEventBase(command.projectId, command.id),\n data: payload,\n });\n }\n\n buildLog(` Sending [DONE] signal to client`);\n sendEvent({\n type: \"build-stream\",\n ...buildEventBase(command.projectId, command.id),\n data: \"data: [DONE]\\n\\n\",\n });\n\n // Detect runCommand from built project's package.json\n try {\n const { readFileSync, existsSync } = await import(\"fs\");\n const packageJsonPath = join(projectDirectory, \"package.json\");\n\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\")\n );\n let runCommand = null;\n\n if (packageJson.scripts?.dev) {\n runCommand = \"npm run dev\";\n } else if (packageJson.scripts?.start) {\n runCommand = \"npm start\";\n }\n\n if (runCommand) {\n // Send project-metadata event with detected runCommand\n sendEvent({\n type: \"project-metadata\",\n ...buildEventBase(command.projectId, command.id),\n payload: {\n path: projectDirectory,\n projectType: \"unknown\",\n runCommand,\n port: 3000,\n },\n } as RunnerEvent);\n\n if (!isSilentMode && DEBUG_BUILD)\n console.log(`✅ Detected runCommand: ${runCommand}`);\n }\n }\n } catch (error) {\n log(\"Failed to detect runCommand:\", error);\n }\n\n // Calculate build statistics\n const buildEndTime = Date.now();\n const completedBuildContext = activeBuildContexts.get(command.id);\n const elapsedSeconds = completedBuildContext \n ? (buildEndTime - (completedBuildContext as any).startTime || buildEndTime) / 1000 \n : 0;\n \n // TODO: Get actual token usage from build stream when available\n const totalTokens = 0; // Will be populated from usage events\n \n logger.buildComplete({\n elapsedTime: elapsedSeconds,\n toolCallCount: filesModified.size + completedTodos.length, // Approximate from tracked data\n totalTokens,\n directory: projectDirectory,\n });\n\n debugLog(`Total chunks processed: (stream ended)`);\n\n // Detect framework from generated files\n let detectedFramework: string | null = null;\n try {\n const { detectFrameworkFromFilesystem } = await import('@openbuilder/agent-core/lib/port-allocator');\n const framework = await detectFrameworkFromFilesystem(projectDirectory);\n detectedFramework = framework;\n \n if (framework) {\n buildLog(` 🔍 Detected framework: ${framework}`);\n log(`[build] Detected framework for ${command.projectId}: ${framework}`);\n }\n } catch (error) {\n log(`[build] Failed to detect framework:`, error);\n }\n\n const completedContext = activeBuildContexts.get(command.id);\n const sessionId = completedContext?.sessionId;\n\n sendEvent({\n type: \"build-completed\",\n ...buildEventBase(command.projectId, command.id),\n payload: {\n todos: [],\n detectedFramework,\n },\n });\n\n const filesArray = Array.from(filesModified);\n const completedTodoSnapshot = [...completedTodos];\n const hasChanges = filesArray.length > 0 || completedTodoSnapshot.length > 0;\n\n if (hasChanges) {\n void (async () => {\n try {\n buildLog(` 📝 Generating build summary via AI...`);\n buildLog(` Files modified: ${filesArray.length}`);\n buildLog(` Tasks completed: ${completedTodoSnapshot.length}`);\n\n const summaryPrompt = `You are a build summary generator. Generate a concise 1-3 sentence summary of what was built or changed.\n\nOriginal request: \"${command.payload.prompt}\"\n\n${filesArray.length > 0 ? `Files modified:\\n${filesArray.map(f => `- ${f}`).join('\\n')}` : 'No files were modified.'}\n\n${completedTodoSnapshot.length > 0 ? `Tasks completed:\\n${completedTodoSnapshot.map(t => `- ${t}`).join('\\n')}` : ''}\n\nWrite a brief, professional summary (1-3 sentences) describing what was accomplished. Focus on the outcome, not the process. Do not use phrases like \"I did\" or \"The assistant\". Just describe what was built or changed.`;\n\n const summaryResult = await generateText({\n model: claudeCode(\"claude-haiku-4-5\"),\n prompt: summaryPrompt,\n });\n\n const summaryText = summaryResult.text?.trim();\n if (summaryText) {\n buildLog(` ✅ AI summary generated (${summaryText.length} chars)`);\n sendEvent({\n type: \"build-summary\",\n sessionId,\n ...buildEventBase(command.projectId, command.id),\n payload: {\n summary: summaryText,\n },\n });\n }\n } catch (summaryError) {\n log(`[build] Failed to generate AI summary:`, summaryError);\n buildLog(` ⚠️ AI summary failed`);\n }\n })();\n }\n\n // Print event summary\n printEventSummary();\n\n // ============================================================\n // AUTO-START DEV SERVER AFTER BUILD COMPLETION\n // ============================================================\n // Note: The dev server will be started by the API via the start route\n // which handles proper port allocation. We just send an event to trigger it.\n if (completedContext?.projectDirectory && detectedFramework) {\n log(`🚀 Build complete - dev server will be started via API with proper port allocation`);\n\n // Send an event to signal the frontend/API to start the dev server\n // The API's start route handles port allocation correctly\n sendEvent({\n type: \"ack\",\n ...buildEventBase(command.projectId, command.id),\n message: \"build-complete-ready-for-dev-server\",\n });\n }\n\n // Clean up build context and session tracking\n if (completedContext) {\n startedSessions.delete(completedContext.sessionId);\n }\n activeBuildContexts.delete(command.id);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Failed to run build\";\n logger.buildFailed(errorMessage);\n \n Sentry.getActiveSpan()?.setStatus({\n code: 2, // SPAN_STATUS_ERROR\n message: \"Build failed\",\n });\n sendEvent({\n type: \"build-failed\",\n ...buildEventBase(command.projectId, command.id),\n error: errorMessage,\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n // Print event summary\n printEventSummary();\n\n // Clean up build context and session tracking on failure\n const failedContext = activeBuildContexts.get(command.id);\n if (failedContext) {\n startedSessions.delete(failedContext.sessionId);\n }\n activeBuildContexts.delete(command.id);\n throw error;\n }\n break;\n }\n case \"http-proxy-request\": {\n // HTTP proxy request - fetch from local dev server and return response\n try {\n const { requestId, method, path: reqPath, headers, body, port } = command.payload;\n \n debugLog(`🔀 HTTP proxy request: ${method} ${reqPath} → localhost:${port}`);\n \n // Build the target URL\n const targetUrl = `http://localhost:${port}${reqPath}`;\n \n // Decode body if present\n const requestBody = body ? Buffer.from(body, 'base64') : undefined;\n \n // Fetch from dev server\n const response = await fetch(targetUrl, {\n method,\n headers: {\n ...headers,\n // Remove hop-by-hop headers\n 'host': `localhost:${port}`,\n },\n body: requestBody,\n // Don't follow redirects - let the client handle them\n redirect: 'manual',\n });\n \n // Get response headers\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n // Skip hop-by-hop headers\n if (!['transfer-encoding', 'connection', 'keep-alive'].includes(key.toLowerCase())) {\n responseHeaders[key] = value;\n }\n });\n \n // Get response body\n const responseBody = Buffer.from(await response.arrayBuffer());\n \n // Determine if we need to chunk the response\n const shouldChunk = responseBody.length > 1024 * 1024; // 1MB threshold\n \n if (shouldChunk) {\n // Send initial response with headers only\n sendEvent({\n type: \"http-proxy-response\",\n ...buildEventBase(command.projectId, command.id),\n requestId,\n statusCode: response.status,\n headers: responseHeaders,\n isChunked: true,\n });\n \n // Send body in chunks\n const chunkSize = 64 * 1024; // 64KB chunks\n for (let i = 0; i < responseBody.length; i += chunkSize) {\n const chunk = responseBody.slice(i, i + chunkSize);\n const isFinal = i + chunkSize >= responseBody.length;\n \n sendEvent({\n type: \"http-proxy-chunk\",\n ...buildEventBase(command.projectId, command.id),\n requestId,\n chunk: chunk.toString('base64'),\n isFinal,\n });\n }\n } else {\n // Send complete response in one message\n sendEvent({\n type: \"http-proxy-response\",\n ...buildEventBase(command.projectId, command.id),\n requestId,\n statusCode: response.status,\n headers: responseHeaders,\n body: responseBody.toString('base64'),\n isChunked: false,\n });\n }\n \n debugLog(`✅ HTTP proxy response: ${response.status} (${responseBody.length} bytes)`);\n \n } catch (error) {\n console.error(\"[runner] ❌ HTTP proxy request failed:\", error);\n sendEvent({\n type: \"http-proxy-error\",\n ...buildEventBase(command.projectId, command.id),\n requestId: command.payload.requestId,\n error: error instanceof Error ? error.message : \"HTTP proxy request failed\",\n statusCode: 502, // Bad Gateway\n });\n }\n break;\n }\n case \"hmr-connect\": {\n // Connect to local HMR WebSocket server\n const { connectionId, port, protocol } = command.payload;\n hmrProxyManager.connect(connectionId, port, command.projectId, protocol);\n break;\n }\n case \"hmr-message\": {\n // Forward message to HMR server\n const { connectionId, message } = command.payload;\n hmrProxyManager.send(connectionId, message);\n break;\n }\n case \"hmr-disconnect\": {\n // Disconnect from HMR server\n const { connectionId } = command.payload;\n hmrProxyManager.disconnect(connectionId);\n break;\n }\n case \"github-sync\": {\n // Sync GitHub repository information (not yet implemented)\n console.log('[github] GitHub sync command received (not yet implemented)');\n sendEvent({\n type: \"ack\",\n commandId: command.id,\n projectId: command.projectId,\n timestamp: new Date().toISOString(),\n message: 'GitHub sync command received (not yet implemented)',\n });\n break;\n }\n case \"github-push\": {\n // Push to GitHub repository (not yet implemented)\n console.log('[github] GitHub push command received (not yet implemented)');\n sendEvent({\n type: \"ack\",\n commandId: command.id,\n projectId: command.projectId,\n timestamp: new Date().toISOString(),\n message: 'GitHub push command received (not yet implemented)',\n });\n break;\n }\n case \"cancel-build\": {\n // Cancel an active build by aborting the Claude Agent SDK query\n const { reason } = command.payload;\n const projectId = command.projectId;\n console.log(`[runner] Cancel build requested for project: ${projectId}`);\n \n // Find the build context by project ID (there can only be one active build per project)\n let buildContext: BuildContext | undefined;\n let buildContextId: string | undefined;\n \n for (const [id, ctx] of activeBuildContexts) {\n if (ctx.projectId === projectId) {\n buildContext = ctx;\n buildContextId = id;\n break;\n }\n }\n \n if (!buildContext || !buildContextId) {\n console.log(`[runner] No active build found for project: ${projectId}`);\n sendEvent({\n type: \"build-cancelled\",\n commandId: command.id,\n projectId: command.projectId,\n timestamp: new Date().toISOString(),\n payload: {\n buildCommandId: '',\n success: false,\n reason: 'Build not found or already completed',\n },\n } as RunnerEvent);\n break;\n }\n \n // Abort the build using the stored AbortController\n if (buildContext.abortController) {\n console.log(`[runner] Aborting build ${buildContextId} via AbortController`);\n buildContext.abortController.abort();\n \n // Clean up the build context\n activeBuildContexts.delete(buildContextId);\n \n sendEvent({\n type: \"build-cancelled\",\n commandId: command.id,\n projectId: command.projectId,\n timestamp: new Date().toISOString(),\n payload: {\n buildCommandId: buildContextId,\n success: true,\n reason: reason || 'Build cancelled by user',\n },\n } as RunnerEvent);\n } else {\n console.log(`[runner] Build ${buildContextId} has no AbortController (may be using legacy SDK)`);\n sendEvent({\n type: \"build-cancelled\",\n commandId: command.id,\n projectId: command.projectId,\n timestamp: new Date().toISOString(),\n payload: {\n buildCommandId: buildContextId,\n success: false,\n reason: 'Build cannot be cancelled (no abort controller)',\n },\n } as RunnerEvent);\n }\n break;\n }\n default:\n assertNever(command as never);\n }\n }\n\n function publishStatus(projectId?: string, commandId?: string) {\n const uptimeSeconds = Math.round(process.uptime());\n const load = os.loadavg?.()[0];\n\n sendEvent({\n type: \"runner-status\",\n ...buildEventBase(projectId, commandId),\n payload: {\n status: \"online\",\n version: \"prototype\",\n hostname: os.hostname(),\n platform: os.platform(),\n uptimeSeconds,\n load,\n },\n });\n }\n\n function scheduleHeartbeat() {\n if (heartbeatTimer) {\n clearInterval(heartbeatTimer);\n }\n heartbeatTimer = setInterval(() => publishStatus(), HEARTBEAT_INTERVAL_MS);\n }\n\n // Set up HMR proxy callbacks to forward HMR events through the main WebSocket\n hmrProxyManager.setCallbacks({\n onConnected: (connectionId) => {\n sendEvent({\n type: \"hmr-connected\",\n ...buildEventBase(),\n connectionId,\n });\n },\n onMessage: (connectionId, message) => {\n sendEvent({\n type: \"hmr-message\",\n ...buildEventBase(),\n connectionId,\n message,\n });\n },\n onDisconnected: (connectionId, code, reason) => {\n sendEvent({\n type: \"hmr-disconnected\",\n ...buildEventBase(),\n connectionId,\n code,\n reason,\n });\n },\n onError: (connectionId, error) => {\n console.warn(`[hmr-proxy] HMR error: ${connectionId} - ${error}`);\n sendEvent({\n type: \"hmr-error\",\n ...buildEventBase(),\n connectionId,\n error,\n });\n },\n });\n\n function cleanupSocket() {\n if (socket) {\n socket.removeAllListeners();\n socket.terminate();\n socket = null;\n }\n if (heartbeatTimer) {\n clearInterval(heartbeatTimer);\n heartbeatTimer = null;\n }\n if (pingTimer) {\n clearInterval(pingTimer);\n pingTimer = null;\n }\n }\n\n function connect() {\n // Clean up old socket and listeners to prevent memory leaks\n cleanupSocket();\n const url = new URL(WS_URL);\n url.searchParams.set(\"runnerId\", RUNNER_ID);\n\n socket = new WebSocket(url.toString(), {\n headers: {\n Authorization: `Bearer ${SHARED_SECRET}`,\n },\n handshakeTimeout: CONNECTION_HANDSHAKE_TIMEOUT,\n });\n\n socket.on(\"open\", () => {\n reconnectAttempts = 0; // Reset on successful connection\n lastPongReceived = Date.now(); // Reset pong timer on new connection\n lastCommandReceived = Date.now(); // Reset command timer on new connection\n \n // Update logger connection status\n logger.setConnected(true);\n debugLog(\"Health check: ping/pong enabled, command timeout: 5 minutes\");\n publishStatus();\n scheduleHeartbeat();\n\n // Start ping/pong to keep connection alive\n if (pingTimer) clearInterval(pingTimer);\n let pingCount = 0; // Track ping count for periodic health logging\n pingTimer = setInterval(() => {\n const now = Date.now();\n pingCount++;\n \n // Periodic health check logging (every 10 pings = 5 minutes)\n if (pingCount % 10 === 0) {\n const secondsSinceCommand = Math.round((now - lastCommandReceived) / 1000);\n const secondsSincePong = Math.round((now - lastPongReceived) / 1000);\n log(`💚 Connection health check: last command ${secondsSinceCommand}s ago, last pong ${secondsSincePong}s ago`);\n }\n \n // Check if pong timeout exceeded - indicates zombie connection\n if (now - lastPongReceived > PONG_TIMEOUT) {\n log(\"⚠️ No pong received, forcing reconnection\");\n socket?.close(1002, \"Pong timeout\");\n return;\n }\n \n // BUG FIX: Check if we've received any commands recently\n // Even if ping/pong works, the connection might be stuck and not receiving commands\n if (now - lastCommandReceived > COMMAND_RECEIVE_TIMEOUT) {\n log(\"⚠️ No commands received for 30 minutes, forcing reconnection\");\n log(` Last command: ${Math.round((now - lastCommandReceived) / 1000)}s ago`);\n socket?.close(1003, \"Command receive timeout\");\n return;\n }\n \n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.ping();\n }\n }, PING_INTERVAL);\n });\n\n socket.on(\"message\", async (data: WebSocket.RawData) => {\n try {\n const command = JSON.parse(String(data)) as RunnerCommand;\n\n // BUG FIX: Update lastCommandReceived timestamp\n lastCommandReceived = Date.now();\n\n // Get projectId - analyze-project commands don't have one yet\n const projectIdForTelemetry = command.type === 'analyze-project' \n ? 'pending-analysis' \n : (command as { projectId: string }).projectId;\n\n // Continue trace from frontend - each build now starts its trace in the frontend\n // This creates a span within the continued trace for the runner's work\n if (command._sentry?.trace) {\n console.log(\"[runner] Continuing trace from frontend:\", command._sentry.trace.substring(0, 50));\n await Sentry.continueTrace(\n {\n sentryTrace: command._sentry.trace,\n baggage: command._sentry.baggage,\n },\n async () => {\n // Create a span for this command execution within the continued trace\n await Sentry.startSpan(\n {\n name: `runner.${command.type}`,\n op: command.type === 'start-build' ? 'build.runner' : `runner.${command.type}`,\n attributes: {\n 'command.type': command.type,\n 'command.id': command.id,\n 'project.id': projectIdForTelemetry,\n 'trace.continued': true,\n },\n },\n async (span) => {\n try {\n Sentry.setTag(\"command_type\", command.type);\n Sentry.setTag(\"project_id\", projectIdForTelemetry);\n Sentry.setTag(\"command_id\", command.id);\n\n // Capture build metrics for start-build commands\n if (command.type === 'start-build' && command.payload) {\n const agent = command.payload.agent ?? 'claude-code';\n const claudeModel = agent === 'claude-code' && \n (command.payload.claudeModel === 'claude-haiku-4-5' || \n command.payload.claudeModel === 'claude-sonnet-4-5' || \n command.payload.claudeModel === 'claude-opus-4-5')\n ? command.payload.claudeModel\n : 'claude-sonnet-4-5';\n \n Sentry.metrics.count('runner.build.started', 1, {\n attributes: {\n project_id: command.projectId,\n model: agent === 'claude-code' ? claudeModel : agent,\n framework: command.payload.template?.framework || 'unknown',\n operation_type: command.payload.operationType || 'initial-build',\n }\n });\n }\n\n await handleCommand(command);\n } catch (error) {\n span.setStatus({ code: 2, message: error instanceof Error ? error.message : 'Command failed' });\n throw error;\n }\n }\n );\n }\n );\n } else {\n console.log(\"[runner] No trace context - starting isolated span\");\n // Create an isolated span when no trace context is provided\n await Sentry.startSpan(\n {\n name: `runner.${command.type}`,\n op: command.type === 'start-build' ? 'build.runner' : `runner.${command.type}`,\n attributes: {\n 'command.type': command.type,\n 'command.id': command.id,\n 'project.id': projectIdForTelemetry,\n 'trace.continued': false,\n },\n },\n async (span) => {\n try {\n Sentry.setTag(\"command_type\", command.type);\n Sentry.setTag(\"project_id\", projectIdForTelemetry);\n Sentry.setTag(\"command_id\", command.id);\n\n // Capture build metrics for start-build commands\n if (command.type === 'start-build' && command.payload) {\n const agent = command.payload.agent ?? 'claude-code';\n const claudeModel = agent === 'claude-code' && \n (command.payload.claudeModel === 'claude-haiku-4-5' || \n command.payload.claudeModel === 'claude-sonnet-4-5' || \n command.payload.claudeModel === 'claude-opus-4-5')\n ? command.payload.claudeModel\n : 'claude-sonnet-4-5';\n \n Sentry.metrics.count('runner.build.started', 1, {\n attributes: {\n project_id: command.projectId,\n model: agent === 'claude-code' ? claudeModel : agent,\n framework: command.payload.template?.framework || 'unknown',\n operation_type: command.payload.operationType || 'initial-build',\n }\n });\n }\n\n await handleCommand(command);\n } catch (error) {\n span.setStatus({ code: 2, message: error instanceof Error ? error.message : 'Command failed' });\n throw error;\n }\n }\n );\n }\n } catch (error) {\n console.error(\"Failed to parse command\", error);\n Sentry.captureException(error);\n sendEvent({\n type: \"error\",\n ...buildEventBase(undefined, randomUUID()),\n error: \"Failed to parse command payload\",\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n });\n\n socket.on(\"close\", (code: number, reason: Buffer) => {\n const reasonStr = reason.toString() || \"no reason provided\";\n\n // Update logger connection status\n logger.setConnected(false);\n\n // Suppress close logs during startup (first few attempts) - expected as server starts\n const isEarlyAttempt = reconnectAttempts < SUPPRESS_ERRORS_UNTIL_ATTEMPT;\n if (!isEarlyAttempt) {\n debugLog(`connection closed with code ${code}, reason: ${reasonStr}`);\n }\n\n if (heartbeatTimer) {\n clearInterval(heartbeatTimer);\n heartbeatTimer = null;\n }\n\n if (pingTimer) {\n clearInterval(pingTimer);\n pingTimer = null;\n }\n\n // Don't reconnect if we're shutting down\n if (isShuttingDown) {\n log(\"shutdown in progress, skipping reconnection\");\n return;\n }\n\n // Check if max reconnection attempts reached\n if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {\n console.error(\n `Max reconnection attempts reached (${MAX_RECONNECT_ATTEMPTS}). Giving up.`\n );\n return;\n }\n\n // Exponential backoff with max delay\n reconnectAttempts++;\n const delay = Math.min(\n 1000 * Math.pow(2, reconnectAttempts - 1), // 1s, 2s, 4s, 8s, 16s...\n MAX_RECONNECT_DELAY\n );\n\n // Suppress reconnection logs during startup\n if (!isEarlyAttempt) {\n debugLog(`reconnecting in ${delay}ms (attempt ${reconnectAttempts})...`);\n }\n setTimeout(connect, delay);\n });\n\n socket.on(\"pong\", () => {\n // Update timestamp to track connection health\n lastPongReceived = Date.now();\n });\n\n socket.on(\"error\", (error: Error) => {\n // Suppress expected ECONNREFUSED errors during startup (first few attempts)\n const isConnRefused = (error as { code?: string }).code === 'ECONNREFUSED';\n const isEarlyAttempt = reconnectAttempts < SUPPRESS_ERRORS_UNTIL_ATTEMPT;\n\n if (!isConnRefused || !isEarlyAttempt) {\n console.error(\"socket error\", error);\n }\n\n // Close socket to trigger reconnection\n socket?.close(1006, \"Error occurred\");\n });\n }\n\n // Shared cleanup logic that can be called programmatically or via signals\n const performShutdown = async () => {\n // Prevent duplicate shutdown calls\n if (isShuttingDown) return;\n\n log(\"shutting down runner\");\n isShuttingDown = true; // Prevent reconnection attempts\n\n if (heartbeatTimer) clearInterval(heartbeatTimer);\n if (pingTimer) clearInterval(pingTimer);\n\n // Close WebSocket connection gracefully\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.close(1000, \"Shutdown requested\");\n }\n\n // Close HTTP health server if running\n if (healthServer) {\n await new Promise<void>((resolve) => {\n healthServer.close(() => {\n log(\"health server closed\");\n resolve();\n });\n });\n }\n\n // Stop all running dev servers and cleanup tunnels\n const { stopAllDevServers } = await import('./lib/process-manager.js');\n\n // Stop all dev server processes (this also handles tunnel cleanup per-process)\n await stopAllDevServers(tunnelManager);\n\n // Final cleanup of any remaining tunnels\n await tunnelManager.closeAll();\n\n // Flush Sentry events before exiting\n await Sentry.flush(2000);\n\n log(\"shutdown complete\");\n };\n\n process.on(\"SIGINT\", async () => {\n log(\"shutting down (Ctrl+C)\");\n await performShutdown();\n // Don't call process.exit() - let the CLI's shutdown handler finish\n // If running standalone (not via CLI), the process will exit naturally\n });\n\n process.on(\"SIGTERM\", async () => {\n log(\"shutting down (SIGTERM)\");\n await performShutdown();\n // Don't call process.exit() - let the CLI's shutdown handler finish\n });\n\n // Wait before initial connection to allow Next.js server to start\n log(`waiting ${INITIAL_CONNECTION_DELAY / 1000}s for server to start...`);\n setTimeout(connect, INITIAL_CONNECTION_DELAY);\n\n // Return cleanup function for programmatic shutdown (when used via CLI)\n return performShutdown;\n}\n\n// If running this file directly, start the runner\n// ESM equivalent of: if (require.main === module)\nif (import.meta.url === `file://${process.argv[1]}`) {\n console.log('[runner] Starting runner directly...');\n console.log('[runner] RUNNER_WS_URL:', process.env.RUNNER_WS_URL);\n console.log('[runner] RUNNER_SHARED_SECRET:', process.env.RUNNER_SHARED_SECRET ? '***set***' : '***NOT SET***');\n startRunner().catch((err) => {\n console.error('[runner] Failed to start:', err);\n process.exit(1);\n });\n}\n"],"names":["NoSuchModelError2","__filename","__defProp","__getOwnPropNames","__esm","__export","MOOD_GUIDANCE","init_design","findTagDefinition","TAG_DEFINITIONS","init_tags","resolveTags","generatePromptFromTags","init_resolver","claude_strategy_exports","claude_strategy_default","buildClaudeSections","buildFullPrompt","claudeStrategy","init_claude_strategy","buildCodexTemplateCatalogSection","init_template_catalog","sortPhases","CODEX_PHASE_ORDER","toStringOr","toOptionalString","toOptionalStringArray","processCodexEvent","init_events","config_server_exports","getAllTemplates","getTemplateById","getTemplateSelectionContext","loadTemplateConfig","selectTemplateFromPrompt","setTemplatesPath","configuredPath","cachedConfig","getTemplatesPath","init_config_server","load_template_context_server_exports","loadTemplateSelectionContext","init_load_template_context_server","loadTemplateSelectionContext2","init_load_template_context","codex_strategy_exports","codex_strategy_default","getParentDirectory","buildCodexSections","buildFullPrompt2","codexStrategy","init_codex_strategy","strategyRegistry","registerAgentStrategy","getAgentStrategy","initialized","ensureRegistry","resolveAgentStrategy","BuildLogger","Sentry.addBreadcrumb","buildLogger","HmrProxyManager","randomUUID2","hmrProxyManager","Sentry2.addBreadcrumb","Sentry2.captureException","Sentry2.getActiveSpan","Sentry2.getTraceData","pg2","drizzle2","debugLog","existsSync","Sentry.captureException","Sentry.startInactiveSpan","path","isSilentMode","setSilentMode","join","truncate","truncateJSON","readFile","mkdirSync","WebSocket","__dirname","loadEnv","getLogger","Sentry.logger.info","Sentry.logger.fmt","os","Sentry.startSpan","Sentry.getTraceData","Sentry.getActiveSpan","randomUUID","Sentry.metrics.distribution","Sentry.continueTrace","Sentry.setTag","Sentry.metrics.count","Sentry.flush"],"mappings":"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AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,IAAI,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,yEAAyE,EAAE,CAAC;;AAEnI;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,+BAA+B,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAA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","x_google_ignoreList":[0,1,2]}