@seawork/server 1.0.22-rc.3 → 2.0.2-rc.6
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 +48 -8
- package/dist/scripts/supervisor-entrypoint.js.map +1 -1
- package/dist/scripts/supervisor-native-classifier.js +77 -5
- package/dist/scripts/supervisor-native-classifier.js.map +1 -1
- package/dist/scripts/supervisor-stdio-tail.js +27 -0
- package/dist/scripts/supervisor-stdio-tail.js.map +1 -0
- package/dist/scripts/supervisor.js +12 -0
- package/dist/scripts/supervisor.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +142 -2
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +384 -3
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +55 -3
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +324 -45
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts +1 -0
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +8 -0
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-projections.js +7 -2
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-response-loop.d.ts +3 -1
- package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
- package/dist/server/server/agent/agent-response-loop.js +33 -6
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +43 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/claude-memory.d.ts +4 -0
- package/dist/server/server/agent/claude-memory.d.ts.map +1 -0
- package/dist/server/server/agent/claude-memory.js +97 -0
- package/dist/server/server/agent/claude-memory.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +247 -0
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +2 -0
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.d.ts +6 -139
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +65 -33
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts +1 -0
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +36 -0
- 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 +4 -0
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +3 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +13 -0
- package/dist/server/server/agent/provider-snapshot-manager.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 +141 -27
- package/dist/server/server/agent/providers/claude-agent.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 +14 -1
- 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 +132 -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 +2233 -163
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-binary-resolver.d.ts +9 -0
- package/dist/server/server/agent/providers/codex-binary-resolver.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-binary-resolver.js +35 -14
- package/dist/server/server/agent/providers/codex-binary-resolver.js.map +1 -1
- package/dist/server/server/agent/providers/codex-health-probe.js +1 -1
- package/dist/server/server/agent/providers/codex-health-probe.js.map +1 -1
- package/dist/server/server/agent/providers/deepseek/constants.d.ts +4 -0
- package/dist/server/server/agent/providers/deepseek/constants.d.ts.map +1 -0
- package/dist/server/server/agent/providers/deepseek/constants.js +11 -0
- package/dist/server/server/agent/providers/deepseek/constants.js.map +1 -0
- package/dist/server/server/agent/providers/deepseek/event-mapper.d.ts +21 -0
- package/dist/server/server/agent/providers/deepseek/event-mapper.d.ts.map +1 -0
- package/dist/server/server/agent/providers/deepseek/event-mapper.js +286 -0
- package/dist/server/server/agent/providers/deepseek/event-mapper.js.map +1 -0
- package/dist/server/server/agent/providers/deepseek/serve-client.d.ts +94 -0
- package/dist/server/server/agent/providers/deepseek/serve-client.d.ts.map +1 -0
- package/dist/server/server/agent/providers/deepseek/serve-client.js +142 -0
- package/dist/server/server/agent/providers/deepseek/serve-client.js.map +1 -0
- package/dist/server/server/agent/providers/deepseek/serve-process.d.ts +18 -0
- package/dist/server/server/agent/providers/deepseek/serve-process.d.ts.map +1 -0
- package/dist/server/server/agent/providers/deepseek/serve-process.js +93 -0
- package/dist/server/server/agent/providers/deepseek/serve-process.js.map +1 -0
- package/dist/server/server/agent/providers/deepseek-agent.d.ts +94 -0
- package/dist/server/server/agent/providers/deepseek-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/deepseek-agent.js +811 -0
- package/dist/server/server/agent/providers/deepseek-agent.js.map +1 -0
- package/dist/server/server/agent/providers/gateway-telemetry.d.ts +9 -0
- package/dist/server/server/agent/providers/gateway-telemetry.d.ts.map +1 -0
- package/dist/server/server/agent/providers/gateway-telemetry.js +36 -0
- package/dist/server/server/agent/providers/gateway-telemetry.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent/constants.d.ts +3 -0
- package/dist/server/server/agent/providers/seaagent/constants.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent/constants.js +3 -0
- package/dist/server/server/agent/providers/seaagent/constants.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent/event-mapper.d.ts +3 -0
- package/dist/server/server/agent/providers/seaagent/event-mapper.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent/event-mapper.js +69 -0
- package/dist/server/server/agent/providers/seaagent/event-mapper.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent/rpc-client.d.ts +23 -0
- package/dist/server/server/agent/providers/seaagent/rpc-client.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent/rpc-client.js +139 -0
- package/dist/server/server/agent/providers/seaagent/rpc-client.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent/tool-call-mapper.d.ts +3 -0
- package/dist/server/server/agent/providers/seaagent/tool-call-mapper.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent/tool-call-mapper.js +38 -0
- package/dist/server/server/agent/providers/seaagent/tool-call-mapper.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent-agent.d.ts +81 -0
- package/dist/server/server/agent/providers/seaagent-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent-agent.js +502 -0
- package/dist/server/server/agent/providers/seaagent-agent.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent-binary-resolver.d.ts +18 -0
- package/dist/server/server/agent/providers/seaagent-binary-resolver.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent-binary-resolver.js +46 -0
- package/dist/server/server/agent/providers/seaagent-binary-resolver.js.map +1 -0
- package/dist/server/server/agent/providers/seaagent-health-probe.d.ts +11 -0
- package/dist/server/server/agent/providers/seaagent-health-probe.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seaagent-health-probe.js +49 -0
- package/dist/server/server/agent/providers/seaagent-health-probe.js.map +1 -0
- package/dist/server/server/agent/providers/seawork-models.d.ts +8 -0
- package/dist/server/server/agent/providers/seawork-models.d.ts.map +1 -1
- package/dist/server/server/agent/providers/seawork-models.js +118 -74
- package/dist/server/server/agent/providers/seawork-models.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +2 -2
- package/dist/server/server/agent/timeline-projection.d.ts +5 -1
- package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
- package/dist/server/server/agent/timeline-projection.js +20 -4
- package/dist/server/server/agent/timeline-projection.js.map +1 -1
- package/dist/server/server/agent-attention-policy.d.ts +1 -0
- package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
- package/dist/server/server/agent-attention-policy.js +6 -0
- package/dist/server/server/agent-attention-policy.js.map +1 -1
- package/dist/server/server/allowed-hosts.d.ts +13 -0
- package/dist/server/server/allowed-hosts.d.ts.map +1 -1
- package/dist/server/server/allowed-hosts.js +33 -0
- package/dist/server/server/allowed-hosts.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts +2 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +200 -14
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/browser-extension-token.d.ts +23 -0
- package/dist/server/server/browser-extension-token.d.ts.map +1 -0
- package/dist/server/server/browser-extension-token.js +114 -0
- package/dist/server/server/browser-extension-token.js.map +1 -0
- package/dist/server/server/bug-report-handler.d.ts +7 -1
- package/dist/server/server/bug-report-handler.d.ts.map +1 -1
- package/dist/server/server/bug-report-handler.js +73 -5
- package/dist/server/server/bug-report-handler.js.map +1 -1
- package/dist/server/server/bug-report-redact.d.ts +25 -1
- package/dist/server/server/bug-report-redact.d.ts.map +1 -1
- package/dist/server/server/bug-report-redact.js +42 -5
- package/dist/server/server/bug-report-redact.js.map +1 -1
- package/dist/server/server/config.d.ts +1 -0
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +51 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/crash-report.d.ts.map +1 -1
- package/dist/server/server/crash-report.js +18 -0
- package/dist/server/server/crash-report.js.map +1 -1
- package/dist/server/server/daemon-config-store.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.js +94 -3
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/disk-full.d.ts +4 -0
- package/dist/server/server/disk-full.d.ts.map +1 -0
- package/dist/server/server/disk-full.js +46 -0
- package/dist/server/server/disk-full.js.map +1 -0
- package/dist/server/server/exports.d.ts +3 -2
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +2 -1
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/git-forge/github-client.d.ts +18 -0
- package/dist/server/server/git-forge/github-client.d.ts.map +1 -1
- package/dist/server/server/git-forge/github-client.js +88 -0
- package/dist/server/server/git-forge/github-client.js.map +1 -1
- package/dist/server/server/git-forge/parse-remote.d.ts +2 -0
- package/dist/server/server/git-forge/parse-remote.d.ts.map +1 -1
- package/dist/server/server/git-forge/parse-remote.js +71 -6
- package/dist/server/server/git-forge/parse-remote.js.map +1 -1
- package/dist/server/server/git-forge/service.d.ts +87 -0
- package/dist/server/server/git-forge/service.d.ts.map +1 -1
- package/dist/server/server/git-forge/service.js +198 -4
- package/dist/server/server/git-forge/service.js.map +1 -1
- package/dist/server/server/index.js +72 -0
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/integrations/wecom-openclaw/bridge.d.ts +88 -0
- package/dist/server/server/integrations/wecom-openclaw/bridge.d.ts.map +1 -0
- package/dist/server/server/integrations/wecom-openclaw/bridge.js +1229 -0
- package/dist/server/server/integrations/wecom-openclaw/bridge.js.map +1 -0
- package/dist/server/server/integrations/wecom-openclaw/qr.d.ts +38 -0
- package/dist/server/server/integrations/wecom-openclaw/qr.d.ts.map +1 -0
- package/dist/server/server/integrations/wecom-openclaw/qr.js +101 -0
- package/dist/server/server/integrations/wecom-openclaw/qr.js.map +1 -0
- package/dist/server/server/integrations/wecom-openclaw/workspace.d.ts +5 -0
- package/dist/server/server/integrations/wecom-openclaw/workspace.d.ts.map +1 -0
- package/dist/server/server/integrations/wecom-openclaw/workspace.js +40 -0
- package/dist/server/server/integrations/wecom-openclaw/workspace.js.map +1 -0
- package/dist/server/server/latency-proxy.d.ts.map +1 -1
- package/dist/server/server/latency-proxy.js +45 -5
- package/dist/server/server/latency-proxy.js.map +1 -1
- package/dist/server/server/library/codex-skill-discovery.d.ts +9 -0
- package/dist/server/server/library/codex-skill-discovery.d.ts.map +1 -0
- package/dist/server/server/library/codex-skill-discovery.js +49 -0
- package/dist/server/server/library/codex-skill-discovery.js.map +1 -0
- package/dist/server/server/library/hub-install.d.ts +79 -0
- package/dist/server/server/library/hub-install.d.ts.map +1 -0
- package/dist/server/server/library/hub-install.js +263 -0
- package/dist/server/server/library/hub-install.js.map +1 -0
- package/dist/server/server/library/hub-test-run.d.ts +81 -0
- package/dist/server/server/library/hub-test-run.d.ts.map +1 -0
- package/dist/server/server/library/hub-test-run.js +237 -0
- package/dist/server/server/library/hub-test-run.js.map +1 -0
- package/dist/server/server/library/library-import.d.ts +27 -0
- package/dist/server/server/library/library-import.d.ts.map +1 -0
- package/dist/server/server/library/library-import.js +227 -0
- package/dist/server/server/library/library-import.js.map +1 -0
- package/dist/server/server/library/library-injection.d.ts +16 -0
- package/dist/server/server/library/library-injection.d.ts.map +1 -0
- package/dist/server/server/library/library-injection.js +49 -0
- package/dist/server/server/library/library-injection.js.map +1 -0
- package/dist/server/server/library/library-rpc.d.ts +73 -0
- package/dist/server/server/library/library-rpc.d.ts.map +1 -0
- package/dist/server/server/library/library-rpc.js +239 -0
- package/dist/server/server/library/library-rpc.js.map +1 -0
- package/dist/server/server/library/library-store.d.ts +35 -0
- package/dist/server/server/library/library-store.d.ts.map +1 -0
- package/dist/server/server/library/library-store.js +169 -0
- package/dist/server/server/library/library-store.js.map +1 -0
- package/dist/server/server/library/library-sync.d.ts +46 -0
- package/dist/server/server/library/library-sync.d.ts.map +1 -0
- package/dist/server/server/library/library-sync.js +235 -0
- package/dist/server/server/library/library-sync.js.map +1 -0
- package/dist/server/server/library/library-types.d.ts +756 -0
- package/dist/server/server/library/library-types.d.ts.map +1 -0
- package/dist/server/server/library/library-types.js +99 -0
- package/dist/server/server/library/library-types.js.map +1 -0
- package/dist/server/server/library/worktree-dev.d.ts +14 -0
- package/dist/server/server/library/worktree-dev.d.ts.map +1 -0
- package/dist/server/server/library/worktree-dev.js +24 -0
- package/dist/server/server/library/worktree-dev.js.map +1 -0
- package/dist/server/server/log-stream-error.d.ts +2 -0
- package/dist/server/server/log-stream-error.d.ts.map +1 -0
- package/dist/server/server/log-stream-error.js +33 -0
- package/dist/server/server/log-stream-error.js.map +1 -0
- package/dist/server/server/logger.d.ts +1 -0
- package/dist/server/server/logger.d.ts.map +1 -1
- package/dist/server/server/logger.js +32 -0
- 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/messages.d.ts +4 -1
- package/dist/server/server/messages.d.ts.map +1 -1
- package/dist/server/server/messages.js +40 -2
- package/dist/server/server/messages.js.map +1 -1
- package/dist/server/server/node-pty-error.d.ts +2 -0
- package/dist/server/server/node-pty-error.d.ts.map +1 -0
- package/dist/server/server/node-pty-error.js +19 -0
- package/dist/server/server/node-pty-error.js.map +1 -0
- package/dist/server/server/persisted-config.d.ts +219 -135
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +35 -1
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/port-in-use.d.ts +4 -0
- package/dist/server/server/port-in-use.d.ts.map +1 -0
- package/dist/server/server/port-in-use.js +35 -0
- package/dist/server/server/port-in-use.js.map +1 -0
- package/dist/server/server/provider-runtime-settings-mask.d.ts +7 -0
- package/dist/server/server/provider-runtime-settings-mask.d.ts.map +1 -0
- package/dist/server/server/provider-runtime-settings-mask.js +65 -0
- package/dist/server/server/provider-runtime-settings-mask.js.map +1 -0
- package/dist/server/server/sac/auth.d.ts +12 -0
- package/dist/server/server/sac/auth.d.ts.map +1 -1
- package/dist/server/server/sac/auth.js +19 -1
- package/dist/server/server/sac/auth.js.map +1 -1
- package/dist/server/server/sac/index.d.ts +2 -2
- package/dist/server/server/sac/index.d.ts.map +1 -1
- package/dist/server/server/sac/index.js +2 -2
- package/dist/server/server/sac/index.js.map +1 -1
- package/dist/server/server/sac/poll.d.ts +2 -0
- package/dist/server/server/sac/poll.d.ts.map +1 -1
- package/dist/server/server/sac/poll.js +7 -2
- package/dist/server/server/sac/poll.js.map +1 -1
- package/dist/server/server/schedule/cron.d.ts.map +1 -1
- package/dist/server/server/schedule/cron.js +6 -6
- package/dist/server/server/schedule/cron.js.map +1 -1
- package/dist/server/server/schedule/rpc-schemas.d.ts +895 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -1
- package/dist/server/server/schedule/rpc-schemas.js +34 -0
- package/dist/server/server/schedule/rpc-schemas.js.map +1 -1
- package/dist/server/server/schedule/service.d.ts +5 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/service.js +97 -14
- package/dist/server/server/schedule/service.js.map +1 -1
- package/dist/server/server/schedule/types.d.ts +19 -0
- package/dist/server/server/schedule/types.d.ts.map +1 -1
- package/dist/server/server/schedule/types.js +1 -0
- package/dist/server/server/schedule/types.js.map +1 -1
- package/dist/server/server/session.d.ts +83 -2
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +895 -82
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/native-runtime-guard.d.ts +1 -0
- package/dist/server/server/speech/native-runtime-guard.d.ts.map +1 -1
- package/dist/server/server/speech/native-runtime-guard.js +10 -4
- package/dist/server/server/speech/native-runtime-guard.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +6 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +79 -7
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-git-service.d.ts +2 -1
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +7 -3
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-registry-model.d.ts +1 -0
- package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-model.js +18 -0
- package/dist/server/server/workspace-registry-model.js.map +1 -1
- package/dist/server/server/worktree-session.d.ts +3 -3
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +1 -3
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/shared/messages.d.ts +59658 -21927
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +531 -3
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/provider-runtime-settings.d.ts +87 -0
- package/dist/server/shared/provider-runtime-settings.d.ts.map +1 -0
- package/dist/server/shared/provider-runtime-settings.js +33 -0
- package/dist/server/shared/provider-runtime-settings.js.map +1 -0
- package/dist/server/terminal/terminal.d.ts +9 -0
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +100 -3
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts +23 -1
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +182 -21
- 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 +57 -9
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/src/server/bug-report-redact.js +42 -5
- package/dist/src/server/bug-report-redact.js.map +1 -1
- package/dist/src/server/crash-report.js +18 -0
- package/dist/src/server/crash-report.js.map +1 -1
- package/dist/src/server/speech/native-runtime-guard.js +177 -0
- package/dist/src/server/speech/native-runtime-guard.js.map +1 -0
- package/dist/src/server/speech/speech-types.js +8 -0
- package/dist/src/server/speech/speech-types.js.map +1 -0
- package/package.json +16 -4
|
@@ -8,18 +8,26 @@ import { promisify } from "node:util";
|
|
|
8
8
|
import { query, } from "@anthropic-ai/claude-agent-sdk";
|
|
9
9
|
import { resolveElectronHelperPath } from "../../../utils/electron-helper.js";
|
|
10
10
|
import { spawnProcess } from "../../../utils/spawn.js";
|
|
11
|
-
import { getOrchestratorModeInstructions } from "../orchestrator-instructions.js";
|
|
12
|
-
import { applyProviderEnv } from "../provider-launch-config.js";
|
|
13
11
|
import { getLatencyProxyUrlSync } from "../../latency-proxy.js";
|
|
12
|
+
import { claudeProjectDirName } from "../claude-memory.js";
|
|
13
|
+
import { getOrchestratorModeInstructions } from "../orchestrator-instructions.js";
|
|
14
|
+
import { applyProviderEnv, mergeLocalhostProxyBypass, } from "../provider-launch-config.js";
|
|
14
15
|
import { getClaudeModels, normalizeClaudeRuntimeModelId } from "./claude/claude-models.js";
|
|
15
16
|
import { parsePartialJsonObject } from "./claude/partial-json.js";
|
|
16
17
|
import { ClaudeSidechainTracker } from "./claude/sidechain-tracker.js";
|
|
17
18
|
import { mapTaskNotificationSystemRecordToToolCall, mapTaskNotificationUserContentToToolCall, } from "./claude/task-notification-tool-call.js";
|
|
18
19
|
import { mapClaudeCanceledToolCall, mapClaudeCompletedToolCall, mapClaudeFailedToolCall, mapClaudeRunningToolCall, } from "./claude/tool-call-mapper.js";
|
|
19
20
|
import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
|
|
21
|
+
import { appendAnthropicCustomHeaders, buildSeaworkGatewayHeaders } from "./gateway-telemetry.js";
|
|
20
22
|
const fsPromises = promises;
|
|
21
23
|
const execFileAsync = promisify(execFile);
|
|
22
24
|
const CLAUDE_SETTING_SOURCES = ["user", "project"];
|
|
25
|
+
const CLAUDE_PROVIDER = "claude";
|
|
26
|
+
const CLAUDE_TOOL_SCHEMA_GUIDANCE = `
|
|
27
|
+
<claude-tool-schema-guidance>
|
|
28
|
+
When using Claude Code tools, follow each tool's exact input schema. The Read tool requires the argument \`file_path\`; do not use Seawork timeline display fields such as \`filePath\` as tool arguments.
|
|
29
|
+
</claude-tool-schema-guidance>
|
|
30
|
+
`;
|
|
23
31
|
const CLAUDE_CAPABILITIES = {
|
|
24
32
|
supportsStreaming: true,
|
|
25
33
|
supportsSessionPersistence: true,
|
|
@@ -70,6 +78,11 @@ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3
|
|
|
70
78
|
* ENOENT error messages reference a real on-disk location instead of the
|
|
71
79
|
* misleading asar path.
|
|
72
80
|
*/
|
|
81
|
+
function rewriteAsarToUnpacked(p) {
|
|
82
|
+
const asarSeg = `app.asar${path.sep}`;
|
|
83
|
+
const unpackedSeg = `app.asar.unpacked${path.sep}`;
|
|
84
|
+
return p.includes(asarSeg) && !p.includes(unpackedSeg) ? p.replace(asarSeg, unpackedSeg) : p;
|
|
85
|
+
}
|
|
73
86
|
let cachedClaudeCliPath;
|
|
74
87
|
export function resolveClaudeCliExecutable() {
|
|
75
88
|
if (cachedClaudeCliPath !== undefined) {
|
|
@@ -80,13 +93,22 @@ export function resolveClaudeCliExecutable() {
|
|
|
80
93
|
// The SDK's package.json doesn't expose "./package.json" via exports, so
|
|
81
94
|
// resolve the main entry (sdk.mjs) and derive the package root from it.
|
|
82
95
|
const mainPath = sdkRequire.resolve("@anthropic-ai/claude-agent-sdk");
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
96
|
+
// 0.2.x shipped cli.js next to the main entry.
|
|
97
|
+
const cliPath = rewriteAsarToUnpacked(path.join(path.dirname(mainPath), "cli.js"));
|
|
98
|
+
if (fs.existsSync(cliPath)) {
|
|
99
|
+
cachedClaudeCliPath = cliPath;
|
|
100
|
+
return cachedClaudeCliPath;
|
|
101
|
+
}
|
|
102
|
+
// 0.3.x ships the native `claude` binary in a per-platform optional dep.
|
|
103
|
+
const ext = process.platform === "win32" ? ".exe" : "";
|
|
104
|
+
const pkg = `@anthropic-ai/claude-agent-sdk-${process.platform}-${process.arch}/claude${ext}`;
|
|
105
|
+
try {
|
|
106
|
+
const native = rewriteAsarToUnpacked(sdkRequire.resolve(pkg));
|
|
107
|
+
cachedClaudeCliPath = fs.existsSync(native) ? native : null;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
cachedClaudeCliPath = null;
|
|
88
111
|
}
|
|
89
|
-
cachedClaudeCliPath = fs.existsSync(cliPath) ? cliPath : null;
|
|
90
112
|
}
|
|
91
113
|
catch {
|
|
92
114
|
cachedClaudeCliPath = null;
|
|
@@ -113,6 +135,12 @@ function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
|
|
|
113
135
|
};
|
|
114
136
|
}
|
|
115
137
|
export function resolveClaudeAuthSpawnEnv(mergedEnv, authMode) {
|
|
138
|
+
const mergeSeaworkCustomHeaders = (env) => {
|
|
139
|
+
return {
|
|
140
|
+
...env,
|
|
141
|
+
ANTHROPIC_CUSTOM_HEADERS: appendAnthropicCustomHeaders(env.ANTHROPIC_CUSTOM_HEADERS, buildSeaworkGatewayHeaders(CLAUDE_PROVIDER)),
|
|
142
|
+
};
|
|
143
|
+
};
|
|
116
144
|
if (authMode === "local") {
|
|
117
145
|
return {
|
|
118
146
|
spawnEnv: {
|
|
@@ -135,7 +163,7 @@ export function resolveClaudeAuthSpawnEnv(mergedEnv, authMode) {
|
|
|
135
163
|
return { spawnEnv: { ...mergedEnv }, hasApiKey };
|
|
136
164
|
}
|
|
137
165
|
return {
|
|
138
|
-
spawnEnv: {
|
|
166
|
+
spawnEnv: mergeSeaworkCustomHeaders({
|
|
139
167
|
...mergedEnv,
|
|
140
168
|
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1",
|
|
141
169
|
ANTHROPIC_AUTH_TOKEN: undefined,
|
|
@@ -144,11 +172,11 @@ export function resolveClaudeAuthSpawnEnv(mergedEnv, authMode) {
|
|
|
144
172
|
CLAUDE_CODE_USE_BEDROCK: undefined,
|
|
145
173
|
CLAUDE_CODE_USE_VERTEX: undefined,
|
|
146
174
|
AWS_BEARER_TOKEN_BEDROCK: undefined,
|
|
147
|
-
},
|
|
175
|
+
}),
|
|
148
176
|
hasApiKey,
|
|
149
177
|
};
|
|
150
178
|
}
|
|
151
|
-
function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings, launchEnv, logger) {
|
|
179
|
+
function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings, launchEnv, logger, latencyProxyUrl) {
|
|
152
180
|
return {
|
|
153
181
|
...options,
|
|
154
182
|
spawnClaudeCodeProcess: (spawnOptions) => {
|
|
@@ -162,6 +190,13 @@ function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings, launchEnv
|
|
|
162
190
|
...applyProviderEnv(spawnOptions.env, runtimeSettings),
|
|
163
191
|
...(launchEnv ?? {}),
|
|
164
192
|
}, runtimeSettings?.authMode);
|
|
193
|
+
// Merge the localhost bypass AFTER launchEnv is spread: a launch context
|
|
194
|
+
// that carries its own NO_PROXY would otherwise overwrite the bypass and
|
|
195
|
+
// route local daemon MCP traffic back through the CONNECT-only latency
|
|
196
|
+
// proxy. Only applies when the latency-debug proxy is active.
|
|
197
|
+
if (latencyProxyUrl) {
|
|
198
|
+
mergeLocalhostProxyBypass(spawnEnv);
|
|
199
|
+
}
|
|
165
200
|
if (!isDefaultRuntime) {
|
|
166
201
|
command = resolved.command;
|
|
167
202
|
}
|
|
@@ -258,6 +293,19 @@ function isClaudeThinkingEffort(value) {
|
|
|
258
293
|
const MAX_RECENT_STDERR_CHARS = 4000;
|
|
259
294
|
const STDERR_FLUSH_WAIT_MS = 150;
|
|
260
295
|
const STDERR_FLUSH_POLL_INTERVAL_MS = 10;
|
|
296
|
+
const MAX_PLAN_TEXT_LENGTH = 50000;
|
|
297
|
+
function truncatePlanInput(input) {
|
|
298
|
+
const plan = input?.["plan"];
|
|
299
|
+
if (typeof plan !== "string") {
|
|
300
|
+
// plan key absent or non-string: discard the whole client object so unknown
|
|
301
|
+
// keys cannot leak into the plan_approval tool-call input; caller falls back
|
|
302
|
+
// to pending.request.input (the original server-side value).
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
// Extract only the known `plan` key; discard any other client-supplied keys
|
|
306
|
+
// so they cannot leak into the plan_approval tool-call input (matches codex path).
|
|
307
|
+
return { plan: plan.slice(0, MAX_PLAN_TEXT_LENGTH) };
|
|
308
|
+
}
|
|
261
309
|
function summarizeClaudeOptionsForLog(options) {
|
|
262
310
|
const systemPromptRaw = options.systemPrompt;
|
|
263
311
|
const systemPromptSummary = (() => {
|
|
@@ -1099,6 +1147,7 @@ class ClaudeAgentSession {
|
|
|
1099
1147
|
});
|
|
1100
1148
|
this.persistedHistory = [];
|
|
1101
1149
|
this.historyPending = false;
|
|
1150
|
+
this.historyPathCache = new Map();
|
|
1102
1151
|
this.turnState = "idle";
|
|
1103
1152
|
this.nextTurnOrdinal = 1;
|
|
1104
1153
|
this.cancelCurrentTurn = null;
|
|
@@ -1114,6 +1163,7 @@ class ClaudeAgentSession {
|
|
|
1114
1163
|
this.userMessageIds = [];
|
|
1115
1164
|
this.recentStderr = "";
|
|
1116
1165
|
this.closed = false;
|
|
1166
|
+
this.maxEffortClampWarned = false;
|
|
1117
1167
|
this.handlePermissionRequest = async (toolName, input, options) => {
|
|
1118
1168
|
const requestId = `permission-${randomUUID()}`;
|
|
1119
1169
|
const kind = resolvePermissionKind(toolName, input);
|
|
@@ -1366,11 +1416,18 @@ class ClaudeAgentSession {
|
|
|
1366
1416
|
this.notifySubscribers({ type: "turn_started", provider: "claude" });
|
|
1367
1417
|
try {
|
|
1368
1418
|
await this.ensureQuery();
|
|
1369
|
-
|
|
1419
|
+
// Snapshot this.input locally. ensureQuery() guarantees this.input is
|
|
1420
|
+
// set on return; the previous code re-read this.input after the
|
|
1421
|
+
// (sync-only) startQueryPump() call, which made the .push() vulnerable
|
|
1422
|
+
// to any path that mutated this.input between the guard and the push
|
|
1423
|
+
// — observed in #779 as `Cannot read properties of null (reading
|
|
1424
|
+
// 'push')` after a previous turn's subprocess exit.
|
|
1425
|
+
const input = this.input;
|
|
1426
|
+
if (!input) {
|
|
1370
1427
|
throw new Error("Claude session input stream not initialized");
|
|
1371
1428
|
}
|
|
1372
1429
|
this.startQueryPump();
|
|
1373
|
-
|
|
1430
|
+
input.push(sdkMessage);
|
|
1374
1431
|
}
|
|
1375
1432
|
catch (error) {
|
|
1376
1433
|
this.flushPendingToolCalls();
|
|
@@ -1473,6 +1530,9 @@ class ClaudeAgentSession {
|
|
|
1473
1530
|
this.pendingPermissions.delete(requestId);
|
|
1474
1531
|
pending.cleanup?.();
|
|
1475
1532
|
if (response.behavior === "allow") {
|
|
1533
|
+
const updatedInput = pending.request.kind === "plan"
|
|
1534
|
+
? truncatePlanInput(response.updatedInput)
|
|
1535
|
+
: response.updatedInput;
|
|
1476
1536
|
if (pending.request.kind === "plan") {
|
|
1477
1537
|
const selectedActionId = response.selectedActionId;
|
|
1478
1538
|
const shouldResumePriorMode = selectedActionId === "implement_resume" && this.planResumeMode === "bypassPermissions";
|
|
@@ -1483,7 +1543,7 @@ class ClaudeAgentSession {
|
|
|
1483
1543
|
this.pushToolCall(mapClaudeCompletedToolCall({
|
|
1484
1544
|
name: "plan_approval",
|
|
1485
1545
|
callId: pending.request.id,
|
|
1486
|
-
input: pending.request.input ?? null,
|
|
1546
|
+
input: updatedInput ?? pending.request.input ?? null,
|
|
1487
1547
|
output: {
|
|
1488
1548
|
approved: true,
|
|
1489
1549
|
actionId: selectedActionId ?? "implement",
|
|
@@ -1492,7 +1552,7 @@ class ClaudeAgentSession {
|
|
|
1492
1552
|
}
|
|
1493
1553
|
const result = {
|
|
1494
1554
|
behavior: "allow",
|
|
1495
|
-
updatedInput:
|
|
1555
|
+
updatedInput: updatedInput ?? pending.request.input ?? {},
|
|
1496
1556
|
updatedPermissions: this.normalizePermissionUpdates(response.updatedPermissions),
|
|
1497
1557
|
};
|
|
1498
1558
|
pending.resolve(result);
|
|
@@ -1536,12 +1596,16 @@ class ClaudeAgentSession {
|
|
|
1536
1596
|
// Old GA agents (1.0.16) are covered too because handle is constructed
|
|
1537
1597
|
// here on the daemon at migrate time, not from the client payload.
|
|
1538
1598
|
const sourcePath = this.resolveHistoryPath(this.claudeSessionId);
|
|
1599
|
+
// Persist the user's pre-injection base, never the daemon-injected
|
|
1600
|
+
// systemPrompt, so resume re-injects once instead of doubling.
|
|
1601
|
+
const { systemPromptBase, ...rest } = this.config;
|
|
1539
1602
|
this.persistence = {
|
|
1540
1603
|
provider: "claude",
|
|
1541
1604
|
sessionId: this.claudeSessionId,
|
|
1542
1605
|
nativeHandle: this.claudeSessionId,
|
|
1543
1606
|
metadata: {
|
|
1544
|
-
...
|
|
1607
|
+
...rest,
|
|
1608
|
+
...(systemPromptBase !== undefined ? { systemPrompt: systemPromptBase || undefined } : {}),
|
|
1545
1609
|
...(sourcePath ? { sourcePath } : {}),
|
|
1546
1610
|
},
|
|
1547
1611
|
};
|
|
@@ -1576,7 +1640,11 @@ class ClaudeAgentSession {
|
|
|
1576
1640
|
const q = await this.ensureQuery();
|
|
1577
1641
|
const commands = await q.supportedCommands();
|
|
1578
1642
|
const commandMap = new Map();
|
|
1643
|
+
const deniedSkills = new Set(this.config.librarySkillDenylist ?? []);
|
|
1579
1644
|
for (const cmd of commands) {
|
|
1645
|
+
if (deniedSkills.has(cmd.name)) {
|
|
1646
|
+
continue;
|
|
1647
|
+
}
|
|
1580
1648
|
if (!commandMap.has(cmd.name)) {
|
|
1581
1649
|
commandMap.set(cmd.name, {
|
|
1582
1650
|
name: cmd.name,
|
|
@@ -1818,17 +1886,32 @@ class ClaudeAgentSession {
|
|
|
1818
1886
|
}
|
|
1819
1887
|
}
|
|
1820
1888
|
async buildOptions() {
|
|
1889
|
+
const useLocalClaudeConfig = this.runtimeSettings?.authMode === "local";
|
|
1821
1890
|
const thinkingOptionId = this.config.thinkingOptionId && this.config.thinkingOptionId !== "default"
|
|
1822
1891
|
? this.config.thinkingOptionId
|
|
1823
1892
|
: undefined;
|
|
1824
1893
|
let thinking;
|
|
1825
1894
|
let effort;
|
|
1826
1895
|
if (thinkingOptionId && isClaudeThinkingEffort(thinkingOptionId)) {
|
|
1896
|
+
// Claude.ai subscription auth (local CLI) rejects effort "max" with
|
|
1897
|
+
// SDK exit code 1 ("Effort level \"max\" is not available for
|
|
1898
|
+
// Claude.ai subscribers"), which previously failed every turn and
|
|
1899
|
+
// could wedge the session (#779). Clamp to "high" for local auth so
|
|
1900
|
+
// the turn actually runs.
|
|
1901
|
+
let resolvedEffort = thinkingOptionId;
|
|
1902
|
+
if (useLocalClaudeConfig && resolvedEffort === "max") {
|
|
1903
|
+
resolvedEffort = "high";
|
|
1904
|
+
if (!this.maxEffortClampWarned) {
|
|
1905
|
+
this.maxEffortClampWarned = true;
|
|
1906
|
+
this.logger.warn({ from: "max", to: "high", reason: "claude.ai-subscription" }, "Clamping reasoning effort: Claude.ai subscription auth does not support 'max'");
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1827
1909
|
thinking = { type: "adaptive" };
|
|
1828
|
-
effort =
|
|
1910
|
+
effort = resolvedEffort;
|
|
1829
1911
|
}
|
|
1830
1912
|
const appendedSystemPrompt = [
|
|
1831
1913
|
getOrchestratorModeInstructions(),
|
|
1914
|
+
CLAUDE_TOOL_SCHEMA_GUIDANCE,
|
|
1832
1915
|
this.config.systemPrompt?.trim(),
|
|
1833
1916
|
]
|
|
1834
1917
|
.filter((entry) => typeof entry === "string" && entry.length > 0)
|
|
@@ -1838,7 +1921,6 @@ class ClaudeAgentSession {
|
|
|
1838
1921
|
// The SDK `settings` option (flag settings layer) has the highest priority.
|
|
1839
1922
|
const seaworkHome = process.env.SEAWORK_HOME ?? path.join(os.homedir(), ".seawork");
|
|
1840
1923
|
const seaworkSettingsPath = path.join(seaworkHome, "claude-settings.json");
|
|
1841
|
-
const useLocalClaudeConfig = this.runtimeSettings?.authMode === "local";
|
|
1842
1924
|
const hasSeaworkSettings = !useLocalClaudeConfig && fs.existsSync(seaworkSettingsPath);
|
|
1843
1925
|
// Windows' CreateProcess returns ENOENT when the spawn cwd does not exist,
|
|
1844
1926
|
// and the SDK mislabels that ENOENT as "Claude Code executable not found".
|
|
@@ -1927,15 +2009,17 @@ class ClaudeAgentSession {
|
|
|
1927
2009
|
if (this.claudeSessionId) {
|
|
1928
2010
|
base.resume = this.claudeSessionId;
|
|
1929
2011
|
}
|
|
1930
|
-
return this.applyRuntimeSettings(base);
|
|
2012
|
+
return this.applyRuntimeSettings(base, latencyProxyUrl);
|
|
1931
2013
|
}
|
|
1932
|
-
applyRuntimeSettings(options) {
|
|
1933
|
-
return applyRuntimeSettingsToClaudeOptions(options, this.runtimeSettings, this.launchEnv, this.logger);
|
|
2014
|
+
applyRuntimeSettings(options, latencyProxyUrl) {
|
|
2015
|
+
return applyRuntimeSettingsToClaudeOptions(options, this.runtimeSettings, this.launchEnv, this.logger, latencyProxyUrl);
|
|
1934
2016
|
}
|
|
1935
2017
|
normalizeMcpServers(servers) {
|
|
1936
2018
|
const result = {};
|
|
1937
2019
|
for (const [name, config] of Object.entries(servers)) {
|
|
1938
|
-
|
|
2020
|
+
const sdkConfig = toClaudeSdkMcpConfig(config);
|
|
2021
|
+
result[name] =
|
|
2022
|
+
name === "seawork" ? Object.assign(sdkConfig, { alwaysLoad: true }) : sdkConfig;
|
|
1939
2023
|
}
|
|
1940
2024
|
return result;
|
|
1941
2025
|
}
|
|
@@ -2778,12 +2862,13 @@ class ClaudeAgentSession {
|
|
|
2778
2862
|
try {
|
|
2779
2863
|
const historyPath = this.resolveHistoryPath(sessionId);
|
|
2780
2864
|
if (!historyPath || !fs.existsSync(historyPath)) {
|
|
2865
|
+
this.logger.warn({ sessionId, cwd: this.config.cwd }, "Claude transcript not found on resume");
|
|
2781
2866
|
return;
|
|
2782
2867
|
}
|
|
2783
2868
|
this.ingestPersistedHistory(fs.readFileSync(historyPath, "utf8"));
|
|
2784
2869
|
}
|
|
2785
2870
|
catch (error) {
|
|
2786
|
-
|
|
2871
|
+
this.logger.warn({ error, sessionId }, "Failed to load Claude persisted history");
|
|
2787
2872
|
}
|
|
2788
2873
|
}
|
|
2789
2874
|
ingestPersistedHistory(content) {
|
|
@@ -2826,11 +2911,40 @@ class ClaudeAgentSession {
|
|
|
2826
2911
|
const cwd = this.config.cwd;
|
|
2827
2912
|
if (!cwd)
|
|
2828
2913
|
return null;
|
|
2829
|
-
|
|
2830
|
-
|
|
2914
|
+
const cached = this.historyPathCache.get(sessionId);
|
|
2915
|
+
if (cached) {
|
|
2916
|
+
return cached;
|
|
2917
|
+
}
|
|
2831
2918
|
const configDir = process.env.CLAUDE_CONFIG_DIR ?? path.join(os.homedir(), ".claude");
|
|
2832
|
-
const
|
|
2833
|
-
|
|
2919
|
+
const projectsRoot = path.join(configDir, "projects");
|
|
2920
|
+
// Fast path: reproduce Claude CLI's directory sanitization (slashes, dots,
|
|
2921
|
+
// underscores, and Windows drive colons all collapse to dashes). Matches for
|
|
2922
|
+
// the common case with a single existsSync and no directory scan.
|
|
2923
|
+
const sanitized = claudeProjectDirName(cwd);
|
|
2924
|
+
const guess = path.join(projectsRoot, sanitized, `${sessionId}.jsonl`);
|
|
2925
|
+
if (fs.existsSync(guess)) {
|
|
2926
|
+
this.historyPathCache.set(sessionId, guess);
|
|
2927
|
+
return guess;
|
|
2928
|
+
}
|
|
2929
|
+
// Fallback: the sanitization rule can diverge from what Claude CLI actually
|
|
2930
|
+
// wrote (non-ASCII paths, trailing slashes, etc.). The session id is a unique
|
|
2931
|
+
// uuid, so scan project dirs for an exact `<sessionId>.jsonl` match without
|
|
2932
|
+
// reading any file contents.
|
|
2933
|
+
let projectDirs;
|
|
2934
|
+
try {
|
|
2935
|
+
projectDirs = fs.readdirSync(projectsRoot);
|
|
2936
|
+
}
|
|
2937
|
+
catch {
|
|
2938
|
+
return guess;
|
|
2939
|
+
}
|
|
2940
|
+
for (const dirName of projectDirs) {
|
|
2941
|
+
const candidate = path.join(projectsRoot, dirName, `${sessionId}.jsonl`);
|
|
2942
|
+
if (fs.existsSync(candidate)) {
|
|
2943
|
+
this.historyPathCache.set(sessionId, candidate);
|
|
2944
|
+
return candidate;
|
|
2945
|
+
}
|
|
2946
|
+
}
|
|
2947
|
+
return guess;
|
|
2834
2948
|
}
|
|
2835
2949
|
convertHistoryEntry(entry) {
|
|
2836
2950
|
return convertClaudeHistoryEntry(entry, (content) => this.mapBlocksToTimeline(content));
|