@agent-native/core 0.59.0 → 0.60.0

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 (220) hide show
  1. package/dist/a2a/index.d.ts +2 -0
  2. package/dist/a2a/index.d.ts.map +1 -1
  3. package/dist/a2a/index.js +1 -0
  4. package/dist/a2a/index.js.map +1 -1
  5. package/dist/a2a/invoke.d.ts +63 -0
  6. package/dist/a2a/invoke.d.ts.map +1 -0
  7. package/dist/a2a/invoke.js +157 -0
  8. package/dist/a2a/invoke.js.map +1 -0
  9. package/dist/agent/run-store.d.ts +15 -0
  10. package/dist/agent/run-store.d.ts.map +1 -1
  11. package/dist/agent/run-store.js +28 -0
  12. package/dist/agent/run-store.js.map +1 -1
  13. package/dist/chat-threads/store.d.ts +21 -0
  14. package/dist/chat-threads/store.d.ts.map +1 -1
  15. package/dist/chat-threads/store.js +128 -0
  16. package/dist/chat-threads/store.js.map +1 -1
  17. package/dist/cli/agent.d.ts +23 -0
  18. package/dist/cli/agent.d.ts.map +1 -0
  19. package/dist/cli/agent.js +300 -0
  20. package/dist/cli/agent.js.map +1 -0
  21. package/dist/cli/agents.d.ts +14 -0
  22. package/dist/cli/agents.d.ts.map +1 -0
  23. package/dist/cli/agents.js +95 -0
  24. package/dist/cli/agents.js.map +1 -0
  25. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  26. package/dist/cli/code-agent-executor.js +264 -2
  27. package/dist/cli/code-agent-executor.js.map +1 -1
  28. package/dist/cli/create.d.ts +3 -2
  29. package/dist/cli/create.d.ts.map +1 -1
  30. package/dist/cli/create.js +154 -83
  31. package/dist/cli/create.js.map +1 -1
  32. package/dist/cli/index.js +50 -2
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/invoke.d.ts +26 -0
  35. package/dist/cli/invoke.d.ts.map +1 -0
  36. package/dist/cli/invoke.js +227 -0
  37. package/dist/cli/invoke.js.map +1 -0
  38. package/dist/cli/templates-meta.d.ts +1 -1
  39. package/dist/cli/templates-meta.d.ts.map +1 -1
  40. package/dist/cli/templates-meta.js +9 -8
  41. package/dist/cli/templates-meta.js.map +1 -1
  42. package/dist/cli/workspacify.d.ts +1 -1
  43. package/dist/cli/workspacify.d.ts.map +1 -1
  44. package/dist/cli/workspacify.js +6 -6
  45. package/dist/cli/workspacify.js.map +1 -1
  46. package/dist/client/AgentPanel.js +1 -1
  47. package/dist/client/AgentPanel.js.map +1 -1
  48. package/dist/client/AssistantChat.d.ts.map +1 -1
  49. package/dist/client/AssistantChat.js +8 -2
  50. package/dist/client/AssistantChat.js.map +1 -1
  51. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  52. package/dist/client/NewWorkspaceAppFlow.js +5 -4
  53. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  54. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  55. package/dist/client/agent-chat-adapter.js +65 -12
  56. package/dist/client/agent-chat-adapter.js.map +1 -1
  57. package/dist/client/blocks/library/diagram.d.ts.map +1 -1
  58. package/dist/client/blocks/library/diagram.js +23 -17
  59. package/dist/client/blocks/library/diagram.js.map +1 -1
  60. package/dist/client/blocks/types.d.ts +2 -0
  61. package/dist/client/blocks/types.d.ts.map +1 -1
  62. package/dist/client/blocks/types.js.map +1 -1
  63. package/dist/client/chat/index.d.ts +1 -1
  64. package/dist/client/chat/index.d.ts.map +1 -1
  65. package/dist/client/chat/index.js.map +1 -1
  66. package/dist/client/extensions/ExtensionViewer.js +1 -1
  67. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  68. package/dist/client/index.d.ts +1 -1
  69. package/dist/client/index.d.ts.map +1 -1
  70. package/dist/client/index.js.map +1 -1
  71. package/dist/client/notifications/NotificationsBell.d.ts +3 -1
  72. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
  73. package/dist/client/notifications/NotificationsBell.js +7 -3
  74. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  75. package/dist/client/use-chat-threads.d.ts +13 -0
  76. package/dist/client/use-chat-threads.d.ts.map +1 -1
  77. package/dist/client/use-chat-threads.js +41 -0
  78. package/dist/client/use-chat-threads.js.map +1 -1
  79. package/dist/integrations/plugin.d.ts.map +1 -1
  80. package/dist/integrations/plugin.js +2 -2
  81. package/dist/integrations/plugin.js.map +1 -1
  82. package/dist/onboarding/default-steps.d.ts.map +1 -1
  83. package/dist/onboarding/default-steps.js +102 -0
  84. package/dist/onboarding/default-steps.js.map +1 -1
  85. package/dist/org/auto-join-domain.d.ts +11 -3
  86. package/dist/org/auto-join-domain.d.ts.map +1 -1
  87. package/dist/org/auto-join-domain.js +7 -6
  88. package/dist/org/auto-join-domain.js.map +1 -1
  89. package/dist/org/context.d.ts.map +1 -1
  90. package/dist/org/context.js +68 -32
  91. package/dist/org/context.js.map +1 -1
  92. package/dist/org/migrations.d.ts.map +1 -1
  93. package/dist/org/migrations.js +6 -0
  94. package/dist/org/migrations.js.map +1 -1
  95. package/dist/provider-api/actions/github-repo-files.d.ts +84 -0
  96. package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -0
  97. package/dist/provider-api/actions/github-repo-files.js +213 -0
  98. package/dist/provider-api/actions/github-repo-files.js.map +1 -0
  99. package/dist/provider-api/github-repo.d.ts +11 -0
  100. package/dist/provider-api/github-repo.d.ts.map +1 -0
  101. package/dist/provider-api/github-repo.js +553 -0
  102. package/dist/provider-api/github-repo.js.map +1 -0
  103. package/dist/provider-api/index.d.ts +184 -11
  104. package/dist/provider-api/index.d.ts.map +1 -1
  105. package/dist/provider-api/index.js +519 -0
  106. package/dist/provider-api/index.js.map +1 -1
  107. package/dist/scripts/docs/search.d.ts.map +1 -1
  108. package/dist/scripts/docs/search.js +38 -13
  109. package/dist/scripts/docs/search.js.map +1 -1
  110. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  111. package/dist/secrets/register-framework-secrets.js +11 -0
  112. package/dist/secrets/register-framework-secrets.js.map +1 -1
  113. package/dist/server/agent-chat-plugin.d.ts +32 -0
  114. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  115. package/dist/server/agent-chat-plugin.js +297 -2
  116. package/dist/server/agent-chat-plugin.js.map +1 -1
  117. package/dist/server/auth-marketing.d.ts.map +1 -1
  118. package/dist/server/auth-marketing.js +17 -7
  119. package/dist/server/auth-marketing.js.map +1 -1
  120. package/dist/server/auth.d.ts.map +1 -1
  121. package/dist/server/auth.js +6 -0
  122. package/dist/server/auth.js.map +1 -1
  123. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  124. package/dist/server/core-routes-plugin.js +18 -98
  125. package/dist/server/core-routes-plugin.js.map +1 -1
  126. package/dist/styles/blocks.css +30 -8
  127. package/dist/styles/rich-markdown-editor.css +10 -4
  128. package/dist/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  129. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -5
  130. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  131. package/dist/templates/default/AGENTS.md +22 -1
  132. package/dist/templates/default/actions/hello.ts +1 -1
  133. package/dist/templates/default/actions/navigate.ts +1 -1
  134. package/dist/templates/default/actions/view-screen.ts +1 -1
  135. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  136. package/dist/templates/headless/.env.example +4 -0
  137. package/dist/templates/headless/.prettierrc +5 -0
  138. package/dist/templates/headless/AGENTS.md +58 -0
  139. package/dist/templates/headless/DEVELOPING.md +22 -0
  140. package/dist/templates/headless/_gitignore +36 -0
  141. package/dist/templates/headless/actions/hello.ts +14 -0
  142. package/dist/templates/headless/actions/run.ts +3 -0
  143. package/dist/templates/headless/package.json +22 -0
  144. package/dist/templates/headless/tsconfig.json +7 -0
  145. package/dist/templates/ui-primitives-sync.spec.ts +2 -2
  146. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  147. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  148. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
  149. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  150. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
  151. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  152. package/dist/templates/workspace-core/AGENTS.md +20 -3
  153. package/dist/templates/workspace-core/src/server/index.ts +1 -1
  154. package/dist/templates/workspace-root/AGENTS.md +25 -5
  155. package/dist/templates/workspace-root/README.md +7 -7
  156. package/dist/triggers/dispatcher.d.ts +2 -3
  157. package/dist/triggers/dispatcher.d.ts.map +1 -1
  158. package/dist/triggers/dispatcher.js +2 -3
  159. package/dist/triggers/dispatcher.js.map +1 -1
  160. package/dist/triggers/routes.d.ts +38 -0
  161. package/dist/triggers/routes.d.ts.map +1 -0
  162. package/dist/triggers/routes.js +202 -0
  163. package/dist/triggers/routes.js.map +1 -0
  164. package/dist/vite/client.d.ts +2 -1
  165. package/dist/vite/client.d.ts.map +1 -1
  166. package/dist/vite/client.js +121 -2
  167. package/dist/vite/client.js.map +1 -1
  168. package/docs/AGENTS.md +57 -0
  169. package/docs/SKILL.md +40 -0
  170. package/docs/content/a2a-protocol.md +1 -1
  171. package/docs/content/actions.md +48 -8
  172. package/docs/content/agent-surfaces.md +76 -14
  173. package/docs/content/cli-adapters.md +1 -1
  174. package/docs/content/cloneable-saas.md +5 -4
  175. package/docs/content/code-agents-ui.md +1 -1
  176. package/docs/content/components.md +1 -1
  177. package/docs/content/context-awareness.md +15 -3
  178. package/docs/content/creating-templates.md +15 -7
  179. package/docs/content/drop-in-agent.md +1 -1
  180. package/docs/content/faq.md +6 -4
  181. package/docs/content/getting-started.md +63 -73
  182. package/docs/content/key-concepts.md +24 -24
  183. package/docs/content/native-chat-ui.md +4 -4
  184. package/docs/content/pure-agent-apps.md +34 -10
  185. package/docs/content/security.md +1 -1
  186. package/docs/content/server.md +1 -1
  187. package/docs/content/template-chat.md +85 -0
  188. package/docs/content/template-dispatch.md +1 -1
  189. package/docs/content/tracking.md +1 -1
  190. package/docs/content/what-is-agent-native.md +7 -6
  191. package/package.json +10 -1
  192. package/src/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  193. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -5
  194. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  195. package/src/templates/default/AGENTS.md +22 -1
  196. package/src/templates/default/actions/hello.ts +1 -1
  197. package/src/templates/default/actions/navigate.ts +1 -1
  198. package/src/templates/default/actions/view-screen.ts +1 -1
  199. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  200. package/src/templates/headless/.env.example +4 -0
  201. package/src/templates/headless/.prettierrc +5 -0
  202. package/src/templates/headless/AGENTS.md +58 -0
  203. package/src/templates/headless/DEVELOPING.md +22 -0
  204. package/src/templates/headless/_gitignore +36 -0
  205. package/src/templates/headless/actions/hello.ts +14 -0
  206. package/src/templates/headless/actions/run.ts +3 -0
  207. package/src/templates/headless/package.json +22 -0
  208. package/src/templates/headless/tsconfig.json +7 -0
  209. package/src/templates/ui-primitives-sync.spec.ts +2 -2
  210. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  211. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  212. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
  213. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  214. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
  215. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  216. package/src/templates/workspace-core/AGENTS.md +20 -3
  217. package/src/templates/workspace-core/src/server/index.ts +1 -1
  218. package/src/templates/workspace-root/AGENTS.md +25 -5
  219. package/src/templates/workspace-root/README.md +7 -7
  220. package/docs/content/template-starter.md +0 -78
@@ -1,3 +1,7 @@
1
+ import { spawn } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
1
5
  import { createToolSearchEntry, TOOL_SEARCH_ACTION_NAME, } from "../agent/tool-search.js";
2
6
  import { createCodingToolRegistry, isReadOnlyShellCommand, runCodingCommand, truncateBashOutput, truncateCodingOutput, } from "../coding-tools/index.js";
3
7
  import { buildMergedConfig, McpClientManager, mcpToolsToActionEntries, } from "../mcp-client/index.js";
@@ -14,6 +18,7 @@ import { createCodeAgentOutputSmoother } from "./code-agent-output-smoother.js";
14
18
  const DEFAULT_COMMAND_TIMEOUT_MS = 120_000;
15
19
  const MAX_TOOL_OUTPUT_CHARS = 50_000;
16
20
  const MAX_FILE_READ_CHARS = 120_000;
21
+ const CODEX_CLI_ENGINE_NAME = "codex-cli";
17
22
  /**
18
23
  * Number of most-recent transcript events reconstructed as native
19
24
  * EngineMessage objects (with proper tool-call / tool-result pairing).
@@ -84,10 +89,20 @@ export async function executeCodeAgentRun(options) {
84
89
  message: "Agent-Native Code run started.",
85
90
  metadata: { status: "running", phase: "executing" },
86
91
  });
87
- const requestedEngine = metadataString(existing, "engine");
92
+ const requestedEngine = normalizeRequestedEngine(metadataString(existing, "engine"));
93
+ if (requestedEngine === CODEX_CLI_ENGINE_NAME) {
94
+ return executeCodexCliRun({
95
+ run: existing,
96
+ prompt: executionPrompt,
97
+ model: options.model ?? metadataString(existing, "model"),
98
+ permissionMode: existing.permissionMode ?? "full-auto",
99
+ stdout: options.stdout,
100
+ signal: options.signal,
101
+ });
102
+ }
88
103
  const engine = options.engine ?? (await resolveExecutorEngine(requestedEngine));
89
104
  if (!engine) {
90
- const message = "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.";
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`.";
91
106
  options.stdout?.write(`${message}\n`);
92
107
  appendCodeAgentTranscriptEvent({
93
108
  runId: existing.id,
@@ -389,6 +404,253 @@ export async function executeCodeAgentRun(options) {
389
404
  void running;
390
405
  }
391
406
  }
407
+ async function executeCodexCliRun(options) {
408
+ const cwd = options.run.cwd || process.cwd();
409
+ const outputDir = fs.mkdtempSync(path.join(os.tmpdir(), "agent-native-code-codex-"));
410
+ const outputPath = path.join(outputDir, "last-message.txt");
411
+ const model = normalizeCodexCliModel(options.model);
412
+ const args = [
413
+ "exec",
414
+ "--cd",
415
+ cwd,
416
+ "--color",
417
+ "never",
418
+ "--skip-git-repo-check",
419
+ "--sandbox",
420
+ codexSandboxForPermissionMode(options.permissionMode),
421
+ "--ask-for-approval",
422
+ "never",
423
+ "--output-last-message",
424
+ outputPath,
425
+ ];
426
+ if (model)
427
+ args.push("--model", model);
428
+ args.push("-");
429
+ appendCodeAgentTranscriptEvent({
430
+ runId: options.run.id,
431
+ kind: "status",
432
+ message: "Starting Codex CLI with local Codex authentication.",
433
+ metadata: {
434
+ status: "running",
435
+ phase: "executing",
436
+ engine: CODEX_CLI_ENGINE_NAME,
437
+ },
438
+ });
439
+ try {
440
+ const result = await runCodexCliProcess({
441
+ args,
442
+ cwd,
443
+ prompt: buildCodexCliPrompt(options.run, options.prompt),
444
+ stdout: options.stdout,
445
+ signal: options.signal,
446
+ });
447
+ if (result.exitCode !== 0) {
448
+ const message = result.error ??
449
+ result.stderr.trim() ??
450
+ `Codex CLI exited with ${result.exitSignal ?? result.exitCode}.`;
451
+ options.stdout?.write(`\nCodex CLI run failed: ${message}\n`);
452
+ appendCodeAgentTranscriptEvent({
453
+ runId: options.run.id,
454
+ kind: "status",
455
+ message: `Codex CLI run failed: ${message}`,
456
+ metadata: {
457
+ status: "errored",
458
+ phase: "error",
459
+ engine: CODEX_CLI_ENGINE_NAME,
460
+ exitCode: result.exitCode,
461
+ exitSignal: result.exitSignal,
462
+ },
463
+ });
464
+ return updateCodeAgentRunRecord(options.run.id, {
465
+ status: options.signal?.aborted ? "paused" : "errored",
466
+ phase: options.signal?.aborted ? "paused" : "error",
467
+ progress: {
468
+ label: options.signal?.aborted ? "Paused" : "Error",
469
+ completed: 0,
470
+ total: 1,
471
+ failed: options.signal?.aborted ? 0 : 1,
472
+ percent: 0,
473
+ },
474
+ metadata: {
475
+ executionError: message,
476
+ executionErroredAt: new Date().toISOString(),
477
+ engine: CODEX_CLI_ENGINE_NAME,
478
+ model: model ?? "codex-default",
479
+ },
480
+ });
481
+ }
482
+ const finalMessage = readCodexLastMessage(outputPath) ||
483
+ result.stdout.trim() ||
484
+ "Codex CLI run completed.";
485
+ appendCodeAgentTranscriptEvent({
486
+ runId: options.run.id,
487
+ kind: "system",
488
+ message: finalMessage,
489
+ metadata: {
490
+ role: "assistant",
491
+ engine: CODEX_CLI_ENGINE_NAME,
492
+ model: model ?? "codex-default",
493
+ },
494
+ });
495
+ const pendingFollowUp = dequeueCodeAgentFollowUp(options.run.id);
496
+ if (pendingFollowUp) {
497
+ const message = pendingFollowUp.mode === "queued"
498
+ ? "Codex CLI run completed; running queued follow-up."
499
+ : "Codex CLI run completed; applying steering follow-up.";
500
+ appendCodeAgentTranscriptEvent({
501
+ runId: options.run.id,
502
+ kind: "status",
503
+ message,
504
+ metadata: {
505
+ status: "running",
506
+ phase: "follow-up",
507
+ followUpId: pendingFollowUp.id,
508
+ followUpMode: pendingFollowUp.mode,
509
+ engine: CODEX_CLI_ENGINE_NAME,
510
+ },
511
+ });
512
+ if (pendingFollowUp.permissionMode) {
513
+ updateCodeAgentRunRecord(options.run.id, {
514
+ permissionMode: pendingFollowUp.permissionMode,
515
+ });
516
+ }
517
+ return executeCodeAgentRun({
518
+ runId: options.run.id,
519
+ prompt: pendingFollowUp.prompt,
520
+ attachments: pendingFollowUp.attachments ??
521
+ userPromptAttachmentsForEvent(options.run.id, pendingFollowUp.eventId),
522
+ appendUserEvent: false,
523
+ stdout: options.stdout,
524
+ signal: options.signal,
525
+ });
526
+ }
527
+ appendCodeAgentTranscriptEvent({
528
+ runId: options.run.id,
529
+ kind: "status",
530
+ message: "Codex CLI run completed.",
531
+ metadata: {
532
+ status: "completed",
533
+ phase: "complete",
534
+ engine: CODEX_CLI_ENGINE_NAME,
535
+ },
536
+ });
537
+ return updateCodeAgentRunRecord(options.run.id, {
538
+ status: "completed",
539
+ phase: "complete",
540
+ needsApproval: false,
541
+ progress: {
542
+ label: "Complete",
543
+ completed: 1,
544
+ total: 1,
545
+ percent: 100,
546
+ },
547
+ metadata: {
548
+ executionCompletedAt: new Date().toISOString(),
549
+ engine: CODEX_CLI_ENGINE_NAME,
550
+ model: model ?? "codex-default",
551
+ permissionMode: options.permissionMode,
552
+ },
553
+ });
554
+ }
555
+ finally {
556
+ fs.rmSync(outputDir, { recursive: true, force: true });
557
+ }
558
+ }
559
+ function runCodexCliProcess(options) {
560
+ return new Promise((resolve) => {
561
+ let stdout = "";
562
+ let stderr = "";
563
+ let settled = false;
564
+ const child = spawn("codex", options.args, {
565
+ cwd: options.cwd,
566
+ stdio: ["pipe", "pipe", "pipe"],
567
+ env: process.env,
568
+ });
569
+ const finish = (result) => {
570
+ if (settled)
571
+ return;
572
+ settled = true;
573
+ options.signal?.removeEventListener("abort", onAbort);
574
+ resolve({ ...result, stdout, stderr });
575
+ };
576
+ const onAbort = () => {
577
+ child.kill("SIGTERM");
578
+ };
579
+ if (options.signal) {
580
+ if (options.signal.aborted)
581
+ onAbort();
582
+ else
583
+ options.signal.addEventListener("abort", onAbort, { once: true });
584
+ }
585
+ child.stdout?.on("data", (chunk) => {
586
+ const text = chunk.toString();
587
+ stdout += text;
588
+ options.stdout?.write(text);
589
+ });
590
+ child.stderr?.on("data", (chunk) => {
591
+ stderr += chunk.toString();
592
+ });
593
+ child.on("error", (err) => {
594
+ finish({
595
+ exitCode: 1,
596
+ exitSignal: null,
597
+ error: err.code === "ENOENT"
598
+ ? "Codex CLI was not found. Install Codex and run `codex login`."
599
+ : err instanceof Error
600
+ ? err.message
601
+ : String(err),
602
+ });
603
+ });
604
+ child.on("exit", (exitCode, exitSignal) => {
605
+ finish({ exitCode, exitSignal });
606
+ });
607
+ child.stdin?.end(options.prompt);
608
+ });
609
+ }
610
+ function buildCodexCliPrompt(run, prompt) {
611
+ const permissionMode = run.permissionMode ?? "full-auto";
612
+ const mode = permissionMode === "read-only" || permissionMode === "ask-before-edit"
613
+ ? "Plan"
614
+ : "Auto";
615
+ const modeInstruction = mode === "Plan"
616
+ ? "Inspect and explain only. Do not edit files or run mutating commands."
617
+ : "Edit and verify as needed. Do not create, switch, reset, rebase, or stash git branches.";
618
+ return [
619
+ `You are running from Agent-Native Code in ${run.cwd || process.cwd()}.`,
620
+ "Follow the repository AGENTS.md and any relevant skill instructions.",
621
+ `Run mode: ${mode} (${permissionMode}). ${modeInstruction}`,
622
+ "",
623
+ "# User request",
624
+ prompt,
625
+ ].join("\n");
626
+ }
627
+ function codexSandboxForPermissionMode(permissionMode) {
628
+ return permissionMode === "read-only" || permissionMode === "ask-before-edit"
629
+ ? "read-only"
630
+ : "workspace-write";
631
+ }
632
+ function normalizeCodexCliModel(model) {
633
+ const trimmed = model?.trim();
634
+ if (!trimmed || trimmed === "auto" || trimmed === CODEX_CLI_ENGINE_NAME) {
635
+ return undefined;
636
+ }
637
+ return trimmed;
638
+ }
639
+ function normalizeRequestedEngine(engine) {
640
+ const trimmed = engine?.trim();
641
+ if (!trimmed || trimmed === "auto")
642
+ return undefined;
643
+ return trimmed;
644
+ }
645
+ function readCodexLastMessage(filePath) {
646
+ try {
647
+ const text = fs.readFileSync(filePath, "utf-8").trim();
648
+ return text || null;
649
+ }
650
+ catch {
651
+ return null;
652
+ }
653
+ }
392
654
  export async function executeExistingCodeAgentRun(runId, options = {}) {
393
655
  return executeCodeAgentRun({ ...options, runId, appendUserEvent: false });
394
656
  }