@agent-native/core 0.63.0 → 0.63.1

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 (94) hide show
  1. package/dist/cli/code-agent-executor.js +1 -1
  2. package/dist/cli/code-agent-executor.js.map +1 -1
  3. package/dist/cli/create.js +1 -1
  4. package/dist/cli/create.js.map +1 -1
  5. package/dist/client/NewWorkspaceAppFlow.js +1 -1
  6. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  7. package/dist/client/chat/index.d.ts +2 -1
  8. package/dist/client/chat/index.d.ts.map +1 -1
  9. package/dist/client/chat/index.js +2 -1
  10. package/dist/client/chat/index.js.map +1 -1
  11. package/dist/client/chat-view-transition.d.ts +17 -0
  12. package/dist/client/chat-view-transition.d.ts.map +1 -1
  13. package/dist/client/chat-view-transition.js +46 -0
  14. package/dist/client/chat-view-transition.js.map +1 -1
  15. package/dist/client/index.d.ts +2 -1
  16. package/dist/client/index.d.ts.map +1 -1
  17. package/dist/client/index.js +2 -1
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/use-agent-chat-home-handoff.d.ts +27 -0
  20. package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -0
  21. package/dist/client/use-agent-chat-home-handoff.js +120 -0
  22. package/dist/client/use-agent-chat-home-handoff.js.map +1 -0
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/styles/agent-native.css +2 -6
  28. package/dist/templates/workspace-root/README.md +4 -4
  29. package/docs/content/actions.md +32 -42
  30. package/docs/content/agent-surfaces.md +105 -84
  31. package/docs/content/agent-teams.md +2 -14
  32. package/docs/content/agent-web-surfaces.md +4 -4
  33. package/docs/content/authentication.md +40 -24
  34. package/docs/content/automations.md +18 -36
  35. package/docs/content/blueprint-installer.md +3 -0
  36. package/docs/content/cli-adapters.md +24 -168
  37. package/docs/content/client.md +11 -77
  38. package/docs/content/cloneable-saas.md +1 -1
  39. package/docs/content/code-agents-ui.md +43 -0
  40. package/docs/content/components.md +10 -23
  41. package/docs/content/context-awareness.md +3 -3
  42. package/docs/content/creating-templates.md +20 -18
  43. package/docs/content/database.md +1 -1
  44. package/docs/content/deployment.md +5 -37
  45. package/docs/content/dispatch.md +17 -28
  46. package/docs/content/drop-in-agent.md +24 -111
  47. package/docs/content/durable-resume.md +4 -0
  48. package/docs/content/embedding-sdk.md +141 -135
  49. package/docs/content/evals.md +3 -3
  50. package/docs/content/extensions.md +1 -1
  51. package/docs/content/external-agents.md +34 -60
  52. package/docs/content/faq.md +5 -5
  53. package/docs/content/frames.md +13 -4
  54. package/docs/content/getting-started.md +96 -142
  55. package/docs/content/harness-agents.md +24 -7
  56. package/docs/content/human-approval.md +1 -1
  57. package/docs/content/key-concepts.md +14 -99
  58. package/docs/content/local-file-mode.md +2 -2
  59. package/docs/content/mcp-apps.md +9 -2
  60. package/docs/content/mcp-clients.md +8 -3
  61. package/docs/content/mcp-protocol.md +11 -29
  62. package/docs/content/messaging.md +1 -1
  63. package/docs/content/migration-workbench.md +14 -175
  64. package/docs/content/multi-app-workspace.md +1 -1
  65. package/docs/content/multi-tenancy.md +18 -47
  66. package/docs/content/native-chat-ui.md +15 -12
  67. package/docs/content/observability.md +16 -4
  68. package/docs/content/observational-memory.md +1 -1
  69. package/docs/content/pure-agent-apps.md +17 -124
  70. package/docs/content/real-time-collaboration.md +14 -14
  71. package/docs/content/routing.md +71 -0
  72. package/docs/content/sandbox-adapters.md +78 -4
  73. package/docs/content/security.md +59 -39
  74. package/docs/content/server.md +16 -8
  75. package/docs/content/sharing.md +1 -6
  76. package/docs/content/skills-guide.md +3 -1
  77. package/docs/content/template-analytics.md +1 -1
  78. package/docs/content/template-assets.md +12 -3
  79. package/docs/content/template-brain.md +64 -72
  80. package/docs/content/template-chat.md +32 -4
  81. package/docs/content/template-clips.md +35 -4
  82. package/docs/content/template-design.md +19 -3
  83. package/docs/content/template-dispatch.md +9 -0
  84. package/docs/content/template-forms.md +15 -10
  85. package/docs/content/template-plan.md +7 -0
  86. package/docs/content/template-slides.md +14 -14
  87. package/docs/content/template-videos.md +10 -12
  88. package/docs/content/tracking.md +66 -55
  89. package/docs/content/using-your-agent.md +6 -16
  90. package/docs/content/what-is-agent-native.md +5 -11
  91. package/docs/content/workspace-management.md +2 -2
  92. package/docs/content/workspace.md +20 -160
  93. package/package.json +1 -1
  94. package/src/templates/workspace-root/README.md +4 -4
@@ -102,7 +102,7 @@ export async function executeCodeAgentRun(options) {
102
102
  }
103
103
  const engine = options.engine ?? (await resolveExecutorEngine(requestedEngine));
104
104
  if (!engine) {
105
- const message = "No LLM provider key was found. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, another supported provider key, or select Codex CLI after running `codex login`.";
105
+ const message = "No LLM provider key was found. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, another supported provider key, or run `codex login` to use Codex CLI.";
106
106
  options.stdout?.write(`${message}\n`);
107
107
  appendCodeAgentTranscriptEvent({
108
108
  runId: existing.id,
@@ -1 +1 @@
1
- {"version":3,"file":"code-agent-executor.js","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"../agent/tool-search.js\";\nimport {\n createCodingToolRegistry,\n isReadOnlyShellCommand,\n runCodingCommand,\n truncateBashOutput,\n truncateCodingOutput,\n type StructuredToolMetadata,\n} from \"../coding-tools/index.js\";\nimport {\n buildMergedConfig,\n McpClientManager,\n mcpToolsToActionEntries,\n} from \"../mcp-client/index.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport {\n actionsToEngineTools,\n runAgentLoop,\n type ActionEntry,\n type AgentLoopUsage,\n} from \"../agent/production-agent.js\";\nimport {\n resolveEngine,\n getStoredModelForEngine,\n normalizeModelForEngine,\n registerBuiltinEngines,\n} from \"../agent/engine/index.js\";\nimport type {\n AgentEngine,\n EngineEvent,\n EngineMessage,\n EngineStreamOptions,\n} from \"../agent/engine/types.js\";\nimport type { AgentChatEvent } from \"../agent/types.js\";\nimport { PROVIDER_ENV_VARS } from \"../agent/engine/provider-env-vars.js\";\nimport { DEFAULT_AGENT_MAX_ITERATIONS } from \"../agent/loop-settings.js\";\nimport {\n readAgentsBundleFromFs,\n generateSkillsPromptBlock,\n} from \"../server/agents-bundle.js\";\nimport {\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n formatPromptWithAttachments,\n type AgentPromptAttachment,\n} from \"../code-agents/prompt-attachments.js\";\nimport {\n addCodeAgentCommandToAllowlist,\n appendCodeAgentTranscriptEvent,\n dequeueCodeAgentFollowUp,\n getCodeAgentRunRecord,\n isCodeAgentCommandAllowed,\n listCodeAgentTranscriptEvents,\n updateCodeAgentRunRecord,\n type CodeAgentPermissionMode,\n type CodeAgentRunRecord,\n} from \"./code-agent-runs.js\";\nimport { createCodeAgentOutputSmoother } from \"./code-agent-output-smoother.js\";\n\nexport interface ExecuteCodeAgentRunOptions {\n runId: string;\n prompt?: string;\n appendUserEvent?: boolean;\n engine?: AgentEngine;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n attachments?: AgentPromptAttachment[];\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}\n\ninterface PendingCodeAgentApproval {\n id: string;\n tool: \"bash\" | \"run_command\";\n command: string;\n reason: string;\n requestedAt: string;\n permissionMode: CodeAgentPermissionMode;\n}\n\ninterface CodexCliProcessResult {\n exitCode: number | null;\n exitSignal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n error?: string;\n}\n\nconst DEFAULT_COMMAND_TIMEOUT_MS = 120_000;\nconst MAX_TOOL_OUTPUT_CHARS = 50_000;\nconst MAX_FILE_READ_CHARS = 120_000;\nconst CODEX_CLI_ENGINE_NAME = \"codex-cli\";\n\n/**\n * Number of most-recent transcript events reconstructed as native\n * EngineMessage objects (with proper tool-call / tool-result pairing).\n * Events older than this cap are summarised into a single compact text\n * preamble so the model retains broad context without token waste.\n */\nconst STRUCTURED_HISTORY_RECENT_EVENTS = 40;\n\n/**\n * Per-tool-result text cap when reconstructing history. Matches the overall\n * tool-output cap so old results don't balloon the context.\n */\nconst STRUCTURED_HISTORY_RESULT_CAP = MAX_TOOL_OUTPUT_CHARS;\n\nexport async function executeCodeAgentRun(\n options: ExecuteCodeAgentRunOptions,\n): Promise<CodeAgentRunRecord | null> {\n const existing = getCodeAgentRunRecord(options.runId);\n if (!existing) return null;\n\n const prompt = options.prompt ?? latestUserPrompt(existing.id);\n const rawAttachments =\n options.attachments ?? latestUserPromptAttachments(existing.id, prompt);\n\n // Split attachments: images (dataUrl) go as engine image parts; text/file\n // attachments are still inlined into the prompt text. This prevents 2 MB\n // images from consuming ~700 K tokens of garbage when treated as plain text.\n const imageAttachments = rawAttachments.filter((a) => a.dataUrl);\n const textOnlyAttachments = rawAttachments.filter((a) => !a.dataUrl);\n const executionPrompt = formatPromptWithAttachments(\n prompt,\n textOnlyAttachments,\n );\n if (!prompt) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"No prompt was found for this Agent-Native Code run.\",\n metadata: { status: \"errored\", phase: \"missing-prompt\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"errored\",\n phase: \"missing-prompt\",\n progress: {\n label: \"Missing prompt\",\n completed: 0,\n total: 1,\n failed: 1,\n percent: 0,\n },\n });\n }\n\n if (options.appendUserEvent !== false) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"user\",\n message: prompt,\n metadata: { source: \"execution-prompt\" },\n });\n }\n\n const running = updateCodeAgentRunRecord(existing.id, {\n status: \"running\",\n phase: \"executing\",\n progress: {\n label: \"Running\",\n completed: 0,\n total: 1,\n percent: 10,\n },\n metadata: {\n executionStartedAt: new Date().toISOString(),\n },\n });\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run started.\",\n metadata: { status: \"running\", phase: \"executing\" },\n });\n\n const requestedEngine = normalizeRequestedEngine(\n metadataString(existing, \"engine\"),\n );\n if (requestedEngine === CODEX_CLI_ENGINE_NAME) {\n return executeCodexCliRun({\n run: existing,\n prompt: executionPrompt,\n model: options.model ?? metadataString(existing, \"model\"),\n permissionMode: existing.permissionMode ?? \"full-auto\",\n stdout: options.stdout,\n signal: options.signal,\n });\n }\n\n const engine =\n options.engine ?? (await resolveExecutorEngine(requestedEngine));\n if (!engine) {\n const message =\n \"No LLM provider key was found. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, another supported provider key, or select Codex CLI after running `codex login`.\";\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: { status: \"paused\", phase: \"missing-credentials\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"paused\",\n phase: \"missing-credentials\",\n needsApproval: false,\n progress: {\n label: \"Missing credentials\",\n completed: 0,\n total: 1,\n percent: 0,\n },\n });\n }\n\n const modelCandidate =\n options.model ??\n metadataString(existing, \"model\") ??\n process.env.AGENT_MODEL ??\n (await getStoredModelForEngine(engine).catch(() => undefined)) ??\n engine.defaultModel;\n const model = normalizeModelForEngine(engine, modelCandidate);\n const reasoningEffort =\n options.reasoningEffort ?? metadataReasoningEffort(existing);\n const cwd = existing.cwd || process.cwd();\n const permissionMode = existing.permissionMode ?? \"full-auto\";\n\n // Holds structured metadata emitted by the coding tools side-channel.\n // Keyed by tool name; consumed when the matching tool_start / tool_done fires.\n const pendingToolMeta = new Map<string, StructuredToolMetadata>();\n\n const actions = createLocalCodeAgentActions(\n cwd,\n permissionMode,\n existing.id,\n (toolName, _phase, meta) => {\n // Both \"start\" and \"done\" phases update the map; done has richer data.\n pendingToolMeta.set(toolName, meta);\n },\n (chunk) => {\n // Stream incremental bash output to stdout for the terminal smoother\n options.stdout?.write(chunk);\n },\n );\n const mcpManager = await startCodeAgentMcpManager(existing.id);\n if (mcpManager) {\n Object.assign(actions, mcpToolsToActionEntries(mcpManager));\n }\n actions[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => actions);\n const tools = actionsToEngineTools(actions);\n const messages = buildCodeAgentMessages(\n existing,\n executionPrompt,\n imageAttachments,\n );\n const controller = new AbortController();\n const abortFromParent = () => controller.abort();\n if (options.signal) {\n if (options.signal.aborted) controller.abort();\n else\n options.signal.addEventListener(\"abort\", abortFromParent, { once: true });\n }\n\n let assistantText = \"\";\n const outputSmoother = createCodeAgentOutputSmoother(options.stdout);\n\n // Accumulate thinking text across deltas so we can persist a single event\n // per reasoning block rather than one event per delta chunk.\n let pendingThinkingText = \"\";\n let thinkingFlushTimer: ReturnType<typeof setTimeout> | undefined;\n\n const runId = existing.id;\n function flushThinkingEvent() {\n thinkingFlushTimer = undefined;\n const text = pendingThinkingText.trim();\n pendingThinkingText = \"\";\n if (!text) return;\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: text,\n metadata: { type: \"thinking\" },\n });\n }\n\n const send = (event: AgentChatEvent) => {\n if (event.type === \"text\") {\n // Flush any buffered thinking when real content arrives.\n if (thinkingFlushTimer !== undefined) {\n clearTimeout(thinkingFlushTimer);\n flushThinkingEvent();\n }\n assistantText += event.text;\n outputSmoother.write(event.text);\n return;\n }\n if (event.type === \"thinking\") {\n pendingThinkingText += event.text;\n // Debounce: flush 300ms after the last delta so rapid chunks are merged.\n if (thinkingFlushTimer !== undefined) clearTimeout(thinkingFlushTimer);\n thinkingFlushTimer = setTimeout(flushThinkingEvent, 300);\n return;\n }\n if (event.type === \"activity\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.label,\n metadata: { type: \"activity\", tool: event.tool },\n });\n return;\n }\n if (event.type === \"tool_start\") {\n const startMeta = pendingToolMeta.get(event.tool ?? \"\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Running ${event.tool}.`,\n metadata: {\n type: \"tool_start\",\n tool: event.tool,\n input: event.input,\n ...(startMeta ? { structuredMeta: startMeta } : {}),\n },\n });\n return;\n }\n if (event.type === \"tool_done\") {\n const pendingMeta = pendingToolMeta.get(event.tool ?? \"\");\n if (pendingMeta) pendingToolMeta.delete(event.tool ?? \"\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Finished ${event.tool}.`,\n metadata: {\n type: \"tool_done\",\n tool: event.tool,\n result: truncateBashOutput(\n truncateCodingOutput(event.result, MAX_TOOL_OUTPUT_CHARS),\n ),\n ...(event.mcpApp ? { mcpApp: event.mcpApp } : {}),\n ...(pendingMeta ? { structuredMeta: pendingMeta } : {}),\n },\n });\n return;\n }\n if (event.type === \"error\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.error,\n metadata: { type: \"error\", errorCode: event.errorCode },\n });\n }\n };\n\n let loopUsage: AgentLoopUsage | null = null;\n try {\n const systemPrompt = await buildCodeAgentSystemPrompt(cwd, permissionMode);\n const usageResult = await runWithOptionalCodeAgentRequestContext(\n existing,\n () =>\n runAgentLoop({\n engine,\n model,\n systemPrompt,\n tools,\n actions,\n messages,\n send,\n signal: controller.signal,\n maxIterations: DEFAULT_AGENT_MAX_ITERATIONS,\n reasoningEffort,\n }),\n );\n loopUsage = usageResult ?? null;\n // Persist cumulative token totals from this turn into the run record so\n // the UI can display per-run usage statistics.\n if (loopUsage) {\n updateCodeAgentRunRecord(existing.id, (record) => ({\n metadata: {\n tokenUsage: accumulateTokenUsage(\n record.metadata?.tokenUsage,\n loopUsage!,\n ),\n },\n }));\n }\n await outputSmoother.flush();\n if (assistantText.trim()) {\n options.stdout?.write(\"\\n\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"system\",\n message: assistantText.trim(),\n metadata: {\n role: \"assistant\",\n model,\n engine: engine.name,\n reasoningEffort,\n },\n });\n }\n const approvalPending = getPendingApproval(existing.id);\n if (approvalPending) {\n const message = `Agent-Native Code run paused for approval: ${approvalPending.reason}`;\n options.stdout?.write(`\\n${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApprovalId: approvalPending.id,\n },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n });\n }\n\n const pendingFollowUp = dequeueCodeAgentFollowUp(existing.id);\n if (pendingFollowUp) {\n const message =\n pendingFollowUp.mode === \"queued\"\n ? \"Agent-Native Code run completed; running queued follow-up.\"\n : \"Agent-Native Code run completed; applying steering follow-up.\";\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"follow-up\",\n followUpId: pendingFollowUp.id,\n followUpMode: pendingFollowUp.mode,\n },\n });\n if (pendingFollowUp.permissionMode) {\n updateCodeAgentRunRecord(existing.id, {\n permissionMode: pendingFollowUp.permissionMode,\n });\n }\n return executeCodeAgentRun({\n ...options,\n runId: existing.id,\n prompt: pendingFollowUp.prompt,\n attachments:\n pendingFollowUp.attachments ??\n userPromptAttachmentsForEvent(existing.id, pendingFollowUp.eventId),\n appendUserEvent: false,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run completed.\",\n metadata: { status: \"completed\", phase: \"complete\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"completed\",\n phase: \"complete\",\n needsApproval: false,\n progress: {\n label: \"Complete\",\n completed: 1,\n total: 1,\n percent: 100,\n },\n metadata: {\n executionCompletedAt: new Date().toISOString(),\n engine: engine.name,\n model,\n reasoningEffort,\n permissionMode,\n },\n });\n } catch (err) {\n await outputSmoother.flush().catch(() => undefined);\n const message = err instanceof Error ? err.message : String(err);\n options.stdout?.write(`\\nAgent-Native Code run failed: ${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Agent-Native Code run failed: ${message}`,\n metadata: { status: \"errored\", phase: \"error\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: controller.signal.aborted ? \"paused\" : \"errored\",\n phase: controller.signal.aborted ? \"paused\" : \"error\",\n progress: {\n label: controller.signal.aborted ? \"Paused\" : \"Error\",\n completed: 0,\n total: 1,\n failed: controller.signal.aborted ? 0 : 1,\n percent: 0,\n },\n metadata: {\n executionError: message,\n executionErroredAt: new Date().toISOString(),\n },\n });\n } finally {\n if (thinkingFlushTimer !== undefined) {\n clearTimeout(thinkingFlushTimer);\n flushThinkingEvent();\n }\n outputSmoother.cancel();\n options.signal?.removeEventListener(\"abort\", abortFromParent);\n await mcpManager?.stop().catch(() => undefined);\n void running;\n }\n}\n\nasync function executeCodexCliRun(options: {\n run: CodeAgentRunRecord;\n prompt: string;\n model?: string;\n permissionMode: CodeAgentPermissionMode;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}): Promise<CodeAgentRunRecord | null> {\n const cwd = options.run.cwd || process.cwd();\n const outputDir = fs.mkdtempSync(\n path.join(os.tmpdir(), \"agent-native-code-codex-\"),\n );\n const outputPath = path.join(outputDir, \"last-message.txt\");\n const model = normalizeCodexCliModel(options.model);\n const args = [\n \"exec\",\n \"--cd\",\n cwd,\n \"--color\",\n \"never\",\n \"--skip-git-repo-check\",\n \"--sandbox\",\n codexSandboxForPermissionMode(options.permissionMode),\n \"--ask-for-approval\",\n \"never\",\n \"--output-last-message\",\n outputPath,\n ];\n if (model) args.push(\"--model\", model);\n args.push(\"-\");\n\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message: \"Starting Codex CLI with local Codex authentication.\",\n metadata: {\n status: \"running\",\n phase: \"executing\",\n engine: CODEX_CLI_ENGINE_NAME,\n },\n });\n\n try {\n const result = await runCodexCliProcess({\n args,\n cwd,\n prompt: buildCodexCliPrompt(options.run, options.prompt),\n stdout: options.stdout,\n signal: options.signal,\n });\n\n if (result.exitCode !== 0) {\n const message =\n result.error ??\n result.stderr.trim() ??\n `Codex CLI exited with ${result.exitSignal ?? result.exitCode}.`;\n options.stdout?.write(`\\nCodex CLI run failed: ${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message: `Codex CLI run failed: ${message}`,\n metadata: {\n status: \"errored\",\n phase: \"error\",\n engine: CODEX_CLI_ENGINE_NAME,\n exitCode: result.exitCode,\n exitSignal: result.exitSignal,\n },\n });\n return updateCodeAgentRunRecord(options.run.id, {\n status: options.signal?.aborted ? \"paused\" : \"errored\",\n phase: options.signal?.aborted ? \"paused\" : \"error\",\n progress: {\n label: options.signal?.aborted ? \"Paused\" : \"Error\",\n completed: 0,\n total: 1,\n failed: options.signal?.aborted ? 0 : 1,\n percent: 0,\n },\n metadata: {\n executionError: message,\n executionErroredAt: new Date().toISOString(),\n engine: CODEX_CLI_ENGINE_NAME,\n model: model ?? \"codex-default\",\n },\n });\n }\n\n const finalMessage =\n readCodexLastMessage(outputPath) ||\n result.stdout.trim() ||\n \"Codex CLI run completed.\";\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"system\",\n message: finalMessage,\n metadata: {\n role: \"assistant\",\n engine: CODEX_CLI_ENGINE_NAME,\n model: model ?? \"codex-default\",\n },\n });\n\n const pendingFollowUp = dequeueCodeAgentFollowUp(options.run.id);\n if (pendingFollowUp) {\n const message =\n pendingFollowUp.mode === \"queued\"\n ? \"Codex CLI run completed; running queued follow-up.\"\n : \"Codex CLI run completed; applying steering follow-up.\";\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"follow-up\",\n followUpId: pendingFollowUp.id,\n followUpMode: pendingFollowUp.mode,\n engine: CODEX_CLI_ENGINE_NAME,\n },\n });\n if (pendingFollowUp.permissionMode) {\n updateCodeAgentRunRecord(options.run.id, {\n permissionMode: pendingFollowUp.permissionMode,\n });\n }\n return executeCodeAgentRun({\n runId: options.run.id,\n prompt: pendingFollowUp.prompt,\n attachments:\n pendingFollowUp.attachments ??\n userPromptAttachmentsForEvent(\n options.run.id,\n pendingFollowUp.eventId,\n ),\n appendUserEvent: false,\n stdout: options.stdout,\n signal: options.signal,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message: \"Codex CLI run completed.\",\n metadata: {\n status: \"completed\",\n phase: \"complete\",\n engine: CODEX_CLI_ENGINE_NAME,\n },\n });\n return updateCodeAgentRunRecord(options.run.id, {\n status: \"completed\",\n phase: \"complete\",\n needsApproval: false,\n progress: {\n label: \"Complete\",\n completed: 1,\n total: 1,\n percent: 100,\n },\n metadata: {\n executionCompletedAt: new Date().toISOString(),\n engine: CODEX_CLI_ENGINE_NAME,\n model: model ?? \"codex-default\",\n permissionMode: options.permissionMode,\n },\n });\n } finally {\n fs.rmSync(outputDir, { recursive: true, force: true });\n }\n}\n\nfunction runCodexCliProcess(options: {\n args: string[];\n cwd: string;\n prompt: string;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}): Promise<CodexCliProcessResult> {\n return new Promise((resolve) => {\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n const child = spawn(\"codex\", options.args, {\n cwd: options.cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: process.env,\n });\n const finish = (\n result: Omit<CodexCliProcessResult, \"stdout\" | \"stderr\">,\n ) => {\n if (settled) return;\n settled = true;\n options.signal?.removeEventListener(\"abort\", onAbort);\n resolve({ ...result, stdout, stderr });\n };\n const onAbort = () => {\n child.kill(\"SIGTERM\");\n };\n if (options.signal) {\n if (options.signal.aborted) onAbort();\n else options.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n child.stdout?.on(\"data\", (chunk) => {\n const text = chunk.toString();\n stdout += text;\n options.stdout?.write(text);\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", (err) => {\n finish({\n exitCode: 1,\n exitSignal: null,\n error:\n (err as NodeJS.ErrnoException).code === \"ENOENT\"\n ? \"Codex CLI was not found. Install Codex and run `codex login`.\"\n : err instanceof Error\n ? err.message\n : String(err),\n });\n });\n child.on(\"exit\", (exitCode, exitSignal) => {\n finish({ exitCode, exitSignal });\n });\n child.stdin?.end(options.prompt);\n });\n}\n\nfunction buildCodexCliPrompt(run: CodeAgentRunRecord, prompt: string): string {\n const permissionMode = run.permissionMode ?? \"full-auto\";\n const mode =\n permissionMode === \"read-only\" || permissionMode === \"ask-before-edit\"\n ? \"Plan\"\n : \"Auto\";\n const modeInstruction =\n mode === \"Plan\"\n ? \"Inspect and explain only. Do not edit files or run mutating commands.\"\n : \"Edit and verify as needed. Do not create, switch, reset, rebase, or stash git branches.\";\n return [\n `You are running from Agent-Native Code in ${run.cwd || process.cwd()}.`,\n \"Follow the repository AGENTS.md and any relevant skill instructions.\",\n `Run mode: ${mode} (${permissionMode}). ${modeInstruction}`,\n \"\",\n \"# User request\",\n prompt,\n ].join(\"\\n\");\n}\n\nfunction codexSandboxForPermissionMode(\n permissionMode: CodeAgentPermissionMode,\n): \"read-only\" | \"workspace-write\" {\n return permissionMode === \"read-only\" || permissionMode === \"ask-before-edit\"\n ? \"read-only\"\n : \"workspace-write\";\n}\n\nfunction normalizeCodexCliModel(model: string | undefined): string | undefined {\n const trimmed = model?.trim();\n if (!trimmed || trimmed === \"auto\" || trimmed === CODEX_CLI_ENGINE_NAME) {\n return undefined;\n }\n return trimmed;\n}\n\nfunction normalizeRequestedEngine(\n engine: string | undefined,\n): string | undefined {\n const trimmed = engine?.trim();\n if (!trimmed || trimmed === \"auto\") return undefined;\n return trimmed;\n}\n\nfunction readCodexLastMessage(filePath: string): string | null {\n try {\n const text = fs.readFileSync(filePath, \"utf-8\").trim();\n return text || null;\n } catch {\n return null;\n }\n}\n\nexport async function executeExistingCodeAgentRun(\n runId: string,\n options: Omit<ExecuteCodeAgentRunOptions, \"runId\"> = {},\n): Promise<CodeAgentRunRecord | null> {\n return executeCodeAgentRun({ ...options, runId, appendUserEvent: false });\n}\n\n/**\n * Add the pending approval command to the per-project allowlist, then approve\n * and auto-resume. Future occurrences of this exact command will bypass the\n * approval gate without prompting.\n */\nexport async function executeApproveAlwaysCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const approval = getPendingApproval(runId);\n if (approval?.command) {\n addCodeAgentCommandToAllowlist(approval.command);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Command added to allowlist: ${approval.command}`,\n metadata: { type: \"allowlist-added\", command: approval.command },\n });\n }\n return executePendingCodeAgentApproval(runId, options);\n}\n\nexport async function executePendingCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const record = getCodeAgentRunRecord(runId);\n if (!record) return null;\n const approval = getPendingApproval(runId);\n if (!approval) {\n options.stdout?.write(\"No pending approval was found for this run.\\n\");\n return record;\n }\n\n const permission = classifyCodeAgentCommandPermission(approval.command);\n if (permission.kind === \"forbidden\") {\n const message = `Approval cannot run forbidden command: ${permission.reason}`;\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n approvalId: approval.id,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n needsApproval: true,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approved command ${approval.id}; running now.`,\n metadata: {\n status: \"running\",\n phase: \"approval-running\",\n approvalId: approval.id,\n command: approval.command,\n },\n });\n const result = await runCodingCommand(\n approval.command,\n record.cwd || process.cwd(),\n DEFAULT_COMMAND_TIMEOUT_MS,\n );\n const summary = truncateCodingOutput(\n [\n `Approved command finished with exit code ${result.code}.`,\n result.timedOut ? \"Timed out: true\" : \"\",\n result.stdout ? `stdout:\\n${result.stdout}` : \"\",\n result.stderr ? `stderr:\\n${result.stderr}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n MAX_TOOL_OUTPUT_CHARS,\n );\n options.stdout?.write(`${summary}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: summary,\n metadata: {\n status: \"running\",\n phase: \"approval-complete\",\n approvalId: approval.id,\n exitCode: result.code,\n timedOut: result.timedOut,\n },\n });\n // Clear the pending approval and immediately auto-resume so the model sees\n // the command result and can continue — no manual \"Resume\" click needed.\n updateCodeAgentRunRecord(runId, {\n status: \"running\",\n phase: \"approval-resuming\",\n needsApproval: false,\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n completedAt: new Date().toISOString(),\n exitCode: result.code,\n },\n },\n });\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: \"Resuming run after approval.\",\n metadata: { status: \"running\", phase: \"approval-resuming\" },\n });\n return executeExistingCodeAgentRun(runId, { stdout: options.stdout });\n}\n\n/**\n * Deny a pending approval: record the denial, feed it back to the model as a\n * \"command denied by user\" result, and immediately resume the run so the model\n * can adapt its plan without leaving the run dangling.\n */\nexport async function executeDenyCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const record = getCodeAgentRunRecord(runId);\n if (!record) return null;\n const approval = getPendingApproval(runId);\n if (!approval) {\n options.stdout?.write(\"No pending approval was found for this run.\\n\");\n return record;\n }\n\n const message = `User denied command: ${approval.command} (${approval.reason})`;\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"approval-denied\",\n approvalId: approval.id,\n command: approval.command,\n },\n });\n updateCodeAgentRunRecord(runId, {\n status: \"running\",\n phase: \"approval-denied-resuming\",\n needsApproval: false,\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n deniedAt: new Date().toISOString(),\n denied: true,\n },\n },\n });\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: \"Resuming run after denial — model will adapt its plan.\",\n metadata: { status: \"running\", phase: \"approval-denied-resuming\" },\n });\n return executeExistingCodeAgentRun(runId, { stdout: options.stdout });\n}\n\nfunction latestUserPrompt(runId: string): string {\n const events = listCodeAgentTranscriptEvents(runId);\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i];\n if (event.kind === \"user\" && event.message.trim()) return event.message;\n }\n return \"\";\n}\n\nfunction latestUserPromptAttachments(\n runId: string,\n prompt: string,\n): AgentPromptAttachment[] {\n const events = listCodeAgentTranscriptEvents(runId);\n const normalizedPrompt = prompt.trim();\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i];\n if (event.kind !== \"user\" || !event.message.trim()) continue;\n if (\n !normalizedPrompt ||\n event.message.trim() === normalizedPrompt ||\n i === events.length - 1\n ) {\n return promptAttachmentsFromMetadata(event.metadata?.attachments);\n }\n }\n return [];\n}\n\nfunction userPromptAttachmentsForEvent(\n runId: string,\n eventId: string | undefined,\n): AgentPromptAttachment[] {\n if (!eventId) return [];\n const event = listCodeAgentTranscriptEvents(runId).find(\n (item) => item.id === eventId && item.kind === \"user\",\n );\n return promptAttachmentsFromMetadata(event?.metadata?.attachments);\n}\n\nfunction promptAttachmentsFromMetadata(\n value: unknown,\n): AgentPromptAttachment[] {\n if (!Array.isArray(value)) return [];\n return value\n .filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === \"object\" && !Array.isArray(item)),\n )\n .map((item) => ({\n name: typeof item.name === \"string\" && item.name ? item.name : \"file\",\n ...(typeof item.type === \"string\" ? { type: item.type } : {}),\n ...(typeof item.size === \"number\" ? { size: item.size } : {}),\n ...(typeof item.text === \"string\" ? { text: item.text } : {}),\n ...(typeof item.dataUrl === \"string\" ? { dataUrl: item.dataUrl } : {}),\n }));\n}\n\nfunction metadataString(\n run: CodeAgentRunRecord,\n key: string,\n): string | undefined {\n const value = run.metadata?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nasync function startCodeAgentMcpManager(\n runId: string,\n): Promise<McpClientManager | null> {\n const config = await buildMergedConfig().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools unavailable: ${message}`,\n metadata: { type: \"mcp-config-error\" },\n });\n return null;\n });\n if (!config || Object.keys(config.servers ?? {}).length === 0) return null;\n\n const manager = new McpClientManager(config);\n await manager.start().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools failed to start: ${message}`,\n metadata: { type: \"mcp-start-error\" },\n });\n });\n const status = manager.getStatus();\n if (status.totalTools === 0) {\n await manager.stop().catch(() => undefined);\n return null;\n }\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Connected ${status.totalTools} MCP tool${status.totalTools === 1 ? \"\" : \"s\"} for this run.`,\n metadata: {\n type: \"mcp-tools-connected\",\n servers: status.connectedServers,\n toolCount: status.totalTools,\n },\n });\n return manager;\n}\n\nfunction runWithOptionalCodeAgentRequestContext<T>(\n run: CodeAgentRunRecord,\n fn: () => T | Promise<T>,\n): T | Promise<T> {\n const userEmail =\n metadataString(run, \"ownerEmail\") ??\n metadataString(run, \"userEmail\") ??\n process.env.AGENT_USER_EMAIL;\n const orgId = metadataString(run, \"orgId\") ?? process.env.AGENT_ORG_ID;\n if (!userEmail && !orgId) return fn();\n return runWithRequestContext({ userEmail, orgId }, fn);\n}\n\nfunction metadataReasoningEffort(\n run: CodeAgentRunRecord,\n): ReasoningEffort | undefined {\n const value = run.metadata?.reasoningEffort ?? run.metadata?.effort;\n return isReasoningEffort(value) && value !== \"auto\" ? value : undefined;\n}\n\nasync function resolveExecutorEngine(\n requestedEngine?: string,\n): Promise<AgentEngine | null> {\n const fakeText = process.env.AGENT_NATIVE_CODE_AGENT_FAKE_RESPONSE;\n if (fakeText !== undefined) {\n return createFakeCodeAgentEngine(fakeText || \"Done.\");\n }\n registerBuiltinEngines();\n if (!hasAnyProviderCredential()) return null;\n return resolveEngine({\n engineOption: requestedEngine ?? process.env.AGENT_ENGINE,\n });\n}\n\nfunction hasAnyProviderCredential(): boolean {\n if (process.env.AGENT_ENGINE) return true;\n if (PROVIDER_ENV_VARS.some((key) => Boolean(process.env[key]))) return true;\n return Boolean(\n process.env.BUILDER_PRIVATE_KEY && process.env.BUILDER_PUBLIC_KEY,\n );\n}\n\nfunction createFakeCodeAgentEngine(text: string): AgentEngine {\n return {\n name: \"fake-code-agent\",\n label: \"Fake Agent-Native Code\",\n defaultModel: \"fake-code-agent\",\n supportedModels: [\"fake-code-agent\"],\n capabilities: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: false,\n },\n async *stream(_opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n yield { type: \"text-delta\", text };\n yield {\n type: \"assistant-content\",\n parts: [{ type: \"text\", text }],\n };\n yield {\n type: \"usage\",\n inputTokens: 1,\n outputTokens: 1,\n cacheReadTokens: 0,\n cacheWriteTokens: 0,\n };\n yield { type: \"stop\", reason: \"end_turn\" };\n },\n };\n}\n\nconst SUPPORTED_IMAGE_MEDIA_TYPES = new Set([\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"image/gif\",\n \"image/webp\",\n]);\n\nfunction buildCodeAgentMessages(\n run: CodeAgentRunRecord,\n prompt: string,\n attachments?: AgentPromptAttachment[],\n): EngineMessage[] {\n const allEvents = listCodeAgentTranscriptEvents(run.id);\n\n // Split events into an \"older\" prefix (summarised) and a \"recent\" tail\n // (reconstructed as native structured messages).\n const splitAt = Math.max(\n 0,\n allEvents.length - STRUCTURED_HISTORY_RECENT_EVENTS,\n );\n const olderEvents = allEvents.slice(0, splitAt);\n const recentEvents = allEvents.slice(splitAt);\n\n // Build a compact text preamble from any events that pre-date the recent\n // window. Reuses the old flat-text approach so the model still has broad\n // context without paying for full token cost on every old tool result.\n let preamble = \"\";\n if (olderEvents.length > 0) {\n const summaryLines = olderEvents\n .filter(\n (e) =>\n e.kind === \"user\" ||\n (e.kind === \"system\" && e.metadata?.role === \"assistant\") ||\n (e.kind === \"status\" &&\n (e.metadata?.type === \"tool_done\" ||\n e.metadata?.role === \"assistant\")),\n )\n .map((e) => {\n if (e.kind === \"user\") return `User: ${e.message}`;\n if (e.metadata?.role === \"assistant\") return `Assistant: ${e.message}`;\n if (e.metadata?.type === \"tool_done\") {\n const tool = e.metadata?.tool;\n const result = e.metadata?.result;\n const resultText =\n typeof result === \"string\"\n ? truncateCodingOutput(result, 500)\n : result != null\n ? truncateCodingOutput(String(result), 500)\n : \"\";\n return tool ? `Tool[${tool}]: ${resultText}` : `Tool: ${resultText}`;\n }\n return null;\n })\n .filter((line): line is string => line !== null);\n if (summaryLines.length > 0) {\n preamble = `Earlier conversation summary:\\n${summaryLines.join(\"\\n\")}`;\n }\n }\n\n // Reconstruct the recent events as native EngineMessage objects.\n // We build up a sequence of user/assistant messages, pairing tool-call\n // events (from tool_start metadata) with their matching tool-result events\n // (from tool_done metadata), and accumulating assistant text from system\n // events with role=assistant.\n const structuredMessages = buildStructuredMessagesFromEvents(recentEvents);\n\n // Separate image attachments from text attachments. Images are passed as\n // proper EngineImagePart entries rather than inlined base64 text (which\n // would consume ~700K tokens per megabyte of image data).\n const imageParts: import(\"../agent/engine/types.js\").EngineImagePart[] = [];\n const unsupportedImageNotes: string[] = [];\n\n for (const att of attachments ?? []) {\n if (!att.dataUrl) continue;\n const match = att.dataUrl.match(/^data:(image\\/[^;]+);base64,(.+)$/);\n if (!match) continue;\n const mime = match[1].toLowerCase();\n if (SUPPORTED_IMAGE_MEDIA_TYPES.has(mime)) {\n imageParts.push({\n type: \"image\",\n data: match[2],\n mediaType:\n mime as import(\"../agent/engine/types.js\").EngineImagePart[\"mediaType\"],\n });\n } else {\n // Unsupported format — inject a note so the model understands what happened.\n const label = att.name ? `\"${att.name}\"` : \"An image\";\n unsupportedImageNotes.push(\n `[${label} could not be processed — unsupported image format (${mime}). ` +\n `Only JPEG, PNG, GIF, and WebP are supported.]`,\n );\n }\n }\n\n const notesBlock =\n unsupportedImageNotes.length > 0\n ? `\\n\\n${unsupportedImageNotes.join(\"\\n\")}`\n : \"\";\n\n // The current prompt (plus optional preamble) becomes the final user message.\n const promptText = [preamble, prompt, notesBlock]\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n const promptContent: import(\"../agent/engine/types.js\").EngineContentPart[] =\n [...imageParts, { type: \"text\", text: promptText }];\n\n // If there are structured messages from the recent window and the last one\n // is a user message that already contains the current prompt (happens when\n // appendUserEvent added a \"user\" event that got included), de-duplicate by\n // using the structured messages as-is but replacing the last user message's\n // content with the enriched content (images + prompt).\n if (structuredMessages.length > 0) {\n const lastMsg = structuredMessages[structuredMessages.length - 1];\n if (lastMsg.role === \"user\") {\n // Replace last user message content with the enriched prompt content.\n structuredMessages[structuredMessages.length - 1] = {\n role: \"user\",\n content: promptContent,\n };\n return structuredMessages;\n }\n // Last message is assistant — append a new user message.\n return [...structuredMessages, { role: \"user\", content: promptContent }];\n }\n\n return [{ role: \"user\", content: promptContent }];\n}\n\n/**\n * Reconstruct a sequence of EngineMessage objects from transcript events,\n * preserving the native tool-call / tool-result pair structure that models\n * expect when replaying multi-turn conversations.\n *\n * Event mapping:\n * kind=user → user message with text content\n * kind=system, role=assistant → assistant message with text content\n * kind=status, type=tool_start → assistant message with a tool-call part\n * (grouped with any preceding assistant text)\n * kind=status, type=tool_done → user message with a tool-result part\n * kind=status, type=thinking → excluded (ephemeral reasoning)\n * everything else → excluded from model history\n *\n * Each tool_start generates a synthetic toolCallId derived from the event id so\n * that the matching tool_done can reference it. Old events that lack tool/input\n * metadata fall back gracefully to text content.\n */\n/** @internal exported for unit tests */\nexport function buildStructuredMessagesFromEvents(\n events: readonly import(\"./code-agent-runs.js\").CodeAgentTranscriptEvent[],\n): EngineMessage[] {\n // We accumulate into a flat list and then merge adjacent same-role messages.\n type PendingMessage =\n | {\n role: \"user\";\n content: import(\"../agent/engine/types.js\").EngineContentPart[];\n }\n | {\n role: \"assistant\";\n content: import(\"../agent/engine/types.js\").EngineContentPart[];\n };\n\n const pending: PendingMessage[] = [];\n\n // Track in-flight tool-call IDs keyed by event id so tool_done can\n // reference the corresponding call.\n const toolCallIdByEventOrder = new Map<string, string>();\n\n for (const event of events) {\n // Exclude thinking — ephemeral reasoning, never replayed to model.\n if (event.kind === \"status\" && event.metadata?.type === \"thinking\") {\n continue;\n }\n\n if (event.kind === \"user\") {\n const text = event.message.trim();\n if (!text) continue;\n appendOrMerge(pending, \"user\", { type: \"text\", text });\n continue;\n }\n\n // Assistant text (persisted after a turn completes).\n if (event.kind === \"system\" && event.metadata?.role === \"assistant\") {\n const text = event.message.trim();\n if (!text) continue;\n appendOrMerge(pending, \"assistant\", { type: \"text\", text });\n continue;\n }\n\n // Tool call start — emit an assistant tool-call part.\n if (event.kind === \"status\" && event.metadata?.type === \"tool_start\") {\n const tool =\n typeof event.metadata?.tool === \"string\" && event.metadata.tool\n ? event.metadata.tool\n : null;\n if (!tool) continue;\n\n // Generate a stable ID from the event id so tool_done can reference it.\n const toolCallId = `tc-${event.id}`;\n toolCallIdByEventOrder.set(event.id, toolCallId);\n\n const input: unknown =\n event.metadata?.input != null ? event.metadata.input : {};\n\n appendOrMerge(pending, \"assistant\", {\n type: \"tool-call\",\n id: toolCallId,\n name: tool,\n input,\n });\n continue;\n }\n\n // Tool result — emit a user tool-result part paired with the last\n // unmatched tool_start for the same tool name.\n if (event.kind === \"status\" && event.metadata?.type === \"tool_done\") {\n const tool =\n typeof event.metadata?.tool === \"string\" && event.metadata.tool\n ? event.metadata.tool\n : null;\n if (!tool) continue;\n\n // Find the most recent tool_start event id for this tool.\n const matchedCallId = findMatchingToolCallId(\n toolCallIdByEventOrder,\n events,\n event,\n tool,\n );\n\n const rawResult = event.metadata?.result;\n const resultText = truncateCodingOutput(\n typeof rawResult === \"string\"\n ? rawResult\n : rawResult != null\n ? String(rawResult)\n : \"(no output)\",\n STRUCTURED_HISTORY_RESULT_CAP,\n );\n\n if (matchedCallId) {\n const toolInput =\n event.metadata?.input != null\n ? safeJsonStringify(event.metadata.input)\n : \"{}\";\n appendOrMerge(pending, \"user\", {\n type: \"tool-result\",\n toolCallId: matchedCallId,\n toolName: tool,\n toolInput,\n content: resultText,\n });\n } else {\n // Orphaned tool result (no matching call in the recent window) — fall\n // back to plain text so the model still sees the output.\n appendOrMerge(pending, \"user\", {\n type: \"text\",\n text: `[Tool result for ${tool}]: ${resultText}`,\n });\n }\n continue;\n }\n }\n\n return pending;\n}\n\n/**\n * Append a content part to the last message if it has the same role, or\n * start a new message otherwise.\n */\nfunction appendOrMerge(\n pending: Array<{\n role: \"user\" | \"assistant\";\n content: import(\"../agent/engine/types.js\").EngineContentPart[];\n }>,\n role: \"user\" | \"assistant\",\n part: import(\"../agent/engine/types.js\").EngineContentPart,\n): void {\n const last = pending[pending.length - 1];\n if (last && last.role === role) {\n last.content.push(part);\n } else {\n pending.push({ role, content: [part] });\n }\n}\n\n/**\n * Find the toolCallId generated for the most recent tool_start event that\n * matches the given tool name and precedes the current tool_done event.\n * Returns null if no match exists in the recent window.\n */\nfunction findMatchingToolCallId(\n toolCallIdByEventOrder: Map<string, string>,\n events: readonly import(\"./code-agent-runs.js\").CodeAgentTranscriptEvent[],\n doneEvent: import(\"./code-agent-runs.js\").CodeAgentTranscriptEvent,\n toolName: string,\n): string | null {\n // Walk backwards from doneEvent's position to find the nearest unmatched start.\n const doneIndex = events.indexOf(doneEvent);\n for (let i = doneIndex - 1; i >= 0; i--) {\n const e = events[i];\n if (\n e.kind === \"status\" &&\n e.metadata?.type === \"tool_start\" &&\n e.metadata?.tool === toolName\n ) {\n const id = toolCallIdByEventOrder.get(e.id);\n if (id) {\n // Consume it so a second done for the same tool gets the next start.\n toolCallIdByEventOrder.delete(e.id);\n return id;\n }\n }\n }\n return null;\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value) ?? \"{}\";\n } catch {\n return \"{}\";\n }\n}\n\n/**\n * Maximum character length for inlined AGENTS.md content in the system prompt.\n * Content beyond this cap is truncated with a note so the model knows more exists.\n */\nconst AGENTS_MD_INLINE_CAP = 16_000;\n\n/**\n * Build the coding agent system prompt, inlining AGENTS.md (or CLAUDE.md as\n * fallback) and a skills index from .agents/skills/ into the prompt so the\n * coding agent has the same repo-context awareness that Claude Code / Codex\n * provide when running locally.\n *\n * The bundle is read synchronously from the filesystem via `readAgentsBundleFromFs`\n * (same function used by the Vite build-time plugin) so there is no async I/O\n * on the hot path — the call is cheap and the result is used once per run leg.\n */\n/** @internal exported for unit tests */\nexport async function buildCodeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n): Promise<string> {\n const bundle = readAgentsBundleFromFs(cwd);\n\n // If the bundle has no AGENTS.md, try CLAUDE.md as a fallback — many repos\n // use that name for agent instructions (e.g. Claude Code projects).\n let agentsMdContent = bundle.agentsMd;\n if (!agentsMdContent.trim()) {\n try {\n const fs = await import(\"node:fs\");\n const path = await import(\"node:path\");\n const claudeMdPath = path.join(cwd, \"CLAUDE.md\");\n if (fs.existsSync(claudeMdPath)) {\n agentsMdContent = fs.readFileSync(claudeMdPath, \"utf-8\");\n }\n } catch {\n // Not readable — skip\n }\n }\n\n const repoInstructionsBlock = buildRepoInstructionsBlock(agentsMdContent);\n const skillsBlock = generateSkillsPromptBlock(bundle);\n\n return codeAgentSystemPrompt(\n cwd,\n permissionMode,\n repoInstructionsBlock,\n skillsBlock,\n );\n}\n\n/** @internal exported for unit tests */\nexport function buildRepoInstructionsBlock(agentsMdContent: string): string {\n if (!agentsMdContent.trim()) return \"\";\n\n const needsTruncation = agentsMdContent.length > AGENTS_MD_INLINE_CAP;\n const truncated = needsTruncation\n ? agentsMdContent.slice(0, AGENTS_MD_INLINE_CAP)\n : agentsMdContent;\n const truncationNote = needsTruncation\n ? `\\n\\n[Note: AGENTS.md was truncated to ${AGENTS_MD_INLINE_CAP} characters. Read the full file for complete instructions.]`\n : \"\";\n\n return `## Repository instructions\n\n${truncated}${truncationNote}`;\n}\n\n/** @internal exported for unit tests */\nexport function codeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n repoInstructionsBlock = \"\",\n skillsBlock = \"\",\n): string {\n const mode = permissionMode === \"read-only\" ? \"Plan\" : \"Auto\";\n const repoSection = repoInstructionsBlock\n ? `\\n\\n${repoInstructionsBlock}`\n : \"\";\n const skillsSection = skillsBlock ? `\\n\\n${skillsBlock}` : \"\";\n return `You are Agent-Native Code, a coding agent running in ${cwd}. You and the user share one workspace, and your job is to collaborate with them until their goal is genuinely handled.\n\n# General\n\nYou bring a senior engineer's judgment to the work, but you let it arrive through attention rather than premature certainty. Read the codebase first, resist easy assumptions, and let the shape of the existing system teach you how to move.\n\n- When you search for text or files, reach first for \\`rg\\` or \\`rg --files\\`; they are much faster than \\`grep\\` or \\`find\\`. If \\`rg\\` is unavailable, use the next best tool without fuss.\n- Parallelize independent read-only work (file reads, searches) so you gather context quickly. Keep mutating steps ordered.\n- Read relevant files before editing them. Do not edit a file you have not actually read.\n\n# Engineering judgment\n\nWhen the user leaves implementation details open, choose conservatively and in sympathy with the codebase already in front of you:\n\n- Prefer the repo's existing patterns, frameworks, and local helper APIs over inventing a new abstraction.\n- For structured data, use structured APIs or parsers instead of ad hoc string manipulation when the toolchain gives you a reasonable option.\n- Keep edits closely scoped to what the request and surrounding code imply. Leave unrelated refactors and metadata churn alone unless they are truly needed to finish safely.\n- Add an abstraction only when it removes real complexity, reduces meaningful duplication, or clearly matches an established local pattern.\n- Let test coverage scale with risk and blast radius: focused for narrow changes, broader when you touch shared behavior or cross-module contracts.\n\n# Run mode\n\nCurrent run mode: ${mode} mode (${permissionMode}).\n- In Plan mode, inspect and explain only — do not edit files or run mutating commands.\n- In Auto mode, edit files and run ordinary project commands without pausing. Pause only for genuinely destructive operations: recursive deletes, package publishing, privileged commands, destructive database operations, or forbidden git branch/reset/stash/rebase operations.\n\n# Editing constraints\n\n- Use the shared coding tools: \\`bash\\` for search/list/test/build/git-status commands, \\`read\\` for file reads, \\`edit\\` for exact-match replacements, and \\`write\\` only for new files or an intentional full rewrite. Prefer \\`edit\\` over \\`write\\` for existing files.\n- Default to ASCII when editing or creating files; introduce non-ASCII only when the file already uses it or there is a clear reason.\n- Add succinct comments only where the code is not self-explanatory. Avoid empty narration like \"assign the value\"; a short orienting comment before a complex block is fine, used sparingly.\n- You may be in a dirty git worktree. NEVER revert or overwrite changes you did not make — assume they came from the user or another concurrent agent. If unrelated changes exist, ignore them; if they touch your task, work *with* them rather than undoing them. Only stop and ask if they make the task impossible.\n- If you notice unexpected changes appearing mid-task that you did not make, STOP and ask the user how to proceed rather than guessing.\n- Do not create, switch, delete, reset, rebase, or stash git branches. Never run destructive git commands (\\`git reset --hard\\`, \\`git checkout --\\`, \\`git clean\\`) unless the user explicitly asked for that exact operation.\n\n# Autonomy and verification\n\n- Stay with the work until the task is handled end to end within this turn whenever feasible. Don't stop at analysis or a proposal — implement the fix, and work through blockers yourself before handing them back. The exception is Plan mode, where you propose only.\n- Done means verified, not generated. After code changes (not docs-only), run the repo's checks before reporting success: \\`pnpm run prep\\` (format + typecheck + test + guards), or a focused subset like \\`pnpm typecheck\\` or a single package's tests for a small change. Fix all errors before you call it done.\n- Do not claim a change works, tests pass, or a build succeeds unless you actually ran it and saw the result. If you could not verify something, say exactly what is unverified and why.\n\n# Tools beyond the basics\n\n- Use \\`tool-search\\` when you need a capability that may come from MCP, including browser automation or computer control.\n- Prefer Playwright MCP for deterministic browser testing; prefer Chrome DevTools MCP when the user needs their live logged-in Chrome session.\n- Only use computer-control MCP tools when they are explicitly available and the request warrants controlling the local computer.\n\n# Final answer\n\n- Keep it concise and high-signal — plain, idiomatic engineering prose, not a mechanical report. Lead with the outcome. For a small change, one or two short paragraphs plus a verification line is usually right; reserve bullet lists for genuinely multi-part results.\n- Reference files as clickable paths (e.g. \\`packages/core/src/foo.ts\\`), with a line number when it helps. Do not paste large file contents back — the user shares this machine and can open them.\n- State what you changed, and show evidence you verified it: name the check you ran (e.g. \\`pnpm typecheck\\`) and its key result, not just a claim that it passed. If you could not run something, say so plainly.\n- No emojis or em dashes unless the user used them first.\n- AGENTS.md files take precedence over these defaults on conflict. More deeply nested AGENTS.md files take precedence over shallower ones — check for them in directories you work in.${repoSection}${skillsSection}`;\n}\n\nfunction createLocalCodeAgentActions(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n runId: string,\n onToolMetadata?: (\n toolName: string,\n phase: \"start\" | \"done\",\n meta: StructuredToolMetadata,\n ) => void,\n onBashOutputChunk?: (chunk: string) => void,\n): Record<string, ActionEntry> {\n const actions = createCodingToolRegistry({\n cwd,\n restrictToCwd: true,\n commandTimeoutMs: DEFAULT_COMMAND_TIMEOUT_MS,\n maxOutputChars: MAX_TOOL_OUTPUT_CHARS,\n maxFileReadChars: MAX_FILE_READ_CHARS,\n canWrite: (toolName) => permissionErrorForWrite(permissionMode, toolName),\n onToolMetadata,\n onBashOutputChunk,\n beforeBash: ({ command }) => {\n const permission = classifyCodeAgentCommandPermission(command);\n if (permission.kind === \"forbidden\") {\n return `Error: command is blocked by Agent-Native Code policy: ${permission.reason}`;\n }\n if (permission.kind !== \"read\") {\n const permissionError = permissionErrorForWrite(permissionMode, \"bash\");\n if (permissionError) return permissionError;\n }\n if (permission.kind === \"approval-required\") {\n // Skip the approval gate when the user has allowlisted this command.\n if (isCodeAgentCommandAllowed(command)) return null;\n const approval = requestCodeAgentApproval(runId, {\n tool: \"bash\",\n command,\n reason: permission.reason,\n permissionMode,\n });\n return [\n `Approval required before running this command: ${permission.reason}.`,\n `Approval id: ${approval.id}`,\n `Command: ${command}`,\n \"The run is paused; approve from the Agent-Native Code UI/CLI if this command is intentional.\",\n ].join(\"\\n\");\n }\n return null;\n },\n });\n if (permissionMode === \"read-only\") {\n return {\n bash: actions.bash,\n read: actions.read,\n };\n }\n return actions;\n}\n\nexport type CodeAgentCommandPermission =\n | { kind: \"read\" }\n | { kind: \"write\" }\n | { kind: \"approval-required\"; reason: string }\n | { kind: \"forbidden\"; reason: string };\n\nexport function classifyCodeAgentCommandPermission(\n command: string,\n): CodeAgentCommandPermission {\n const normalized = command.trim().toLowerCase();\n if (!normalized) return { kind: \"read\" };\n\n const blockedPatterns: Array<[RegExp, string]> = [\n [\n /\\bgit\\s+(checkout|switch|reset|rebase|stash|clean|worktree)\\b/,\n \"forbidden git branch/reset/stash/rebase operation\",\n ],\n [\n /\\bgit\\s+branch\\b(?!\\s+--show-current\\b)/,\n \"forbidden git branch operation\",\n ],\n [/\\bdrizzle-kit\\s+push\\b/, \"drizzle-kit push is not allowed\"],\n ];\n for (const [pattern, reason] of blockedPatterns) {\n if (pattern.test(normalized)) return { kind: \"forbidden\", reason };\n }\n\n const approvalPatterns: Array<[RegExp, string]> = [\n [/\\brm\\s+-rf\\b/, \"destructive recursive delete\"],\n [/\\bsudo\\b/, \"privileged command\"],\n [/\\bkill\\s+-9\\b/, \"force-kill command\"],\n [/\\bcurl\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\b(wget|fetch)\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\bnpm\\s+publish\\b/, \"package publish\"],\n [/\\bpnpm\\s+publish\\b/, \"package publish\"],\n [/\\btruncate\\b/, \"destructive data command\"],\n [/\\bdrop\\s+(table|column|database)\\b/, \"destructive database command\"],\n [/\\bdelete\\s+from\\b(?![\\s\\S]*\\bwhere\\b)/, \"unscoped delete command\"],\n ];\n for (const [pattern, reason] of approvalPatterns) {\n if (pattern.test(normalized)) {\n return { kind: \"approval-required\", reason };\n }\n }\n\n if (isReadOnlyShellCommand(command)) {\n return { kind: \"read\" };\n }\n\n const writePatterns = [\n /(^|[^>])>(?!>)/,\n />>/,\n /\\btee\\b/,\n /\\bapply_patch\\b/,\n /\\b(write|touch|mkdir|cp|mv|rm|chmod|chown)\\b/,\n /\\bpnpm\\s+(add|install|remove|dlx)\\b/,\n /\\bnpm\\s+(install|i|add|remove|uninstall)\\b/,\n ];\n if (writePatterns.some((pattern) => pattern.test(normalized))) {\n return { kind: \"write\" };\n }\n\n return { kind: \"write\" };\n}\n\nfunction permissionErrorForWrite(\n permissionMode: CodeAgentPermissionMode,\n toolName: string,\n): string | null {\n if (\n permissionMode === \"ask-before-edit\" ||\n permissionMode === \"auto-edit\" ||\n permissionMode === \"full-auto\"\n ) {\n return null;\n }\n if (permissionMode === \"read-only\") {\n return `Error: ${toolName} is unavailable in read-only mode.`;\n }\n return `Error: ${toolName} is blocked by the current run mode.`;\n}\n\nfunction requestCodeAgentApproval(\n runId: string,\n input: Omit<PendingCodeAgentApproval, \"id\" | \"requestedAt\">,\n): PendingCodeAgentApproval {\n const requestedAt = new Date().toISOString();\n const approval: PendingCodeAgentApproval = {\n id: `approval-${requestedAt.replace(/\\D/g, \"\").slice(0, 14)}`,\n requestedAt,\n ...input,\n };\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approval required: ${approval.reason}`,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApproval: approval,\n },\n });\n updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n metadata: {\n pendingApproval: approval,\n },\n });\n return approval;\n}\n\nfunction getPendingApproval(runId: string): PendingCodeAgentApproval | null {\n const record = getCodeAgentRunRecord(runId);\n const approval = record?.metadata?.pendingApproval;\n if (!approval || typeof approval !== \"object\") return null;\n const candidate = approval as Record<string, unknown>;\n const tool =\n candidate.tool === \"bash\" || candidate.tool === \"run_command\"\n ? candidate.tool\n : null;\n if (\n !tool ||\n typeof candidate.command !== \"string\" ||\n typeof candidate.reason !== \"string\" ||\n typeof candidate.id !== \"string\" ||\n typeof candidate.requestedAt !== \"string\"\n ) {\n return null;\n }\n return {\n id: candidate.id,\n tool,\n command: candidate.command,\n reason: candidate.reason,\n requestedAt: candidate.requestedAt,\n permissionMode:\n candidate.permissionMode === \"read-only\" ||\n candidate.permissionMode === \"ask-before-edit\" ||\n candidate.permissionMode === \"auto-edit\" ||\n candidate.permissionMode === \"full-auto\"\n ? candidate.permissionMode\n : \"full-auto\",\n };\n}\n\n// --------------- Token usage accumulator ---------------\n\ninterface StoredTokenUsage {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n}\n\nfunction accumulateTokenUsage(\n existing: unknown,\n next: AgentLoopUsage,\n): StoredTokenUsage {\n const prev =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? (existing as Partial<StoredTokenUsage>)\n : {};\n return {\n inputTokens: (prev.inputTokens ?? 0) + next.inputTokens,\n outputTokens: (prev.outputTokens ?? 0) + next.outputTokens,\n cacheReadTokens: (prev.cacheReadTokens ?? 0) + next.cacheReadTokens,\n cacheWriteTokens: (prev.cacheWriteTokens ?? 0) + next.cacheWriteTokens,\n };\n}\n"]}
1
+ {"version":3,"file":"code-agent-executor.js","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"../agent/tool-search.js\";\nimport {\n createCodingToolRegistry,\n isReadOnlyShellCommand,\n runCodingCommand,\n truncateBashOutput,\n truncateCodingOutput,\n type StructuredToolMetadata,\n} from \"../coding-tools/index.js\";\nimport {\n buildMergedConfig,\n McpClientManager,\n mcpToolsToActionEntries,\n} from \"../mcp-client/index.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport {\n actionsToEngineTools,\n runAgentLoop,\n type ActionEntry,\n type AgentLoopUsage,\n} from \"../agent/production-agent.js\";\nimport {\n resolveEngine,\n getStoredModelForEngine,\n normalizeModelForEngine,\n registerBuiltinEngines,\n} from \"../agent/engine/index.js\";\nimport type {\n AgentEngine,\n EngineEvent,\n EngineMessage,\n EngineStreamOptions,\n} from \"../agent/engine/types.js\";\nimport type { AgentChatEvent } from \"../agent/types.js\";\nimport { PROVIDER_ENV_VARS } from \"../agent/engine/provider-env-vars.js\";\nimport { DEFAULT_AGENT_MAX_ITERATIONS } from \"../agent/loop-settings.js\";\nimport {\n readAgentsBundleFromFs,\n generateSkillsPromptBlock,\n} from \"../server/agents-bundle.js\";\nimport {\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n formatPromptWithAttachments,\n type AgentPromptAttachment,\n} from \"../code-agents/prompt-attachments.js\";\nimport {\n addCodeAgentCommandToAllowlist,\n appendCodeAgentTranscriptEvent,\n dequeueCodeAgentFollowUp,\n getCodeAgentRunRecord,\n isCodeAgentCommandAllowed,\n listCodeAgentTranscriptEvents,\n updateCodeAgentRunRecord,\n type CodeAgentPermissionMode,\n type CodeAgentRunRecord,\n} from \"./code-agent-runs.js\";\nimport { createCodeAgentOutputSmoother } from \"./code-agent-output-smoother.js\";\n\nexport interface ExecuteCodeAgentRunOptions {\n runId: string;\n prompt?: string;\n appendUserEvent?: boolean;\n engine?: AgentEngine;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n attachments?: AgentPromptAttachment[];\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}\n\ninterface PendingCodeAgentApproval {\n id: string;\n tool: \"bash\" | \"run_command\";\n command: string;\n reason: string;\n requestedAt: string;\n permissionMode: CodeAgentPermissionMode;\n}\n\ninterface CodexCliProcessResult {\n exitCode: number | null;\n exitSignal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n error?: string;\n}\n\nconst DEFAULT_COMMAND_TIMEOUT_MS = 120_000;\nconst MAX_TOOL_OUTPUT_CHARS = 50_000;\nconst MAX_FILE_READ_CHARS = 120_000;\nconst CODEX_CLI_ENGINE_NAME = \"codex-cli\";\n\n/**\n * Number of most-recent transcript events reconstructed as native\n * EngineMessage objects (with proper tool-call / tool-result pairing).\n * Events older than this cap are summarised into a single compact text\n * preamble so the model retains broad context without token waste.\n */\nconst STRUCTURED_HISTORY_RECENT_EVENTS = 40;\n\n/**\n * Per-tool-result text cap when reconstructing history. Matches the overall\n * tool-output cap so old results don't balloon the context.\n */\nconst STRUCTURED_HISTORY_RESULT_CAP = MAX_TOOL_OUTPUT_CHARS;\n\nexport async function executeCodeAgentRun(\n options: ExecuteCodeAgentRunOptions,\n): Promise<CodeAgentRunRecord | null> {\n const existing = getCodeAgentRunRecord(options.runId);\n if (!existing) return null;\n\n const prompt = options.prompt ?? latestUserPrompt(existing.id);\n const rawAttachments =\n options.attachments ?? latestUserPromptAttachments(existing.id, prompt);\n\n // Split attachments: images (dataUrl) go as engine image parts; text/file\n // attachments are still inlined into the prompt text. This prevents 2 MB\n // images from consuming ~700 K tokens of garbage when treated as plain text.\n const imageAttachments = rawAttachments.filter((a) => a.dataUrl);\n const textOnlyAttachments = rawAttachments.filter((a) => !a.dataUrl);\n const executionPrompt = formatPromptWithAttachments(\n prompt,\n textOnlyAttachments,\n );\n if (!prompt) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"No prompt was found for this Agent-Native Code run.\",\n metadata: { status: \"errored\", phase: \"missing-prompt\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"errored\",\n phase: \"missing-prompt\",\n progress: {\n label: \"Missing prompt\",\n completed: 0,\n total: 1,\n failed: 1,\n percent: 0,\n },\n });\n }\n\n if (options.appendUserEvent !== false) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"user\",\n message: prompt,\n metadata: { source: \"execution-prompt\" },\n });\n }\n\n const running = updateCodeAgentRunRecord(existing.id, {\n status: \"running\",\n phase: \"executing\",\n progress: {\n label: \"Running\",\n completed: 0,\n total: 1,\n percent: 10,\n },\n metadata: {\n executionStartedAt: new Date().toISOString(),\n },\n });\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run started.\",\n metadata: { status: \"running\", phase: \"executing\" },\n });\n\n const requestedEngine = normalizeRequestedEngine(\n metadataString(existing, \"engine\"),\n );\n if (requestedEngine === CODEX_CLI_ENGINE_NAME) {\n return executeCodexCliRun({\n run: existing,\n prompt: executionPrompt,\n model: options.model ?? metadataString(existing, \"model\"),\n permissionMode: existing.permissionMode ?? \"full-auto\",\n stdout: options.stdout,\n signal: options.signal,\n });\n }\n\n const engine =\n options.engine ?? (await resolveExecutorEngine(requestedEngine));\n if (!engine) {\n const message =\n \"No LLM provider key was found. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, another supported provider key, or run `codex login` to use Codex CLI.\";\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: { status: \"paused\", phase: \"missing-credentials\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"paused\",\n phase: \"missing-credentials\",\n needsApproval: false,\n progress: {\n label: \"Missing credentials\",\n completed: 0,\n total: 1,\n percent: 0,\n },\n });\n }\n\n const modelCandidate =\n options.model ??\n metadataString(existing, \"model\") ??\n process.env.AGENT_MODEL ??\n (await getStoredModelForEngine(engine).catch(() => undefined)) ??\n engine.defaultModel;\n const model = normalizeModelForEngine(engine, modelCandidate);\n const reasoningEffort =\n options.reasoningEffort ?? metadataReasoningEffort(existing);\n const cwd = existing.cwd || process.cwd();\n const permissionMode = existing.permissionMode ?? \"full-auto\";\n\n // Holds structured metadata emitted by the coding tools side-channel.\n // Keyed by tool name; consumed when the matching tool_start / tool_done fires.\n const pendingToolMeta = new Map<string, StructuredToolMetadata>();\n\n const actions = createLocalCodeAgentActions(\n cwd,\n permissionMode,\n existing.id,\n (toolName, _phase, meta) => {\n // Both \"start\" and \"done\" phases update the map; done has richer data.\n pendingToolMeta.set(toolName, meta);\n },\n (chunk) => {\n // Stream incremental bash output to stdout for the terminal smoother\n options.stdout?.write(chunk);\n },\n );\n const mcpManager = await startCodeAgentMcpManager(existing.id);\n if (mcpManager) {\n Object.assign(actions, mcpToolsToActionEntries(mcpManager));\n }\n actions[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => actions);\n const tools = actionsToEngineTools(actions);\n const messages = buildCodeAgentMessages(\n existing,\n executionPrompt,\n imageAttachments,\n );\n const controller = new AbortController();\n const abortFromParent = () => controller.abort();\n if (options.signal) {\n if (options.signal.aborted) controller.abort();\n else\n options.signal.addEventListener(\"abort\", abortFromParent, { once: true });\n }\n\n let assistantText = \"\";\n const outputSmoother = createCodeAgentOutputSmoother(options.stdout);\n\n // Accumulate thinking text across deltas so we can persist a single event\n // per reasoning block rather than one event per delta chunk.\n let pendingThinkingText = \"\";\n let thinkingFlushTimer: ReturnType<typeof setTimeout> | undefined;\n\n const runId = existing.id;\n function flushThinkingEvent() {\n thinkingFlushTimer = undefined;\n const text = pendingThinkingText.trim();\n pendingThinkingText = \"\";\n if (!text) return;\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: text,\n metadata: { type: \"thinking\" },\n });\n }\n\n const send = (event: AgentChatEvent) => {\n if (event.type === \"text\") {\n // Flush any buffered thinking when real content arrives.\n if (thinkingFlushTimer !== undefined) {\n clearTimeout(thinkingFlushTimer);\n flushThinkingEvent();\n }\n assistantText += event.text;\n outputSmoother.write(event.text);\n return;\n }\n if (event.type === \"thinking\") {\n pendingThinkingText += event.text;\n // Debounce: flush 300ms after the last delta so rapid chunks are merged.\n if (thinkingFlushTimer !== undefined) clearTimeout(thinkingFlushTimer);\n thinkingFlushTimer = setTimeout(flushThinkingEvent, 300);\n return;\n }\n if (event.type === \"activity\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.label,\n metadata: { type: \"activity\", tool: event.tool },\n });\n return;\n }\n if (event.type === \"tool_start\") {\n const startMeta = pendingToolMeta.get(event.tool ?? \"\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Running ${event.tool}.`,\n metadata: {\n type: \"tool_start\",\n tool: event.tool,\n input: event.input,\n ...(startMeta ? { structuredMeta: startMeta } : {}),\n },\n });\n return;\n }\n if (event.type === \"tool_done\") {\n const pendingMeta = pendingToolMeta.get(event.tool ?? \"\");\n if (pendingMeta) pendingToolMeta.delete(event.tool ?? \"\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Finished ${event.tool}.`,\n metadata: {\n type: \"tool_done\",\n tool: event.tool,\n result: truncateBashOutput(\n truncateCodingOutput(event.result, MAX_TOOL_OUTPUT_CHARS),\n ),\n ...(event.mcpApp ? { mcpApp: event.mcpApp } : {}),\n ...(pendingMeta ? { structuredMeta: pendingMeta } : {}),\n },\n });\n return;\n }\n if (event.type === \"error\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.error,\n metadata: { type: \"error\", errorCode: event.errorCode },\n });\n }\n };\n\n let loopUsage: AgentLoopUsage | null = null;\n try {\n const systemPrompt = await buildCodeAgentSystemPrompt(cwd, permissionMode);\n const usageResult = await runWithOptionalCodeAgentRequestContext(\n existing,\n () =>\n runAgentLoop({\n engine,\n model,\n systemPrompt,\n tools,\n actions,\n messages,\n send,\n signal: controller.signal,\n maxIterations: DEFAULT_AGENT_MAX_ITERATIONS,\n reasoningEffort,\n }),\n );\n loopUsage = usageResult ?? null;\n // Persist cumulative token totals from this turn into the run record so\n // the UI can display per-run usage statistics.\n if (loopUsage) {\n updateCodeAgentRunRecord(existing.id, (record) => ({\n metadata: {\n tokenUsage: accumulateTokenUsage(\n record.metadata?.tokenUsage,\n loopUsage!,\n ),\n },\n }));\n }\n await outputSmoother.flush();\n if (assistantText.trim()) {\n options.stdout?.write(\"\\n\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"system\",\n message: assistantText.trim(),\n metadata: {\n role: \"assistant\",\n model,\n engine: engine.name,\n reasoningEffort,\n },\n });\n }\n const approvalPending = getPendingApproval(existing.id);\n if (approvalPending) {\n const message = `Agent-Native Code run paused for approval: ${approvalPending.reason}`;\n options.stdout?.write(`\\n${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApprovalId: approvalPending.id,\n },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n });\n }\n\n const pendingFollowUp = dequeueCodeAgentFollowUp(existing.id);\n if (pendingFollowUp) {\n const message =\n pendingFollowUp.mode === \"queued\"\n ? \"Agent-Native Code run completed; running queued follow-up.\"\n : \"Agent-Native Code run completed; applying steering follow-up.\";\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"follow-up\",\n followUpId: pendingFollowUp.id,\n followUpMode: pendingFollowUp.mode,\n },\n });\n if (pendingFollowUp.permissionMode) {\n updateCodeAgentRunRecord(existing.id, {\n permissionMode: pendingFollowUp.permissionMode,\n });\n }\n return executeCodeAgentRun({\n ...options,\n runId: existing.id,\n prompt: pendingFollowUp.prompt,\n attachments:\n pendingFollowUp.attachments ??\n userPromptAttachmentsForEvent(existing.id, pendingFollowUp.eventId),\n appendUserEvent: false,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run completed.\",\n metadata: { status: \"completed\", phase: \"complete\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"completed\",\n phase: \"complete\",\n needsApproval: false,\n progress: {\n label: \"Complete\",\n completed: 1,\n total: 1,\n percent: 100,\n },\n metadata: {\n executionCompletedAt: new Date().toISOString(),\n engine: engine.name,\n model,\n reasoningEffort,\n permissionMode,\n },\n });\n } catch (err) {\n await outputSmoother.flush().catch(() => undefined);\n const message = err instanceof Error ? err.message : String(err);\n options.stdout?.write(`\\nAgent-Native Code run failed: ${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Agent-Native Code run failed: ${message}`,\n metadata: { status: \"errored\", phase: \"error\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: controller.signal.aborted ? \"paused\" : \"errored\",\n phase: controller.signal.aborted ? \"paused\" : \"error\",\n progress: {\n label: controller.signal.aborted ? \"Paused\" : \"Error\",\n completed: 0,\n total: 1,\n failed: controller.signal.aborted ? 0 : 1,\n percent: 0,\n },\n metadata: {\n executionError: message,\n executionErroredAt: new Date().toISOString(),\n },\n });\n } finally {\n if (thinkingFlushTimer !== undefined) {\n clearTimeout(thinkingFlushTimer);\n flushThinkingEvent();\n }\n outputSmoother.cancel();\n options.signal?.removeEventListener(\"abort\", abortFromParent);\n await mcpManager?.stop().catch(() => undefined);\n void running;\n }\n}\n\nasync function executeCodexCliRun(options: {\n run: CodeAgentRunRecord;\n prompt: string;\n model?: string;\n permissionMode: CodeAgentPermissionMode;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}): Promise<CodeAgentRunRecord | null> {\n const cwd = options.run.cwd || process.cwd();\n const outputDir = fs.mkdtempSync(\n path.join(os.tmpdir(), \"agent-native-code-codex-\"),\n );\n const outputPath = path.join(outputDir, \"last-message.txt\");\n const model = normalizeCodexCliModel(options.model);\n const args = [\n \"exec\",\n \"--cd\",\n cwd,\n \"--color\",\n \"never\",\n \"--skip-git-repo-check\",\n \"--sandbox\",\n codexSandboxForPermissionMode(options.permissionMode),\n \"--ask-for-approval\",\n \"never\",\n \"--output-last-message\",\n outputPath,\n ];\n if (model) args.push(\"--model\", model);\n args.push(\"-\");\n\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message: \"Starting Codex CLI with local Codex authentication.\",\n metadata: {\n status: \"running\",\n phase: \"executing\",\n engine: CODEX_CLI_ENGINE_NAME,\n },\n });\n\n try {\n const result = await runCodexCliProcess({\n args,\n cwd,\n prompt: buildCodexCliPrompt(options.run, options.prompt),\n stdout: options.stdout,\n signal: options.signal,\n });\n\n if (result.exitCode !== 0) {\n const message =\n result.error ??\n result.stderr.trim() ??\n `Codex CLI exited with ${result.exitSignal ?? result.exitCode}.`;\n options.stdout?.write(`\\nCodex CLI run failed: ${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message: `Codex CLI run failed: ${message}`,\n metadata: {\n status: \"errored\",\n phase: \"error\",\n engine: CODEX_CLI_ENGINE_NAME,\n exitCode: result.exitCode,\n exitSignal: result.exitSignal,\n },\n });\n return updateCodeAgentRunRecord(options.run.id, {\n status: options.signal?.aborted ? \"paused\" : \"errored\",\n phase: options.signal?.aborted ? \"paused\" : \"error\",\n progress: {\n label: options.signal?.aborted ? \"Paused\" : \"Error\",\n completed: 0,\n total: 1,\n failed: options.signal?.aborted ? 0 : 1,\n percent: 0,\n },\n metadata: {\n executionError: message,\n executionErroredAt: new Date().toISOString(),\n engine: CODEX_CLI_ENGINE_NAME,\n model: model ?? \"codex-default\",\n },\n });\n }\n\n const finalMessage =\n readCodexLastMessage(outputPath) ||\n result.stdout.trim() ||\n \"Codex CLI run completed.\";\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"system\",\n message: finalMessage,\n metadata: {\n role: \"assistant\",\n engine: CODEX_CLI_ENGINE_NAME,\n model: model ?? \"codex-default\",\n },\n });\n\n const pendingFollowUp = dequeueCodeAgentFollowUp(options.run.id);\n if (pendingFollowUp) {\n const message =\n pendingFollowUp.mode === \"queued\"\n ? \"Codex CLI run completed; running queued follow-up.\"\n : \"Codex CLI run completed; applying steering follow-up.\";\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"follow-up\",\n followUpId: pendingFollowUp.id,\n followUpMode: pendingFollowUp.mode,\n engine: CODEX_CLI_ENGINE_NAME,\n },\n });\n if (pendingFollowUp.permissionMode) {\n updateCodeAgentRunRecord(options.run.id, {\n permissionMode: pendingFollowUp.permissionMode,\n });\n }\n return executeCodeAgentRun({\n runId: options.run.id,\n prompt: pendingFollowUp.prompt,\n attachments:\n pendingFollowUp.attachments ??\n userPromptAttachmentsForEvent(\n options.run.id,\n pendingFollowUp.eventId,\n ),\n appendUserEvent: false,\n stdout: options.stdout,\n signal: options.signal,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId: options.run.id,\n kind: \"status\",\n message: \"Codex CLI run completed.\",\n metadata: {\n status: \"completed\",\n phase: \"complete\",\n engine: CODEX_CLI_ENGINE_NAME,\n },\n });\n return updateCodeAgentRunRecord(options.run.id, {\n status: \"completed\",\n phase: \"complete\",\n needsApproval: false,\n progress: {\n label: \"Complete\",\n completed: 1,\n total: 1,\n percent: 100,\n },\n metadata: {\n executionCompletedAt: new Date().toISOString(),\n engine: CODEX_CLI_ENGINE_NAME,\n model: model ?? \"codex-default\",\n permissionMode: options.permissionMode,\n },\n });\n } finally {\n fs.rmSync(outputDir, { recursive: true, force: true });\n }\n}\n\nfunction runCodexCliProcess(options: {\n args: string[];\n cwd: string;\n prompt: string;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}): Promise<CodexCliProcessResult> {\n return new Promise((resolve) => {\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n const child = spawn(\"codex\", options.args, {\n cwd: options.cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: process.env,\n });\n const finish = (\n result: Omit<CodexCliProcessResult, \"stdout\" | \"stderr\">,\n ) => {\n if (settled) return;\n settled = true;\n options.signal?.removeEventListener(\"abort\", onAbort);\n resolve({ ...result, stdout, stderr });\n };\n const onAbort = () => {\n child.kill(\"SIGTERM\");\n };\n if (options.signal) {\n if (options.signal.aborted) onAbort();\n else options.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n child.stdout?.on(\"data\", (chunk) => {\n const text = chunk.toString();\n stdout += text;\n options.stdout?.write(text);\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", (err) => {\n finish({\n exitCode: 1,\n exitSignal: null,\n error:\n (err as NodeJS.ErrnoException).code === \"ENOENT\"\n ? \"Codex CLI was not found. Install Codex and run `codex login`.\"\n : err instanceof Error\n ? err.message\n : String(err),\n });\n });\n child.on(\"exit\", (exitCode, exitSignal) => {\n finish({ exitCode, exitSignal });\n });\n child.stdin?.end(options.prompt);\n });\n}\n\nfunction buildCodexCliPrompt(run: CodeAgentRunRecord, prompt: string): string {\n const permissionMode = run.permissionMode ?? \"full-auto\";\n const mode =\n permissionMode === \"read-only\" || permissionMode === \"ask-before-edit\"\n ? \"Plan\"\n : \"Auto\";\n const modeInstruction =\n mode === \"Plan\"\n ? \"Inspect and explain only. Do not edit files or run mutating commands.\"\n : \"Edit and verify as needed. Do not create, switch, reset, rebase, or stash git branches.\";\n return [\n `You are running from Agent-Native Code in ${run.cwd || process.cwd()}.`,\n \"Follow the repository AGENTS.md and any relevant skill instructions.\",\n `Run mode: ${mode} (${permissionMode}). ${modeInstruction}`,\n \"\",\n \"# User request\",\n prompt,\n ].join(\"\\n\");\n}\n\nfunction codexSandboxForPermissionMode(\n permissionMode: CodeAgentPermissionMode,\n): \"read-only\" | \"workspace-write\" {\n return permissionMode === \"read-only\" || permissionMode === \"ask-before-edit\"\n ? \"read-only\"\n : \"workspace-write\";\n}\n\nfunction normalizeCodexCliModel(model: string | undefined): string | undefined {\n const trimmed = model?.trim();\n if (!trimmed || trimmed === \"auto\" || trimmed === CODEX_CLI_ENGINE_NAME) {\n return undefined;\n }\n return trimmed;\n}\n\nfunction normalizeRequestedEngine(\n engine: string | undefined,\n): string | undefined {\n const trimmed = engine?.trim();\n if (!trimmed || trimmed === \"auto\") return undefined;\n return trimmed;\n}\n\nfunction readCodexLastMessage(filePath: string): string | null {\n try {\n const text = fs.readFileSync(filePath, \"utf-8\").trim();\n return text || null;\n } catch {\n return null;\n }\n}\n\nexport async function executeExistingCodeAgentRun(\n runId: string,\n options: Omit<ExecuteCodeAgentRunOptions, \"runId\"> = {},\n): Promise<CodeAgentRunRecord | null> {\n return executeCodeAgentRun({ ...options, runId, appendUserEvent: false });\n}\n\n/**\n * Add the pending approval command to the per-project allowlist, then approve\n * and auto-resume. Future occurrences of this exact command will bypass the\n * approval gate without prompting.\n */\nexport async function executeApproveAlwaysCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const approval = getPendingApproval(runId);\n if (approval?.command) {\n addCodeAgentCommandToAllowlist(approval.command);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Command added to allowlist: ${approval.command}`,\n metadata: { type: \"allowlist-added\", command: approval.command },\n });\n }\n return executePendingCodeAgentApproval(runId, options);\n}\n\nexport async function executePendingCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const record = getCodeAgentRunRecord(runId);\n if (!record) return null;\n const approval = getPendingApproval(runId);\n if (!approval) {\n options.stdout?.write(\"No pending approval was found for this run.\\n\");\n return record;\n }\n\n const permission = classifyCodeAgentCommandPermission(approval.command);\n if (permission.kind === \"forbidden\") {\n const message = `Approval cannot run forbidden command: ${permission.reason}`;\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n approvalId: approval.id,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n needsApproval: true,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approved command ${approval.id}; running now.`,\n metadata: {\n status: \"running\",\n phase: \"approval-running\",\n approvalId: approval.id,\n command: approval.command,\n },\n });\n const result = await runCodingCommand(\n approval.command,\n record.cwd || process.cwd(),\n DEFAULT_COMMAND_TIMEOUT_MS,\n );\n const summary = truncateCodingOutput(\n [\n `Approved command finished with exit code ${result.code}.`,\n result.timedOut ? \"Timed out: true\" : \"\",\n result.stdout ? `stdout:\\n${result.stdout}` : \"\",\n result.stderr ? `stderr:\\n${result.stderr}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n MAX_TOOL_OUTPUT_CHARS,\n );\n options.stdout?.write(`${summary}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: summary,\n metadata: {\n status: \"running\",\n phase: \"approval-complete\",\n approvalId: approval.id,\n exitCode: result.code,\n timedOut: result.timedOut,\n },\n });\n // Clear the pending approval and immediately auto-resume so the model sees\n // the command result and can continue — no manual \"Resume\" click needed.\n updateCodeAgentRunRecord(runId, {\n status: \"running\",\n phase: \"approval-resuming\",\n needsApproval: false,\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n completedAt: new Date().toISOString(),\n exitCode: result.code,\n },\n },\n });\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: \"Resuming run after approval.\",\n metadata: { status: \"running\", phase: \"approval-resuming\" },\n });\n return executeExistingCodeAgentRun(runId, { stdout: options.stdout });\n}\n\n/**\n * Deny a pending approval: record the denial, feed it back to the model as a\n * \"command denied by user\" result, and immediately resume the run so the model\n * can adapt its plan without leaving the run dangling.\n */\nexport async function executeDenyCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const record = getCodeAgentRunRecord(runId);\n if (!record) return null;\n const approval = getPendingApproval(runId);\n if (!approval) {\n options.stdout?.write(\"No pending approval was found for this run.\\n\");\n return record;\n }\n\n const message = `User denied command: ${approval.command} (${approval.reason})`;\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"approval-denied\",\n approvalId: approval.id,\n command: approval.command,\n },\n });\n updateCodeAgentRunRecord(runId, {\n status: \"running\",\n phase: \"approval-denied-resuming\",\n needsApproval: false,\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n deniedAt: new Date().toISOString(),\n denied: true,\n },\n },\n });\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: \"Resuming run after denial — model will adapt its plan.\",\n metadata: { status: \"running\", phase: \"approval-denied-resuming\" },\n });\n return executeExistingCodeAgentRun(runId, { stdout: options.stdout });\n}\n\nfunction latestUserPrompt(runId: string): string {\n const events = listCodeAgentTranscriptEvents(runId);\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i];\n if (event.kind === \"user\" && event.message.trim()) return event.message;\n }\n return \"\";\n}\n\nfunction latestUserPromptAttachments(\n runId: string,\n prompt: string,\n): AgentPromptAttachment[] {\n const events = listCodeAgentTranscriptEvents(runId);\n const normalizedPrompt = prompt.trim();\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i];\n if (event.kind !== \"user\" || !event.message.trim()) continue;\n if (\n !normalizedPrompt ||\n event.message.trim() === normalizedPrompt ||\n i === events.length - 1\n ) {\n return promptAttachmentsFromMetadata(event.metadata?.attachments);\n }\n }\n return [];\n}\n\nfunction userPromptAttachmentsForEvent(\n runId: string,\n eventId: string | undefined,\n): AgentPromptAttachment[] {\n if (!eventId) return [];\n const event = listCodeAgentTranscriptEvents(runId).find(\n (item) => item.id === eventId && item.kind === \"user\",\n );\n return promptAttachmentsFromMetadata(event?.metadata?.attachments);\n}\n\nfunction promptAttachmentsFromMetadata(\n value: unknown,\n): AgentPromptAttachment[] {\n if (!Array.isArray(value)) return [];\n return value\n .filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === \"object\" && !Array.isArray(item)),\n )\n .map((item) => ({\n name: typeof item.name === \"string\" && item.name ? item.name : \"file\",\n ...(typeof item.type === \"string\" ? { type: item.type } : {}),\n ...(typeof item.size === \"number\" ? { size: item.size } : {}),\n ...(typeof item.text === \"string\" ? { text: item.text } : {}),\n ...(typeof item.dataUrl === \"string\" ? { dataUrl: item.dataUrl } : {}),\n }));\n}\n\nfunction metadataString(\n run: CodeAgentRunRecord,\n key: string,\n): string | undefined {\n const value = run.metadata?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nasync function startCodeAgentMcpManager(\n runId: string,\n): Promise<McpClientManager | null> {\n const config = await buildMergedConfig().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools unavailable: ${message}`,\n metadata: { type: \"mcp-config-error\" },\n });\n return null;\n });\n if (!config || Object.keys(config.servers ?? {}).length === 0) return null;\n\n const manager = new McpClientManager(config);\n await manager.start().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools failed to start: ${message}`,\n metadata: { type: \"mcp-start-error\" },\n });\n });\n const status = manager.getStatus();\n if (status.totalTools === 0) {\n await manager.stop().catch(() => undefined);\n return null;\n }\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Connected ${status.totalTools} MCP tool${status.totalTools === 1 ? \"\" : \"s\"} for this run.`,\n metadata: {\n type: \"mcp-tools-connected\",\n servers: status.connectedServers,\n toolCount: status.totalTools,\n },\n });\n return manager;\n}\n\nfunction runWithOptionalCodeAgentRequestContext<T>(\n run: CodeAgentRunRecord,\n fn: () => T | Promise<T>,\n): T | Promise<T> {\n const userEmail =\n metadataString(run, \"ownerEmail\") ??\n metadataString(run, \"userEmail\") ??\n process.env.AGENT_USER_EMAIL;\n const orgId = metadataString(run, \"orgId\") ?? process.env.AGENT_ORG_ID;\n if (!userEmail && !orgId) return fn();\n return runWithRequestContext({ userEmail, orgId }, fn);\n}\n\nfunction metadataReasoningEffort(\n run: CodeAgentRunRecord,\n): ReasoningEffort | undefined {\n const value = run.metadata?.reasoningEffort ?? run.metadata?.effort;\n return isReasoningEffort(value) && value !== \"auto\" ? value : undefined;\n}\n\nasync function resolveExecutorEngine(\n requestedEngine?: string,\n): Promise<AgentEngine | null> {\n const fakeText = process.env.AGENT_NATIVE_CODE_AGENT_FAKE_RESPONSE;\n if (fakeText !== undefined) {\n return createFakeCodeAgentEngine(fakeText || \"Done.\");\n }\n registerBuiltinEngines();\n if (!hasAnyProviderCredential()) return null;\n return resolveEngine({\n engineOption: requestedEngine ?? process.env.AGENT_ENGINE,\n });\n}\n\nfunction hasAnyProviderCredential(): boolean {\n if (process.env.AGENT_ENGINE) return true;\n if (PROVIDER_ENV_VARS.some((key) => Boolean(process.env[key]))) return true;\n return Boolean(\n process.env.BUILDER_PRIVATE_KEY && process.env.BUILDER_PUBLIC_KEY,\n );\n}\n\nfunction createFakeCodeAgentEngine(text: string): AgentEngine {\n return {\n name: \"fake-code-agent\",\n label: \"Fake Agent-Native Code\",\n defaultModel: \"fake-code-agent\",\n supportedModels: [\"fake-code-agent\"],\n capabilities: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: false,\n },\n async *stream(_opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n yield { type: \"text-delta\", text };\n yield {\n type: \"assistant-content\",\n parts: [{ type: \"text\", text }],\n };\n yield {\n type: \"usage\",\n inputTokens: 1,\n outputTokens: 1,\n cacheReadTokens: 0,\n cacheWriteTokens: 0,\n };\n yield { type: \"stop\", reason: \"end_turn\" };\n },\n };\n}\n\nconst SUPPORTED_IMAGE_MEDIA_TYPES = new Set([\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"image/gif\",\n \"image/webp\",\n]);\n\nfunction buildCodeAgentMessages(\n run: CodeAgentRunRecord,\n prompt: string,\n attachments?: AgentPromptAttachment[],\n): EngineMessage[] {\n const allEvents = listCodeAgentTranscriptEvents(run.id);\n\n // Split events into an \"older\" prefix (summarised) and a \"recent\" tail\n // (reconstructed as native structured messages).\n const splitAt = Math.max(\n 0,\n allEvents.length - STRUCTURED_HISTORY_RECENT_EVENTS,\n );\n const olderEvents = allEvents.slice(0, splitAt);\n const recentEvents = allEvents.slice(splitAt);\n\n // Build a compact text preamble from any events that pre-date the recent\n // window. Reuses the old flat-text approach so the model still has broad\n // context without paying for full token cost on every old tool result.\n let preamble = \"\";\n if (olderEvents.length > 0) {\n const summaryLines = olderEvents\n .filter(\n (e) =>\n e.kind === \"user\" ||\n (e.kind === \"system\" && e.metadata?.role === \"assistant\") ||\n (e.kind === \"status\" &&\n (e.metadata?.type === \"tool_done\" ||\n e.metadata?.role === \"assistant\")),\n )\n .map((e) => {\n if (e.kind === \"user\") return `User: ${e.message}`;\n if (e.metadata?.role === \"assistant\") return `Assistant: ${e.message}`;\n if (e.metadata?.type === \"tool_done\") {\n const tool = e.metadata?.tool;\n const result = e.metadata?.result;\n const resultText =\n typeof result === \"string\"\n ? truncateCodingOutput(result, 500)\n : result != null\n ? truncateCodingOutput(String(result), 500)\n : \"\";\n return tool ? `Tool[${tool}]: ${resultText}` : `Tool: ${resultText}`;\n }\n return null;\n })\n .filter((line): line is string => line !== null);\n if (summaryLines.length > 0) {\n preamble = `Earlier conversation summary:\\n${summaryLines.join(\"\\n\")}`;\n }\n }\n\n // Reconstruct the recent events as native EngineMessage objects.\n // We build up a sequence of user/assistant messages, pairing tool-call\n // events (from tool_start metadata) with their matching tool-result events\n // (from tool_done metadata), and accumulating assistant text from system\n // events with role=assistant.\n const structuredMessages = buildStructuredMessagesFromEvents(recentEvents);\n\n // Separate image attachments from text attachments. Images are passed as\n // proper EngineImagePart entries rather than inlined base64 text (which\n // would consume ~700K tokens per megabyte of image data).\n const imageParts: import(\"../agent/engine/types.js\").EngineImagePart[] = [];\n const unsupportedImageNotes: string[] = [];\n\n for (const att of attachments ?? []) {\n if (!att.dataUrl) continue;\n const match = att.dataUrl.match(/^data:(image\\/[^;]+);base64,(.+)$/);\n if (!match) continue;\n const mime = match[1].toLowerCase();\n if (SUPPORTED_IMAGE_MEDIA_TYPES.has(mime)) {\n imageParts.push({\n type: \"image\",\n data: match[2],\n mediaType:\n mime as import(\"../agent/engine/types.js\").EngineImagePart[\"mediaType\"],\n });\n } else {\n // Unsupported format — inject a note so the model understands what happened.\n const label = att.name ? `\"${att.name}\"` : \"An image\";\n unsupportedImageNotes.push(\n `[${label} could not be processed — unsupported image format (${mime}). ` +\n `Only JPEG, PNG, GIF, and WebP are supported.]`,\n );\n }\n }\n\n const notesBlock =\n unsupportedImageNotes.length > 0\n ? `\\n\\n${unsupportedImageNotes.join(\"\\n\")}`\n : \"\";\n\n // The current prompt (plus optional preamble) becomes the final user message.\n const promptText = [preamble, prompt, notesBlock]\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n const promptContent: import(\"../agent/engine/types.js\").EngineContentPart[] =\n [...imageParts, { type: \"text\", text: promptText }];\n\n // If there are structured messages from the recent window and the last one\n // is a user message that already contains the current prompt (happens when\n // appendUserEvent added a \"user\" event that got included), de-duplicate by\n // using the structured messages as-is but replacing the last user message's\n // content with the enriched content (images + prompt).\n if (structuredMessages.length > 0) {\n const lastMsg = structuredMessages[structuredMessages.length - 1];\n if (lastMsg.role === \"user\") {\n // Replace last user message content with the enriched prompt content.\n structuredMessages[structuredMessages.length - 1] = {\n role: \"user\",\n content: promptContent,\n };\n return structuredMessages;\n }\n // Last message is assistant — append a new user message.\n return [...structuredMessages, { role: \"user\", content: promptContent }];\n }\n\n return [{ role: \"user\", content: promptContent }];\n}\n\n/**\n * Reconstruct a sequence of EngineMessage objects from transcript events,\n * preserving the native tool-call / tool-result pair structure that models\n * expect when replaying multi-turn conversations.\n *\n * Event mapping:\n * kind=user → user message with text content\n * kind=system, role=assistant → assistant message with text content\n * kind=status, type=tool_start → assistant message with a tool-call part\n * (grouped with any preceding assistant text)\n * kind=status, type=tool_done → user message with a tool-result part\n * kind=status, type=thinking → excluded (ephemeral reasoning)\n * everything else → excluded from model history\n *\n * Each tool_start generates a synthetic toolCallId derived from the event id so\n * that the matching tool_done can reference it. Old events that lack tool/input\n * metadata fall back gracefully to text content.\n */\n/** @internal exported for unit tests */\nexport function buildStructuredMessagesFromEvents(\n events: readonly import(\"./code-agent-runs.js\").CodeAgentTranscriptEvent[],\n): EngineMessage[] {\n // We accumulate into a flat list and then merge adjacent same-role messages.\n type PendingMessage =\n | {\n role: \"user\";\n content: import(\"../agent/engine/types.js\").EngineContentPart[];\n }\n | {\n role: \"assistant\";\n content: import(\"../agent/engine/types.js\").EngineContentPart[];\n };\n\n const pending: PendingMessage[] = [];\n\n // Track in-flight tool-call IDs keyed by event id so tool_done can\n // reference the corresponding call.\n const toolCallIdByEventOrder = new Map<string, string>();\n\n for (const event of events) {\n // Exclude thinking — ephemeral reasoning, never replayed to model.\n if (event.kind === \"status\" && event.metadata?.type === \"thinking\") {\n continue;\n }\n\n if (event.kind === \"user\") {\n const text = event.message.trim();\n if (!text) continue;\n appendOrMerge(pending, \"user\", { type: \"text\", text });\n continue;\n }\n\n // Assistant text (persisted after a turn completes).\n if (event.kind === \"system\" && event.metadata?.role === \"assistant\") {\n const text = event.message.trim();\n if (!text) continue;\n appendOrMerge(pending, \"assistant\", { type: \"text\", text });\n continue;\n }\n\n // Tool call start — emit an assistant tool-call part.\n if (event.kind === \"status\" && event.metadata?.type === \"tool_start\") {\n const tool =\n typeof event.metadata?.tool === \"string\" && event.metadata.tool\n ? event.metadata.tool\n : null;\n if (!tool) continue;\n\n // Generate a stable ID from the event id so tool_done can reference it.\n const toolCallId = `tc-${event.id}`;\n toolCallIdByEventOrder.set(event.id, toolCallId);\n\n const input: unknown =\n event.metadata?.input != null ? event.metadata.input : {};\n\n appendOrMerge(pending, \"assistant\", {\n type: \"tool-call\",\n id: toolCallId,\n name: tool,\n input,\n });\n continue;\n }\n\n // Tool result — emit a user tool-result part paired with the last\n // unmatched tool_start for the same tool name.\n if (event.kind === \"status\" && event.metadata?.type === \"tool_done\") {\n const tool =\n typeof event.metadata?.tool === \"string\" && event.metadata.tool\n ? event.metadata.tool\n : null;\n if (!tool) continue;\n\n // Find the most recent tool_start event id for this tool.\n const matchedCallId = findMatchingToolCallId(\n toolCallIdByEventOrder,\n events,\n event,\n tool,\n );\n\n const rawResult = event.metadata?.result;\n const resultText = truncateCodingOutput(\n typeof rawResult === \"string\"\n ? rawResult\n : rawResult != null\n ? String(rawResult)\n : \"(no output)\",\n STRUCTURED_HISTORY_RESULT_CAP,\n );\n\n if (matchedCallId) {\n const toolInput =\n event.metadata?.input != null\n ? safeJsonStringify(event.metadata.input)\n : \"{}\";\n appendOrMerge(pending, \"user\", {\n type: \"tool-result\",\n toolCallId: matchedCallId,\n toolName: tool,\n toolInput,\n content: resultText,\n });\n } else {\n // Orphaned tool result (no matching call in the recent window) — fall\n // back to plain text so the model still sees the output.\n appendOrMerge(pending, \"user\", {\n type: \"text\",\n text: `[Tool result for ${tool}]: ${resultText}`,\n });\n }\n continue;\n }\n }\n\n return pending;\n}\n\n/**\n * Append a content part to the last message if it has the same role, or\n * start a new message otherwise.\n */\nfunction appendOrMerge(\n pending: Array<{\n role: \"user\" | \"assistant\";\n content: import(\"../agent/engine/types.js\").EngineContentPart[];\n }>,\n role: \"user\" | \"assistant\",\n part: import(\"../agent/engine/types.js\").EngineContentPart,\n): void {\n const last = pending[pending.length - 1];\n if (last && last.role === role) {\n last.content.push(part);\n } else {\n pending.push({ role, content: [part] });\n }\n}\n\n/**\n * Find the toolCallId generated for the most recent tool_start event that\n * matches the given tool name and precedes the current tool_done event.\n * Returns null if no match exists in the recent window.\n */\nfunction findMatchingToolCallId(\n toolCallIdByEventOrder: Map<string, string>,\n events: readonly import(\"./code-agent-runs.js\").CodeAgentTranscriptEvent[],\n doneEvent: import(\"./code-agent-runs.js\").CodeAgentTranscriptEvent,\n toolName: string,\n): string | null {\n // Walk backwards from doneEvent's position to find the nearest unmatched start.\n const doneIndex = events.indexOf(doneEvent);\n for (let i = doneIndex - 1; i >= 0; i--) {\n const e = events[i];\n if (\n e.kind === \"status\" &&\n e.metadata?.type === \"tool_start\" &&\n e.metadata?.tool === toolName\n ) {\n const id = toolCallIdByEventOrder.get(e.id);\n if (id) {\n // Consume it so a second done for the same tool gets the next start.\n toolCallIdByEventOrder.delete(e.id);\n return id;\n }\n }\n }\n return null;\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value) ?? \"{}\";\n } catch {\n return \"{}\";\n }\n}\n\n/**\n * Maximum character length for inlined AGENTS.md content in the system prompt.\n * Content beyond this cap is truncated with a note so the model knows more exists.\n */\nconst AGENTS_MD_INLINE_CAP = 16_000;\n\n/**\n * Build the coding agent system prompt, inlining AGENTS.md (or CLAUDE.md as\n * fallback) and a skills index from .agents/skills/ into the prompt so the\n * coding agent has the same repo-context awareness that Claude Code / Codex\n * provide when running locally.\n *\n * The bundle is read synchronously from the filesystem via `readAgentsBundleFromFs`\n * (same function used by the Vite build-time plugin) so there is no async I/O\n * on the hot path — the call is cheap and the result is used once per run leg.\n */\n/** @internal exported for unit tests */\nexport async function buildCodeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n): Promise<string> {\n const bundle = readAgentsBundleFromFs(cwd);\n\n // If the bundle has no AGENTS.md, try CLAUDE.md as a fallback — many repos\n // use that name for agent instructions (e.g. Claude Code projects).\n let agentsMdContent = bundle.agentsMd;\n if (!agentsMdContent.trim()) {\n try {\n const fs = await import(\"node:fs\");\n const path = await import(\"node:path\");\n const claudeMdPath = path.join(cwd, \"CLAUDE.md\");\n if (fs.existsSync(claudeMdPath)) {\n agentsMdContent = fs.readFileSync(claudeMdPath, \"utf-8\");\n }\n } catch {\n // Not readable — skip\n }\n }\n\n const repoInstructionsBlock = buildRepoInstructionsBlock(agentsMdContent);\n const skillsBlock = generateSkillsPromptBlock(bundle);\n\n return codeAgentSystemPrompt(\n cwd,\n permissionMode,\n repoInstructionsBlock,\n skillsBlock,\n );\n}\n\n/** @internal exported for unit tests */\nexport function buildRepoInstructionsBlock(agentsMdContent: string): string {\n if (!agentsMdContent.trim()) return \"\";\n\n const needsTruncation = agentsMdContent.length > AGENTS_MD_INLINE_CAP;\n const truncated = needsTruncation\n ? agentsMdContent.slice(0, AGENTS_MD_INLINE_CAP)\n : agentsMdContent;\n const truncationNote = needsTruncation\n ? `\\n\\n[Note: AGENTS.md was truncated to ${AGENTS_MD_INLINE_CAP} characters. Read the full file for complete instructions.]`\n : \"\";\n\n return `## Repository instructions\n\n${truncated}${truncationNote}`;\n}\n\n/** @internal exported for unit tests */\nexport function codeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n repoInstructionsBlock = \"\",\n skillsBlock = \"\",\n): string {\n const mode = permissionMode === \"read-only\" ? \"Plan\" : \"Auto\";\n const repoSection = repoInstructionsBlock\n ? `\\n\\n${repoInstructionsBlock}`\n : \"\";\n const skillsSection = skillsBlock ? `\\n\\n${skillsBlock}` : \"\";\n return `You are Agent-Native Code, a coding agent running in ${cwd}. You and the user share one workspace, and your job is to collaborate with them until their goal is genuinely handled.\n\n# General\n\nYou bring a senior engineer's judgment to the work, but you let it arrive through attention rather than premature certainty. Read the codebase first, resist easy assumptions, and let the shape of the existing system teach you how to move.\n\n- When you search for text or files, reach first for \\`rg\\` or \\`rg --files\\`; they are much faster than \\`grep\\` or \\`find\\`. If \\`rg\\` is unavailable, use the next best tool without fuss.\n- Parallelize independent read-only work (file reads, searches) so you gather context quickly. Keep mutating steps ordered.\n- Read relevant files before editing them. Do not edit a file you have not actually read.\n\n# Engineering judgment\n\nWhen the user leaves implementation details open, choose conservatively and in sympathy with the codebase already in front of you:\n\n- Prefer the repo's existing patterns, frameworks, and local helper APIs over inventing a new abstraction.\n- For structured data, use structured APIs or parsers instead of ad hoc string manipulation when the toolchain gives you a reasonable option.\n- Keep edits closely scoped to what the request and surrounding code imply. Leave unrelated refactors and metadata churn alone unless they are truly needed to finish safely.\n- Add an abstraction only when it removes real complexity, reduces meaningful duplication, or clearly matches an established local pattern.\n- Let test coverage scale with risk and blast radius: focused for narrow changes, broader when you touch shared behavior or cross-module contracts.\n\n# Run mode\n\nCurrent run mode: ${mode} mode (${permissionMode}).\n- In Plan mode, inspect and explain only — do not edit files or run mutating commands.\n- In Auto mode, edit files and run ordinary project commands without pausing. Pause only for genuinely destructive operations: recursive deletes, package publishing, privileged commands, destructive database operations, or forbidden git branch/reset/stash/rebase operations.\n\n# Editing constraints\n\n- Use the shared coding tools: \\`bash\\` for search/list/test/build/git-status commands, \\`read\\` for file reads, \\`edit\\` for exact-match replacements, and \\`write\\` only for new files or an intentional full rewrite. Prefer \\`edit\\` over \\`write\\` for existing files.\n- Default to ASCII when editing or creating files; introduce non-ASCII only when the file already uses it or there is a clear reason.\n- Add succinct comments only where the code is not self-explanatory. Avoid empty narration like \"assign the value\"; a short orienting comment before a complex block is fine, used sparingly.\n- You may be in a dirty git worktree. NEVER revert or overwrite changes you did not make — assume they came from the user or another concurrent agent. If unrelated changes exist, ignore them; if they touch your task, work *with* them rather than undoing them. Only stop and ask if they make the task impossible.\n- If you notice unexpected changes appearing mid-task that you did not make, STOP and ask the user how to proceed rather than guessing.\n- Do not create, switch, delete, reset, rebase, or stash git branches. Never run destructive git commands (\\`git reset --hard\\`, \\`git checkout --\\`, \\`git clean\\`) unless the user explicitly asked for that exact operation.\n\n# Autonomy and verification\n\n- Stay with the work until the task is handled end to end within this turn whenever feasible. Don't stop at analysis or a proposal — implement the fix, and work through blockers yourself before handing them back. The exception is Plan mode, where you propose only.\n- Done means verified, not generated. After code changes (not docs-only), run the repo's checks before reporting success: \\`pnpm run prep\\` (format + typecheck + test + guards), or a focused subset like \\`pnpm typecheck\\` or a single package's tests for a small change. Fix all errors before you call it done.\n- Do not claim a change works, tests pass, or a build succeeds unless you actually ran it and saw the result. If you could not verify something, say exactly what is unverified and why.\n\n# Tools beyond the basics\n\n- Use \\`tool-search\\` when you need a capability that may come from MCP, including browser automation or computer control.\n- Prefer Playwright MCP for deterministic browser testing; prefer Chrome DevTools MCP when the user needs their live logged-in Chrome session.\n- Only use computer-control MCP tools when they are explicitly available and the request warrants controlling the local computer.\n\n# Final answer\n\n- Keep it concise and high-signal — plain, idiomatic engineering prose, not a mechanical report. Lead with the outcome. For a small change, one or two short paragraphs plus a verification line is usually right; reserve bullet lists for genuinely multi-part results.\n- Reference files as clickable paths (e.g. \\`packages/core/src/foo.ts\\`), with a line number when it helps. Do not paste large file contents back — the user shares this machine and can open them.\n- State what you changed, and show evidence you verified it: name the check you ran (e.g. \\`pnpm typecheck\\`) and its key result, not just a claim that it passed. If you could not run something, say so plainly.\n- No emojis or em dashes unless the user used them first.\n- AGENTS.md files take precedence over these defaults on conflict. More deeply nested AGENTS.md files take precedence over shallower ones — check for them in directories you work in.${repoSection}${skillsSection}`;\n}\n\nfunction createLocalCodeAgentActions(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n runId: string,\n onToolMetadata?: (\n toolName: string,\n phase: \"start\" | \"done\",\n meta: StructuredToolMetadata,\n ) => void,\n onBashOutputChunk?: (chunk: string) => void,\n): Record<string, ActionEntry> {\n const actions = createCodingToolRegistry({\n cwd,\n restrictToCwd: true,\n commandTimeoutMs: DEFAULT_COMMAND_TIMEOUT_MS,\n maxOutputChars: MAX_TOOL_OUTPUT_CHARS,\n maxFileReadChars: MAX_FILE_READ_CHARS,\n canWrite: (toolName) => permissionErrorForWrite(permissionMode, toolName),\n onToolMetadata,\n onBashOutputChunk,\n beforeBash: ({ command }) => {\n const permission = classifyCodeAgentCommandPermission(command);\n if (permission.kind === \"forbidden\") {\n return `Error: command is blocked by Agent-Native Code policy: ${permission.reason}`;\n }\n if (permission.kind !== \"read\") {\n const permissionError = permissionErrorForWrite(permissionMode, \"bash\");\n if (permissionError) return permissionError;\n }\n if (permission.kind === \"approval-required\") {\n // Skip the approval gate when the user has allowlisted this command.\n if (isCodeAgentCommandAllowed(command)) return null;\n const approval = requestCodeAgentApproval(runId, {\n tool: \"bash\",\n command,\n reason: permission.reason,\n permissionMode,\n });\n return [\n `Approval required before running this command: ${permission.reason}.`,\n `Approval id: ${approval.id}`,\n `Command: ${command}`,\n \"The run is paused; approve from the Agent-Native Code UI/CLI if this command is intentional.\",\n ].join(\"\\n\");\n }\n return null;\n },\n });\n if (permissionMode === \"read-only\") {\n return {\n bash: actions.bash,\n read: actions.read,\n };\n }\n return actions;\n}\n\nexport type CodeAgentCommandPermission =\n | { kind: \"read\" }\n | { kind: \"write\" }\n | { kind: \"approval-required\"; reason: string }\n | { kind: \"forbidden\"; reason: string };\n\nexport function classifyCodeAgentCommandPermission(\n command: string,\n): CodeAgentCommandPermission {\n const normalized = command.trim().toLowerCase();\n if (!normalized) return { kind: \"read\" };\n\n const blockedPatterns: Array<[RegExp, string]> = [\n [\n /\\bgit\\s+(checkout|switch|reset|rebase|stash|clean|worktree)\\b/,\n \"forbidden git branch/reset/stash/rebase operation\",\n ],\n [\n /\\bgit\\s+branch\\b(?!\\s+--show-current\\b)/,\n \"forbidden git branch operation\",\n ],\n [/\\bdrizzle-kit\\s+push\\b/, \"drizzle-kit push is not allowed\"],\n ];\n for (const [pattern, reason] of blockedPatterns) {\n if (pattern.test(normalized)) return { kind: \"forbidden\", reason };\n }\n\n const approvalPatterns: Array<[RegExp, string]> = [\n [/\\brm\\s+-rf\\b/, \"destructive recursive delete\"],\n [/\\bsudo\\b/, \"privileged command\"],\n [/\\bkill\\s+-9\\b/, \"force-kill command\"],\n [/\\bcurl\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\b(wget|fetch)\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\bnpm\\s+publish\\b/, \"package publish\"],\n [/\\bpnpm\\s+publish\\b/, \"package publish\"],\n [/\\btruncate\\b/, \"destructive data command\"],\n [/\\bdrop\\s+(table|column|database)\\b/, \"destructive database command\"],\n [/\\bdelete\\s+from\\b(?![\\s\\S]*\\bwhere\\b)/, \"unscoped delete command\"],\n ];\n for (const [pattern, reason] of approvalPatterns) {\n if (pattern.test(normalized)) {\n return { kind: \"approval-required\", reason };\n }\n }\n\n if (isReadOnlyShellCommand(command)) {\n return { kind: \"read\" };\n }\n\n const writePatterns = [\n /(^|[^>])>(?!>)/,\n />>/,\n /\\btee\\b/,\n /\\bapply_patch\\b/,\n /\\b(write|touch|mkdir|cp|mv|rm|chmod|chown)\\b/,\n /\\bpnpm\\s+(add|install|remove|dlx)\\b/,\n /\\bnpm\\s+(install|i|add|remove|uninstall)\\b/,\n ];\n if (writePatterns.some((pattern) => pattern.test(normalized))) {\n return { kind: \"write\" };\n }\n\n return { kind: \"write\" };\n}\n\nfunction permissionErrorForWrite(\n permissionMode: CodeAgentPermissionMode,\n toolName: string,\n): string | null {\n if (\n permissionMode === \"ask-before-edit\" ||\n permissionMode === \"auto-edit\" ||\n permissionMode === \"full-auto\"\n ) {\n return null;\n }\n if (permissionMode === \"read-only\") {\n return `Error: ${toolName} is unavailable in read-only mode.`;\n }\n return `Error: ${toolName} is blocked by the current run mode.`;\n}\n\nfunction requestCodeAgentApproval(\n runId: string,\n input: Omit<PendingCodeAgentApproval, \"id\" | \"requestedAt\">,\n): PendingCodeAgentApproval {\n const requestedAt = new Date().toISOString();\n const approval: PendingCodeAgentApproval = {\n id: `approval-${requestedAt.replace(/\\D/g, \"\").slice(0, 14)}`,\n requestedAt,\n ...input,\n };\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approval required: ${approval.reason}`,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApproval: approval,\n },\n });\n updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n metadata: {\n pendingApproval: approval,\n },\n });\n return approval;\n}\n\nfunction getPendingApproval(runId: string): PendingCodeAgentApproval | null {\n const record = getCodeAgentRunRecord(runId);\n const approval = record?.metadata?.pendingApproval;\n if (!approval || typeof approval !== \"object\") return null;\n const candidate = approval as Record<string, unknown>;\n const tool =\n candidate.tool === \"bash\" || candidate.tool === \"run_command\"\n ? candidate.tool\n : null;\n if (\n !tool ||\n typeof candidate.command !== \"string\" ||\n typeof candidate.reason !== \"string\" ||\n typeof candidate.id !== \"string\" ||\n typeof candidate.requestedAt !== \"string\"\n ) {\n return null;\n }\n return {\n id: candidate.id,\n tool,\n command: candidate.command,\n reason: candidate.reason,\n requestedAt: candidate.requestedAt,\n permissionMode:\n candidate.permissionMode === \"read-only\" ||\n candidate.permissionMode === \"ask-before-edit\" ||\n candidate.permissionMode === \"auto-edit\" ||\n candidate.permissionMode === \"full-auto\"\n ? candidate.permissionMode\n : \"full-auto\",\n };\n}\n\n// --------------- Token usage accumulator ---------------\n\ninterface StoredTokenUsage {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n}\n\nfunction accumulateTokenUsage(\n existing: unknown,\n next: AgentLoopUsage,\n): StoredTokenUsage {\n const prev =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? (existing as Partial<StoredTokenUsage>)\n : {};\n return {\n inputTokens: (prev.inputTokens ?? 0) + next.inputTokens,\n outputTokens: (prev.outputTokens ?? 0) + next.outputTokens,\n cacheReadTokens: (prev.cacheReadTokens ?? 0) + next.cacheReadTokens,\n cacheWriteTokens: (prev.cacheWriteTokens ?? 0) + next.cacheWriteTokens,\n };\n}\n"]}
@@ -468,7 +468,7 @@ async function createStandaloneApp(name, opts, clack) {
468
468
  template = normalizeTemplateName(template);
469
469
  const s = clack.spinner();
470
470
  s.start(template === "headless"
471
- ? "Scaffolding the headless action app..."
471
+ ? "Scaffolding the headless agent app..."
472
472
  : `Downloading the ${template} template from GitHub...`);
473
473
  try {
474
474
  await scaffoldAppTemplate(targetDir, template);