@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.
- package/dist/server/client/daemon-client.d.ts +6 -2
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +36 -1
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/client/terminal-stream-router.d.ts +4 -0
- package/dist/server/client/terminal-stream-router.d.ts.map +1 -1
- package/dist/server/client/terminal-stream-router.js +8 -0
- package/dist/server/client/terminal-stream-router.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +9 -7
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +78 -92
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +6 -7
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +4 -4
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-prompt.d.ts +2 -9
- package/dist/server/server/agent/agent-prompt.d.ts.map +1 -1
- package/dist/server/server/agent/agent-prompt.js +7 -18
- package/dist/server/server/agent/agent-prompt.js.map +1 -1
- package/dist/server/server/agent/agent-response-loop.d.ts +5 -0
- package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
- package/dist/server/server/agent/agent-response-loop.js +12 -1
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +13 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +2 -7
- package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
- package/dist/server/server/agent/agent-storage.js +2 -16
- package/dist/server/server/agent/agent-storage.js.map +1 -1
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +0 -4
- package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.d.ts +0 -5
- package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.js +0 -33
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
- package/dist/server/server/agent/import-sessions.d.ts.map +1 -1
- package/dist/server/server/agent/import-sessions.js +6 -0
- package/dist/server/server/agent/import-sessions.js.map +1 -1
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +0 -9
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +0 -1
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts +2 -1
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +5 -1
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +2 -2
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +60 -26
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +3 -0
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/agent.js +275 -85
- package/dist/server/server/agent/providers/claude/agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
- package/dist/server/server/agent/providers/claude/rewind.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/rewind.js +30 -0
- package/dist/server/server/agent/providers/claude/rewind.js.map +1 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js.map +1 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +168 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.js +48 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.js.map +1 -1
- package/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
- package/dist/server/server/agent/providers/codex/rewind.d.ts.map +1 -0
- package/dist/server/server/agent/providers/codex/rewind.js +46 -0
- package/dist/server/server/agent/providers/codex/rewind.js.map +1 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +5 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +45 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +11 -11
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +32 -34
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +206 -60
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +13 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.js +55 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
- package/dist/server/server/agent/providers/opencode/rewind.d.ts.map +1 -0
- package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
- package/dist/server/server/agent/providers/opencode/rewind.js.map +1 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts +4 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js +12 -2
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +110 -2
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +18 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +265 -42
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi/agent.d.ts +23 -1
- package/dist/server/server/agent/providers/pi/agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi/agent.js +470 -17
- package/dist/server/server/agent/providers/pi/agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi/cli-runtime.js +4 -1
- package/dist/server/server/agent/providers/pi/cli-runtime.js.map +1 -1
- package/dist/server/server/agent/providers/pi/history-mapper.d.ts +5 -1
- package/dist/server/server/agent/providers/pi/history-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi/history-mapper.js +3 -2
- package/dist/server/server/agent/providers/pi/history-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
- package/dist/server/server/agent/providers/pi/rewind.d.ts.map +1 -0
- package/dist/server/server/agent/providers/pi/rewind.js +8 -0
- package/dist/server/server/agent/providers/pi/rewind.js.map +1 -0
- package/dist/server/server/agent/providers/pi/rpc-types.d.ts +10 -0
- package/dist/server/server/agent/providers/pi/rpc-types.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi/runtime.d.ts +7 -0
- package/dist/server/server/agent/providers/pi/runtime.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi/runtime.js +4 -0
- package/dist/server/server/agent/providers/pi/runtime.js.map +1 -1
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +23 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +54 -1
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +4 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +57 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
- package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
- package/dist/server/server/agent/rewind/rewind.d.ts.map +1 -0
- package/dist/server/server/agent/rewind/rewind.js +29 -0
- package/dist/server/server/agent/rewind/rewind.js.map +1 -0
- package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
- package/dist/server/server/agent/rewind/test-rewind-session.d.ts.map +1 -0
- package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
- package/dist/server/server/agent/rewind/test-rewind-session.js.map +1 -0
- package/dist/server/server/persistence-hooks.d.ts.map +1 -1
- package/dist/server/server/persistence-hooks.js +0 -2
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/session.d.ts +2 -0
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +39 -9
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +4 -0
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/worktree-branch-name-generator.d.ts +1 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts.map +1 -1
- package/dist/server/server/worktree-branch-name-generator.js +5 -6
- package/dist/server/server/worktree-branch-name-generator.js.map +1 -1
- package/dist/server/shared/binary-frames/terminal.d.ts +1 -0
- package/dist/server/shared/binary-frames/terminal.d.ts.map +1 -1
- package/dist/server/shared/binary-frames/terminal.js +3 -1
- package/dist/server/shared/binary-frames/terminal.js.map +1 -1
- package/dist/server/shared/messages.d.ts +502 -0
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +43 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/terminal-snapshot.d.ts +3 -0
- package/dist/server/shared/terminal-snapshot.d.ts.map +1 -0
- package/dist/server/shared/terminal-snapshot.js +165 -0
- package/dist/server/shared/terminal-snapshot.js.map +1 -0
- package/dist/server/terminal/terminal-manager.d.ts +2 -2
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +3 -3
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-restore.d.ts +17 -0
- package/dist/server/terminal/terminal-restore.d.ts.map +1 -0
- package/dist/server/terminal/terminal-restore.js +46 -0
- package/dist/server/terminal/terminal-restore.js.map +1 -0
- package/dist/server/terminal/terminal-session-controller.d.ts +3 -0
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
- package/dist/server/terminal/terminal-session-controller.js +88 -27
- package/dist/server/terminal/terminal-session-controller.js.map +1 -1
- package/dist/server/terminal/terminal-worker-process.js +1 -1
- package/dist/server/terminal/terminal-worker-process.js.map +1 -1
- package/dist/server/terminal/terminal-worker-protocol.d.ts +2 -1
- package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -1
- package/dist/server/terminal/terminal.d.ts +11 -2
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +33 -8
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.js +16 -4
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +7 -7
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/src/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/src/server/agent/provider-launch-config.js +0 -1
- package/dist/src/server/agent/provider-launch-config.js.map +1 -1
- package/dist/src/shared/messages.js +43 -0
- package/dist/src/shared/messages.js.map +1 -1
- package/package.json +3 -3
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +0 -9
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +0 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.js +0 -555
- package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +0 -1
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +0 -10
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts.map +0 -1
- package/dist/server/server/agent/providers/pi/session-descriptor.js +0 -300
- 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 {
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
this.
|
|
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
|
-
|
|
2379
|
-
this.
|
|
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
|
-
|
|
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
|