@getpaseo/server 0.1.74 → 0.1.76
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/scripts/supervisor-entrypoint.js +2 -21
- package/dist/scripts/supervisor-entrypoint.js.map +1 -1
- package/dist/scripts/supervisor-log-config.js +31 -0
- package/dist/scripts/supervisor-log-config.js.map +1 -0
- package/dist/server/client/daemon-client.d.ts +13 -2
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +36 -0
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +5 -1
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +152 -22
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-prompt.d.ts.map +1 -1
- package/dist/server/server/agent/agent-prompt.js +27 -0
- package/dist/server/server/agent/agent-prompt.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +5 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.js +10 -0
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/server/server/agent/foreground-run-state.d.ts +1 -1
- package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -1
- package/dist/server/server/agent/foreground-run-state.js +2 -4
- package/dist/server/server/agent/foreground-run-state.js.map +1 -1
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +74 -3
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
- package/dist/server/server/agent/provider-history-timestamps.d.ts.map +1 -0
- package/dist/server/server/agent/provider-history-timestamps.js +16 -0
- package/dist/server/server/agent/provider-history-timestamps.js.map +1 -0
- 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-manifest.js +17 -3
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +66 -32
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +2 -6
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +43 -32
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +42 -2
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +182 -28
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/agent.d.ts +1 -1
- package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/agent.js +191 -62
- package/dist/server/server/agent/providers/claude/agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/models.d.ts +2 -0
- package/dist/server/server/agent/providers/claude/models.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/models.js +78 -0
- package/dist/server/server/agent/providers/claude/models.js.map +1 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +8 -1
- 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 +32 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.js.map +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 +36 -7
- 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 +28 -4
- 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 +487 -80
- 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 +10 -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 +114 -7
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +21 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +85 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js.map +1 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +13 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.js +209 -2
- package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +7 -7
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +121 -109
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts +2 -2
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.js +16 -15
- package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-session-recovery-policy.d.ts +22 -0
- package/dist/server/server/agent/providers/pi-session-recovery-policy.d.ts.map +1 -0
- package/dist/server/server/agent/providers/pi-session-recovery-policy.js +51 -0
- package/dist/server/server/agent/providers/pi-session-recovery-policy.js.map +1 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +1 -1
- package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -1
- package/dist/server/server/agent/providers/provider-runner.js +2 -1
- package/dist/server/server/agent/providers/provider-runner.js.map +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +2 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.d.ts +5 -1
- package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.js +3 -2
- package/dist/server/server/agent/stt-manager.js.map +1 -1
- package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
- package/dist/server/server/agent/timeline-projection.js +9 -0
- package/dist/server/server/agent/timeline-projection.js.map +1 -1
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts.map +1 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +80 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js.map +1 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts.map +1 -0
- package/dist/server/server/auto-archive-on-merge/index.js +15 -0
- package/dist/server/server/auto-archive-on-merge/index.js.map +1 -0
- package/dist/server/server/bootstrap.d.ts +6 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +74 -38
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/checkout/status-projection.d.ts.map +1 -1
- package/dist/server/server/checkout/status-projection.js +5 -1
- package/dist/server/server/checkout/status-projection.js.map +1 -1
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +3 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/daemon-config-store.js +1 -0
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +2 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -1
- package/dist/server/server/dictation/dictation-stream-manager.js +2 -1
- package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -1
- package/dist/server/server/logger.js +1 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +96 -96
- package/dist/server/server/loop-service.d.ts +18 -18
- package/dist/server/server/paseo-worktree-service.d.ts +3 -1
- package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
- package/dist/server/server/paseo-worktree-service.js +55 -18
- package/dist/server/server/paseo-worktree-service.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +25 -0
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +3 -0
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/relay-transport.d.ts +2 -1
- package/dist/server/server/relay-transport.d.ts.map +1 -1
- package/dist/server/server/relay-transport.js +26 -4
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/service.js +14 -1
- package/dist/server/server/schedule/service.js.map +1 -1
- package/dist/server/server/session.d.ts +9 -0
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +281 -50
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/providers/local/config.d.ts +5 -0
- package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/config.js +35 -0
- package/dist/server/server/speech/providers/local/config.js.map +1 -1
- package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
- package/dist/server/server/speech/speech-config-resolver.js +1 -0
- package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
- package/dist/server/server/speech/speech-runtime.d.ts +2 -0
- package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
- package/dist/server/server/speech/speech-runtime.js +2 -0
- package/dist/server/server/speech/speech-runtime.js.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.d.ts +1 -0
- package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.js +1 -1
- package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +7 -0
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-git-service.d.ts +6 -1
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +27 -4
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.d.ts +4 -2
- package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.js +112 -14
- package/dist/server/server/workspace-reconciliation-service.js.map +1 -1
- package/dist/server/server/workspace-registry.d.ts +6 -1
- package/dist/server/server/workspace-registry.d.ts.map +1 -1
- package/dist/server/server/workspace-registry.js +11 -0
- package/dist/server/server/workspace-registry.js.map +1 -1
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +1 -0
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts +46 -0
- package/dist/server/services/github-service.d.ts.map +1 -1
- package/dist/server/services/github-service.js +274 -5
- package/dist/server/services/github-service.js.map +1 -1
- package/dist/server/shared/messages.d.ts +3427 -290
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +93 -3
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/terminal-input-mode.d.ts +26 -0
- package/dist/server/shared/terminal-input-mode.d.ts.map +1 -0
- package/dist/server/shared/terminal-input-mode.js +151 -0
- package/dist/server/shared/terminal-input-mode.js.map +1 -0
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
- package/dist/server/terminal/terminal-session-controller.js +12 -2
- package/dist/server/terminal/terminal-session-controller.js.map +1 -1
- package/dist/server/terminal/terminal.d.ts +1 -0
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +16 -3
- 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 +8 -0
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts +4 -1
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +85 -29
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
- package/dist/server/utils/directory-suggestions.js +51 -14
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/server/utils/executable.d.ts.map +1 -1
- package/dist/server/utils/executable.js +6 -3
- package/dist/server/utils/executable.js.map +1 -1
- package/dist/server/utils/run-git-command.d.ts +2 -0
- package/dist/server/utils/run-git-command.d.ts.map +1 -1
- package/dist/server/utils/run-git-command.js +41 -1
- package/dist/server/utils/run-git-command.js.map +1 -1
- package/dist/server/utils/worktree.js +1 -1
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/src/server/agent/agent-sdk-types.js +10 -0
- package/dist/src/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/src/server/agent/provider-manifest.js +17 -3
- package/dist/src/server/agent/provider-manifest.js.map +1 -1
- package/dist/src/server/persisted-config.js +3 -0
- package/dist/src/server/persisted-config.js.map +1 -1
- package/dist/src/shared/messages.js +93 -3
- package/dist/src/shared/messages.js.map +1 -1
- package/dist/src/utils/executable.js +6 -3
- package/dist/src/utils/executable.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AssistantMessage as OpenCodeAssistantMessage, type Event as OpenCodeEvent, type FilePartInput as OpenCodeFilePartInput, type OpencodeClient, type TextPartInput as OpenCodeTextPartInput } from "@opencode-ai/sdk/v2/client";
|
|
2
2
|
import type { Logger } from "pino";
|
|
3
|
-
import type
|
|
3
|
+
import { type AgentCapabilityFlags, type AgentClient, type AgentCreateSessionOptions, type AgentLaunchContext, type AgentMode, type AgentModelDefinition, type AgentPermissionRequest, type AgentPermissionResponse, type AgentPersistenceHandle, type AgentPromptInput, type AgentRunOptions, type AgentRunResult, type AgentRuntimeInfo, type AgentSession, type AgentSessionConfig, type AgentSlashCommand, type AgentStreamEvent, type AgentUsage, type ListModelsOptions, type ListModesOptions, type ListPersistedAgentsOptions, type PersistedAgentDescriptor, type ToolCallTimelineItem } from "../agent-sdk-types.js";
|
|
4
4
|
import { type ProviderRuntimeSettings } from "../provider-launch-config.js";
|
|
5
5
|
import { type OpenCodeRuntime } from "./opencode/runtime.js";
|
|
6
6
|
type OpenCodeAgentConfig = AgentSessionConfig & {
|
|
@@ -49,6 +49,7 @@ declare function buildOpenCodeModelContextWindowLookup(providers: {
|
|
|
49
49
|
connected?: string[];
|
|
50
50
|
all?: Array<{
|
|
51
51
|
id: string;
|
|
52
|
+
source?: string;
|
|
52
53
|
models?: Record<string, unknown>;
|
|
53
54
|
}>;
|
|
54
55
|
} | null | undefined): Map<string, number>;
|
|
@@ -95,8 +96,8 @@ export declare class OpenCodeAgentClient implements AgentClient {
|
|
|
95
96
|
private readonly modelContextWindows;
|
|
96
97
|
private readonly storageRoot;
|
|
97
98
|
constructor(logger: Logger, runtimeSettings?: ProviderRuntimeSettings, storageRoot?: string, deps?: OpenCodeAgentClientDeps);
|
|
98
|
-
createSession(config: AgentSessionConfig,
|
|
99
|
-
resumeSession(handle: AgentPersistenceHandle, overrides?: Partial<AgentSessionConfig>,
|
|
99
|
+
createSession(config: AgentSessionConfig, launchContext?: AgentLaunchContext, options?: AgentCreateSessionOptions): Promise<AgentSession>;
|
|
100
|
+
resumeSession(handle: AgentPersistenceHandle, overrides?: Partial<AgentSessionConfig>, launchContext?: AgentLaunchContext): Promise<AgentSession>;
|
|
100
101
|
listModels(options: ListModelsOptions): Promise<AgentModelDefinition[]>;
|
|
101
102
|
listModes(options: ListModesOptions): Promise<AgentMode[]>;
|
|
102
103
|
listPersistedAgents(options?: ListPersistedAgentsOptions): Promise<PersistedAgentDescriptor[]>;
|
|
@@ -142,6 +143,7 @@ interface OpenCodeSubAgentActivityState {
|
|
|
142
143
|
}
|
|
143
144
|
export declare function translateOpenCodeEvent(event: OpenCodeEvent, state: OpenCodeEventTranslationState): AgentStreamEvent[];
|
|
144
145
|
declare class OpenCodeAgentSession implements AgentSession {
|
|
146
|
+
private readonly agentId?;
|
|
145
147
|
readonly provider: "opencode";
|
|
146
148
|
readonly capabilities: AgentCapabilityFlags;
|
|
147
149
|
private readonly config;
|
|
@@ -176,8 +178,7 @@ declare class OpenCodeAgentSession implements AgentSession {
|
|
|
176
178
|
private releaseServer;
|
|
177
179
|
private readonly persistSession;
|
|
178
180
|
private deletedFromProvider;
|
|
179
|
-
|
|
180
|
-
constructor(config: OpenCodeAgentConfig, client: OpencodeClient, sessionId: string, logger: Logger, _storageRoot: string, modelContextWindowsByModelKey?: ReadonlyMap<string, number>, releaseServer?: () => void, persistSession?: boolean);
|
|
181
|
+
constructor(config: OpenCodeAgentConfig, client: OpencodeClient, sessionId: string, logger: Logger, _storageRoot: string, modelContextWindowsByModelKey?: ReadonlyMap<string, number>, releaseServer?: () => void, persistSession?: boolean, agentId?: string | undefined);
|
|
181
182
|
get id(): string | null;
|
|
182
183
|
getRuntimeInfo(): Promise<AgentRuntimeInfo>;
|
|
183
184
|
setModel(modelId: string | null): Promise<void>;
|
|
@@ -194,11 +195,10 @@ declare class OpenCodeAgentSession implements AgentSession {
|
|
|
194
195
|
private consumeOpenCodeStreamEvent;
|
|
195
196
|
private finishForegroundTurn;
|
|
196
197
|
private trackToolCall;
|
|
197
|
-
private armRetryFailureTimerForStatus;
|
|
198
|
-
private clearRetryFailureTimer;
|
|
199
198
|
private synthesizeInterruptedToolCalls;
|
|
200
199
|
private notifySubscribers;
|
|
201
200
|
private createTurnId;
|
|
201
|
+
private traceOpenCode;
|
|
202
202
|
streamHistory(): AsyncGenerator<AgentStreamEvent>;
|
|
203
203
|
getAvailableModes(): Promise<AgentMode[]>;
|
|
204
204
|
getCurrentMode(): Promise<string | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-agent.d.ts","sourceRoot":"","sources":["../../../../../src/server/agent/providers/opencode-agent.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,gBAAgB,IAAI,wBAAwB,EACjD,KAAK,KAAK,IAAI,aAAa,EAC3B,KAAK,aAAa,IAAI,qBAAqB,EAC3C,KAAK,cAAc,EAEnB,KAAK,aAAa,IAAI,qBAAqB,EAC5C,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"opencode-agent.d.ts","sourceRoot":"","sources":["../../../../../src/server/agent/providers/opencode-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { homedir } from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { findExecutable, isCommandAvailable } from "../../../utils/executable.js";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
+
import { getAgentStreamEventTurnId, } from "../agent-sdk-types.js";
|
|
6
7
|
import { createProviderEnvSpec } from "../provider-launch-config.js";
|
|
7
8
|
import { withTimeout } from "../../../utils/promise-timeout.js";
|
|
8
9
|
import { execCommand } from "../../../utils/spawn.js";
|
|
@@ -13,6 +14,7 @@ import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnos
|
|
|
13
14
|
import { runProviderTurn } from "./provider-runner.js";
|
|
14
15
|
import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
|
|
15
16
|
import { createSdkOpenCodeClient, } from "./opencode/runtime.js";
|
|
17
|
+
import { normalizeProviderReplayTimestamp } from "../provider-history-timestamps.js";
|
|
16
18
|
const OPENCODE_CAPABILITIES = {
|
|
17
19
|
supportsStreaming: true,
|
|
18
20
|
supportsSessionPersistence: true,
|
|
@@ -25,7 +27,6 @@ const OPENCODE_BUILD_MODE_ID = "build";
|
|
|
25
27
|
const OPENCODE_FULL_ACCESS_MODE_ID = "full-access";
|
|
26
28
|
const OPENCODE_STORAGE_SESSION_LIMIT = 200;
|
|
27
29
|
const OPENCODE_PENDING_ABORT_START_TIMEOUT_MS = 10000;
|
|
28
|
-
const OPENCODE_RETRY_STATUS_FAILURE_MS = 10000;
|
|
29
30
|
const DEFAULT_MODES = [
|
|
30
31
|
{
|
|
31
32
|
id: OPENCODE_BUILD_MODE_ID,
|
|
@@ -388,7 +389,9 @@ function buildOpenCodeModelContextWindowLookup(providers) {
|
|
|
388
389
|
}
|
|
389
390
|
const connectedProviderIds = new Set(providers.connected ?? []);
|
|
390
391
|
for (const provider of providers.all ?? []) {
|
|
391
|
-
|
|
392
|
+
// Providers with source "api" are managed by the OpenCode console/subscription and are
|
|
393
|
+
// usable even though they don't appear in `connected` (which only lists env/config providers).
|
|
394
|
+
if (!connectedProviderIds.has(provider.id) && provider.source !== "api") {
|
|
392
395
|
continue;
|
|
393
396
|
}
|
|
394
397
|
for (const [modelId, modelDefinition] of Object.entries(provider.models ?? {})) {
|
|
@@ -636,6 +639,55 @@ function getOpenCodeMessageTimestamp(message) {
|
|
|
636
639
|
function getOpenCodePartTimestamp(part) {
|
|
637
640
|
return part.time?.start ?? part.time?.end ?? 0;
|
|
638
641
|
}
|
|
642
|
+
function resolveOpenCodeReplayTimestamp(params) {
|
|
643
|
+
const timedPart = params.part;
|
|
644
|
+
const partTimestamp = timedPart?.time?.start ??
|
|
645
|
+
timedPart?.time?.end ??
|
|
646
|
+
params.message.time?.created ??
|
|
647
|
+
params.message.time?.completed;
|
|
648
|
+
return normalizeProviderReplayTimestamp(partTimestamp);
|
|
649
|
+
}
|
|
650
|
+
function buildOpenCodeReplayTimelineEvent(params) {
|
|
651
|
+
const timestamp = resolveOpenCodeReplayTimestamp({
|
|
652
|
+
message: params.message,
|
|
653
|
+
part: params.part,
|
|
654
|
+
});
|
|
655
|
+
return {
|
|
656
|
+
type: "timeline",
|
|
657
|
+
provider: "opencode",
|
|
658
|
+
item: params.item,
|
|
659
|
+
...(timestamp ? { timestamp } : {}),
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
function buildOpenCodeReplayPartTimelineEvent(params) {
|
|
663
|
+
const { part, message } = params;
|
|
664
|
+
if (part.type === "text" && part.text) {
|
|
665
|
+
return buildOpenCodeReplayTimelineEvent({
|
|
666
|
+
item: { type: "assistant_message", text: part.text },
|
|
667
|
+
message,
|
|
668
|
+
part,
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
if (part.type === "reasoning" && part.text) {
|
|
672
|
+
return buildOpenCodeReplayTimelineEvent({
|
|
673
|
+
item: { type: "reasoning", text: part.text },
|
|
674
|
+
message,
|
|
675
|
+
part,
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
if (part.type !== "tool") {
|
|
679
|
+
return null;
|
|
680
|
+
}
|
|
681
|
+
const parsedToolPart = OpencodeToolPartToTimelineItemSchema.safeParse(part);
|
|
682
|
+
if (!parsedToolPart.success || !parsedToolPart.data) {
|
|
683
|
+
return null;
|
|
684
|
+
}
|
|
685
|
+
return buildOpenCodeReplayTimelineEvent({
|
|
686
|
+
item: parsedToolPart.data,
|
|
687
|
+
message,
|
|
688
|
+
part,
|
|
689
|
+
});
|
|
690
|
+
}
|
|
639
691
|
export const __openCodeInternals = {
|
|
640
692
|
buildOpenCodePromptParts,
|
|
641
693
|
buildOpenCodeModelContextWindowLookup,
|
|
@@ -682,7 +734,7 @@ export class OpenCodeAgentClient {
|
|
|
682
734
|
deps.runtime ??
|
|
683
735
|
new ProductionOpenCodeRuntime(OpenCodeServerManager.getInstance(this.logger, runtimeSettings));
|
|
684
736
|
}
|
|
685
|
-
async createSession(config,
|
|
737
|
+
async createSession(config, launchContext, options) {
|
|
686
738
|
const openCodeConfig = this.assertConfig(config);
|
|
687
739
|
const acquisition = await this.runtime.acquireServer({ force: false });
|
|
688
740
|
const { url } = acquisition.server;
|
|
@@ -700,14 +752,14 @@ export class OpenCodeAgentClient {
|
|
|
700
752
|
throw new Error("OpenCode session creation returned no data");
|
|
701
753
|
}
|
|
702
754
|
await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
|
|
703
|
-
return new OpenCodeAgentSession(openCodeConfig, client, session.id, this.logger, this.storageRoot, new Map(this.modelContextWindows), acquisition.release, options?.persistSession);
|
|
755
|
+
return new OpenCodeAgentSession(openCodeConfig, client, session.id, this.logger, this.storageRoot, new Map(this.modelContextWindows), acquisition.release, options?.persistSession, launchContext?.agentId);
|
|
704
756
|
}
|
|
705
757
|
catch (error) {
|
|
706
758
|
acquisition.release();
|
|
707
759
|
throw error;
|
|
708
760
|
}
|
|
709
761
|
}
|
|
710
|
-
async resumeSession(handle, overrides,
|
|
762
|
+
async resumeSession(handle, overrides, launchContext) {
|
|
711
763
|
const cwd = overrides?.cwd ?? handle.metadata?.cwd;
|
|
712
764
|
if (!cwd) {
|
|
713
765
|
throw new Error("OpenCode resume requires the original working directory");
|
|
@@ -726,7 +778,7 @@ export class OpenCodeAgentClient {
|
|
|
726
778
|
});
|
|
727
779
|
try {
|
|
728
780
|
await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
|
|
729
|
-
return new OpenCodeAgentSession(openCodeConfig, client, handle.sessionId, this.logger, this.storageRoot, new Map(this.modelContextWindows), acquisition.release, undefined);
|
|
781
|
+
return new OpenCodeAgentSession(openCodeConfig, client, handle.sessionId, this.logger, this.storageRoot, new Map(this.modelContextWindows), acquisition.release, undefined, launchContext?.agentId);
|
|
730
782
|
}
|
|
731
783
|
catch (error) {
|
|
732
784
|
acquisition.release();
|
|
@@ -751,17 +803,21 @@ export class OpenCodeAgentClient {
|
|
|
751
803
|
if (!providers) {
|
|
752
804
|
return [];
|
|
753
805
|
}
|
|
754
|
-
// Only include models from connected providers (ones that are actually available)
|
|
755
806
|
const connectedProviderIds = new Set(providers.connected);
|
|
756
|
-
//
|
|
757
|
-
|
|
758
|
-
|
|
807
|
+
// Providers with source "api" are managed by the OpenCode console/subscription (e.g. Pi
|
|
808
|
+
// coding agent). They do not appear in `connected` (which only lists env/config providers)
|
|
809
|
+
// but are fully usable — OpenCode authenticates them internally via the console session.
|
|
810
|
+
const isAccessible = (provider) => connectedProviderIds.has(provider.id) || provider.source === "api";
|
|
811
|
+
// Fail fast if no providers are accessible at all
|
|
812
|
+
if (!providers.all.some(isAccessible)) {
|
|
813
|
+
throw new Error("OpenCode has no connected providers. Please authenticate with at least one provider " +
|
|
814
|
+
"(e.g., openai, anthropic), set appropriate environment variables (e.g., OPENAI_API_KEY), " +
|
|
815
|
+
"or log in to OpenCode Go via the console.");
|
|
759
816
|
}
|
|
760
817
|
const models = [];
|
|
761
818
|
this.modelContextWindows.clear();
|
|
762
819
|
for (const provider of providers.all) {
|
|
763
|
-
|
|
764
|
-
if (!connectedProviderIds.has(provider.id)) {
|
|
820
|
+
if (!isAccessible(provider)) {
|
|
765
821
|
continue;
|
|
766
822
|
}
|
|
767
823
|
for (const [modelId, model] of Object.entries(provider.models)) {
|
|
@@ -1563,19 +1619,6 @@ function createDeferred() {
|
|
|
1563
1619
|
});
|
|
1564
1620
|
return { promise, resolve, reject };
|
|
1565
1621
|
}
|
|
1566
|
-
const OPENCODE_TRACE_ENABLED = process.env.PASEO_OPENCODE_TRACE === "1";
|
|
1567
|
-
function traceOpenCode(tag, data = {}) {
|
|
1568
|
-
if (!OPENCODE_TRACE_ENABLED)
|
|
1569
|
-
return;
|
|
1570
|
-
const line = JSON.stringify({ ts: new Date().toISOString(), tag, ...data }, (_k, v) => {
|
|
1571
|
-
if (v instanceof Error)
|
|
1572
|
-
return { name: v.name, message: v.message, stack: v.stack };
|
|
1573
|
-
if (typeof v === "bigint")
|
|
1574
|
-
return v.toString();
|
|
1575
|
-
return v;
|
|
1576
|
-
});
|
|
1577
|
-
process.stderr.write(`[opencode-trace] ${line}\n`);
|
|
1578
|
-
}
|
|
1579
1622
|
function unwrapOpenCodeGlobalEvent(event) {
|
|
1580
1623
|
const record = readOpenCodeRecord(event);
|
|
1581
1624
|
if (!record) {
|
|
@@ -1591,7 +1634,8 @@ function unwrapOpenCodeGlobalEvent(event) {
|
|
|
1591
1634
|
return null;
|
|
1592
1635
|
}
|
|
1593
1636
|
class OpenCodeAgentSession {
|
|
1594
|
-
constructor(config, client, sessionId, logger, _storageRoot, modelContextWindowsByModelKey = new Map(), releaseServer, persistSession = true) {
|
|
1637
|
+
constructor(config, client, sessionId, logger, _storageRoot, modelContextWindowsByModelKey = new Map(), releaseServer, persistSession = true, agentId) {
|
|
1638
|
+
this.agentId = agentId;
|
|
1595
1639
|
this.provider = "opencode";
|
|
1596
1640
|
this.capabilities = OPENCODE_CAPABILITIES;
|
|
1597
1641
|
this.currentMode = "default";
|
|
@@ -1618,11 +1662,10 @@ class OpenCodeAgentSession {
|
|
|
1618
1662
|
this.subAgentCallIdByChildSessionId = new Map();
|
|
1619
1663
|
this.pendingChildToolPartsBySessionId = new Map();
|
|
1620
1664
|
this.deletedFromProvider = false;
|
|
1621
|
-
this.retryFailureTimer = null;
|
|
1622
1665
|
this.config = config;
|
|
1623
1666
|
this.client = client;
|
|
1624
1667
|
this.sessionId = sessionId;
|
|
1625
|
-
this.logger = logger;
|
|
1668
|
+
this.logger = logger.child({ agentId: this.agentId });
|
|
1626
1669
|
this.modelContextWindowsByModelKey = modelContextWindowsByModelKey;
|
|
1627
1670
|
this.currentMode = normalizeOpenCodeModeId(config.modeId);
|
|
1628
1671
|
this.releaseServer = releaseServer ?? null;
|
|
@@ -1714,7 +1757,6 @@ class OpenCodeAgentSession {
|
|
|
1714
1757
|
this.subAgentsByCallId.clear();
|
|
1715
1758
|
this.subAgentCallIdByChildSessionId.clear();
|
|
1716
1759
|
this.pendingChildToolPartsBySessionId.clear();
|
|
1717
|
-
this.clearRetryFailureTimer();
|
|
1718
1760
|
const turnAbortController = new AbortController();
|
|
1719
1761
|
this.abortController = turnAbortController;
|
|
1720
1762
|
await this.ensureMcpServersConfigured();
|
|
@@ -1741,6 +1783,7 @@ class OpenCodeAgentSession {
|
|
|
1741
1783
|
// consumeEventStream already finished the turn with the subscription error.
|
|
1742
1784
|
return { turnId };
|
|
1743
1785
|
}
|
|
1786
|
+
this.notifySubscribers({ type: "turn_started", provider: "opencode" }, turnId);
|
|
1744
1787
|
const slashCommand = await this.resolveSlashCommandInvocation(prompt);
|
|
1745
1788
|
if (slashCommand) {
|
|
1746
1789
|
if (slashCommand.commandName === "compact" || slashCommand.commandName === "summarize") {
|
|
@@ -1823,7 +1866,7 @@ class OpenCodeAgentSession {
|
|
|
1823
1866
|
// SDK input validation) is caught alongside async rejections. A plain
|
|
1824
1867
|
// `.then().catch()` chain would let a sync throw escape unhandled.
|
|
1825
1868
|
void (async () => {
|
|
1826
|
-
traceOpenCode("
|
|
1869
|
+
this.traceOpenCode("provider.opencode.prompt_async.start", {
|
|
1827
1870
|
turnId,
|
|
1828
1871
|
sessionId: this.sessionId,
|
|
1829
1872
|
model,
|
|
@@ -1849,7 +1892,7 @@ class OpenCodeAgentSession {
|
|
|
1849
1892
|
...(effectiveMode ? { agent: effectiveMode } : {}),
|
|
1850
1893
|
...(effectiveVariant ? { variant: effectiveVariant } : {}),
|
|
1851
1894
|
});
|
|
1852
|
-
traceOpenCode("
|
|
1895
|
+
this.traceOpenCode("provider.opencode.prompt_async.response", {
|
|
1853
1896
|
turnId,
|
|
1854
1897
|
hasError: promptResponse.error !== undefined,
|
|
1855
1898
|
error: promptResponse.error,
|
|
@@ -1864,7 +1907,7 @@ class OpenCodeAgentSession {
|
|
|
1864
1907
|
}
|
|
1865
1908
|
}
|
|
1866
1909
|
catch (error) {
|
|
1867
|
-
traceOpenCode("
|
|
1910
|
+
this.traceOpenCode("provider.opencode.prompt_async.throw", {
|
|
1868
1911
|
turnId,
|
|
1869
1912
|
error: error instanceof Error
|
|
1870
1913
|
? { name: error.name, message: error.message, stack: error.stack }
|
|
@@ -1887,7 +1930,11 @@ class OpenCodeAgentSession {
|
|
|
1887
1930
|
};
|
|
1888
1931
|
}
|
|
1889
1932
|
async consumeEventStream(turnId, turnAbortController, subscriptionReady) {
|
|
1890
|
-
traceOpenCode("subscribe.start", {
|
|
1933
|
+
this.traceOpenCode("provider.opencode.subscribe.start", {
|
|
1934
|
+
turnId,
|
|
1935
|
+
sessionId: this.sessionId,
|
|
1936
|
+
cwd: this.config.cwd,
|
|
1937
|
+
});
|
|
1891
1938
|
try {
|
|
1892
1939
|
const result = await this.client.global.event({
|
|
1893
1940
|
signal: turnAbortController.signal,
|
|
@@ -1899,7 +1946,10 @@ class OpenCodeAgentSession {
|
|
|
1899
1946
|
eventCount += 1;
|
|
1900
1947
|
if (!subscriptionReadyResolved) {
|
|
1901
1948
|
subscriptionReadyResolved = true;
|
|
1902
|
-
traceOpenCode("subscribe.ready", {
|
|
1949
|
+
this.traceOpenCode("provider.opencode.subscribe.ready", {
|
|
1950
|
+
turnId,
|
|
1951
|
+
sessionId: this.sessionId,
|
|
1952
|
+
});
|
|
1903
1953
|
subscriptionReady.resolve();
|
|
1904
1954
|
}
|
|
1905
1955
|
const shouldContinue = await this.consumeOpenCodeStreamEvent({
|
|
@@ -1912,14 +1962,14 @@ class OpenCodeAgentSession {
|
|
|
1912
1962
|
return;
|
|
1913
1963
|
}
|
|
1914
1964
|
}
|
|
1915
|
-
traceOpenCode("stream.eof", {
|
|
1965
|
+
this.traceOpenCode("provider.opencode.stream.eof", {
|
|
1916
1966
|
turnId,
|
|
1917
1967
|
eventCount,
|
|
1918
1968
|
aborted: turnAbortController.signal.aborted,
|
|
1919
1969
|
stillActive: this.activeForegroundTurnId === turnId,
|
|
1920
1970
|
});
|
|
1921
1971
|
if (!turnAbortController.signal.aborted && this.activeForegroundTurnId === turnId) {
|
|
1922
|
-
traceOpenCode("turn.
|
|
1972
|
+
this.traceOpenCode("provider.opencode.turn.fail_eof", { turnId, eventCount });
|
|
1923
1973
|
if (!subscriptionReadyResolved) {
|
|
1924
1974
|
subscriptionReady.reject(new Error("OpenCode event stream ended before it became ready"));
|
|
1925
1975
|
}
|
|
@@ -1931,7 +1981,7 @@ class OpenCodeAgentSession {
|
|
|
1931
1981
|
}
|
|
1932
1982
|
}
|
|
1933
1983
|
catch (error) {
|
|
1934
|
-
traceOpenCode("subscribe.error", {
|
|
1984
|
+
this.traceOpenCode("provider.opencode.subscribe.error", {
|
|
1935
1985
|
turnId,
|
|
1936
1986
|
error: error instanceof Error ? { name: error.name, message: error.message } : String(error),
|
|
1937
1987
|
});
|
|
@@ -1960,19 +2010,20 @@ class OpenCodeAgentSession {
|
|
|
1960
2010
|
async consumeOpenCodeStreamEvent(params) {
|
|
1961
2011
|
const { rawEvent, eventCount, turnId, turnAbortController } = params;
|
|
1962
2012
|
const event = unwrapOpenCodeGlobalEvent(rawEvent);
|
|
1963
|
-
traceOpenCode("
|
|
2013
|
+
this.traceOpenCode("provider.opencode.raw_event", {
|
|
1964
2014
|
turnId,
|
|
1965
2015
|
n: eventCount,
|
|
1966
2016
|
type: event?.type,
|
|
1967
2017
|
rawType: readOpenCodeRecord(rawEvent)?.type,
|
|
1968
2018
|
directory: readOpenCodeRecord(rawEvent)?.directory,
|
|
1969
|
-
|
|
2019
|
+
rawEvent,
|
|
2020
|
+
properties: event?.properties,
|
|
1970
2021
|
});
|
|
1971
2022
|
if (!event) {
|
|
1972
2023
|
return true;
|
|
1973
2024
|
}
|
|
1974
2025
|
if (turnAbortController.signal.aborted || this.activeForegroundTurnId !== turnId) {
|
|
1975
|
-
traceOpenCode("event.skip", {
|
|
2026
|
+
this.traceOpenCode("provider.opencode.event.skip", {
|
|
1976
2027
|
turnId,
|
|
1977
2028
|
n: eventCount,
|
|
1978
2029
|
aborted: turnAbortController.signal.aborted,
|
|
@@ -1980,17 +2031,17 @@ class OpenCodeAgentSession {
|
|
|
1980
2031
|
});
|
|
1981
2032
|
return false;
|
|
1982
2033
|
}
|
|
1983
|
-
this.armRetryFailureTimerForStatus(event, turnId);
|
|
1984
2034
|
const translated = await this.translateEvent(event);
|
|
1985
|
-
traceOpenCode("
|
|
2035
|
+
this.traceOpenCode("provider.opencode.parsed_event", {
|
|
1986
2036
|
turnId,
|
|
1987
2037
|
n: eventCount,
|
|
1988
2038
|
count: translated.length,
|
|
1989
2039
|
types: translated.map((t) => t.type),
|
|
2040
|
+
events: translated,
|
|
1990
2041
|
});
|
|
1991
2042
|
for (const e of translated) {
|
|
1992
2043
|
if (this.activeForegroundTurnId !== turnId) {
|
|
1993
|
-
traceOpenCode("
|
|
2044
|
+
this.traceOpenCode("provider.opencode.parsed_event.skip_active", { turnId, type: e.type });
|
|
1994
2045
|
return false;
|
|
1995
2046
|
}
|
|
1996
2047
|
if (e.type === "timeline" && e.item.type === "tool_call") {
|
|
@@ -1998,7 +2049,10 @@ class OpenCodeAgentSession {
|
|
|
1998
2049
|
}
|
|
1999
2050
|
const terminalEvent = toTerminalTurnEvent(e);
|
|
2000
2051
|
if (terminalEvent) {
|
|
2001
|
-
traceOpenCode("event.terminal", {
|
|
2052
|
+
this.traceOpenCode("provider.opencode.event.terminal", {
|
|
2053
|
+
turnId,
|
|
2054
|
+
type: terminalEvent.type,
|
|
2055
|
+
});
|
|
2002
2056
|
this.finishForegroundTurn(terminalEvent, turnId);
|
|
2003
2057
|
return false;
|
|
2004
2058
|
}
|
|
@@ -2007,7 +2061,7 @@ class OpenCodeAgentSession {
|
|
|
2007
2061
|
return true;
|
|
2008
2062
|
}
|
|
2009
2063
|
finishForegroundTurn(event, turnId) {
|
|
2010
|
-
traceOpenCode("
|
|
2064
|
+
this.traceOpenCode("provider.opencode.finish_foreground_turn", {
|
|
2011
2065
|
turnId,
|
|
2012
2066
|
activeTurnId: this.activeForegroundTurnId,
|
|
2013
2067
|
type: event.type,
|
|
@@ -2023,7 +2077,6 @@ class OpenCodeAgentSession {
|
|
|
2023
2077
|
else {
|
|
2024
2078
|
this.runningToolCalls.clear();
|
|
2025
2079
|
}
|
|
2026
|
-
this.clearRetryFailureTimer();
|
|
2027
2080
|
this.activeForegroundTurnId = null;
|
|
2028
2081
|
// Abort the SSE connection so the SDK tears down the underlying fetch.
|
|
2029
2082
|
this.abortController?.abort();
|
|
@@ -2037,37 +2090,6 @@ class OpenCodeAgentSession {
|
|
|
2037
2090
|
}
|
|
2038
2091
|
this.runningToolCalls.delete(item.callId);
|
|
2039
2092
|
}
|
|
2040
|
-
armRetryFailureTimerForStatus(event, turnId) {
|
|
2041
|
-
if (this.retryFailureTimer || event.type !== "session.status") {
|
|
2042
|
-
return;
|
|
2043
|
-
}
|
|
2044
|
-
if (event.properties.sessionID !== this.sessionId || event.properties.status.type !== "retry") {
|
|
2045
|
-
return;
|
|
2046
|
-
}
|
|
2047
|
-
const retry = event.properties.status;
|
|
2048
|
-
const message = typeof retry.message === "string" ? retry.message.trim() : "";
|
|
2049
|
-
const error = message
|
|
2050
|
-
? `OpenCode provider retry did not recover: ${message}`
|
|
2051
|
-
: "OpenCode provider retry did not recover";
|
|
2052
|
-
this.retryFailureTimer = setTimeout(() => {
|
|
2053
|
-
this.retryFailureTimer = null;
|
|
2054
|
-
if (this.activeForegroundTurnId !== turnId) {
|
|
2055
|
-
return;
|
|
2056
|
-
}
|
|
2057
|
-
this.finishForegroundTurn({
|
|
2058
|
-
type: "turn_failed",
|
|
2059
|
-
provider: "opencode",
|
|
2060
|
-
error,
|
|
2061
|
-
}, turnId);
|
|
2062
|
-
}, OPENCODE_RETRY_STATUS_FAILURE_MS);
|
|
2063
|
-
}
|
|
2064
|
-
clearRetryFailureTimer() {
|
|
2065
|
-
if (!this.retryFailureTimer) {
|
|
2066
|
-
return;
|
|
2067
|
-
}
|
|
2068
|
-
clearTimeout(this.retryFailureTimer);
|
|
2069
|
-
this.retryFailureTimer = null;
|
|
2070
|
-
}
|
|
2071
2093
|
synthesizeInterruptedToolCalls(turnId) {
|
|
2072
2094
|
for (const item of this.runningToolCalls.values()) {
|
|
2073
2095
|
const error = { message: "Tool execution aborted" };
|
|
@@ -2094,6 +2116,10 @@ class OpenCodeAgentSession {
|
|
|
2094
2116
|
notifySubscribers(event, turnIdOverride) {
|
|
2095
2117
|
const turnId = turnIdOverride ?? this.activeForegroundTurnId;
|
|
2096
2118
|
const tagged = turnId ? { ...event, turnId } : event;
|
|
2119
|
+
this.traceOpenCode("provider.opencode.event_emit", {
|
|
2120
|
+
turnId: getAgentStreamEventTurnId(tagged),
|
|
2121
|
+
event: tagged,
|
|
2122
|
+
});
|
|
2097
2123
|
for (const callback of this.subscribers) {
|
|
2098
2124
|
try {
|
|
2099
2125
|
callback(tagged);
|
|
@@ -2106,6 +2132,15 @@ class OpenCodeAgentSession {
|
|
|
2106
2132
|
createTurnId() {
|
|
2107
2133
|
return `opencode-turn-${this.nextTurnOrdinal++}`;
|
|
2108
2134
|
}
|
|
2135
|
+
traceOpenCode(msg, data = {}) {
|
|
2136
|
+
this.logger.trace({
|
|
2137
|
+
agentId: this.agentId,
|
|
2138
|
+
provider: "opencode",
|
|
2139
|
+
sessionId: this.sessionId,
|
|
2140
|
+
turnId: data.turnId ?? this.activeForegroundTurnId ?? undefined,
|
|
2141
|
+
...data,
|
|
2142
|
+
}, msg);
|
|
2143
|
+
}
|
|
2109
2144
|
async *streamHistory() {
|
|
2110
2145
|
const response = await this.client.session.messages({
|
|
2111
2146
|
sessionID: this.sessionId,
|
|
@@ -2121,11 +2156,10 @@ class OpenCodeAgentSession {
|
|
|
2121
2156
|
.map((p) => p.text)
|
|
2122
2157
|
.join("");
|
|
2123
2158
|
if (text) {
|
|
2124
|
-
yield {
|
|
2125
|
-
type: "timeline",
|
|
2126
|
-
provider: "opencode",
|
|
2159
|
+
yield buildOpenCodeReplayTimelineEvent({
|
|
2127
2160
|
item: { type: "user_message", text },
|
|
2128
|
-
|
|
2161
|
+
message: info,
|
|
2162
|
+
});
|
|
2129
2163
|
}
|
|
2130
2164
|
}
|
|
2131
2165
|
else {
|
|
@@ -2133,41 +2167,19 @@ class OpenCodeAgentSession {
|
|
|
2133
2167
|
for (const part of parts) {
|
|
2134
2168
|
if (part.type === "text" && part.text) {
|
|
2135
2169
|
emittedAssistantText = true;
|
|
2136
|
-
yield {
|
|
2137
|
-
type: "timeline",
|
|
2138
|
-
provider: "opencode",
|
|
2139
|
-
item: { type: "assistant_message", text: part.text },
|
|
2140
|
-
};
|
|
2141
|
-
continue;
|
|
2142
|
-
}
|
|
2143
|
-
if (part.type === "reasoning" && part.text) {
|
|
2144
|
-
yield {
|
|
2145
|
-
type: "timeline",
|
|
2146
|
-
provider: "opencode",
|
|
2147
|
-
item: { type: "reasoning", text: part.text },
|
|
2148
|
-
};
|
|
2149
|
-
continue;
|
|
2150
2170
|
}
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
const parsedToolPart = OpencodeToolPartToTimelineItemSchema.safeParse(part);
|
|
2155
|
-
if (parsedToolPart.success && parsedToolPart.data) {
|
|
2156
|
-
yield {
|
|
2157
|
-
type: "timeline",
|
|
2158
|
-
provider: "opencode",
|
|
2159
|
-
item: parsedToolPart.data,
|
|
2160
|
-
};
|
|
2171
|
+
const event = buildOpenCodeReplayPartTimelineEvent({ part, message: info });
|
|
2172
|
+
if (event) {
|
|
2173
|
+
yield event;
|
|
2161
2174
|
}
|
|
2162
2175
|
}
|
|
2163
2176
|
if (!emittedAssistantText) {
|
|
2164
2177
|
const text = stringifyStructuredAssistantMessage(info.structured);
|
|
2165
2178
|
if (text) {
|
|
2166
|
-
yield {
|
|
2167
|
-
type: "timeline",
|
|
2168
|
-
provider: "opencode",
|
|
2179
|
+
yield buildOpenCodeReplayTimelineEvent({
|
|
2169
2180
|
item: { type: "assistant_message", text },
|
|
2170
|
-
|
|
2181
|
+
message: info,
|
|
2182
|
+
});
|
|
2171
2183
|
}
|
|
2172
2184
|
}
|
|
2173
2185
|
}
|