@getpaseo/server 0.1.80 → 0.1.82

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 (216) hide show
  1. package/dist/server/client/daemon-client.d.ts +6 -2
  2. package/dist/server/client/daemon-client.d.ts.map +1 -1
  3. package/dist/server/client/daemon-client.js +36 -1
  4. package/dist/server/client/daemon-client.js.map +1 -1
  5. package/dist/server/client/terminal-stream-router.d.ts +4 -0
  6. package/dist/server/client/terminal-stream-router.d.ts.map +1 -1
  7. package/dist/server/client/terminal-stream-router.js +8 -0
  8. package/dist/server/client/terminal-stream-router.js.map +1 -1
  9. package/dist/server/server/agent/agent-manager.d.ts +9 -7
  10. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  11. package/dist/server/server/agent/agent-manager.js +78 -92
  12. package/dist/server/server/agent/agent-manager.js.map +1 -1
  13. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  14. package/dist/server/server/agent/agent-metadata-generator.js +6 -7
  15. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  16. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  17. package/dist/server/server/agent/agent-projections.js +4 -4
  18. package/dist/server/server/agent/agent-projections.js.map +1 -1
  19. package/dist/server/server/agent/agent-prompt.d.ts +2 -9
  20. package/dist/server/server/agent/agent-prompt.d.ts.map +1 -1
  21. package/dist/server/server/agent/agent-prompt.js +7 -18
  22. package/dist/server/server/agent/agent-prompt.js.map +1 -1
  23. package/dist/server/server/agent/agent-response-loop.d.ts +5 -0
  24. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  25. package/dist/server/server/agent/agent-response-loop.js +12 -1
  26. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  27. package/dist/server/server/agent/agent-sdk-types.d.ts +13 -0
  28. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  29. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  30. package/dist/server/server/agent/agent-storage.d.ts +2 -7
  31. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  32. package/dist/server/server/agent/agent-storage.js +2 -16
  33. package/dist/server/server/agent/agent-storage.js.map +1 -1
  34. package/dist/server/server/agent/agent-timeline-store-types.d.ts +0 -4
  35. package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -1
  36. package/dist/server/server/agent/agent-timeline-store.d.ts +0 -5
  37. package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
  38. package/dist/server/server/agent/agent-timeline-store.js +0 -33
  39. package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
  40. package/dist/server/server/agent/import-sessions.d.ts.map +1 -1
  41. package/dist/server/server/agent/import-sessions.js +6 -0
  42. package/dist/server/server/agent/import-sessions.js.map +1 -1
  43. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  44. package/dist/server/server/agent/mcp-server.js +0 -9
  45. package/dist/server/server/agent/mcp-server.js.map +1 -1
  46. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  47. package/dist/server/server/agent/provider-launch-config.js +0 -1
  48. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  49. package/dist/server/server/agent/provider-manifest.d.ts +1 -1
  50. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  51. package/dist/server/server/agent/provider-registry.d.ts +2 -1
  52. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  53. package/dist/server/server/agent/provider-registry.js +5 -1
  54. package/dist/server/server/agent/provider-registry.js.map +1 -1
  55. package/dist/server/server/agent/provider-snapshot-manager.d.ts +2 -2
  56. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
  57. package/dist/server/server/agent/provider-snapshot-manager.js +60 -26
  58. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  59. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  60. package/dist/server/server/agent/providers/acp-agent.js +3 -0
  61. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  62. package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -1
  63. package/dist/server/server/agent/providers/claude/agent.js +275 -85
  64. package/dist/server/server/agent/providers/claude/agent.js.map +1 -1
  65. package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
  66. package/dist/server/server/agent/providers/claude/rewind.d.ts.map +1 -0
  67. package/dist/server/server/agent/providers/claude/rewind.js +30 -0
  68. package/dist/server/server/agent/providers/claude/rewind.js.map +1 -0
  69. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
  70. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts.map +1 -0
  71. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
  72. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js.map +1 -0
  73. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +168 -0
  74. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts.map +1 -1
  75. package/dist/server/server/agent/providers/codex/app-server-transport.js +48 -0
  76. package/dist/server/server/agent/providers/codex/app-server-transport.js.map +1 -1
  77. package/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
  78. package/dist/server/server/agent/providers/codex/rewind.d.ts.map +1 -0
  79. package/dist/server/server/agent/providers/codex/rewind.js +46 -0
  80. package/dist/server/server/agent/providers/codex/rewind.js.map +1 -0
  81. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +5 -0
  82. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts.map +1 -1
  83. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +45 -0
  84. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js.map +1 -1
  85. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +1 -1
  86. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
  87. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +11 -11
  88. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
  89. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +32 -34
  90. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  91. package/dist/server/server/agent/providers/codex-app-server-agent.js +206 -60
  92. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  93. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  94. package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -0
  95. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
  96. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +13 -0
  97. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
  98. package/dist/server/server/agent/providers/mock-load-test-agent.js +55 -1
  99. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
  100. package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
  101. package/dist/server/server/agent/providers/opencode/rewind.d.ts.map +1 -0
  102. package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
  103. package/dist/server/server/agent/providers/opencode/rewind.js.map +1 -0
  104. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts +4 -0
  105. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts.map +1 -1
  106. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js +12 -2
  107. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js.map +1 -1
  108. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -1
  109. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +110 -2
  110. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -1
  111. package/dist/server/server/agent/providers/opencode-agent.d.ts +18 -0
  112. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  113. package/dist/server/server/agent/providers/opencode-agent.js +265 -42
  114. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  115. package/dist/server/server/agent/providers/pi/agent.d.ts +23 -1
  116. package/dist/server/server/agent/providers/pi/agent.d.ts.map +1 -1
  117. package/dist/server/server/agent/providers/pi/agent.js +470 -17
  118. package/dist/server/server/agent/providers/pi/agent.js.map +1 -1
  119. package/dist/server/server/agent/providers/pi/cli-runtime.js +4 -1
  120. package/dist/server/server/agent/providers/pi/cli-runtime.js.map +1 -1
  121. package/dist/server/server/agent/providers/pi/history-mapper.d.ts +5 -1
  122. package/dist/server/server/agent/providers/pi/history-mapper.d.ts.map +1 -1
  123. package/dist/server/server/agent/providers/pi/history-mapper.js +3 -2
  124. package/dist/server/server/agent/providers/pi/history-mapper.js.map +1 -1
  125. package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
  126. package/dist/server/server/agent/providers/pi/rewind.d.ts.map +1 -0
  127. package/dist/server/server/agent/providers/pi/rewind.js +8 -0
  128. package/dist/server/server/agent/providers/pi/rewind.js.map +1 -0
  129. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +10 -0
  130. package/dist/server/server/agent/providers/pi/rpc-types.d.ts.map +1 -1
  131. package/dist/server/server/agent/providers/pi/runtime.d.ts +7 -0
  132. package/dist/server/server/agent/providers/pi/runtime.d.ts.map +1 -1
  133. package/dist/server/server/agent/providers/pi/runtime.js +4 -0
  134. package/dist/server/server/agent/providers/pi/runtime.js.map +1 -1
  135. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +23 -0
  136. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts.map +1 -1
  137. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +54 -1
  138. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js.map +1 -1
  139. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +4 -1
  140. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  141. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +57 -1
  142. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
  143. package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
  144. package/dist/server/server/agent/rewind/rewind.d.ts.map +1 -0
  145. package/dist/server/server/agent/rewind/rewind.js +29 -0
  146. package/dist/server/server/agent/rewind/rewind.js.map +1 -0
  147. package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
  148. package/dist/server/server/agent/rewind/test-rewind-session.d.ts.map +1 -0
  149. package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
  150. package/dist/server/server/agent/rewind/test-rewind-session.js.map +1 -0
  151. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  152. package/dist/server/server/persistence-hooks.js +0 -2
  153. package/dist/server/server/persistence-hooks.js.map +1 -1
  154. package/dist/server/server/session.d.ts +2 -0
  155. package/dist/server/server/session.d.ts.map +1 -1
  156. package/dist/server/server/session.js +39 -9
  157. package/dist/server/server/session.js.map +1 -1
  158. package/dist/server/server/websocket-server.d.ts.map +1 -1
  159. package/dist/server/server/websocket-server.js +4 -0
  160. package/dist/server/server/websocket-server.js.map +1 -1
  161. package/dist/server/server/worktree-branch-name-generator.d.ts +1 -0
  162. package/dist/server/server/worktree-branch-name-generator.d.ts.map +1 -1
  163. package/dist/server/server/worktree-branch-name-generator.js +5 -6
  164. package/dist/server/server/worktree-branch-name-generator.js.map +1 -1
  165. package/dist/server/shared/binary-frames/terminal.d.ts +1 -0
  166. package/dist/server/shared/binary-frames/terminal.d.ts.map +1 -1
  167. package/dist/server/shared/binary-frames/terminal.js +3 -1
  168. package/dist/server/shared/binary-frames/terminal.js.map +1 -1
  169. package/dist/server/shared/messages.d.ts +502 -0
  170. package/dist/server/shared/messages.d.ts.map +1 -1
  171. package/dist/server/shared/messages.js +43 -0
  172. package/dist/server/shared/messages.js.map +1 -1
  173. package/dist/server/shared/terminal-snapshot.d.ts +3 -0
  174. package/dist/server/shared/terminal-snapshot.d.ts.map +1 -0
  175. package/dist/server/shared/terminal-snapshot.js +165 -0
  176. package/dist/server/shared/terminal-snapshot.js.map +1 -0
  177. package/dist/server/terminal/terminal-manager.d.ts +2 -2
  178. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  179. package/dist/server/terminal/terminal-manager.js +3 -3
  180. package/dist/server/terminal/terminal-manager.js.map +1 -1
  181. package/dist/server/terminal/terminal-restore.d.ts +17 -0
  182. package/dist/server/terminal/terminal-restore.d.ts.map +1 -0
  183. package/dist/server/terminal/terminal-restore.js +46 -0
  184. package/dist/server/terminal/terminal-restore.js.map +1 -0
  185. package/dist/server/terminal/terminal-session-controller.d.ts +3 -0
  186. package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
  187. package/dist/server/terminal/terminal-session-controller.js +88 -27
  188. package/dist/server/terminal/terminal-session-controller.js.map +1 -1
  189. package/dist/server/terminal/terminal-worker-process.js +1 -1
  190. package/dist/server/terminal/terminal-worker-process.js.map +1 -1
  191. package/dist/server/terminal/terminal-worker-protocol.d.ts +2 -1
  192. package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -1
  193. package/dist/server/terminal/terminal.d.ts +11 -2
  194. package/dist/server/terminal/terminal.d.ts.map +1 -1
  195. package/dist/server/terminal/terminal.js +33 -8
  196. package/dist/server/terminal/terminal.js.map +1 -1
  197. package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -1
  198. package/dist/server/terminal/worker-terminal-manager.js +16 -4
  199. package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
  200. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  201. package/dist/server/utils/checkout-git.js +7 -7
  202. package/dist/server/utils/checkout-git.js.map +1 -1
  203. package/dist/src/server/agent/agent-sdk-types.js.map +1 -1
  204. package/dist/src/server/agent/provider-launch-config.js +0 -1
  205. package/dist/src/server/agent/provider-launch-config.js.map +1 -1
  206. package/dist/src/shared/messages.js +43 -0
  207. package/dist/src/shared/messages.js.map +1 -1
  208. package/package.json +3 -3
  209. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +0 -9
  210. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +0 -1
  211. package/dist/server/server/agent/providers/codex-rollout-timeline.js +0 -555
  212. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +0 -1
  213. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +0 -10
  214. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts.map +0 -1
  215. package/dist/server/server/agent/providers/pi/session-descriptor.js +0 -300
  216. package/dist/server/server/agent/providers/pi/session-descriptor.js.map +0 -1
@@ -9,14 +9,15 @@ import { z } from "zod";
9
9
  import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
10
10
  import { composeSystemPromptParts } from "../system-prompt.js";
11
11
  import { curateAgentActivity } from "../activity-curator.js";
12
- import { mapCodexRolloutToolCall, mapCodexToolCallFromThreadItem, } from "./codex/tool-call-mapper.js";
12
+ import { mapCodexToolCallEnvelope, mapCodexToolCallFromThreadItem, } from "./codex/tool-call-mapper.js";
13
13
  import { createProviderEnv, createProviderEnvSpec, resolveProviderCommandPrefix, } from "../provider-launch-config.js";
14
14
  import { findExecutable, isCommandAvailable, probeExecutable } from "../../../utils/executable.js";
15
15
  import { createPathEquivalenceMatcher } from "../../../utils/path.js";
16
16
  import { spawnProcess } from "../../../utils/spawn.js";
17
17
  import { extractCodexTerminalSessionId, nonEmptyString } from "./tool-call-mapper-utils.js";
18
18
  import { buildCodexFeatures, codexModelSupportsFastMode } from "./codex-feature-definitions.js";
19
- import { CodexAppServerClient, } from "./codex/app-server-transport.js";
19
+ import { CodexAppServerClient, parseCodexThreadForkResponse, parseCodexThreadRollbackResponse, } from "./codex/app-server-transport.js";
20
+ import { revertCodexConversation } from "./codex/rewind.js";
20
21
  import { renderProviderImageOutputAsAssistantMarkdown, } from "./provider-image-output.js";
21
22
  import { normalizeProviderReplayTimestamp } from "../provider-history-timestamps.js";
22
23
  import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, resolveBinaryVersion, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
@@ -89,6 +90,9 @@ const CODEX_APP_SERVER_CAPABILITIES = {
89
90
  supportsMcpServers: true,
90
91
  supportsReasoningStream: true,
91
92
  supportsToolInvocations: true,
93
+ supportsRewindConversation: true,
94
+ supportsRewindFiles: false,
95
+ supportsRewindBoth: false,
92
96
  };
93
97
  const CODEX_MODES = [
94
98
  {
@@ -210,7 +214,7 @@ function normalizeCodexOutputSchemaNode(schema, schemaPath) {
210
214
  normalized.required = Array.from(new Set([...existingRequired, ...propertyKeys]));
211
215
  return normalized;
212
216
  }
213
- function normalizeCodexOutputSchema(schema) {
217
+ export function normalizeCodexOutputSchema(schema) {
214
218
  if (!isSchemaRecord(schema)) {
215
219
  throw new Error("Codex structured outputs require a JSON object schema.");
216
220
  }
@@ -233,7 +237,7 @@ function codexMicrosoftStorePackageRoot() {
233
237
  }
234
238
  return path.join(localAppData, "Packages");
235
239
  }
236
- async function findCodexMicrosoftStoreBinary() {
240
+ export async function findCodexMicrosoftStoreBinary() {
237
241
  if (process.platform !== "win32") {
238
242
  return null;
239
243
  }
@@ -260,7 +264,7 @@ async function findCodexMicrosoftStoreBinary() {
260
264
  }
261
265
  return null;
262
266
  }
263
- async function findDefaultCodexBinary() {
267
+ export async function findDefaultCodexBinary() {
264
268
  return (await findExecutable("codex")) ?? (await findCodexMicrosoftStoreBinary());
265
269
  }
266
270
  async function resolveCodexBinary() {
@@ -408,7 +412,7 @@ async function listCodexCustomPrompts() {
408
412
  const commands = parsedCommands.filter((cmd) => cmd !== null);
409
413
  return commands.sort((a, b) => a.name.localeCompare(b.name));
410
414
  }
411
- async function listCodexSkills(cwd, workspaceGitService) {
415
+ export async function listCodexSkills(cwd, workspaceGitService) {
412
416
  const candidates = [];
413
417
  candidates.push(path.join(cwd, ".codex", "skills"));
414
418
  const repoRoot = workspaceGitService
@@ -552,7 +556,7 @@ function filterCodexThreadsByCwd(threads, cwd) {
552
556
  const matchesCwd = createPathEquivalenceMatcher(cwd);
553
557
  return threads.filter((thread) => typeof thread.cwd === "string" && matchesCwd(thread.cwd));
554
558
  }
555
- function toAgentUsage(tokenUsage) {
559
+ export function toAgentUsage(tokenUsage) {
556
560
  const usage = toObjectRecord(tokenUsage);
557
561
  if (!usage)
558
562
  return undefined;
@@ -589,7 +593,7 @@ function normalizePlanMarkdown(text) {
589
593
  .join("\n")
590
594
  .trim();
591
595
  }
592
- function planStepsToMarkdown(steps) {
596
+ export function planStepsToMarkdown(steps) {
593
597
  const lines = steps
594
598
  .map((entry) => entry.step.trim())
595
599
  .filter((step) => step.length > 0)
@@ -601,7 +605,7 @@ function planStepsToMarkdown(steps) {
601
605
  });
602
606
  return normalizePlanMarkdown(lines.join("\n"));
603
607
  }
604
- function mapCodexPlanToToolCall(params) {
608
+ export function mapCodexPlanToToolCall(params) {
605
609
  const text = normalizePlanMarkdown(params.text);
606
610
  if (!text) {
607
611
  return null;
@@ -658,7 +662,7 @@ function buildCodexPlanImplementationPrompt(planText) {
658
662
  "Carry out the work, make the necessary code changes, and verify the result.",
659
663
  ].join("\n\n");
660
664
  }
661
- function normalizeCodexQuestionPrompts(raw) {
665
+ export function normalizeCodexQuestionPrompts(raw) {
662
666
  if (!Array.isArray(raw)) {
663
667
  return [];
664
668
  }
@@ -707,7 +711,7 @@ function normalizeCodexQuestionPrompts(raw) {
707
711
  }
708
712
  return questions;
709
713
  }
710
- function formatCodexQuestionPrompts(questions) {
714
+ export function formatCodexQuestionPrompts(questions) {
711
715
  return questions
712
716
  .map((question) => {
713
717
  const lines = [`${question.header}: ${question.question}`];
@@ -719,7 +723,7 @@ function formatCodexQuestionPrompts(questions) {
719
723
  .join("\n\n")
720
724
  .trim();
721
725
  }
722
- function mapCodexQuestionRequestToToolCall(params) {
726
+ export function mapCodexQuestionRequestToToolCall(params) {
723
727
  const formattedQuestions = formatCodexQuestionPrompts(params.questions);
724
728
  const formattedAnswers = params.answers && Object.keys(params.answers).length > 0
725
729
  ? Object.entries(params.answers)
@@ -1025,7 +1029,7 @@ function mapCodexExecNotificationToToolCall(params) {
1025
1029
  ? { exitCode: params.exitCode }
1026
1030
  : {}),
1027
1031
  };
1028
- const mapped = mapCodexRolloutToolCall({
1032
+ const mapped = mapCodexToolCallEnvelope({
1029
1033
  callId: params.callId ?? null,
1030
1034
  name: "shell",
1031
1035
  input: {
@@ -1041,7 +1045,7 @@ function mapCodexExecNotificationToToolCall(params) {
1041
1045
  }
1042
1046
  return params.running ? toRunningToolCall(mapped) : mapped;
1043
1047
  }
1044
- function mapCodexPatchNotificationToToolCall(params) {
1048
+ export function mapCodexPatchNotificationToToolCall(params) {
1045
1049
  const files = parseCodexPatchChanges(params.changes);
1046
1050
  const firstPath = files[0]?.path;
1047
1051
  const firstPatchText = files
@@ -1049,7 +1053,7 @@ function mapCodexPatchNotificationToToolCall(params) {
1049
1053
  .find((value) => typeof value === "string" && value.length > 0);
1050
1054
  const patchText = firstPatchText;
1051
1055
  const patchFields = codexPatchTextFields(patchText);
1052
- const mapped = mapCodexRolloutToolCall({
1056
+ const mapped = mapCodexToolCallEnvelope({
1053
1057
  callId: params.callId ?? null,
1054
1058
  name: "apply_patch",
1055
1059
  input: firstPath
@@ -1125,7 +1129,12 @@ function mapCodexThreadUserMessageItem(normalizedItem, includeUserMessage) {
1125
1129
  return null;
1126
1130
  }
1127
1131
  const text = extractUserText(normalizedItem.content) ?? "";
1128
- return { type: "user_message", text };
1132
+ const messageId = nonEmptyString(normalizedItem.id);
1133
+ return {
1134
+ type: "user_message",
1135
+ text,
1136
+ ...(messageId ? { messageId } : {}),
1137
+ };
1129
1138
  }
1130
1139
  function firstStringField(record, fields) {
1131
1140
  for (const field of fields) {
@@ -1209,7 +1218,7 @@ function mapCodexThreadImageItem(normalizedType, normalizedItem) {
1209
1218
  mimeType: result?.mimeType ?? null,
1210
1219
  }, { materialize: materializeCodexImageOutput });
1211
1220
  }
1212
- function threadItemToTimeline(item, options) {
1221
+ export function threadItemToTimeline(item, options) {
1213
1222
  const itemRecord = toObjectRecord(item);
1214
1223
  if (!itemRecord)
1215
1224
  return null;
@@ -1292,6 +1301,18 @@ function readCodexThread(client, threadId) {
1292
1301
  includeTurns: true,
1293
1302
  });
1294
1303
  }
1304
+ export async function forkCodexThread(client, params) {
1305
+ if (client.forkThread) {
1306
+ return client.forkThread(params);
1307
+ }
1308
+ return parseCodexThreadForkResponse(await client.request("thread/fork", params));
1309
+ }
1310
+ export async function rollbackCodexThread(client, params) {
1311
+ if (client.rollbackThread) {
1312
+ return client.rollbackThread(params);
1313
+ }
1314
+ return parseCodexThreadRollbackResponse(await client.request("thread/rollback", params));
1315
+ }
1295
1316
  function toSandboxPolicy(type, networkAccess) {
1296
1317
  switch (type) {
1297
1318
  case "read-only":
@@ -1547,6 +1568,23 @@ const CodexEventTurnDiffNotificationSchema = z
1547
1568
  .passthrough(),
1548
1569
  })
1549
1570
  .passthrough();
1571
+ const CodexEventThreadRolledBackNotificationSchema = z
1572
+ .object({
1573
+ msg: z
1574
+ .object({
1575
+ type: z.literal("thread_rolled_back"),
1576
+ num_turns: z.number().int().nonnegative().optional(),
1577
+ numTurns: z.number().int().nonnegative().optional(),
1578
+ })
1579
+ .passthrough(),
1580
+ })
1581
+ .passthrough();
1582
+ function isCodexDeltaNotification(parsed) {
1583
+ return (parsed.kind === "agent_message_delta" ||
1584
+ parsed.kind === "reasoning_delta" ||
1585
+ parsed.kind === "exec_command_output_delta" ||
1586
+ parsed.kind === "file_change_output_delta");
1587
+ }
1550
1588
  const CodexNotificationSchema = z.union([
1551
1589
  z
1552
1590
  .object({ method: z.literal("thread/started"), params: ThreadStartedNotificationSchema })
@@ -1920,6 +1958,20 @@ const CodexNotificationSchema = z.union([
1920
1958
  method,
1921
1959
  params,
1922
1960
  })),
1961
+ z
1962
+ .object({
1963
+ method: z.literal("codex/event/thread_rolled_back"),
1964
+ params: CodexEventThreadRolledBackNotificationSchema,
1965
+ })
1966
+ .transform(({ params }) => ({
1967
+ kind: "thread_rolled_back",
1968
+ numTurns: params.msg.num_turns ?? params.msg.numTurns ?? 0,
1969
+ })),
1970
+ z.object({ method: z.literal("codex/event/thread_rolled_back"), params: z.unknown() }).transform(({ method, params }) => ({
1971
+ kind: "invalid_payload",
1972
+ method,
1973
+ params,
1974
+ })),
1923
1975
  z
1924
1976
  .object({ method: z.string(), params: z.unknown() })
1925
1977
  .transform(({ method, params }) => ({ kind: "unknown_method", method, params })),
@@ -2013,7 +2065,7 @@ function toCodexTextInput(text) {
2013
2065
  text_elements: [],
2014
2066
  };
2015
2067
  }
2016
- function buildCodexAppServerEnv(runtimeSettings, launchEnv) {
2068
+ export function buildCodexAppServerEnv(runtimeSettings, launchEnv) {
2017
2069
  return createProviderEnv({
2018
2070
  runtimeSettings,
2019
2071
  overlays: [launchEnv],
@@ -2070,7 +2122,7 @@ function buildCodexCustomProviderConfig(runtimeSettings, customProvider) {
2070
2122
  },
2071
2123
  };
2072
2124
  }
2073
- class CodexAppServerAgentSession {
2125
+ export class CodexAppServerAgentSession {
2074
2126
  constructor(config, resumeHandle, logger, spawnAppServer, deps = {}, ephemeral = false, goalsEnabled = false, autoReviewEnabled = false, agentId) {
2075
2127
  this.resumeHandle = resumeHandle;
2076
2128
  this.spawnAppServer = spawnAppServer;
@@ -2113,6 +2165,8 @@ class CodexAppServerAgentSession {
2113
2165
  this.warnedInvalidNotificationPayloads = new Set();
2114
2166
  this.warnedIncompleteEditToolCallIds = new Set();
2115
2167
  this.latestPlanResult = null;
2168
+ this.userMessageTurnIndexes = new Map();
2169
+ this.userMessageTurnIds = [];
2116
2170
  this.pendingManualCompactionStarts = 0;
2117
2171
  this.compactionTriggerByItemId = new Map();
2118
2172
  // Codex can report one completed compaction through both channels:
@@ -2362,21 +2416,22 @@ class CodexAppServerAgentSession {
2362
2416
  return;
2363
2417
  const client = this.client;
2364
2418
  const threadId = this.currentThreadId;
2365
- try {
2366
- const timeline = await loadCodexThreadHistoryTimeline({
2367
- threadId,
2368
- cwd: this.config.cwd ?? null,
2369
- requestThread: (threadIdToRead) => {
2370
- return readCodexThread(client, threadIdToRead);
2371
- },
2372
- });
2373
- if (timeline.length > 0) {
2374
- this.persistedHistory = timeline;
2375
- this.historyPending = true;
2419
+ const timeline = await loadCodexThreadHistoryTimeline({
2420
+ threadId,
2421
+ cwd: this.config.cwd ?? null,
2422
+ requestThread: (threadIdToRead) => {
2423
+ return readCodexThread(client, threadIdToRead);
2424
+ },
2425
+ });
2426
+ this.resetCodexUserMessageTurns();
2427
+ for (const entry of timeline) {
2428
+ if (entry.item.type === "user_message") {
2429
+ this.rememberCodexUserMessageTurn(entry.item.messageId);
2376
2430
  }
2377
2431
  }
2378
- catch (error) {
2379
- this.logger.warn({ error }, "Failed to load Codex thread history");
2432
+ if (timeline.length > 0) {
2433
+ this.persistedHistory = timeline;
2434
+ this.historyPending = true;
2380
2435
  }
2381
2436
  }
2382
2437
  async ensureThreadLoaded() {
@@ -2592,6 +2647,37 @@ class CodexAppServerAgentSession {
2592
2647
  }
2593
2648
  return { turnId };
2594
2649
  }
2650
+ rememberCodexUserMessageTurn(messageId) {
2651
+ if (typeof messageId !== "string" || messageId.length === 0) {
2652
+ return false;
2653
+ }
2654
+ if (this.userMessageTurnIndexes.has(messageId)) {
2655
+ return false;
2656
+ }
2657
+ this.userMessageTurnIndexes.set(messageId, this.userMessageTurnIds.length);
2658
+ this.userMessageTurnIds.push(messageId);
2659
+ return true;
2660
+ }
2661
+ resetCodexUserMessageTurns() {
2662
+ this.userMessageTurnIndexes.clear();
2663
+ this.userMessageTurnIds.length = 0;
2664
+ }
2665
+ truncateCodexUserMessageTurns(numTurns) {
2666
+ if (numTurns <= 0) {
2667
+ return;
2668
+ }
2669
+ this.userMessageTurnIds.length = Math.max(0, this.userMessageTurnIds.length - numTurns);
2670
+ this.userMessageTurnIndexes.clear();
2671
+ this.userMessageTurnIds.forEach((messageId, index) => {
2672
+ this.userMessageTurnIndexes.set(messageId, index);
2673
+ });
2674
+ }
2675
+ codexUserMessageTurns() {
2676
+ return {
2677
+ resolve: (messageId) => this.userMessageTurnIndexes.get(messageId) ?? null,
2678
+ count: () => this.userMessageTurnIds.length,
2679
+ };
2680
+ }
2595
2681
  subscribe(callback) {
2596
2682
  this.subscribers.add(callback);
2597
2683
  return () => {
@@ -2826,6 +2912,34 @@ class CodexAppServerAgentSession {
2826
2912
  },
2827
2913
  };
2828
2914
  }
2915
+ async revertConversation(input) {
2916
+ await this.connect();
2917
+ if (!this.client) {
2918
+ throw new Error("Codex client is not initialized");
2919
+ }
2920
+ if (this.currentThreadId) {
2921
+ await this.ensureThreadLoaded();
2922
+ }
2923
+ else {
2924
+ await this.ensureThread();
2925
+ }
2926
+ await revertCodexConversation({
2927
+ client: this.client,
2928
+ threadId: this.currentThreadId,
2929
+ messageId: input.messageId,
2930
+ cwd: this.config.cwd ?? null,
2931
+ model: this.config.model ?? null,
2932
+ serviceTier: this.serviceTier,
2933
+ userMessageTurns: this.codexUserMessageTurns(),
2934
+ setThreadId: async (threadId) => {
2935
+ this.currentThreadId = threadId;
2936
+ this.cachedRuntimeInfo = null;
2937
+ this.persistedHistory = [];
2938
+ this.historyPending = false;
2939
+ await this.loadPersistedHistory();
2940
+ },
2941
+ });
2942
+ }
2829
2943
  async interrupt() {
2830
2944
  if (!this.client || !this.currentThreadId || !this.currentTurnId)
2831
2945
  return;
@@ -3142,6 +3256,13 @@ class CodexAppServerAgentSession {
3142
3256
  handleNotification(method, params) {
3143
3257
  const parsed = CodexNotificationSchema.parse({ method, params });
3144
3258
  this.traceParsedNotification(method, params, parsed);
3259
+ if (isCodexDeltaNotification(parsed)) {
3260
+ this.handleCodexDeltaNotification(parsed);
3261
+ return;
3262
+ }
3263
+ if (this.handleThreadStateNotification(parsed)) {
3264
+ return;
3265
+ }
3145
3266
  switch (parsed.kind) {
3146
3267
  case "thread_started":
3147
3268
  this.handleThreadStartedNotification(parsed);
@@ -3163,15 +3284,6 @@ class CodexAppServerAgentSession {
3163
3284
  case "token_usage_updated":
3164
3285
  this.handleTokenUsageUpdatedNotification(parsed);
3165
3286
  return;
3166
- case "context_compacted":
3167
- this.handleContextCompactedNotification(parsed);
3168
- return;
3169
- case "agent_message_delta":
3170
- case "reasoning_delta":
3171
- case "exec_command_output_delta":
3172
- case "file_change_output_delta":
3173
- this.handleCodexDeltaNotification(parsed);
3174
- return;
3175
3287
  case "exec_command_started":
3176
3288
  this.handleExecCommandStartedNotification(parsed);
3177
3289
  return;
@@ -3196,8 +3308,23 @@ class CodexAppServerAgentSession {
3196
3308
  case "invalid_payload":
3197
3309
  this.warnInvalidNotificationPayload(parsed.method, parsed.params);
3198
3310
  return;
3199
- default:
3311
+ case "unknown_method":
3200
3312
  this.warnUnknownNotificationMethod(parsed.method, parsed.params);
3313
+ return;
3314
+ default:
3315
+ return;
3316
+ }
3317
+ }
3318
+ handleThreadStateNotification(parsed) {
3319
+ switch (parsed.kind) {
3320
+ case "context_compacted":
3321
+ this.handleContextCompactedNotification(parsed);
3322
+ return true;
3323
+ case "thread_rolled_back":
3324
+ this.handleThreadRolledBackNotification(parsed);
3325
+ return true;
3326
+ default:
3327
+ return false;
3201
3328
  }
3202
3329
  }
3203
3330
  traceParsedNotification(method, params, parsed) {
@@ -3501,6 +3628,13 @@ class CodexAppServerAgentSession {
3501
3628
  return (normalizeCodexThreadItemType(typeof item.type === "string" ? item.type : undefined) ===
3502
3629
  CODEX_CONTEXT_COMPACTION_TYPE);
3503
3630
  }
3631
+ isUserMessageItem(item) {
3632
+ return (normalizeCodexThreadItemType(typeof item.type === "string" ? item.type : undefined) ===
3633
+ "userMessage");
3634
+ }
3635
+ handleThreadRolledBackNotification(parsed) {
3636
+ this.truncateCodexUserMessageTurns(parsed.numTurns);
3637
+ }
3504
3638
  handleContextCompactedNotification(parsed) {
3505
3639
  if (parsed.threadId !== this.currentThreadId) {
3506
3640
  return;
@@ -3613,6 +3747,10 @@ class CodexAppServerAgentSession {
3613
3747
  if (parsed.source === "codex_event") {
3614
3748
  return;
3615
3749
  }
3750
+ if (this.isUserMessageItem(parsed.item)) {
3751
+ this.handleUserMessageItem(parsed);
3752
+ return;
3753
+ }
3616
3754
  if (this.isContextCompactionItem(parsed.item)) {
3617
3755
  if (this.unpairedCompactionNotificationCompletions > 0) {
3618
3756
  this.unpairedCompactionNotificationCompletions -= 1;
@@ -3738,6 +3876,10 @@ class CodexAppServerAgentSession {
3738
3876
  if (parsed.source === "codex_event") {
3739
3877
  return;
3740
3878
  }
3879
+ if (this.isUserMessageItem(parsed.item)) {
3880
+ this.handleUserMessageItem(parsed);
3881
+ return;
3882
+ }
3741
3883
  if (this.isContextCompactionItem(parsed.item)) {
3742
3884
  this.emitEvent({
3743
3885
  type: "timeline",
@@ -3781,6 +3923,28 @@ class CodexAppServerAgentSession {
3781
3923
  this.pendingFileChangeOutputDeltas.delete(itemId);
3782
3924
  }
3783
3925
  }
3926
+ handleUserMessageItem(parsed) {
3927
+ const itemId = parsed.item.id;
3928
+ const timelineItem = threadItemToTimeline(parsed.item, {
3929
+ includeUserMessage: true,
3930
+ cwd: this.config.cwd ?? null,
3931
+ });
3932
+ if (!timelineItem || timelineItem.type !== "user_message") {
3933
+ return;
3934
+ }
3935
+ const childSubAgentCallId = this.getSubAgentCallIdForThread(parsed.threadId);
3936
+ if (childSubAgentCallId) {
3937
+ if (itemId) {
3938
+ this.upsertSubAgentChildItem(childSubAgentCallId, itemId, timelineItem);
3939
+ }
3940
+ this.emitSubAgentActivityUpdate(childSubAgentCallId, "running");
3941
+ return;
3942
+ }
3943
+ if (!this.rememberCodexUserMessageTurn(timelineItem.messageId)) {
3944
+ return;
3945
+ }
3946
+ this.emitEvent({ type: "timeline", provider: CODEX_PROVIDER, item: timelineItem });
3947
+ }
3784
3948
  warnUnknownNotificationMethod(method, params) {
3785
3949
  if (this.warnedUnknownNotificationMethods.has(method)) {
3786
3950
  return;
@@ -4343,22 +4507,4 @@ function resolveSkillDescription(skill) {
4343
4507
  }
4344
4508
  return "Skill";
4345
4509
  }
4346
- export const __codexAppServerInternals = {
4347
- buildCodexAppServerEnv,
4348
- CodexAppServerClient,
4349
- codexModelSupportsFastMode,
4350
- CodexAppServerAgentSession,
4351
- findCodexMicrosoftStoreBinary,
4352
- findDefaultCodexBinary,
4353
- formatCodexQuestionPrompts,
4354
- mapCodexQuestionRequestToToolCall,
4355
- mapCodexPatchNotificationToToolCall,
4356
- planStepsToMarkdown,
4357
- mapCodexPlanToToolCall,
4358
- listCodexSkills,
4359
- normalizeCodexOutputSchema,
4360
- normalizeCodexQuestionPrompts,
4361
- toAgentUsage,
4362
- threadItemToTimeline,
4363
- };
4364
4510
  //# sourceMappingURL=codex-app-server-agent.js.map