@getpaseo/server 0.1.81 → 0.1.83
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 +2 -1
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +29 -0
- package/dist/server/client/daemon-client.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.js +1 -1
- 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 +13 -10
- package/dist/server/server/agent/agent-prompt.d.ts.map +1 -1
- package/dist/server/server/agent/agent-prompt.js +38 -18
- package/dist/server/server/agent/agent-prompt.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/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +42 -28
- 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/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 -38
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi/agent.d.ts +21 -1
- package/dist/server/server/agent/providers/pi/agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi/agent.js +355 -13
- package/dist/server/server/agent/providers/pi/agent.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 +2 -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 +10 -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 +49 -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 +56 -25
- 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 +2 -0
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/shared/messages.d.ts +281 -0
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +27 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +14 -0
- package/dist/server/terminal/terminal.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 +27 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-agent.d.ts","sourceRoot":"","sources":["../../../../../src/server/agent/providers/opencode-agent.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,IAAI,wBAAwB,EACjD,KAAK,KAAK,IAAI,aAAa,EAC3B,KAAK,aAAa,IAAI,qBAAqB,EAG3C,KAAK,cAAc,EAGnB,KAAK,aAAa,IAAI,qBAAqB,EAC5C,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"opencode-agent.d.ts","sourceRoot":"","sources":["../../../../../src/server/agent/providers/opencode-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
|
|
|
15
15
|
import { composeSystemPromptParts } from "../system-prompt.js";
|
|
16
16
|
import { createSdkOpenCodeClient, } from "./opencode/runtime.js";
|
|
17
17
|
import { normalizeProviderReplayTimestamp } from "../provider-history-timestamps.js";
|
|
18
|
+
import { revertOpenCodeConversationAndFiles } from "./opencode/rewind.js";
|
|
18
19
|
const OPENCODE_CAPABILITIES = {
|
|
19
20
|
supportsStreaming: true,
|
|
20
21
|
supportsSessionPersistence: true,
|
|
@@ -22,11 +23,16 @@ const OPENCODE_CAPABILITIES = {
|
|
|
22
23
|
supportsMcpServers: true,
|
|
23
24
|
supportsReasoningStream: true,
|
|
24
25
|
supportsToolInvocations: true,
|
|
26
|
+
supportsRewindConversation: false,
|
|
27
|
+
supportsRewindFiles: false,
|
|
28
|
+
supportsRewindBoth: true,
|
|
25
29
|
};
|
|
26
30
|
const OPENCODE_BUILD_MODE_ID = "build";
|
|
27
31
|
const OPENCODE_FULL_ACCESS_MODE_ID = "full-access";
|
|
28
32
|
const OPENCODE_PERSISTED_SESSION_LIMIT = 200;
|
|
29
33
|
const OPENCODE_PENDING_ABORT_START_TIMEOUT_MS = 10000;
|
|
34
|
+
const OPENCODE_PERMISSION_ACTION_ALLOW_ONCE = "allow_once";
|
|
35
|
+
const OPENCODE_PERMISSION_ACTION_ALLOW_ALWAYS = "allow_always";
|
|
30
36
|
const DEFAULT_MODES = [
|
|
31
37
|
{
|
|
32
38
|
id: OPENCODE_BUILD_MODE_ID,
|
|
@@ -44,6 +50,38 @@ const DEFAULT_MODES = [
|
|
|
44
50
|
description: "Automatically approves all tool permission prompts for the session",
|
|
45
51
|
},
|
|
46
52
|
];
|
|
53
|
+
function buildOpenCodePermissionActions() {
|
|
54
|
+
return [
|
|
55
|
+
{
|
|
56
|
+
id: "deny",
|
|
57
|
+
label: "Deny",
|
|
58
|
+
behavior: "deny",
|
|
59
|
+
variant: "danger",
|
|
60
|
+
intent: "dismiss",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: OPENCODE_PERMISSION_ACTION_ALLOW_ALWAYS,
|
|
64
|
+
label: "Allow always",
|
|
65
|
+
behavior: "allow",
|
|
66
|
+
variant: "secondary",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: OPENCODE_PERMISSION_ACTION_ALLOW_ONCE,
|
|
70
|
+
label: "Allow once",
|
|
71
|
+
behavior: "allow",
|
|
72
|
+
variant: "primary",
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
function resolveOpenCodePermissionReply(response) {
|
|
77
|
+
if (response.behavior === "deny") {
|
|
78
|
+
return "reject";
|
|
79
|
+
}
|
|
80
|
+
if (response.selectedActionId === OPENCODE_PERMISSION_ACTION_ALLOW_ALWAYS) {
|
|
81
|
+
return "always";
|
|
82
|
+
}
|
|
83
|
+
return "once";
|
|
84
|
+
}
|
|
47
85
|
const MCP_ALREADY_PRESENT_ERROR_TOKENS = ["already", "exists", "connected"];
|
|
48
86
|
const OPENCODE_PROVIDER_LIST_TIMEOUT_MS = 30000;
|
|
49
87
|
const OPENCODE_HANDLED_BUILTIN_SLASH_COMMANDS = [
|
|
@@ -258,6 +296,23 @@ function resolveOpenCodeRuntimeAgentId(modeId) {
|
|
|
258
296
|
function isSelectableOpenCodeAgent(agent) {
|
|
259
297
|
return (agent.mode === "primary" || agent.mode === "all") && agent.hidden !== true;
|
|
260
298
|
}
|
|
299
|
+
const OPENCODE_AGENT_HEX_COLOR_PATTERN = /^#[0-9a-fA-F]{6}$/;
|
|
300
|
+
function readOpenCodeAgentHexColor(agent) {
|
|
301
|
+
return typeof agent.color === "string" && OPENCODE_AGENT_HEX_COLOR_PATTERN.test(agent.color)
|
|
302
|
+
? agent.color
|
|
303
|
+
: undefined;
|
|
304
|
+
}
|
|
305
|
+
function mapOpenCodeAgentToMode(agent) {
|
|
306
|
+
const colorTier = readOpenCodeAgentHexColor(agent);
|
|
307
|
+
return {
|
|
308
|
+
id: agent.name,
|
|
309
|
+
label: agent.name.charAt(0).toUpperCase() + agent.name.slice(1),
|
|
310
|
+
description: typeof agent.description === "string" && agent.description.trim().length > 0
|
|
311
|
+
? agent.description.trim()
|
|
312
|
+
: DEFAULT_MODES.find((mode) => mode.id === agent.name)?.description,
|
|
313
|
+
...(colorTier ? { colorTier } : {}),
|
|
314
|
+
};
|
|
315
|
+
}
|
|
261
316
|
function mergeOpenCodeModes(discoveredModes) {
|
|
262
317
|
const modesById = new Map(DEFAULT_MODES.map((mode) => [mode.id, mode]));
|
|
263
318
|
for (const mode of discoveredModes) {
|
|
@@ -279,6 +334,14 @@ function sortOpenCodeModes(modes) {
|
|
|
279
334
|
function readPositiveFiniteNumber(value) {
|
|
280
335
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
|
|
281
336
|
}
|
|
337
|
+
function maxFiniteNumber(left, right) {
|
|
338
|
+
return left === undefined ? right : Math.max(left, right);
|
|
339
|
+
}
|
|
340
|
+
function assignUsageNumber(usage, key, value) {
|
|
341
|
+
if (value !== undefined) {
|
|
342
|
+
usage[key] = value;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
282
345
|
function buildOpenCodeModelLookupKey(providerId, modelId) {
|
|
283
346
|
return `${providerId}/${modelId}`;
|
|
284
347
|
}
|
|
@@ -374,7 +437,7 @@ function resolveOpenCodeModelLookupKeyFromAssistantMessage(info) {
|
|
|
374
437
|
}
|
|
375
438
|
return buildOpenCodeModelLookupKey(providerId, modelId);
|
|
376
439
|
}
|
|
377
|
-
function mergeOpenCodeStepFinishUsage(usage, part) {
|
|
440
|
+
function mergeOpenCodeStepFinishUsage(usage, part, options = {}) {
|
|
378
441
|
const inputTokens = readPositiveFiniteNumber(part.tokens?.input);
|
|
379
442
|
const outputTokens = readPositiveFiniteNumber(part.tokens?.output);
|
|
380
443
|
const reasoningTokens = readPositiveFiniteNumber(part.tokens?.reasoning);
|
|
@@ -386,20 +449,14 @@ function mergeOpenCodeStepFinishUsage(usage, part) {
|
|
|
386
449
|
(cacheReadTokens ?? 0) +
|
|
387
450
|
(cacheWriteTokens ?? 0);
|
|
388
451
|
const cost = readPositiveFiniteNumber(part.cost);
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
if (cacheReadTokens !== undefined) {
|
|
393
|
-
usage.cachedInputTokens = cacheReadTokens;
|
|
394
|
-
}
|
|
395
|
-
if (outputTokens !== undefined) {
|
|
396
|
-
usage.outputTokens = outputTokens;
|
|
397
|
-
}
|
|
452
|
+
assignUsageNumber(usage, "inputTokens", inputTokens);
|
|
453
|
+
assignUsageNumber(usage, "cachedInputTokens", cacheReadTokens);
|
|
454
|
+
assignUsageNumber(usage, "outputTokens", outputTokens);
|
|
398
455
|
if (totalTokens > 0) {
|
|
399
456
|
usage.contextWindowUsedTokens = totalTokens;
|
|
400
457
|
}
|
|
401
458
|
if (cost !== undefined) {
|
|
402
|
-
usage.totalCostUsd = (usage.totalCostUsd ?? 0) + cost;
|
|
459
|
+
usage.totalCostUsd = options.totalCostUsd ?? (usage.totalCostUsd ?? 0) + cost;
|
|
403
460
|
}
|
|
404
461
|
}
|
|
405
462
|
function hasNormalizedOpenCodeUsage(usage) {
|
|
@@ -467,6 +524,23 @@ function buildOpenCodePromptParts(prompt) {
|
|
|
467
524
|
}
|
|
468
525
|
return output;
|
|
469
526
|
}
|
|
527
|
+
function buildOpenCodeUserTimelineText(prompt) {
|
|
528
|
+
if (typeof prompt === "string") {
|
|
529
|
+
return prompt;
|
|
530
|
+
}
|
|
531
|
+
return prompt
|
|
532
|
+
.map((part) => {
|
|
533
|
+
if (part.type === "text") {
|
|
534
|
+
return part.text;
|
|
535
|
+
}
|
|
536
|
+
if (part.type === "image") {
|
|
537
|
+
return "[Image]";
|
|
538
|
+
}
|
|
539
|
+
return renderPromptAttachmentAsText(part);
|
|
540
|
+
})
|
|
541
|
+
.filter((text) => text.trim().length > 0)
|
|
542
|
+
.join("\n");
|
|
543
|
+
}
|
|
470
544
|
async function collectOpenCodePersistedAgentsFromSdk(client, options) {
|
|
471
545
|
const limit = options?.limit ?? OPENCODE_PERSISTED_SESSION_LIMIT;
|
|
472
546
|
const sessionListLimit = options?.cwd ? Math.max(limit, OPENCODE_PERSISTED_SESSION_LIMIT) : limit;
|
|
@@ -558,6 +632,17 @@ function buildOpenCodeReplayPartTimelineEvent(params) {
|
|
|
558
632
|
if (part.type !== "tool") {
|
|
559
633
|
return null;
|
|
560
634
|
}
|
|
635
|
+
if (isOpenCodeTodoWriteToolPart(part)) {
|
|
636
|
+
const todos = readOpenCodeTodoItemsFromToolPart(part);
|
|
637
|
+
if (!todos) {
|
|
638
|
+
return null;
|
|
639
|
+
}
|
|
640
|
+
return buildOpenCodeReplayTimelineEvent({
|
|
641
|
+
item: mapOpenCodeTodosToTimelineItems(todos),
|
|
642
|
+
message,
|
|
643
|
+
part,
|
|
644
|
+
});
|
|
645
|
+
}
|
|
561
646
|
const parsedToolPart = OpencodeToolPartToTimelineItemSchema.safeParse(part);
|
|
562
647
|
if (!parsedToolPart.success || !parsedToolPart.data) {
|
|
563
648
|
return null;
|
|
@@ -576,11 +661,21 @@ async function readOpenCodeSessionMessagesFromSdk(client, session) {
|
|
|
576
661
|
if (response.error || !response.data) {
|
|
577
662
|
return [];
|
|
578
663
|
}
|
|
579
|
-
return response.data;
|
|
664
|
+
return filterOpenCodeRevertedMessages(response.data, session.revert);
|
|
580
665
|
}
|
|
581
666
|
function buildOpenCodeSessionTimeline(messages) {
|
|
582
667
|
return messages.flatMap((message) => buildOpenCodeReplayTimelineEvents(message).map((event) => event.item));
|
|
583
668
|
}
|
|
669
|
+
function filterOpenCodeRevertedMessages(messages, revert) {
|
|
670
|
+
if (!revert?.messageID || revert.partID) {
|
|
671
|
+
return [...messages];
|
|
672
|
+
}
|
|
673
|
+
const revertIndex = messages.findIndex((message) => message.info.id === revert.messageID);
|
|
674
|
+
if (revertIndex < 0) {
|
|
675
|
+
return [...messages];
|
|
676
|
+
}
|
|
677
|
+
return messages.slice(0, revertIndex);
|
|
678
|
+
}
|
|
584
679
|
function resolveOpenCodePersistedSessionModeId(session, messages) {
|
|
585
680
|
const agent = session.agent ?? messages.map(readOpenCodeMessageAgent).find(Boolean);
|
|
586
681
|
return agent ? normalizeOpenCodeModeId(agent) : undefined;
|
|
@@ -657,6 +752,7 @@ export const __openCodeInternals = {
|
|
|
657
752
|
resolveOpenCodeModelLookupKeyFromAssistantMessage,
|
|
658
753
|
resolveOpenCodeSelectedModelContextWindow,
|
|
659
754
|
isSelectableOpenCodeAgent,
|
|
755
|
+
mapOpenCodeAgentToMode,
|
|
660
756
|
get OpenCodeAgentSession() {
|
|
661
757
|
return OpenCodeAgentSession;
|
|
662
758
|
},
|
|
@@ -805,13 +901,9 @@ export class OpenCodeAgentClient {
|
|
|
805
901
|
if (response.error || !response.data) {
|
|
806
902
|
return DEFAULT_MODES;
|
|
807
903
|
}
|
|
808
|
-
const discovered = response.data
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
description: typeof agent.description === "string" && agent.description.trim().length > 0
|
|
812
|
-
? agent.description.trim()
|
|
813
|
-
: DEFAULT_MODES.find((mode) => mode.id === agent.name)?.description,
|
|
814
|
-
}));
|
|
904
|
+
const discovered = response.data
|
|
905
|
+
.filter(isSelectableOpenCodeAgent)
|
|
906
|
+
.map(mapOpenCodeAgentToMode);
|
|
815
907
|
return mergeOpenCodeModes(discovered);
|
|
816
908
|
}
|
|
817
909
|
finally {
|
|
@@ -990,6 +1082,48 @@ function readOpenCodeRecord(value) {
|
|
|
990
1082
|
function readNonEmptyString(value) {
|
|
991
1083
|
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
992
1084
|
}
|
|
1085
|
+
function isOpenCodeTodoWriteToolPart(part) {
|
|
1086
|
+
return part.type === "tool" && part.tool.trim().toLowerCase() === "todowrite";
|
|
1087
|
+
}
|
|
1088
|
+
function readOpenCodeTodoItems(value) {
|
|
1089
|
+
if (typeof value === "string") {
|
|
1090
|
+
try {
|
|
1091
|
+
return readOpenCodeTodoItems(JSON.parse(value));
|
|
1092
|
+
}
|
|
1093
|
+
catch {
|
|
1094
|
+
return null;
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
if (Array.isArray(value)) {
|
|
1098
|
+
return value.flatMap((entry) => {
|
|
1099
|
+
const record = readOpenCodeRecord(entry);
|
|
1100
|
+
if (!record) {
|
|
1101
|
+
return [];
|
|
1102
|
+
}
|
|
1103
|
+
const content = readNonEmptyString(record.content);
|
|
1104
|
+
if (!content) {
|
|
1105
|
+
return [];
|
|
1106
|
+
}
|
|
1107
|
+
return [
|
|
1108
|
+
{
|
|
1109
|
+
content,
|
|
1110
|
+
status: readNonEmptyString(record.status),
|
|
1111
|
+
},
|
|
1112
|
+
];
|
|
1113
|
+
});
|
|
1114
|
+
}
|
|
1115
|
+
const record = readOpenCodeRecord(value);
|
|
1116
|
+
if (!record) {
|
|
1117
|
+
return null;
|
|
1118
|
+
}
|
|
1119
|
+
return readOpenCodeTodoItems(record.todos);
|
|
1120
|
+
}
|
|
1121
|
+
function readOpenCodeTodoItemsFromToolPart(part) {
|
|
1122
|
+
const state = readOpenCodeRecord(part.state);
|
|
1123
|
+
return (readOpenCodeTodoItems(state?.input) ??
|
|
1124
|
+
readOpenCodeTodoItems(state?.output) ??
|
|
1125
|
+
readOpenCodeTodoItems(state?.metadata));
|
|
1126
|
+
}
|
|
993
1127
|
function mapOpenCodeTodosToTimelineItems(todos) {
|
|
994
1128
|
return {
|
|
995
1129
|
type: "todo",
|
|
@@ -1144,14 +1278,7 @@ export function translateOpenCodeEvent(event, state) {
|
|
|
1144
1278
|
}
|
|
1145
1279
|
break;
|
|
1146
1280
|
case "session.error":
|
|
1147
|
-
|
|
1148
|
-
resetOpenCodeTurnTrackingState(state);
|
|
1149
|
-
events.push({
|
|
1150
|
-
type: "turn_failed",
|
|
1151
|
-
provider: "opencode",
|
|
1152
|
-
error: toDiagnosticErrorMessage(event.properties.error),
|
|
1153
|
-
});
|
|
1154
|
-
}
|
|
1281
|
+
appendOpenCodeSessionError(event, state, events);
|
|
1155
1282
|
break;
|
|
1156
1283
|
case "session.status":
|
|
1157
1284
|
appendOpenCodeSessionStatus(event, state, events);
|
|
@@ -1349,7 +1476,13 @@ function appendOpenCodeSubAgentChildToolPart(part, state, events) {
|
|
|
1349
1476
|
});
|
|
1350
1477
|
}
|
|
1351
1478
|
function appendOpenCodeSessionCreatedOrUpdated(event, state, events) {
|
|
1479
|
+
const info = readOpenCodeRecord(event.properties.info);
|
|
1352
1480
|
if (event.properties.info.id === state.sessionId) {
|
|
1481
|
+
const sessionCost = readPositiveFiniteNumber(info?.cost);
|
|
1482
|
+
if (sessionCost !== undefined) {
|
|
1483
|
+
state.sessionTotalCostUsd = maxFiniteNumber(state.sessionTotalCostUsd, sessionCost);
|
|
1484
|
+
state.accumulatedUsage.totalCostUsd = state.sessionTotalCostUsd;
|
|
1485
|
+
}
|
|
1353
1486
|
events.push({
|
|
1354
1487
|
type: "thread_started",
|
|
1355
1488
|
sessionId: state.sessionId,
|
|
@@ -1357,7 +1490,6 @@ function appendOpenCodeSessionCreatedOrUpdated(event, state, events) {
|
|
|
1357
1490
|
});
|
|
1358
1491
|
return;
|
|
1359
1492
|
}
|
|
1360
|
-
const info = readOpenCodeRecord(event.properties.info);
|
|
1361
1493
|
const parentSessionId = readNonEmptyString(info?.parentID) ?? readNonEmptyString(info?.parentId);
|
|
1362
1494
|
if (parentSessionId === state.sessionId) {
|
|
1363
1495
|
appendOpenCodeSubAgentChildSessionLinked(event.properties.info.id, state, events);
|
|
@@ -1369,6 +1501,10 @@ function appendOpenCodeMessageUpdated(event, state, events) {
|
|
|
1369
1501
|
return;
|
|
1370
1502
|
}
|
|
1371
1503
|
state.messageRoles.set(info.id, info.role);
|
|
1504
|
+
if (info.role === "user") {
|
|
1505
|
+
appendOpenCodeUserMessageUpdated(info, state, events);
|
|
1506
|
+
return;
|
|
1507
|
+
}
|
|
1372
1508
|
if (info.role !== "assistant") {
|
|
1373
1509
|
return;
|
|
1374
1510
|
}
|
|
@@ -1393,8 +1529,23 @@ function appendOpenCodeMessageUpdated(event, state, events) {
|
|
|
1393
1529
|
item: { type: "assistant_message", text },
|
|
1394
1530
|
});
|
|
1395
1531
|
}
|
|
1532
|
+
function appendOpenCodeUserMessageUpdated(info, state, events) {
|
|
1533
|
+
const text = state.pendingUserMessageText;
|
|
1534
|
+
if (!text || text.trim().length === 0 || state.emittedUserMessageIds?.has(info.id)) {
|
|
1535
|
+
return;
|
|
1536
|
+
}
|
|
1537
|
+
state.emittedUserMessageIds?.add(info.id);
|
|
1538
|
+
events.push({
|
|
1539
|
+
type: "timeline",
|
|
1540
|
+
provider: "opencode",
|
|
1541
|
+
item: { type: "user_message", text, messageId: info.id },
|
|
1542
|
+
});
|
|
1543
|
+
}
|
|
1396
1544
|
function appendOpenCodeMessagePartUpdated(event, state, events) {
|
|
1397
1545
|
const part = event.properties.part;
|
|
1546
|
+
if (part.type === "tool" && isOpenCodeTodoWriteToolPart(part)) {
|
|
1547
|
+
return;
|
|
1548
|
+
}
|
|
1398
1549
|
if (part.sessionID !== state.sessionId) {
|
|
1399
1550
|
if (part.type === "tool") {
|
|
1400
1551
|
appendOpenCodeSubAgentChildToolPart(part, state, events);
|
|
@@ -1427,7 +1578,13 @@ function appendOpenCodeMessagePartUpdated(event, state, events) {
|
|
|
1427
1578
|
return;
|
|
1428
1579
|
}
|
|
1429
1580
|
if (part.type === "step-finish") {
|
|
1430
|
-
|
|
1581
|
+
const stepCost = readPositiveFiniteNumber(part.cost);
|
|
1582
|
+
if (stepCost !== undefined) {
|
|
1583
|
+
state.sessionTotalCostUsd = (state.sessionTotalCostUsd ?? 0) + stepCost;
|
|
1584
|
+
}
|
|
1585
|
+
mergeOpenCodeStepFinishUsage(state.accumulatedUsage, part, {
|
|
1586
|
+
totalCostUsd: state.sessionTotalCostUsd,
|
|
1587
|
+
});
|
|
1431
1588
|
if (hasNormalizedOpenCodeUsage(state.accumulatedUsage)) {
|
|
1432
1589
|
events.push({
|
|
1433
1590
|
type: "usage_updated",
|
|
@@ -1541,6 +1698,7 @@ function appendOpenCodePermissionAsked(event, state, events) {
|
|
|
1541
1698
|
...(description ? { description } : {}),
|
|
1542
1699
|
input,
|
|
1543
1700
|
detail,
|
|
1701
|
+
actions: buildOpenCodePermissionActions(),
|
|
1544
1702
|
},
|
|
1545
1703
|
});
|
|
1546
1704
|
}
|
|
@@ -1585,6 +1743,30 @@ function appendOpenCodeQuestionAsked(event, state, events) {
|
|
|
1585
1743
|
},
|
|
1586
1744
|
});
|
|
1587
1745
|
}
|
|
1746
|
+
function appendOpenCodeSessionError(event, state, events) {
|
|
1747
|
+
if (event.properties.sessionID !== state.sessionId) {
|
|
1748
|
+
return;
|
|
1749
|
+
}
|
|
1750
|
+
resetOpenCodeTurnTrackingState(state);
|
|
1751
|
+
const error = event.properties.error;
|
|
1752
|
+
if (typeof error === "object" &&
|
|
1753
|
+
error !== null &&
|
|
1754
|
+
"name" in error &&
|
|
1755
|
+
error.name === "MessageAbortedError") {
|
|
1756
|
+
events.push({
|
|
1757
|
+
type: "turn_canceled",
|
|
1758
|
+
provider: "opencode",
|
|
1759
|
+
reason: "interrupted",
|
|
1760
|
+
});
|
|
1761
|
+
}
|
|
1762
|
+
else {
|
|
1763
|
+
events.push({
|
|
1764
|
+
type: "turn_failed",
|
|
1765
|
+
provider: "opencode",
|
|
1766
|
+
error: toDiagnosticErrorMessage(error),
|
|
1767
|
+
});
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1588
1770
|
function appendOpenCodeSessionStatus(event, state, events) {
|
|
1589
1771
|
if (event.properties.sessionID !== state.sessionId) {
|
|
1590
1772
|
return;
|
|
@@ -1637,6 +1819,19 @@ function unwrapOpenCodeGlobalEvent(event) {
|
|
|
1637
1819
|
}
|
|
1638
1820
|
return null;
|
|
1639
1821
|
}
|
|
1822
|
+
function isOpenCodeUserMessageEvent(event, sessionId) {
|
|
1823
|
+
return (event.type === "message.updated" &&
|
|
1824
|
+
event.properties.info.sessionID === sessionId &&
|
|
1825
|
+
event.properties.info.role === "user");
|
|
1826
|
+
}
|
|
1827
|
+
function isOpenCodeTerminalEvent(event, sessionId) {
|
|
1828
|
+
if (event.type === "session.idle" || event.type === "session.error") {
|
|
1829
|
+
return event.properties.sessionID === sessionId;
|
|
1830
|
+
}
|
|
1831
|
+
return (event.type === "session.status" &&
|
|
1832
|
+
event.properties.sessionID === sessionId &&
|
|
1833
|
+
event.properties.status.type === "idle");
|
|
1834
|
+
}
|
|
1640
1835
|
class OpenCodeAgentSession {
|
|
1641
1836
|
constructor(config, client, sessionId, logger, modelContextWindowsByModelKey = new Map(), releaseServer, persistSession = true, agentId) {
|
|
1642
1837
|
this.agentId = agentId;
|
|
@@ -1651,6 +1846,8 @@ class OpenCodeAgentSession {
|
|
|
1651
1846
|
this.mcpSetupPromise = null;
|
|
1652
1847
|
/** Tracks the role of each message by ID to distinguish user from assistant messages */
|
|
1653
1848
|
this.messageRoles = new Map();
|
|
1849
|
+
this.pendingUserMessageText = null;
|
|
1850
|
+
this.emittedUserMessageIds = new Set();
|
|
1654
1851
|
/** Tracks streamed textual part IDs to suppress final full-text echoes from OpenCode. */
|
|
1655
1852
|
this.streamedPartKeys = new Set();
|
|
1656
1853
|
/** Tracks assistant messages already emitted from structured payloads. */
|
|
@@ -1667,6 +1864,7 @@ class OpenCodeAgentSession {
|
|
|
1667
1864
|
this.pendingChildToolPartsBySessionId = new Map();
|
|
1668
1865
|
this.eventStreamAbortController = null;
|
|
1669
1866
|
this.eventStreamReady = null;
|
|
1867
|
+
this.suppressTerminalUntilNextUserMessage = false;
|
|
1670
1868
|
this.closed = false;
|
|
1671
1869
|
this.deletedFromProvider = false;
|
|
1672
1870
|
this.config = config;
|
|
@@ -1726,9 +1924,18 @@ class OpenCodeAgentSession {
|
|
|
1726
1924
|
this.logger.warn({ err: error, sessionId: this.sessionId, turnId }, "OpenCode session.abort exceeded the cancel cap; proceeding with local cancel");
|
|
1727
1925
|
});
|
|
1728
1926
|
if (turnId) {
|
|
1927
|
+
this.suppressTerminalUntilNextUserMessage = true;
|
|
1729
1928
|
this.finishForegroundTurn({ type: "turn_canceled", provider: "opencode", reason: "interrupted" }, turnId);
|
|
1730
1929
|
}
|
|
1731
1930
|
}
|
|
1931
|
+
async revertBoth(input) {
|
|
1932
|
+
await revertOpenCodeConversationAndFiles({
|
|
1933
|
+
client: this.client,
|
|
1934
|
+
sessionId: this.sessionId,
|
|
1935
|
+
cwd: this.config.cwd,
|
|
1936
|
+
messageId: input.messageId,
|
|
1937
|
+
});
|
|
1938
|
+
}
|
|
1732
1939
|
beginSessionAbort(turnId, reason) {
|
|
1733
1940
|
const abortPromise = this.client.session
|
|
1734
1941
|
.abort({
|
|
@@ -1771,6 +1978,7 @@ class OpenCodeAgentSession {
|
|
|
1771
1978
|
const contextWindowMaxTokens = this.resolveSelectedModelContextWindowMaxTokens();
|
|
1772
1979
|
this.accumulatedUsage = contextWindowMaxTokens !== undefined ? { contextWindowMaxTokens } : {};
|
|
1773
1980
|
const parts = buildOpenCodePromptParts(prompt);
|
|
1981
|
+
this.pendingUserMessageText = buildOpenCodeUserTimelineText(prompt);
|
|
1774
1982
|
const model = this.parseModel(this.config.model);
|
|
1775
1983
|
const thinkingOptionId = this.config.thinkingOptionId;
|
|
1776
1984
|
const effectiveVariant = thinkingOptionId ?? undefined;
|
|
@@ -2033,6 +2241,19 @@ class OpenCodeAgentSession {
|
|
|
2033
2241
|
});
|
|
2034
2242
|
return;
|
|
2035
2243
|
}
|
|
2244
|
+
if (this.suppressTerminalUntilNextUserMessage) {
|
|
2245
|
+
if (isOpenCodeUserMessageEvent(event, this.sessionId)) {
|
|
2246
|
+
this.suppressTerminalUntilNextUserMessage = false;
|
|
2247
|
+
}
|
|
2248
|
+
else if (isOpenCodeTerminalEvent(event, this.sessionId)) {
|
|
2249
|
+
this.traceOpenCode("provider.opencode.event.skip", {
|
|
2250
|
+
n: eventCount,
|
|
2251
|
+
reason: "stale_interrupt_terminal",
|
|
2252
|
+
type: event.type,
|
|
2253
|
+
});
|
|
2254
|
+
return;
|
|
2255
|
+
}
|
|
2256
|
+
}
|
|
2036
2257
|
const translated = await this.translateEvent(event);
|
|
2037
2258
|
this.traceOpenCode("provider.opencode.parsed_event", {
|
|
2038
2259
|
turnId,
|
|
@@ -2078,6 +2299,7 @@ class OpenCodeAgentSession {
|
|
|
2078
2299
|
else {
|
|
2079
2300
|
this.runningToolCalls.clear();
|
|
2080
2301
|
}
|
|
2302
|
+
this.pendingUserMessageText = null;
|
|
2081
2303
|
this.activeForegroundTurnId = null;
|
|
2082
2304
|
this.abortController = null;
|
|
2083
2305
|
this.notifySubscribers(event, turnId);
|
|
@@ -2144,6 +2366,10 @@ class OpenCodeAgentSession {
|
|
|
2144
2366
|
}, msg);
|
|
2145
2367
|
}
|
|
2146
2368
|
async *streamHistory() {
|
|
2369
|
+
const sessionResponse = await this.client.session.get({
|
|
2370
|
+
sessionID: this.sessionId,
|
|
2371
|
+
directory: this.config.cwd,
|
|
2372
|
+
});
|
|
2147
2373
|
const response = await this.client.session.messages({
|
|
2148
2374
|
sessionID: this.sessionId,
|
|
2149
2375
|
directory: this.config.cwd,
|
|
@@ -2151,7 +2377,8 @@ class OpenCodeAgentSession {
|
|
|
2151
2377
|
if (response.error || !response.data) {
|
|
2152
2378
|
return;
|
|
2153
2379
|
}
|
|
2154
|
-
|
|
2380
|
+
const messages = filterOpenCodeRevertedMessages(response.data, sessionResponse.error ? null : sessionResponse.data?.revert);
|
|
2381
|
+
for (const message of messages) {
|
|
2155
2382
|
for (const event of buildOpenCodeReplayTimelineEvents(message)) {
|
|
2156
2383
|
yield event;
|
|
2157
2384
|
}
|
|
@@ -2165,13 +2392,7 @@ class OpenCodeAgentSession {
|
|
|
2165
2392
|
directory: this.config.cwd,
|
|
2166
2393
|
});
|
|
2167
2394
|
const agents = response.error || !response.data ? [] : response.data;
|
|
2168
|
-
const discoveredModes = agents.filter(isSelectableOpenCodeAgent).map(
|
|
2169
|
-
id: agent.name,
|
|
2170
|
-
label: agent.name.charAt(0).toUpperCase() + agent.name.slice(1),
|
|
2171
|
-
description: typeof agent.description === "string" && agent.description.trim().length > 0
|
|
2172
|
-
? agent.description.trim()
|
|
2173
|
-
: DEFAULT_MODES.find((mode) => mode.id === agent.name)?.description,
|
|
2174
|
-
}));
|
|
2395
|
+
const discoveredModes = agents.filter(isSelectableOpenCodeAgent).map(mapOpenCodeAgentToMode);
|
|
2175
2396
|
this.availableModesCache = mergeOpenCodeModes(discoveredModes);
|
|
2176
2397
|
return this.availableModesCache;
|
|
2177
2398
|
}
|
|
@@ -2222,7 +2443,7 @@ class OpenCodeAgentSession {
|
|
|
2222
2443
|
this.pendingPermissions.delete(requestId);
|
|
2223
2444
|
return;
|
|
2224
2445
|
}
|
|
2225
|
-
const reply = response
|
|
2446
|
+
const reply = resolveOpenCodePermissionReply(response);
|
|
2226
2447
|
await this.client.permission.reply({
|
|
2227
2448
|
requestID: requestId,
|
|
2228
2449
|
directory: this.config.cwd,
|
|
@@ -2375,7 +2596,10 @@ class OpenCodeAgentSession {
|
|
|
2375
2596
|
sessionId: this.sessionId,
|
|
2376
2597
|
cwd: this.config.cwd,
|
|
2377
2598
|
messageRoles: this.messageRoles,
|
|
2599
|
+
pendingUserMessageText: this.pendingUserMessageText,
|
|
2600
|
+
emittedUserMessageIds: this.emittedUserMessageIds,
|
|
2378
2601
|
accumulatedUsage: this.accumulatedUsage,
|
|
2602
|
+
sessionTotalCostUsd: this.sessionTotalCostUsd,
|
|
2379
2603
|
streamedPartKeys: this.streamedPartKeys,
|
|
2380
2604
|
emittedStructuredMessageIds: this.emittedStructuredMessageIds,
|
|
2381
2605
|
partTypes: this.partTypes,
|
|
@@ -2391,6 +2615,9 @@ class OpenCodeAgentSession {
|
|
|
2391
2615
|
},
|
|
2392
2616
|
});
|
|
2393
2617
|
const events = [];
|
|
2618
|
+
if (typeof this.accumulatedUsage.totalCostUsd === "number") {
|
|
2619
|
+
this.sessionTotalCostUsd = maxFiniteNumber(this.sessionTotalCostUsd, this.accumulatedUsage.totalCostUsd);
|
|
2620
|
+
}
|
|
2394
2621
|
for (const translatedEvent of translated) {
|
|
2395
2622
|
if (translatedEvent.type === "permission_requested") {
|
|
2396
2623
|
const autoApproved = await this.tryAutoApproveToolPermission(translatedEvent.request);
|