@agent-native/core 0.16.2 → 0.16.3

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 (120) hide show
  1. package/README.md +21 -5
  2. package/dist/cli/code-agent-executor.js +1 -1
  3. package/dist/cli/code-agent-executor.js.map +1 -1
  4. package/dist/cli/code.d.ts.map +1 -1
  5. package/dist/cli/code.js +29 -4
  6. package/dist/cli/code.js.map +1 -1
  7. package/dist/client/AgentPanel.d.ts.map +1 -1
  8. package/dist/client/AgentPanel.js +9 -1
  9. package/dist/client/AgentPanel.js.map +1 -1
  10. package/dist/client/AssistantChat.js +2 -2
  11. package/dist/client/AssistantChat.js.map +1 -1
  12. package/dist/client/ConnectBuilderCard.js +1 -1
  13. package/dist/client/ConnectBuilderCard.js.map +1 -1
  14. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  15. package/dist/client/components/CodeRequiredDialog.js +3 -1
  16. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  17. package/dist/client/composer/AgentComposerFrame.d.ts +3 -1
  18. package/dist/client/composer/AgentComposerFrame.d.ts.map +1 -1
  19. package/dist/client/composer/AgentComposerFrame.js +3 -3
  20. package/dist/client/composer/AgentComposerFrame.js.map +1 -1
  21. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  22. package/dist/client/composer/ComposerPlusMenu.js +2 -7
  23. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  24. package/dist/client/composer/PromptComposer.d.ts +4 -1
  25. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  26. package/dist/client/composer/PromptComposer.js +3 -3
  27. package/dist/client/composer/PromptComposer.js.map +1 -1
  28. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  29. package/dist/client/composer/TiptapComposer.js +13 -3
  30. package/dist/client/composer/TiptapComposer.js.map +1 -1
  31. package/dist/client/onboarding/OnboardingPanel.js +1 -1
  32. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  33. package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -1
  34. package/dist/client/settings/BackgroundAgentSection.js +9 -2
  35. package/dist/client/settings/BackgroundAgentSection.js.map +1 -1
  36. package/dist/client/settings/BrowserSection.d.ts.map +1 -1
  37. package/dist/client/settings/BrowserSection.js +17 -3
  38. package/dist/client/settings/BrowserSection.js.map +1 -1
  39. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  40. package/dist/client/settings/SettingsPanel.js +5 -5
  41. package/dist/client/settings/SettingsPanel.js.map +1 -1
  42. package/dist/client/settings/useBuilderStatus.d.ts +15 -2
  43. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  44. package/dist/client/settings/useBuilderStatus.js +99 -11
  45. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  46. package/dist/client/settings/useBuilderStatus.spec.js +12 -6
  47. package/dist/client/settings/useBuilderStatus.spec.js.map +1 -1
  48. package/dist/code-agents/background-controller.d.ts +39 -0
  49. package/dist/code-agents/background-controller.d.ts.map +1 -0
  50. package/dist/code-agents/background-controller.js +249 -0
  51. package/dist/code-agents/background-controller.js.map +1 -0
  52. package/dist/code-agents/background-run.d.ts +58 -0
  53. package/dist/code-agents/background-run.d.ts.map +1 -0
  54. package/dist/code-agents/background-run.js +58 -0
  55. package/dist/code-agents/background-run.js.map +1 -0
  56. package/dist/code-agents/index.d.ts +2 -0
  57. package/dist/code-agents/index.d.ts.map +1 -1
  58. package/dist/code-agents/index.js +2 -0
  59. package/dist/code-agents/index.js.map +1 -1
  60. package/dist/connections/index.d.ts +1 -0
  61. package/dist/connections/index.d.ts.map +1 -1
  62. package/dist/connections/index.js +1 -0
  63. package/dist/connections/index.js.map +1 -1
  64. package/dist/connections/reader.d.ts +248 -0
  65. package/dist/connections/reader.d.ts.map +1 -0
  66. package/dist/connections/reader.js +461 -0
  67. package/dist/connections/reader.js.map +1 -0
  68. package/dist/credentials/index.d.ts +11 -0
  69. package/dist/credentials/index.d.ts.map +1 -1
  70. package/dist/credentials/index.js +40 -15
  71. package/dist/credentials/index.js.map +1 -1
  72. package/dist/index.d.ts +2 -2
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +2 -2
  75. package/dist/index.js.map +1 -1
  76. package/dist/server/agent-chat-plugin.d.ts +18 -0
  77. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  78. package/dist/server/agent-chat-plugin.js +57 -9
  79. package/dist/server/agent-chat-plugin.js.map +1 -1
  80. package/dist/server/agent-teams.d.ts +66 -1
  81. package/dist/server/agent-teams.d.ts.map +1 -1
  82. package/dist/server/agent-teams.js +433 -16
  83. package/dist/server/agent-teams.js.map +1 -1
  84. package/dist/server/builder-browser.d.ts +11 -0
  85. package/dist/server/builder-browser.d.ts.map +1 -1
  86. package/dist/server/builder-browser.js +45 -0
  87. package/dist/server/builder-browser.js.map +1 -1
  88. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  89. package/dist/server/core-routes-plugin.js +25 -2
  90. package/dist/server/core-routes-plugin.js.map +1 -1
  91. package/dist/templates/workspace-root/AGENTS.md +5 -5
  92. package/dist/templates/workspace-root/README.md +1 -1
  93. package/dist/workspace-connections/credentials.d.ts +64 -0
  94. package/dist/workspace-connections/credentials.d.ts.map +1 -0
  95. package/dist/workspace-connections/credentials.js +378 -0
  96. package/dist/workspace-connections/credentials.js.map +1 -0
  97. package/dist/workspace-connections/index.d.ts +2 -1
  98. package/dist/workspace-connections/index.d.ts.map +1 -1
  99. package/dist/workspace-connections/index.js +2 -1
  100. package/dist/workspace-connections/index.js.map +1 -1
  101. package/dist/workspace-connections/store.d.ts +16 -0
  102. package/dist/workspace-connections/store.d.ts.map +1 -1
  103. package/dist/workspace-connections/store.js +57 -1
  104. package/dist/workspace-connections/store.js.map +1 -1
  105. package/docs/content/agent-teams.md +22 -5
  106. package/docs/content/cloneable-saas.md +2 -2
  107. package/docs/content/code-agents-ui.md +103 -3
  108. package/docs/content/creating-templates.md +16 -0
  109. package/docs/content/getting-started.md +40 -14
  110. package/docs/content/migration-workbench.md +25 -2
  111. package/docs/content/multi-app-workspace.md +1 -1
  112. package/docs/content/template-analytics.md +17 -1
  113. package/docs/content/template-brain.md +57 -28
  114. package/docs/content/template-dispatch.md +9 -2
  115. package/docs/content/workspace-connections.md +63 -14
  116. package/docs/content/workspace-management.md +9 -2
  117. package/docs/content/workspace.md +12 -5
  118. package/package.json +1 -1
  119. package/src/templates/workspace-root/AGENTS.md +5 -5
  120. package/src/templates/workspace-root/README.md +1 -1
package/README.md CHANGED
@@ -14,6 +14,7 @@ The agent and the UI are equal citizens of the same system. Every action works b
14
14
  - **Context-aware** — The agent knows what you're looking at. Select text, hit Cmd+I, and tell it what to do.
15
15
  - **Per-user workspace** — Skills, memory, instructions, sub-agents, and MCP servers — SQL-backed, customizable per user. Claude-Code-level flexibility, SaaS-grade economics.
16
16
  - **Agents call agents** — Tag another agent from any app. They discover each other over A2A and take action across your stack.
17
+ - **Reusable integrations** — Connect a provider once in Dispatch, keep secret values in the vault, then grant apps like Brain, Analytics, Mail, and Dispatch access to the shared account metadata and credential refs.
17
18
  - **Apps that improve themselves** — Your apps get better on their own. The agent can add features, fix bugs, and refine the UI over time.
18
19
  - **Any database, any host** — Any SQL database Drizzle supports. Any hosting target Nitro supports. No lock-in.
19
20
  - **Any AI agent** — Claude Code, Codex, Gemini CLI, OpenCode, or Builder.io. Use whichever agent you prefer.
@@ -89,7 +90,7 @@ Create and edit Remotion video compositions with agent assistance.
89
90
 
90
91
  **Agent-Native Amplitude, Mixpanel**
91
92
 
92
- Connect any data source, prompt for any chart. Build reusable dashboards, not throwaway Q&A.
93
+ Connect analytics data sources, prompt for real charts, and build reusable dashboards. Shared workspace connections can provide provider credentials, while Analytics still owns metrics, source-of-truth choices, and saved analyses.
93
94
 
94
95
  </td>
95
96
  </tr>
@@ -124,7 +125,7 @@ Create and edit visual designs by prompt or by hand, with the agent as your co-d
124
125
 
125
126
  **Mission control for agent-native apps**
126
127
 
127
- Message, manage, and delegate to agents from Slack, Telegram, or the web, with routing, memory, and approvals built in.
128
+ Message, manage, and delegate to agents from Slack, Telegram, or the web. Dispatch is also the control plane for vault secrets, reusable provider connections, app grants, routing, memory, and approvals.
128
129
 
129
130
  </td>
130
131
  </tr>
@@ -140,7 +141,17 @@ Message, manage, and delegate to agents from Slack, Telegram, or the web, with r
140
141
  Generate forms from a prompt, branch logic with the agent, and own every response in your own database.
141
142
 
142
143
  </td>
143
- <td width="33%" align="center" valign="top"></td>
144
+ <td width="33%" align="center" valign="top">
145
+
146
+ **Brain**
147
+
148
+ <a href="https://agent-native.com/templates/brain"><strong>Open Brain template</strong></a>
149
+
150
+ **Company chat with cited memory**
151
+
152
+ Ask clean company chat questions backed by cited institutional memory from approved Slack, meetings, transcripts, GitHub, and webhooks. For live app-owned data, Brain can delegate to specialized agents instead of owning every connector itself.
153
+
154
+ </td>
144
155
  <td width="33%" align="center" valign="top"></td>
145
156
  </tr>
146
157
  </table>
@@ -178,17 +189,22 @@ npx @agent-native/core@latest code --auto "fix the failing auth tests"
178
189
  npx @agent-native/core@latest code /migrate ./my-next-app --out ../migrated-app
179
190
  npx @agent-native/core@latest code /migrate ./my-next-app --emit ../migration-dossier
180
191
  npx @agent-native/core@latest code list
192
+ npx @agent-native/core@latest code status --last
181
193
  npx @agent-native/core@latest code attach --last
182
194
  npx @agent-native/core@latest code logs --last
195
+ npx @agent-native/core@latest code stop --last
196
+ npx @agent-native/core@latest code ui
183
197
  npx @agent-native/core@latest code approve --last
184
198
  npx @agent-native/core@latest code resume --last
185
199
  npx @agent-native/core@latest code --continue "check the auth edge cases next"
186
200
  npx @agent-native/core@latest code resume --last "check the auth edge cases next"
187
201
  ```
188
202
 
189
- Slash goals can run from the interactive shell or directly from the command line, and `agent-native code goals` shows the goals registered in your checkout. A bare prompt starts a local coding-agent session, streams work, records transcript/status/tool events, and accepts follow-up prompts; `/migrate` is one specialized capability inside that general Code workspace. Project-specific slash commands live in `.agents/commands/*.md`, so teams can add prompts such as `/release-check` or `/migrate-commerce` without changing the framework. Bare `agent-native` launches the Code workspace in builds with the top-level entrypoint, while a bare prompt such as `agent-native "fix tests"` starts an Agent-Native Code task directly.
203
+ Slash goals can run from the interactive shell or directly from the command line, and `agent-native code goals` shows the goals registered in your checkout. A bare prompt starts a local coding-agent session, streams work, records transcript/status/tool events, and accepts follow-up prompts; `/migrate` is one specialized capability inside that general Code workspace. Project-specific slash commands live in `.agents/commands/*.md`, so teams can add prompts such as `/release-check` or `/migrate-commerce` without changing the framework. Installed `agent-native` with no arguments launches the Code workspace; `agent-native "fix tests"` starts an Agent-Native Code task directly. Use `agent-native create` when you want to create apps or workspaces.
204
+
205
+ Working inside this repository? Use `pnpm dev:cli ...` to run the source CLI without building first, for example `pnpm dev:cli --help` or `pnpm dev:cli code goals`.
190
206
 
191
- The Code workspace is adding the familiar Codex/Claude-style session loop: pick a previous session, list runs, attach to live output, print logs, resume with context, and continue the same run from Desktop or CLI. The primary modes are intentionally simple:
207
+ The Code workspace uses the familiar Codex/Claude-style session loop: pick a previous session, list runs, check status, attach to live output, print logs, stop work, resume with context, open the local UI, and continue the same run from Desktop or CLI. The Desktop Code tab, `agent-native code ui`, background sessions, and sub-agent sessions all converge on the shared run harness/controller model instead of separate ad hoc runners. The primary modes are intentionally simple:
192
208
 
193
209
  - **Plan mode** (`--plan`) inspects, explains, and proposes without writing files.
194
210
  - **Auto mode** (`--auto`, default) edits files, runs checks, and only pauses for genuinely destructive file, git, publish, or data operations.
@@ -78,7 +78,7 @@ export async function executeCodeAgentRun(options) {
78
78
  return updateCodeAgentRunRecord(existing.id, {
79
79
  status: "paused",
80
80
  phase: "missing-credentials",
81
- needsApproval: true,
81
+ needsApproval: false,
82
82
  progress: {
83
83
  label: "Missing credentials",
84
84
  completed: 0,
@@ -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 path from \"node:path\";\nimport { once } from \"node:events\";\n\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"../agent/tool-search.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} from \"../agent/production-agent.js\";\nimport {\n resolveEngine,\n getStoredModelForEngine,\n registerBuiltinEngines,\n} from \"../agent/engine/index.js\";\nimport type {\n AgentEngine,\n EngineContentPart,\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 {\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n appendCodeAgentTranscriptEvent,\n dequeueCodeAgentFollowUp,\n getCodeAgentRunRecord,\n listCodeAgentTranscriptEvents,\n updateCodeAgentRunRecord,\n type CodeAgentPermissionMode,\n type CodeAgentRunRecord,\n} from \"./code-agent-runs.js\";\n\nexport interface ExecuteCodeAgentRunOptions {\n runId: string;\n prompt?: string;\n appendUserEvent?: boolean;\n engine?: AgentEngine;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}\n\ninterface CommandResult {\n code: number | null;\n stdout: string;\n stderr: string;\n timedOut: boolean;\n}\n\ninterface PendingCodeAgentApproval {\n id: string;\n tool: \"run_command\";\n command: string;\n reason: string;\n requestedAt: string;\n permissionMode: CodeAgentPermissionMode;\n}\n\nconst DEFAULT_COMMAND_TIMEOUT_MS = 120_000;\nconst MAX_TOOL_OUTPUT_CHARS = 50_000;\nconst MAX_FILE_READ_CHARS = 120_000;\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 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 = metadataString(existing, \"engine\");\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, or another supported provider key and resume this run.\";\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: true,\n progress: {\n label: \"Missing credentials\",\n completed: 0,\n total: 1,\n percent: 0,\n },\n });\n }\n\n const model =\n options.model ??\n metadataString(existing, \"model\") ??\n process.env.AGENT_MODEL ??\n (await getStoredModelForEngine(engine).catch(() => undefined)) ??\n engine.defaultModel;\n const reasoningEffort =\n options.reasoningEffort ?? metadataReasoningEffort(existing);\n const cwd = existing.cwd || process.cwd();\n const permissionMode = existing.permissionMode ?? \"full-auto\";\n const actions = createLocalCodeAgentActions(cwd, permissionMode, existing.id);\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(existing, prompt);\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 send = (event: AgentChatEvent) => {\n if (event.type === \"text\") {\n assistantText += event.text;\n options.stdout?.write(event.text);\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 appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Running ${event.tool}.`,\n metadata: { type: \"tool_start\", tool: event.tool, input: event.input },\n });\n return;\n }\n if (event.type === \"tool_done\") {\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: truncate(event.result, 4000),\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 try {\n await runWithOptionalCodeAgentRequestContext(existing, () =>\n runAgentLoop({\n engine,\n model,\n systemPrompt: codeAgentSystemPrompt(cwd, permissionMode),\n tools,\n actions,\n messages,\n send,\n signal: controller.signal,\n maxIterations: 12,\n reasoningEffort,\n }),\n );\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 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 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 options.signal?.removeEventListener(\"abort\", abortFromParent);\n await mcpManager?.stop().catch(() => undefined);\n void running;\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\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 runCommand(\n approval.command,\n record.cwd || process.cwd(),\n DEFAULT_COMMAND_TIMEOUT_MS,\n );\n const summary = truncate(\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: result.code === 0 ? \"paused\" : \"errored\",\n phase: \"approval-complete\",\n approvalId: approval.id,\n exitCode: result.code,\n timedOut: result.timedOut,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: result.code === 0 ? \"paused\" : \"errored\",\n phase: result.code === 0 ? \"approval-complete\" : \"approval-command-error\",\n needsApproval: false,\n progress: {\n label: result.code === 0 ? \"Approval complete\" : \"Approval failed\",\n completed: result.code === 0 ? 1 : 0,\n total: 1,\n failed: result.code === 0 ? 0 : 1,\n percent: result.code === 0 ? 100 : 0,\n },\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n completedAt: new Date().toISOString(),\n exitCode: result.code,\n },\n },\n });\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 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\nfunction buildCodeAgentMessages(\n run: CodeAgentRunRecord,\n prompt: string,\n): EngineMessage[] {\n const transcript = listCodeAgentTranscriptEvents(run.id)\n .slice(-40)\n .map((event) => {\n const label =\n event.kind === \"user\"\n ? \"User\"\n : event.metadata?.role === \"assistant\"\n ? \"Assistant\"\n : event.kind;\n return `${label}: ${event.message}`;\n })\n .join(\"\\n\");\n const context = transcript\n ? `\\n\\nPrevious session transcript:\\n${transcript}`\n : \"\";\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${prompt}${context}`,\n },\n ],\n },\n ];\n}\n\nfunction codeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n): string {\n return `You are Agent-Native Code, a local coding agent running in ${cwd}.\n\nWork like a careful senior engineer:\n- Read relevant files before editing.\n- Prefer small, focused changes.\n- Current run mode: ${permissionMode === \"read-only\" ? \"Plan mode\" : \"Auto mode\"} (${permissionMode}).\n- In Plan mode, inspect and explain only.\n- In Auto mode, edit files and run ordinary project commands without pausing. Pause only for genuinely destructive operations such as recursive deletes, package publishing, privileged commands, destructive database operations, or forbidden git branch/reset/stash/rebase operations.\n- Do not create, switch, delete, reset, rebase, or stash git branches.\n- Do not run destructive git commands.\n- Use apply_patch or write_file for edits, then run focused verification.\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 user request warrants controlling the local computer.\n- Keep the final answer concise and include files changed plus tests run.\n- Respect any AGENTS.md instructions in the repository.`;\n}\n\nfunction createLocalCodeAgentActions(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n runId: string,\n): Record<string, ActionEntry> {\n const actions: Record<string, ActionEntry> = {\n list_files: {\n readOnly: true,\n tool: {\n description: \"List files under the current repository/workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n pattern: {\n type: \"string\",\n description:\n \"Optional substring or glob-like fragment to filter.\",\n },\n },\n required: [],\n },\n },\n run: async (args) => {\n const result = await runCommand(\"rg --files\", cwd, 30_000);\n const output =\n result.code === 0\n ? result.stdout\n : (await runCommand(\"find . -type f | sed 's#^./##'\", cwd, 30_000))\n .stdout;\n const pattern = stringArg(args.pattern).toLowerCase();\n const files = output\n .split(/\\r?\\n/)\n .filter(Boolean)\n .filter((file) => !pattern || file.toLowerCase().includes(pattern))\n .slice(0, 500);\n return files.join(\"\\n\") || \"(no files found)\";\n },\n },\n search_files: {\n readOnly: true,\n tool: {\n description: \"Search files with ripgrep.\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"Search query or regex.\" },\n glob: {\n type: \"string\",\n description: \"Optional glob, for example src/**/*.ts.\",\n },\n },\n required: [\"query\"],\n },\n },\n run: async (args) => {\n const query = stringArg(args.query);\n if (!query) return \"Error: query is required.\";\n const glob = stringArg(args.glob);\n const command = glob\n ? `rg --line-number --no-heading ${shellQuote(query)} -g ${shellQuote(glob)}`\n : `rg --line-number --no-heading ${shellQuote(query)}`;\n const result = await runCommand(command, cwd, 30_000);\n return truncate(\n result.stdout || result.stderr || \"(no matches)\",\n MAX_TOOL_OUTPUT_CHARS,\n );\n },\n },\n read_file: {\n readOnly: true,\n tool: {\n description: \"Read a UTF-8 text file inside the workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Relative file path.\" },\n },\n required: [\"path\"],\n },\n },\n run: async (args) => {\n const filePath = resolveInsideCwd(cwd, stringArg(args.path));\n if (!filePath) return \"Error: path must stay inside the workspace.\";\n if (!fs.existsSync(filePath))\n return `Error: file not found: ${args.path}`;\n const stat = fs.statSync(filePath);\n if (!stat.isFile()) return `Error: not a file: ${args.path}`;\n return truncate(fs.readFileSync(filePath, \"utf8\"), MAX_FILE_READ_CHARS);\n },\n },\n write_file: {\n tool: {\n description: \"Write a complete UTF-8 text file inside the workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Relative file path.\" },\n content: { type: \"string\", description: \"Full file content.\" },\n },\n required: [\"path\", \"content\"],\n },\n },\n run: async (args) => {\n const permissionError = permissionErrorForWrite(\n permissionMode,\n \"write_file\",\n );\n if (permissionError) return permissionError;\n const filePath = resolveInsideCwd(cwd, stringArg(args.path));\n if (!filePath) return \"Error: path must stay inside the workspace.\";\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, stringArg(args.content));\n return `Wrote ${path.relative(cwd, filePath)}`;\n },\n },\n apply_patch: {\n tool: {\n description:\n \"Apply a unified git patch from the workspace root. Prefer this for precise edits.\",\n parameters: {\n type: \"object\",\n properties: {\n patch: { type: \"string\", description: \"Unified diff patch text.\" },\n },\n required: [\"patch\"],\n },\n },\n run: async (args) => {\n const permissionError = permissionErrorForWrite(\n permissionMode,\n \"apply_patch\",\n );\n if (permissionError) return permissionError;\n const patch = stringArg(args.patch);\n if (!patch.trim()) return \"Error: patch is required.\";\n const result = await runCommand(\n \"git apply --whitespace=nowarn -\",\n cwd,\n 30_000,\n patch,\n );\n if (result.code !== 0) {\n return `Error applying patch:\\n${result.stderr || result.stdout}`;\n }\n return \"Patch applied.\";\n },\n },\n run_command: {\n tool: {\n description:\n \"Run a shell command from the workspace root. Use for tests, typechecks, and safe project commands.\",\n parameters: {\n type: \"object\",\n properties: {\n command: { type: \"string\", description: \"Shell command to run.\" },\n timeoutMs: {\n type: \"string\",\n description: \"Optional timeout in milliseconds.\",\n },\n },\n required: [\"command\"],\n },\n },\n run: async (args) => {\n const command = stringArg(args.command);\n if (!command) return \"Error: command is required.\";\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 === \"approval-required\") {\n const approval = requestCodeAgentApproval(runId, {\n tool: \"run_command\",\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 const timeoutMs = Number(args.timeoutMs);\n const result = await runCommand(\n command,\n cwd,\n Number.isFinite(timeoutMs) && timeoutMs > 0\n ? Math.min(timeoutMs, 10 * 60_000)\n : DEFAULT_COMMAND_TIMEOUT_MS,\n );\n return truncate(\n [\n `exitCode: ${result.code}`,\n result.timedOut ? \"timedOut: 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 },\n },\n };\n if (permissionMode === \"read-only\") {\n return Object.fromEntries(\n Object.entries(actions).filter(([, action]) => action.readOnly),\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 const readPatterns = [\n /^pwd\\b/,\n /^ls\\b/,\n /^find\\b/,\n /^rg\\b/,\n /^grep\\b/,\n /^cat\\b/,\n /^sed\\s+-n\\b/,\n /^head\\b/,\n /^tail\\b/,\n /^wc\\b/,\n /^git\\s+(status|diff|show|log)\\b/,\n /^git\\s+branch\\s+--show-current\\b/,\n /^pnpm\\b.*\\b(test|typecheck|lint|check)\\b/,\n /^npm\\b.*\\b(test|run\\s+(test|typecheck|lint|check))\\b/,\n ];\n if (readPatterns.some((pattern) => pattern.test(normalized))) {\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 if (\n candidate.tool !== \"run_command\" ||\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: \"run_command\",\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\nfunction resolveInsideCwd(cwd: string, value: string): string | null {\n if (!value.trim()) return null;\n const resolved = path.resolve(cwd, value);\n const relative = path.relative(cwd, resolved);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) return null;\n return resolved;\n}\n\nasync function runCommand(\n command: string,\n cwd: string,\n timeoutMs: number,\n stdin?: string,\n): Promise<CommandResult> {\n const child = spawn(command, {\n cwd,\n shell: true,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGTERM\");\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n if (stdin) child.stdin?.end(stdin);\n else child.stdin?.end();\n const [code] = (await once(child, \"exit\")) as [number | null];\n clearTimeout(timer);\n return { code, stdout, stderr, timedOut };\n}\n\nfunction stringArg(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max)}\\n\\n...[truncated ${value.length - max} chars]`;\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 path from \"node:path\";\nimport { once } from \"node:events\";\n\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"../agent/tool-search.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} from \"../agent/production-agent.js\";\nimport {\n resolveEngine,\n getStoredModelForEngine,\n registerBuiltinEngines,\n} from \"../agent/engine/index.js\";\nimport type {\n AgentEngine,\n EngineContentPart,\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 {\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n appendCodeAgentTranscriptEvent,\n dequeueCodeAgentFollowUp,\n getCodeAgentRunRecord,\n listCodeAgentTranscriptEvents,\n updateCodeAgentRunRecord,\n type CodeAgentPermissionMode,\n type CodeAgentRunRecord,\n} from \"./code-agent-runs.js\";\n\nexport interface ExecuteCodeAgentRunOptions {\n runId: string;\n prompt?: string;\n appendUserEvent?: boolean;\n engine?: AgentEngine;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}\n\ninterface CommandResult {\n code: number | null;\n stdout: string;\n stderr: string;\n timedOut: boolean;\n}\n\ninterface PendingCodeAgentApproval {\n id: string;\n tool: \"run_command\";\n command: string;\n reason: string;\n requestedAt: string;\n permissionMode: CodeAgentPermissionMode;\n}\n\nconst DEFAULT_COMMAND_TIMEOUT_MS = 120_000;\nconst MAX_TOOL_OUTPUT_CHARS = 50_000;\nconst MAX_FILE_READ_CHARS = 120_000;\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 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 = metadataString(existing, \"engine\");\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, or another supported provider key and resume this run.\";\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 model =\n options.model ??\n metadataString(existing, \"model\") ??\n process.env.AGENT_MODEL ??\n (await getStoredModelForEngine(engine).catch(() => undefined)) ??\n engine.defaultModel;\n const reasoningEffort =\n options.reasoningEffort ?? metadataReasoningEffort(existing);\n const cwd = existing.cwd || process.cwd();\n const permissionMode = existing.permissionMode ?? \"full-auto\";\n const actions = createLocalCodeAgentActions(cwd, permissionMode, existing.id);\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(existing, prompt);\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 send = (event: AgentChatEvent) => {\n if (event.type === \"text\") {\n assistantText += event.text;\n options.stdout?.write(event.text);\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 appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Running ${event.tool}.`,\n metadata: { type: \"tool_start\", tool: event.tool, input: event.input },\n });\n return;\n }\n if (event.type === \"tool_done\") {\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: truncate(event.result, 4000),\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 try {\n await runWithOptionalCodeAgentRequestContext(existing, () =>\n runAgentLoop({\n engine,\n model,\n systemPrompt: codeAgentSystemPrompt(cwd, permissionMode),\n tools,\n actions,\n messages,\n send,\n signal: controller.signal,\n maxIterations: 12,\n reasoningEffort,\n }),\n );\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 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 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 options.signal?.removeEventListener(\"abort\", abortFromParent);\n await mcpManager?.stop().catch(() => undefined);\n void running;\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\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 runCommand(\n approval.command,\n record.cwd || process.cwd(),\n DEFAULT_COMMAND_TIMEOUT_MS,\n );\n const summary = truncate(\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: result.code === 0 ? \"paused\" : \"errored\",\n phase: \"approval-complete\",\n approvalId: approval.id,\n exitCode: result.code,\n timedOut: result.timedOut,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: result.code === 0 ? \"paused\" : \"errored\",\n phase: result.code === 0 ? \"approval-complete\" : \"approval-command-error\",\n needsApproval: false,\n progress: {\n label: result.code === 0 ? \"Approval complete\" : \"Approval failed\",\n completed: result.code === 0 ? 1 : 0,\n total: 1,\n failed: result.code === 0 ? 0 : 1,\n percent: result.code === 0 ? 100 : 0,\n },\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n completedAt: new Date().toISOString(),\n exitCode: result.code,\n },\n },\n });\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 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\nfunction buildCodeAgentMessages(\n run: CodeAgentRunRecord,\n prompt: string,\n): EngineMessage[] {\n const transcript = listCodeAgentTranscriptEvents(run.id)\n .slice(-40)\n .map((event) => {\n const label =\n event.kind === \"user\"\n ? \"User\"\n : event.metadata?.role === \"assistant\"\n ? \"Assistant\"\n : event.kind;\n return `${label}: ${event.message}`;\n })\n .join(\"\\n\");\n const context = transcript\n ? `\\n\\nPrevious session transcript:\\n${transcript}`\n : \"\";\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${prompt}${context}`,\n },\n ],\n },\n ];\n}\n\nfunction codeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n): string {\n return `You are Agent-Native Code, a local coding agent running in ${cwd}.\n\nWork like a careful senior engineer:\n- Read relevant files before editing.\n- Prefer small, focused changes.\n- Current run mode: ${permissionMode === \"read-only\" ? \"Plan mode\" : \"Auto mode\"} (${permissionMode}).\n- In Plan mode, inspect and explain only.\n- In Auto mode, edit files and run ordinary project commands without pausing. Pause only for genuinely destructive operations such as recursive deletes, package publishing, privileged commands, destructive database operations, or forbidden git branch/reset/stash/rebase operations.\n- Do not create, switch, delete, reset, rebase, or stash git branches.\n- Do not run destructive git commands.\n- Use apply_patch or write_file for edits, then run focused verification.\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 user request warrants controlling the local computer.\n- Keep the final answer concise and include files changed plus tests run.\n- Respect any AGENTS.md instructions in the repository.`;\n}\n\nfunction createLocalCodeAgentActions(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n runId: string,\n): Record<string, ActionEntry> {\n const actions: Record<string, ActionEntry> = {\n list_files: {\n readOnly: true,\n tool: {\n description: \"List files under the current repository/workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n pattern: {\n type: \"string\",\n description:\n \"Optional substring or glob-like fragment to filter.\",\n },\n },\n required: [],\n },\n },\n run: async (args) => {\n const result = await runCommand(\"rg --files\", cwd, 30_000);\n const output =\n result.code === 0\n ? result.stdout\n : (await runCommand(\"find . -type f | sed 's#^./##'\", cwd, 30_000))\n .stdout;\n const pattern = stringArg(args.pattern).toLowerCase();\n const files = output\n .split(/\\r?\\n/)\n .filter(Boolean)\n .filter((file) => !pattern || file.toLowerCase().includes(pattern))\n .slice(0, 500);\n return files.join(\"\\n\") || \"(no files found)\";\n },\n },\n search_files: {\n readOnly: true,\n tool: {\n description: \"Search files with ripgrep.\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"Search query or regex.\" },\n glob: {\n type: \"string\",\n description: \"Optional glob, for example src/**/*.ts.\",\n },\n },\n required: [\"query\"],\n },\n },\n run: async (args) => {\n const query = stringArg(args.query);\n if (!query) return \"Error: query is required.\";\n const glob = stringArg(args.glob);\n const command = glob\n ? `rg --line-number --no-heading ${shellQuote(query)} -g ${shellQuote(glob)}`\n : `rg --line-number --no-heading ${shellQuote(query)}`;\n const result = await runCommand(command, cwd, 30_000);\n return truncate(\n result.stdout || result.stderr || \"(no matches)\",\n MAX_TOOL_OUTPUT_CHARS,\n );\n },\n },\n read_file: {\n readOnly: true,\n tool: {\n description: \"Read a UTF-8 text file inside the workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Relative file path.\" },\n },\n required: [\"path\"],\n },\n },\n run: async (args) => {\n const filePath = resolveInsideCwd(cwd, stringArg(args.path));\n if (!filePath) return \"Error: path must stay inside the workspace.\";\n if (!fs.existsSync(filePath))\n return `Error: file not found: ${args.path}`;\n const stat = fs.statSync(filePath);\n if (!stat.isFile()) return `Error: not a file: ${args.path}`;\n return truncate(fs.readFileSync(filePath, \"utf8\"), MAX_FILE_READ_CHARS);\n },\n },\n write_file: {\n tool: {\n description: \"Write a complete UTF-8 text file inside the workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Relative file path.\" },\n content: { type: \"string\", description: \"Full file content.\" },\n },\n required: [\"path\", \"content\"],\n },\n },\n run: async (args) => {\n const permissionError = permissionErrorForWrite(\n permissionMode,\n \"write_file\",\n );\n if (permissionError) return permissionError;\n const filePath = resolveInsideCwd(cwd, stringArg(args.path));\n if (!filePath) return \"Error: path must stay inside the workspace.\";\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, stringArg(args.content));\n return `Wrote ${path.relative(cwd, filePath)}`;\n },\n },\n apply_patch: {\n tool: {\n description:\n \"Apply a unified git patch from the workspace root. Prefer this for precise edits.\",\n parameters: {\n type: \"object\",\n properties: {\n patch: { type: \"string\", description: \"Unified diff patch text.\" },\n },\n required: [\"patch\"],\n },\n },\n run: async (args) => {\n const permissionError = permissionErrorForWrite(\n permissionMode,\n \"apply_patch\",\n );\n if (permissionError) return permissionError;\n const patch = stringArg(args.patch);\n if (!patch.trim()) return \"Error: patch is required.\";\n const result = await runCommand(\n \"git apply --whitespace=nowarn -\",\n cwd,\n 30_000,\n patch,\n );\n if (result.code !== 0) {\n return `Error applying patch:\\n${result.stderr || result.stdout}`;\n }\n return \"Patch applied.\";\n },\n },\n run_command: {\n tool: {\n description:\n \"Run a shell command from the workspace root. Use for tests, typechecks, and safe project commands.\",\n parameters: {\n type: \"object\",\n properties: {\n command: { type: \"string\", description: \"Shell command to run.\" },\n timeoutMs: {\n type: \"string\",\n description: \"Optional timeout in milliseconds.\",\n },\n },\n required: [\"command\"],\n },\n },\n run: async (args) => {\n const command = stringArg(args.command);\n if (!command) return \"Error: command is required.\";\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 === \"approval-required\") {\n const approval = requestCodeAgentApproval(runId, {\n tool: \"run_command\",\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 const timeoutMs = Number(args.timeoutMs);\n const result = await runCommand(\n command,\n cwd,\n Number.isFinite(timeoutMs) && timeoutMs > 0\n ? Math.min(timeoutMs, 10 * 60_000)\n : DEFAULT_COMMAND_TIMEOUT_MS,\n );\n return truncate(\n [\n `exitCode: ${result.code}`,\n result.timedOut ? \"timedOut: 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 },\n },\n };\n if (permissionMode === \"read-only\") {\n return Object.fromEntries(\n Object.entries(actions).filter(([, action]) => action.readOnly),\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 const readPatterns = [\n /^pwd\\b/,\n /^ls\\b/,\n /^find\\b/,\n /^rg\\b/,\n /^grep\\b/,\n /^cat\\b/,\n /^sed\\s+-n\\b/,\n /^head\\b/,\n /^tail\\b/,\n /^wc\\b/,\n /^git\\s+(status|diff|show|log)\\b/,\n /^git\\s+branch\\s+--show-current\\b/,\n /^pnpm\\b.*\\b(test|typecheck|lint|check)\\b/,\n /^npm\\b.*\\b(test|run\\s+(test|typecheck|lint|check))\\b/,\n ];\n if (readPatterns.some((pattern) => pattern.test(normalized))) {\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 if (\n candidate.tool !== \"run_command\" ||\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: \"run_command\",\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\nfunction resolveInsideCwd(cwd: string, value: string): string | null {\n if (!value.trim()) return null;\n const resolved = path.resolve(cwd, value);\n const relative = path.relative(cwd, resolved);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) return null;\n return resolved;\n}\n\nasync function runCommand(\n command: string,\n cwd: string,\n timeoutMs: number,\n stdin?: string,\n): Promise<CommandResult> {\n const child = spawn(command, {\n cwd,\n shell: true,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGTERM\");\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n if (stdin) child.stdin?.end(stdin);\n else child.stdin?.end();\n const [code] = (await once(child, \"exit\")) as [number | null];\n clearTimeout(timer);\n return { code, stdout, stderr, timedOut };\n}\n\nfunction stringArg(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max)}\\n\\n...[truncated ${value.length - max} chars]`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/cli/code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/cli/code.ts"],"names":[],"mappings":"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"}
package/dist/cli/code.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import { createInterface } from "node:readline";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
2
5
  import { CODE_AGENT_PERMISSION_MODES, appendCodeAgentTranscriptEvent, createCodeAgentRunRecord, getCodeAgentRunRecord, getLastCodeAgentRunRecord, isActiveCodeAgentRun, listCodeAgentRunRecords, listCodeAgentTranscriptEvents, normalizeCodeAgentPermissionMode, queueCodeAgentFollowUp, updateCodeAgentRunRecord, } from "./code-agent-runs.js";
3
6
  import { findProjectSlashCommand, listProjectSlashCommands, renderProjectSlashCommandPrompt, } from "./code-agent-commands.js";
4
7
  import { executeCodeAgentRun, executeExistingCodeAgentRun, executePendingCodeAgentApproval, } from "./code-agent-executor.js";
@@ -39,6 +42,7 @@ const CODE_AGENT_CONTROL_SUBCOMMANDS = new Set([
39
42
  "ui",
40
43
  ]);
41
44
  const SHELL_PROMPT = "code> ";
45
+ const DEFAULT_CODE_AGENT_PERMISSION_MODE = "full-auto";
42
46
  export function resolveCodeCommand(argv) {
43
47
  const [rawFirst, ...rest] = argv;
44
48
  if (!rawFirst) {
@@ -350,8 +354,13 @@ The existing shortcut still works:
350
354
  agent-native migrate <source> [options]`;
351
355
  }
352
356
  export function codeShellIntro() {
353
- return `Agent-Native Code
354
- Type a coding task to start a session, /help for commands, /goals for goals, or /exit to leave.`;
357
+ return [
358
+ `Agent-Native Code v${getCorePackageVersion()}`,
359
+ `cwd: ${process.cwd()}`,
360
+ `default: ${formatCodeAgentRunMode(DEFAULT_CODE_AGENT_PERMISSION_MODE)} (${DEFAULT_CODE_AGENT_PERMISSION_MODE})`,
361
+ "",
362
+ "Type a coding task to start a session. Use /help, /goals, or /exit.",
363
+ ].join("\n");
355
364
  }
356
365
  export function codeShellHelp() {
357
366
  return `Agent-Native Code shell commands:
@@ -376,7 +385,11 @@ Compatibility shortcuts:
376
385
  resume --last
377
386
  status --last
378
387
  ui --last
379
- stop --last`;
388
+ stop --last
389
+
390
+ Shell context:
391
+ cwd: ${process.cwd()}
392
+ default mode: ${formatCodeAgentRunMode(DEFAULT_CODE_AGENT_PERMISSION_MODE)} (${DEFAULT_CODE_AGENT_PERMISSION_MODE})`;
380
393
  }
381
394
  export function codeShellFreeTextMessage() {
382
395
  return `Bare prompts run as generic Agent-Native Code sessions.
@@ -966,6 +979,7 @@ function renderCodeAgentRunDetail(heading, run) {
966
979
  run.permissionMode
967
980
  ? ` Mode: ${formatCodeAgentRunMode(run.permissionMode)}`
968
981
  : "",
982
+ run.cwd ? ` Cwd: ${run.cwd}` : "",
969
983
  ` Status: ${run.status}${run.phase ? ` (${run.phase})` : ""}`,
970
984
  run.progress
971
985
  ? ` Progress: ${run.progress.completed}/${run.progress.total} (${run.progress.percent}%)`
@@ -1000,6 +1014,17 @@ function writeLine(output, text = "") {
1000
1014
  function writePrompt(output) {
1001
1015
  output.write(SHELL_PROMPT);
1002
1016
  }
1017
+ function getCorePackageVersion() {
1018
+ try {
1019
+ const cliDir = path.dirname(fileURLToPath(import.meta.url));
1020
+ const packagePath = path.resolve(cliDir, "../../package.json");
1021
+ const pkg = JSON.parse(fs.readFileSync(packagePath, "utf-8"));
1022
+ return typeof pkg.version === "string" ? pkg.version : "unknown";
1023
+ }
1024
+ catch {
1025
+ return "unknown";
1026
+ }
1027
+ }
1003
1028
  async function runCodeGoal(goalId, forwardedArgs, output = process.stdout) {
1004
1029
  const goal = CODE_AGENT_CLI_GOALS.find((candidate) => candidate.id === goalId);
1005
1030
  if (!goal) {
@@ -1150,7 +1175,7 @@ async function recordCodeAgentFollowUpPrompt(prompt, output, permissionMode, run
1150
1175
  stdout: output,
1151
1176
  });
1152
1177
  }
1153
- function parseTaskArgs(forwardedArgs, defaultPermissionMode = "full-auto") {
1178
+ function parseTaskArgs(forwardedArgs, defaultPermissionMode = DEFAULT_CODE_AGENT_PERMISSION_MODE) {
1154
1179
  const promptArgs = [];
1155
1180
  let permissionMode = defaultPermissionMode;
1156
1181
  let permissionModeExplicit = false;