@getpaseo/server 0.1.69 → 0.1.71
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-runtime-metrics.js.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +57 -4
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +78 -3
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +25 -4
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +231 -26
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts +2 -0
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +16 -7
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts +6 -2
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +32 -0
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-prompt.d.ts +72 -0
- package/dist/server/server/agent/agent-prompt.d.ts.map +1 -0
- package/dist/server/server/agent/agent-prompt.js +169 -0
- package/dist/server/server/agent/agent-prompt.js.map +1 -0
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +27 -2
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.js +1 -1
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
- package/dist/server/server/agent/create-agent-mode.d.ts +16 -0
- package/dist/server/server/agent/create-agent-mode.d.ts.map +1 -0
- package/dist/server/server/agent/create-agent-mode.js +26 -0
- package/dist/server/server/agent/create-agent-mode.js.map +1 -0
- package/dist/server/server/agent/import-sessions.d.ts +33 -0
- package/dist/server/server/agent/import-sessions.d.ts.map +1 -0
- package/dist/server/server/agent/import-sessions.js +107 -0
- package/dist/server/server/agent/import-sessions.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts +1 -1
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +61 -14
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +1 -43
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-shared.js +0 -138
- package/dist/server/server/agent/mcp-shared.js.map +1 -1
- package/dist/server/server/agent/pcm16-resampler.js.map +1 -1
- package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
- package/dist/server/server/agent/prompt-attachments.js +2 -0
- package/dist/server/server/agent/prompt-attachments.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts +4 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +11 -0
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts +7 -0
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +13 -3
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +2 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +35 -17
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/{claude-agent.d.ts → claude/agent.d.ts} +9 -6
- package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/{claude-agent.js → claude/agent.js} +185 -152
- package/dist/server/server/agent/providers/claude/agent.js.map +1 -0
- package/dist/server/server/agent/providers/claude/{claude-models.d.ts → models.d.ts} +1 -1
- package/dist/server/server/agent/providers/claude/models.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/{claude-models.js → models.js} +8 -1
- package/dist/server/server/agent/providers/claude/models.js.map +1 -0
- package/dist/server/server/agent/providers/claude/query.d.ts +14 -0
- package/dist/server/server/agent/providers/claude/query.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/query.js +84 -0
- package/dist/server/server/agent/providers/claude/query.js.map +1 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +19 -3
- 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 +447 -93
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
- package/dist/server/server/agent/providers/diagnostic-utils.js +4 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.js +0 -3
- package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
- 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 +6 -2
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +3 -2
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +204 -31
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/provider-image-output.d.ts +20 -0
- package/dist/server/server/agent/providers/provider-image-output.d.ts.map +1 -0
- package/dist/server/server/agent/providers/provider-image-output.js +51 -0
- package/dist/server/server/agent/providers/provider-image-output.js.map +1 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +3 -3
- package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -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 +7 -7
- 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 +12 -18
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
- package/dist/server/server/agent/stt-manager.d.ts +1 -0
- package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.js +3 -0
- package/dist/server/server/agent/stt-manager.js.map +1 -1
- package/dist/server/server/agent/tool-name-normalization.js.map +1 -1
- package/dist/server/server/agent/tts-manager.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts +1 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +3 -1
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/chat/chat-mentions.d.ts +24 -8
- package/dist/server/server/chat/chat-mentions.d.ts.map +1 -1
- package/dist/server/server/chat/chat-mentions.js +77 -35
- package/dist/server/server/chat/chat-mentions.js.map +1 -1
- package/dist/server/server/chat/chat-service.d.ts +4 -0
- package/dist/server/server/chat/chat-service.d.ts.map +1 -1
- package/dist/server/server/chat/chat-service.js +9 -0
- package/dist/server/server/chat/chat-service.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 +7 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/connection-offer.d.ts +1 -0
- package/dist/server/server/connection-offer.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.js +2 -6
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/daemon-keypair.d.ts.map +1 -1
- package/dist/server/server/daemon-keypair.js +4 -2
- package/dist/server/server/daemon-keypair.js.map +1 -1
- package/dist/server/server/daemon-worker.js +3 -0
- package/dist/server/server/daemon-worker.js.map +1 -1
- package/dist/server/server/editor-targets.js.map +1 -1
- package/dist/server/server/exports.d.ts +1 -0
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +1 -0
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/json-utils.js.map +1 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +68 -0
- package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -1
- package/dist/server/server/loop/rpc-schemas.js +4 -0
- package/dist/server/server/loop/rpc-schemas.js.map +1 -1
- package/dist/server/server/loop-service.d.ts +8 -0
- package/dist/server/server/loop-service.d.ts.map +1 -1
- package/dist/server/server/loop-service.js +11 -2
- package/dist/server/server/loop-service.js.map +1 -1
- package/dist/server/server/package-version.d.ts +12 -0
- package/dist/server/server/package-version.d.ts.map +1 -1
- package/dist/server/server/package-version.js +13 -1
- package/dist/server/server/package-version.js.map +1 -1
- package/dist/server/server/pairing-offer.d.ts +1 -0
- package/dist/server/server/pairing-offer.d.ts.map +1 -1
- package/dist/server/server/pairing-offer.js +2 -1
- package/dist/server/server/pairing-offer.js.map +1 -1
- package/dist/server/server/pairing-qr.js +1 -1
- package/dist/server/server/pairing-qr.js.map +1 -1
- package/dist/server/server/paseo-env.d.ts +7 -3
- package/dist/server/server/paseo-env.d.ts.map +1 -1
- package/dist/server/server/paseo-env.js +16 -33
- package/dist/server/server/paseo-env.js.map +1 -1
- package/dist/server/server/paseo-home.js +2 -2
- package/dist/server/server/paseo-home.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +9 -0
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +6 -4
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/pid-lock.d.ts +21 -4
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +30 -8
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/private-files.d.ts +7 -0
- package/dist/server/server/private-files.d.ts.map +1 -0
- package/dist/server/server/private-files.js +42 -0
- package/dist/server/server/private-files.js.map +1 -0
- package/dist/server/server/push/token-store.d.ts.map +1 -1
- package/dist/server/server/push/token-store.js +4 -6
- package/dist/server/server/push/token-store.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 +8 -5
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/schedule/rpc-schemas.d.ts +1136 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -1
- package/dist/server/server/schedule/rpc-schemas.js +39 -0
- package/dist/server/server/schedule/rpc-schemas.js.map +1 -1
- package/dist/server/server/schedule/service.d.ts +4 -2
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/service.js +106 -16
- package/dist/server/server/schedule/service.js.map +1 -1
- package/dist/server/server/schedule/types.d.ts +16 -0
- package/dist/server/server/schedule/types.d.ts.map +1 -1
- package/dist/server/server/script-health-monitor.js.map +1 -1
- package/dist/server/server/server-id.d.ts.map +1 -1
- package/dist/server/server/server-id.js +8 -3
- package/dist/server/server/server-id.js.map +1 -1
- package/dist/server/server/session.d.ts +5 -4
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +318 -149
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/audio.js.map +1 -1
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +52 -52
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +9 -3
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +12 -10
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +2 -2
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.d.ts +16 -13
- package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.js +303 -71
- package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
- package/dist/server/server/voice-config.js +1 -1
- package/dist/server/server/voice-config.js.map +1 -1
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-directory.d.ts.map +1 -1
- package/dist/server/server/workspace-directory.js +4 -2
- package/dist/server/server/workspace-directory.js.map +1 -1
- package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
- package/dist/server/server/workspace-git-metadata.js +12 -5
- package/dist/server/server/workspace-git-metadata.js.map +1 -1
- package/dist/server/server/workspace-git-service.d.ts +4 -1
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +50 -2
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-model.js +10 -3
- package/dist/server/server/workspace-registry-model.js.map +1 -1
- package/dist/server/server/worktree-branch-name-generator.d.ts +2 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts.map +1 -1
- package/dist/server/server/worktree-branch-name-generator.js +18 -11
- package/dist/server/server/worktree-branch-name-generator.js.map +1 -1
- package/dist/server/server/worktree-session.js +1 -1
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts +13 -0
- package/dist/server/services/github-service.d.ts.map +1 -1
- package/dist/server/services/github-service.js +21 -4
- package/dist/server/services/github-service.js.map +1 -1
- package/dist/server/shared/agent-labels.d.ts +2 -0
- package/dist/server/shared/agent-labels.d.ts.map +1 -0
- package/dist/server/shared/agent-labels.js +2 -0
- package/dist/server/shared/agent-labels.js.map +1 -0
- package/dist/server/shared/connection-offer.d.ts +10 -0
- package/dist/server/shared/connection-offer.d.ts.map +1 -1
- package/dist/server/shared/connection-offer.js +1 -0
- package/dist/server/shared/connection-offer.js.map +1 -1
- package/dist/server/shared/daemon-endpoints.d.ts +4 -0
- package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
- package/dist/server/shared/daemon-endpoints.js +6 -1
- package/dist/server/shared/daemon-endpoints.js.map +1 -1
- package/dist/server/shared/error-utils.d.ts +11 -0
- package/dist/server/shared/error-utils.d.ts.map +1 -0
- package/dist/server/shared/error-utils.js +27 -0
- package/dist/server/shared/error-utils.js.map +1 -0
- package/dist/server/shared/importable-providers.d.ts +7 -0
- package/dist/server/shared/importable-providers.d.ts.map +1 -0
- package/dist/server/shared/importable-providers.js +7 -0
- package/dist/server/shared/importable-providers.js.map +1 -0
- package/dist/server/shared/messages.d.ts +12753 -2085
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +61 -5
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/tool-call-display.d.ts.map +1 -1
- package/dist/server/shared/tool-call-display.js +2 -0
- package/dist/server/shared/tool-call-display.js.map +1 -1
- package/dist/server/terminal/terminal-manager.d.ts +2 -1
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +2 -1
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-output-coalescer.js.map +1 -1
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
- package/dist/server/terminal/terminal-session-controller.js +2 -0
- package/dist/server/terminal/terminal-session-controller.js.map +1 -1
- package/dist/server/terminal/terminal.d.ts +1 -1
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +53 -8
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
- package/dist/server/utils/build-metadata-prompt.d.ts +14 -0
- package/dist/server/utils/build-metadata-prompt.d.ts.map +1 -0
- package/dist/server/utils/build-metadata-prompt.js +28 -0
- package/dist/server/utils/build-metadata-prompt.js.map +1 -0
- package/dist/server/utils/checkout-git.d.ts +2 -1
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +67 -11
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/server/utils/executable.d.ts +2 -1
- package/dist/server/utils/executable.d.ts.map +1 -1
- package/dist/server/utils/executable.js +50 -51
- package/dist/server/utils/executable.js.map +1 -1
- package/dist/server/utils/paseo-config-file.d.ts +1 -1
- package/dist/server/utils/paseo-config-file.d.ts.map +1 -1
- package/dist/server/utils/paseo-config-schema.d.ts +625 -0
- package/dist/server/utils/paseo-config-schema.d.ts.map +1 -1
- package/dist/server/utils/paseo-config-schema.js +17 -0
- package/dist/server/utils/paseo-config-schema.js.map +1 -1
- package/dist/server/utils/spawn.d.ts +2 -0
- package/dist/server/utils/spawn.d.ts.map +1 -1
- package/dist/server/utils/spawn.js +2 -1
- package/dist/server/utils/spawn.js.map +1 -1
- package/dist/server/utils/tree-kill.d.ts +18 -0
- package/dist/server/utils/tree-kill.d.ts.map +1 -0
- package/dist/server/utils/{process-tree.js → tree-kill.js} +14 -33
- package/dist/server/utils/tree-kill.js.map +1 -0
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/server/utils/wrap-user-instructions.d.ts +2 -0
- package/dist/server/utils/wrap-user-instructions.d.ts.map +1 -0
- package/dist/server/utils/wrap-user-instructions.js +13 -0
- package/dist/server/utils/wrap-user-instructions.js.map +1 -0
- package/dist/src/server/agent/provider-launch-config.js.map +1 -1
- package/dist/src/server/agent/provider-manifest.js +11 -0
- package/dist/src/server/agent/provider-manifest.js.map +1 -1
- package/dist/src/server/loop/rpc-schemas.js +4 -0
- package/dist/src/server/loop/rpc-schemas.js.map +1 -1
- package/dist/src/server/paseo-env.js +16 -33
- package/dist/src/server/paseo-env.js.map +1 -1
- package/dist/src/server/paseo-home.js +2 -2
- package/dist/src/server/paseo-home.js.map +1 -1
- package/dist/src/server/persisted-config.js +6 -4
- package/dist/src/server/persisted-config.js.map +1 -1
- package/dist/src/server/pid-lock.js +30 -8
- package/dist/src/server/pid-lock.js.map +1 -1
- package/dist/src/server/private-files.js +42 -0
- package/dist/src/server/private-files.js.map +1 -0
- package/dist/src/server/schedule/rpc-schemas.js +39 -0
- package/dist/src/server/schedule/rpc-schemas.js.map +1 -1
- package/dist/src/shared/messages.js +61 -5
- package/dist/src/shared/messages.js.map +1 -1
- package/dist/src/utils/executable.js +50 -51
- package/dist/src/utils/executable.js.map +1 -1
- package/dist/src/utils/paseo-config-schema.js +17 -0
- package/dist/src/utils/paseo-config-schema.js.map +1 -1
- package/dist/src/utils/spawn.js +2 -1
- package/dist/src/utils/spawn.js.map +1 -1
- package/package.json +5 -4
- package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +0 -1
- package/dist/server/server/agent/providers/claude/claude-models.js.map +0 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/claude-agent.js.map +0 -1
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts +0 -16
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts.map +0 -1
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
- package/dist/server/utils/process-tree.d.ts +0 -25
- package/dist/server/utils/process-tree.d.ts.map +0 -1
- package/dist/server/utils/process-tree.js.map +0 -1
|
@@ -21,13 +21,14 @@ import { DictationStreamManager, } from "./dictation/dictation-stream-manager.js
|
|
|
21
21
|
import { createVoiceTurnController, } from "./voice/voice-turn-controller.js";
|
|
22
22
|
import { buildConfigOverrides, extractTimestamps, isStoredAgentProviderAvailable, toAgentPersistenceHandle, } from "./persistence-hooks.js";
|
|
23
23
|
import { ensureAgentLoaded } from "./agent/agent-loading.js";
|
|
24
|
-
import { sendPromptToAgent, unarchiveAgentState } from "./agent/
|
|
24
|
+
import { formatSystemNotificationPrompt, sendPromptToAgent, unarchiveAgentState, } from "./agent/agent-prompt.js";
|
|
25
25
|
import { experimental_createMCPClient } from "ai";
|
|
26
26
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
27
27
|
import { buildWorkspaceScriptPayloads, readPaseoConfigForProjection, } from "./script-status-projection.js";
|
|
28
28
|
import { deriveProjectSlug } from "./workspace-git-metadata.js";
|
|
29
29
|
import { spawnWorkspaceScript } from "./worktree-bootstrap.js";
|
|
30
30
|
import { applyMutableProviderConfigToOverrides } from "./daemon-config-store.js";
|
|
31
|
+
import { getErrorMessage, getErrorMessageOr } from "../shared/error-utils.js";
|
|
31
32
|
import { buildProviderRegistry } from "./agent/provider-registry.js";
|
|
32
33
|
import { resolveSnapshotCwd } from "./agent/provider-snapshot-manager.js";
|
|
33
34
|
import { scheduleAgentMetadataGeneration } from "./agent/agent-metadata-generator.js";
|
|
@@ -36,12 +37,14 @@ import { MAX_EXPLICIT_AGENT_TITLE_CHARS } from "./agent/agent-title-limits.js";
|
|
|
36
37
|
import { appendTimelineItemIfAgentKnown, emitLiveTimelineItemIfAgentKnown, } from "./agent/timeline-append.js";
|
|
37
38
|
import { projectTimelineRows, selectTimelineWindowByProjectedLimit, } from "./agent/timeline-projection.js";
|
|
38
39
|
import { DEFAULT_STRUCTURED_GENERATION_PROVIDERS, StructuredAgentFallbackError, StructuredAgentResponseError, generateStructuredAgentResponseWithFallback, } from "./agent/agent-response-loop.js";
|
|
40
|
+
import { ImportSessionsRequestError, listImportableProviderSessions, normalizeImportAgentRequest, } from "./agent/import-sessions.js";
|
|
39
41
|
import { checkoutLiteFromGitSnapshot, normalizeWorkspaceId as normalizePersistedWorkspaceId, deriveProjectGroupingName, classifyDirectoryForProjectMembership, deriveWorkspaceDisplayName, } from "./workspace-registry-model.js";
|
|
40
42
|
import { createPersistedProjectRecord, createPersistedWorkspaceRecord, } from "./workspace-registry.js";
|
|
41
43
|
import { buildVoiceModeSystemPrompt, stripVoiceModeSystemPrompt, wrapSpokenInput, } from "./voice-config.js";
|
|
42
44
|
import { isVoicePermissionAllowed } from "./voice-permission-policy.js";
|
|
43
45
|
import { listDirectoryEntries, readExplorerFile, readExplorerFileBytes, getDownloadableFileInfo, } from "./file-explorer/service.js";
|
|
44
46
|
import { readPaseoConfigForEdit, writePaseoConfigForEdit, } from "../utils/paseo-config-file.js";
|
|
47
|
+
import { buildMetadataPrompt } from "../utils/build-metadata-prompt.js";
|
|
45
48
|
import { archivePersistedWorkspaceRecord } from "./workspace-archive-service.js";
|
|
46
49
|
import { WorkspaceReconciliationService } from "./workspace-reconciliation-service.js";
|
|
47
50
|
import { checkoutResolvedBranch, commitChanges, mergeToBase, mergeFromBase, pullCurrentBranch, pushCurrentBranch, createPullRequest, } from "../utils/checkout-git.js";
|
|
@@ -51,8 +54,8 @@ import { searchHomeDirectories, searchWorkspaceEntries } from "../utils/director
|
|
|
51
54
|
import { toCheckoutError } from "./checkout-git-utils.js";
|
|
52
55
|
import { toResolver } from "./speech/provider-resolver.js";
|
|
53
56
|
import { resolveClientMessageId } from "./client-message-id.js";
|
|
54
|
-
import { ChatServiceError } from "./chat/chat-service.js";
|
|
55
|
-
import { notifyChatMentions } from "./chat/chat-mentions.js";
|
|
57
|
+
import { ChatServiceError, parseMentionAgentIds, } from "./chat/chat-service.js";
|
|
58
|
+
import { notifyChatMentions, prepareChatMentionFanout } from "./chat/chat-mentions.js";
|
|
56
59
|
import { execCommand } from "../utils/spawn.js";
|
|
57
60
|
import { createGitHubService, } from "../services/github-service.js";
|
|
58
61
|
import { summarizeFetchWorkspacesEntries, WorkspaceDirectory, } from "./workspace-directory.js";
|
|
@@ -241,7 +244,6 @@ const PCM_BYTES_PER_MS = (PCM_SAMPLE_RATE * PCM_CHANNELS * (PCM_BITS_PER_SAMPLE
|
|
|
241
244
|
const MIN_STREAMING_SEGMENT_DURATION_MS = 1000;
|
|
242
245
|
const MIN_STREAMING_SEGMENT_BYTES = Math.round(PCM_BYTES_PER_MS * MIN_STREAMING_SEGMENT_DURATION_MS);
|
|
243
246
|
const AgentIdSchema = z.string().uuid();
|
|
244
|
-
const VOICE_INTERRUPT_CONFIRMATION_MS = 500;
|
|
245
247
|
const AVAILABLE_EDITOR_TARGETS_CACHE_TTL_MS = 60000;
|
|
246
248
|
const AVAILABLE_EDITOR_TARGETS_CACHE_KEY = "available";
|
|
247
249
|
class VoiceFeatureUnavailableError extends Error {
|
|
@@ -257,8 +259,8 @@ function buildImportPersistenceHandle(input) {
|
|
|
257
259
|
const cwd = input.cwd ?? process.cwd();
|
|
258
260
|
return {
|
|
259
261
|
provider: input.provider,
|
|
260
|
-
sessionId: input.
|
|
261
|
-
nativeHandle: input.
|
|
262
|
+
sessionId: input.providerHandleId,
|
|
263
|
+
nativeHandle: input.providerHandleId,
|
|
262
264
|
metadata: {
|
|
263
265
|
provider: input.provider,
|
|
264
266
|
cwd,
|
|
@@ -304,7 +306,13 @@ function parseClientCapabilities(capabilities) {
|
|
|
304
306
|
return new Set();
|
|
305
307
|
}
|
|
306
308
|
const known = new Set(Object.values(CLIENT_CAPS));
|
|
307
|
-
|
|
309
|
+
const result = [];
|
|
310
|
+
for (const [key, value] of Object.entries(capabilities)) {
|
|
311
|
+
if (value === true && known.has(key)) {
|
|
312
|
+
result.push(key);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return new Set(result);
|
|
308
316
|
}
|
|
309
317
|
/**
|
|
310
318
|
* Session represents a single connected client session.
|
|
@@ -317,8 +325,6 @@ export class Session {
|
|
|
317
325
|
// Voice mode state
|
|
318
326
|
this.isVoiceMode = false;
|
|
319
327
|
this.speechInProgress = false;
|
|
320
|
-
this.pendingVoiceSpeechStartAt = null;
|
|
321
|
-
this.pendingVoiceSpeechTimer = null;
|
|
322
328
|
this.voiceTurnController = null;
|
|
323
329
|
this.voiceInputChunkCount = 0;
|
|
324
330
|
this.voiceInputBytes = 0;
|
|
@@ -991,7 +997,7 @@ export class Session {
|
|
|
991
997
|
catch (error) {
|
|
992
998
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
993
999
|
this.sessionLogger.error({ err }, "Error handling message");
|
|
994
|
-
const requestId = msg.requestId;
|
|
1000
|
+
const requestId = "requestId" in msg && typeof msg.requestId === "string" ? msg.requestId : undefined;
|
|
995
1001
|
if (typeof requestId === "string") {
|
|
996
1002
|
try {
|
|
997
1003
|
this.emit({
|
|
@@ -1108,6 +1114,8 @@ export class Session {
|
|
|
1108
1114
|
return this.handleFetchAgents(msg);
|
|
1109
1115
|
case "fetch_agent_history_request":
|
|
1110
1116
|
return this.handleFetchAgentHistory(msg);
|
|
1117
|
+
case "fetch_recent_provider_sessions_request":
|
|
1118
|
+
return this.handleFetchRecentProviderSessions(msg);
|
|
1111
1119
|
case "fetch_agent_request":
|
|
1112
1120
|
return this.handleFetchAgent(msg.agentId, msg.requestId);
|
|
1113
1121
|
case "delete_agent_request":
|
|
@@ -1258,6 +1266,7 @@ export class Session {
|
|
|
1258
1266
|
},
|
|
1259
1267
|
});
|
|
1260
1268
|
}
|
|
1269
|
+
// eslint-disable-next-line complexity
|
|
1261
1270
|
dispatchCheckoutMessage(msg) {
|
|
1262
1271
|
switch (msg.type) {
|
|
1263
1272
|
case "checkout_status_request":
|
|
@@ -1293,6 +1302,8 @@ export class Session {
|
|
|
1293
1302
|
return this.handleCheckoutPushRequest(msg);
|
|
1294
1303
|
case "checkout_pr_create_request":
|
|
1295
1304
|
return this.handleCheckoutPrCreateRequest(msg);
|
|
1305
|
+
case "checkout_pr_merge_request":
|
|
1306
|
+
return this.handleCheckoutPrMergeRequest(msg);
|
|
1296
1307
|
case "checkout_pr_status_request":
|
|
1297
1308
|
return this.handleCheckoutPrStatusRequest(msg);
|
|
1298
1309
|
case "pull_request_timeline_request":
|
|
@@ -1375,6 +1386,22 @@ export class Session {
|
|
|
1375
1386
|
return this.handleChatReadRequest(msg);
|
|
1376
1387
|
case "chat/wait":
|
|
1377
1388
|
return this.handleChatWaitRequest(msg);
|
|
1389
|
+
case "loop/run":
|
|
1390
|
+
return this.handleLoopRunRequest(msg);
|
|
1391
|
+
case "loop/list":
|
|
1392
|
+
return this.handleLoopListRequest(msg);
|
|
1393
|
+
case "loop/inspect":
|
|
1394
|
+
return this.handleLoopInspectRequest(msg);
|
|
1395
|
+
case "loop/logs":
|
|
1396
|
+
return this.handleLoopLogsRequest(msg);
|
|
1397
|
+
case "loop/stop":
|
|
1398
|
+
return this.handleLoopStopRequest(msg);
|
|
1399
|
+
default:
|
|
1400
|
+
return this.dispatchScheduleMessage(msg);
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
dispatchScheduleMessage(msg) {
|
|
1404
|
+
switch (msg.type) {
|
|
1378
1405
|
case "schedule/create":
|
|
1379
1406
|
return this.handleScheduleCreateRequest(msg);
|
|
1380
1407
|
case "schedule/list":
|
|
@@ -1389,16 +1416,10 @@ export class Session {
|
|
|
1389
1416
|
return this.handleScheduleResumeRequest(msg);
|
|
1390
1417
|
case "schedule/delete":
|
|
1391
1418
|
return this.handleScheduleDeleteRequest(msg);
|
|
1392
|
-
case "
|
|
1393
|
-
return this.
|
|
1394
|
-
case "
|
|
1395
|
-
return this.
|
|
1396
|
-
case "loop/inspect":
|
|
1397
|
-
return this.handleLoopInspectRequest(msg);
|
|
1398
|
-
case "loop/logs":
|
|
1399
|
-
return this.handleLoopLogsRequest(msg);
|
|
1400
|
-
case "loop/stop":
|
|
1401
|
-
return this.handleLoopStopRequest(msg);
|
|
1419
|
+
case "schedule/run-once":
|
|
1420
|
+
return this.handleScheduleRunOnceRequest(msg);
|
|
1421
|
+
case "schedule/update":
|
|
1422
|
+
return this.handleScheduleUpdateRequest(msg);
|
|
1402
1423
|
default:
|
|
1403
1424
|
return undefined;
|
|
1404
1425
|
}
|
|
@@ -1663,7 +1684,7 @@ export class Session {
|
|
|
1663
1684
|
id: uuidv4(),
|
|
1664
1685
|
timestamp: new Date(),
|
|
1665
1686
|
type: "error",
|
|
1666
|
-
content: `Failed to update agent: ${error
|
|
1687
|
+
content: `Failed to update agent: ${getErrorMessage(error)}`,
|
|
1667
1688
|
},
|
|
1668
1689
|
});
|
|
1669
1690
|
this.emit({
|
|
@@ -1672,9 +1693,7 @@ export class Session {
|
|
|
1672
1693
|
requestId,
|
|
1673
1694
|
agentId,
|
|
1674
1695
|
accepted: false,
|
|
1675
|
-
error: error
|
|
1676
|
-
? String(error.message)
|
|
1677
|
-
: "Failed to update agent",
|
|
1696
|
+
error: getErrorMessageOr(error, "Failed to update agent"),
|
|
1678
1697
|
},
|
|
1679
1698
|
});
|
|
1680
1699
|
}
|
|
@@ -1886,28 +1905,62 @@ export class Session {
|
|
|
1886
1905
|
if (!turnDetection) {
|
|
1887
1906
|
throw new Error("Voice turn detection is not configured");
|
|
1888
1907
|
}
|
|
1908
|
+
const stt = this.sttManager.getProvider();
|
|
1909
|
+
if (!stt) {
|
|
1910
|
+
throw new Error("Voice speech-to-text is not configured");
|
|
1911
|
+
}
|
|
1889
1912
|
this.sessionLogger.info({ providerId: turnDetection.id }, "startVoiceTurnController creating controller");
|
|
1890
1913
|
const controller = createVoiceTurnController({
|
|
1891
1914
|
logger: this.sessionLogger.child({ component: "voice-turn-controller" }),
|
|
1892
1915
|
turnDetection,
|
|
1893
|
-
|
|
1894
|
-
submitUtterance: async ({ pcm16, format, sampleRate, startedAt, endedAt }) => {
|
|
1895
|
-
this.sessionLogger.debug({
|
|
1896
|
-
audioBytes: pcm16.length,
|
|
1897
|
-
sampleRate,
|
|
1898
|
-
startedAt,
|
|
1899
|
-
endedAt,
|
|
1900
|
-
durationMs: Math.max(0, endedAt - startedAt),
|
|
1901
|
-
}, "Submitting detected voice utterance");
|
|
1902
|
-
await this.processCompletedAudio(pcm16, format);
|
|
1903
|
-
},
|
|
1904
|
-
},
|
|
1916
|
+
stt,
|
|
1905
1917
|
callbacks: {
|
|
1906
1918
|
onSpeechStarted: async () => {
|
|
1907
|
-
this.
|
|
1919
|
+
this.sessionLogger.debug("Voice VAD speech_started");
|
|
1920
|
+
},
|
|
1921
|
+
onPartialTranscript: async ({ segmentId, transcript }) => {
|
|
1922
|
+
this.sessionLogger.info({ segmentId, transcriptLength: transcript.trim().length }, "voice_input_state emitting isSpeaking=true");
|
|
1923
|
+
this.emit({
|
|
1924
|
+
type: "voice_input_state",
|
|
1925
|
+
payload: {
|
|
1926
|
+
isSpeaking: true,
|
|
1927
|
+
},
|
|
1928
|
+
});
|
|
1929
|
+
await this.handleVoiceSpeechStart();
|
|
1908
1930
|
},
|
|
1909
1931
|
onSpeechStopped: async () => {
|
|
1910
1932
|
this.handleVoiceSpeechStopped();
|
|
1933
|
+
this.setPhase("transcribing");
|
|
1934
|
+
this.emit({
|
|
1935
|
+
type: "activity_log",
|
|
1936
|
+
payload: {
|
|
1937
|
+
id: uuidv4(),
|
|
1938
|
+
timestamp: new Date(),
|
|
1939
|
+
type: "system",
|
|
1940
|
+
content: "Transcribing audio...",
|
|
1941
|
+
},
|
|
1942
|
+
});
|
|
1943
|
+
},
|
|
1944
|
+
onFinalTranscript: async ({ transcript, language, durationMs, avgLogprob, isLowConfidence, }) => {
|
|
1945
|
+
const requestId = uuidv4();
|
|
1946
|
+
const transcriptText = isLowConfidence ? "" : transcript.trim();
|
|
1947
|
+
if (isLowConfidence) {
|
|
1948
|
+
this.sessionLogger.debug({ text: transcript, avgLogprob }, "Filtered low-confidence transcription (likely non-speech)");
|
|
1949
|
+
}
|
|
1950
|
+
this.sessionLogger.info({
|
|
1951
|
+
requestId,
|
|
1952
|
+
isVoiceMode: this.isVoiceMode,
|
|
1953
|
+
transcriptLength: transcriptText.length,
|
|
1954
|
+
transcript: transcriptText,
|
|
1955
|
+
}, "Transcription result");
|
|
1956
|
+
await this.handleTranscriptionResultPayload({
|
|
1957
|
+
text: transcriptText,
|
|
1958
|
+
requestId,
|
|
1959
|
+
...(language ? { language } : {}),
|
|
1960
|
+
duration: durationMs,
|
|
1961
|
+
...(avgLogprob !== undefined ? { avgLogprob } : {}),
|
|
1962
|
+
...(isLowConfidence !== undefined ? { isLowConfidence } : {}),
|
|
1963
|
+
});
|
|
1911
1964
|
},
|
|
1912
1965
|
onError: (error) => {
|
|
1913
1966
|
this.sessionLogger.error({ err: error }, "Voice turn controller failed");
|
|
@@ -1923,51 +1976,11 @@ export class Session {
|
|
|
1923
1976
|
if (!this.voiceTurnController) {
|
|
1924
1977
|
return;
|
|
1925
1978
|
}
|
|
1926
|
-
this.clearPendingVoiceSpeechStart("turn-controller-stop");
|
|
1927
1979
|
const controller = this.voiceTurnController;
|
|
1928
1980
|
this.voiceTurnController = null;
|
|
1929
1981
|
await controller.stop();
|
|
1930
1982
|
}
|
|
1931
|
-
clearPendingVoiceSpeechStart(reason) {
|
|
1932
|
-
if (this.pendingVoiceSpeechTimer) {
|
|
1933
|
-
clearTimeout(this.pendingVoiceSpeechTimer);
|
|
1934
|
-
this.pendingVoiceSpeechTimer = null;
|
|
1935
|
-
}
|
|
1936
|
-
if (this.pendingVoiceSpeechStartAt !== null) {
|
|
1937
|
-
this.sessionLogger.debug({ reason }, "Clearing provisional voice speech start");
|
|
1938
|
-
this.pendingVoiceSpeechStartAt = null;
|
|
1939
|
-
}
|
|
1940
|
-
}
|
|
1941
|
-
handleProvisionalVoiceSpeechStarted() {
|
|
1942
|
-
if (this.speechInProgress || this.pendingVoiceSpeechTimer) {
|
|
1943
|
-
return;
|
|
1944
|
-
}
|
|
1945
|
-
const startedAt = Date.now();
|
|
1946
|
-
this.pendingVoiceSpeechStartAt = startedAt;
|
|
1947
|
-
this.sessionLogger.info({ confirmationMs: VOICE_INTERRUPT_CONFIRMATION_MS }, "Silero VAD provisional speech_started");
|
|
1948
|
-
this.pendingVoiceSpeechTimer = setTimeout(() => {
|
|
1949
|
-
this.pendingVoiceSpeechTimer = null;
|
|
1950
|
-
if (this.pendingVoiceSpeechStartAt !== startedAt || this.speechInProgress) {
|
|
1951
|
-
return;
|
|
1952
|
-
}
|
|
1953
|
-
this.pendingVoiceSpeechStartAt = null;
|
|
1954
|
-
this.sessionLogger.info("voice_input_state emitting isSpeaking=true");
|
|
1955
|
-
this.emit({
|
|
1956
|
-
type: "voice_input_state",
|
|
1957
|
-
payload: {
|
|
1958
|
-
isSpeaking: true,
|
|
1959
|
-
},
|
|
1960
|
-
});
|
|
1961
|
-
void this.handleVoiceSpeechStart();
|
|
1962
|
-
}, VOICE_INTERRUPT_CONFIRMATION_MS);
|
|
1963
|
-
}
|
|
1964
1983
|
handleVoiceSpeechStopped() {
|
|
1965
|
-
if (this.pendingVoiceSpeechStartAt !== null) {
|
|
1966
|
-
const durationMs = Date.now() - this.pendingVoiceSpeechStartAt;
|
|
1967
|
-
this.clearPendingVoiceSpeechStart("speech-stopped-before-confirmation");
|
|
1968
|
-
this.sessionLogger.info({ durationMs, confirmationMs: VOICE_INTERRUPT_CONFIRMATION_MS }, "Ignoring provisional voice speech start that ended before confirmation");
|
|
1969
|
-
return;
|
|
1970
|
-
}
|
|
1971
1984
|
this.sessionLogger.info("voice_input_state emitting isSpeaking=false");
|
|
1972
1985
|
this.emit({
|
|
1973
1986
|
type: "voice_input_state",
|
|
@@ -2039,14 +2052,7 @@ export class Session {
|
|
|
2039
2052
|
if (!resolvedWorkspace) {
|
|
2040
2053
|
throw new Error(`Workspace not found: ${msg.workspaceId}`);
|
|
2041
2054
|
}
|
|
2042
|
-
this.
|
|
2043
|
-
workspace: resolvedWorkspace,
|
|
2044
|
-
firstAgentContext,
|
|
2045
|
-
});
|
|
2046
|
-
const snapshot = await this.agentManager.createAgent({
|
|
2047
|
-
...sessionConfig,
|
|
2048
|
-
cwd: resolvedWorkspace.cwd,
|
|
2049
|
-
}, undefined, {
|
|
2055
|
+
const snapshot = await this.agentManager.createAgent(sessionConfig, undefined, {
|
|
2050
2056
|
labels,
|
|
2051
2057
|
workspaceId: resolvedWorkspace.workspaceId,
|
|
2052
2058
|
initialPrompt: trimmedPrompt,
|
|
@@ -2115,6 +2121,7 @@ export class Session {
|
|
|
2115
2121
|
agentManager: this.agentManager,
|
|
2116
2122
|
agentId: snapshot.id,
|
|
2117
2123
|
cwd: snapshot.cwd,
|
|
2124
|
+
workspaceGitService: this.workspaceGitService,
|
|
2118
2125
|
initialPrompt: trimmedPrompt,
|
|
2119
2126
|
explicitTitle: params.explicitTitle,
|
|
2120
2127
|
paseoHome: this.paseoHome,
|
|
@@ -2170,22 +2177,34 @@ export class Session {
|
|
|
2170
2177
|
id: uuidv4(),
|
|
2171
2178
|
timestamp: new Date(),
|
|
2172
2179
|
type: "error",
|
|
2173
|
-
content: `Failed to resume agent: ${error
|
|
2180
|
+
content: `Failed to resume agent: ${getErrorMessage(error)}`,
|
|
2174
2181
|
},
|
|
2175
2182
|
});
|
|
2176
2183
|
}
|
|
2177
2184
|
}
|
|
2178
2185
|
async handleImportAgentRequest(msg) {
|
|
2179
|
-
const
|
|
2180
|
-
|
|
2186
|
+
const normalized = normalizeImportAgentRequest(msg);
|
|
2187
|
+
if ("error" in normalized) {
|
|
2188
|
+
this.emit({
|
|
2189
|
+
type: "status",
|
|
2190
|
+
payload: {
|
|
2191
|
+
status: "agent_create_failed",
|
|
2192
|
+
requestId: msg.requestId,
|
|
2193
|
+
error: normalized.error,
|
|
2194
|
+
},
|
|
2195
|
+
});
|
|
2196
|
+
return;
|
|
2197
|
+
}
|
|
2198
|
+
const { provider, providerHandleId, cwd, labels, requestId } = normalized;
|
|
2199
|
+
this.sessionLogger.info({ providerHandleId, provider }, `Importing agent ${providerHandleId} (${provider})`);
|
|
2181
2200
|
try {
|
|
2182
|
-
const descriptor = await this.agentManager.findPersistedAgent(provider,
|
|
2201
|
+
const descriptor = await this.agentManager.findPersistedAgent(provider, providerHandleId);
|
|
2183
2202
|
if (!descriptor && provider === "opencode" && !cwd) {
|
|
2184
2203
|
throw new Error("OpenCode sessions require --cwd when the session cannot be found in persisted agents");
|
|
2185
2204
|
}
|
|
2186
2205
|
const handle = descriptor
|
|
2187
2206
|
? applyImportCwdOverride(descriptor.persistence, cwd)
|
|
2188
|
-
: buildImportPersistenceHandle({ provider,
|
|
2207
|
+
: buildImportPersistenceHandle({ provider, providerHandleId, cwd });
|
|
2189
2208
|
const overrides = cwd ? { cwd } : undefined;
|
|
2190
2209
|
await this.unarchiveAgentByHandle(handle);
|
|
2191
2210
|
const snapshot = await this.agentManager.resumeAgentFromPersistence(handle, overrides, undefined, {
|
|
@@ -2246,6 +2265,7 @@ export class Session {
|
|
|
2246
2265
|
agentManager: this.agentManager,
|
|
2247
2266
|
agentId: snapshot.id,
|
|
2248
2267
|
cwd: snapshot.cwd,
|
|
2268
|
+
workspaceGitService: this.workspaceGitService,
|
|
2249
2269
|
initialPrompt,
|
|
2250
2270
|
explicitTitle,
|
|
2251
2271
|
paseoHome: this.paseoHome,
|
|
@@ -2261,7 +2281,9 @@ export class Session {
|
|
|
2261
2281
|
const existing = this.agentManager.getAgent(agentId);
|
|
2262
2282
|
if (existing) {
|
|
2263
2283
|
await this.interruptAgentIfRunning(agentId);
|
|
2264
|
-
snapshot = await this.agentManager.reloadAgentSession(agentId
|
|
2284
|
+
snapshot = await this.agentManager.reloadAgentSession(agentId, undefined, {
|
|
2285
|
+
rehydrateFromDisk: true,
|
|
2286
|
+
});
|
|
2265
2287
|
}
|
|
2266
2288
|
else {
|
|
2267
2289
|
const record = await this.agentStorage.get(agentId);
|
|
@@ -2301,7 +2323,7 @@ export class Session {
|
|
|
2301
2323
|
id: uuidv4(),
|
|
2302
2324
|
timestamp: new Date(),
|
|
2303
2325
|
type: "error",
|
|
2304
|
-
content: `Failed to refresh agent: ${error
|
|
2326
|
+
content: `Failed to refresh agent: ${getErrorMessage(error)}`,
|
|
2305
2327
|
},
|
|
2306
2328
|
});
|
|
2307
2329
|
}
|
|
@@ -2370,6 +2392,7 @@ export class Session {
|
|
|
2370
2392
|
return generateBranchNameFromFirstAgentContext({
|
|
2371
2393
|
agentManager: this.agentManager,
|
|
2372
2394
|
cwd,
|
|
2395
|
+
workspaceGitService: this.workspaceGitService,
|
|
2373
2396
|
firstAgentContext,
|
|
2374
2397
|
logger: this.sessionLogger,
|
|
2375
2398
|
});
|
|
@@ -2434,7 +2457,7 @@ export class Session {
|
|
|
2434
2457
|
type: "list_provider_models_response",
|
|
2435
2458
|
payload: {
|
|
2436
2459
|
provider: msg.provider,
|
|
2437
|
-
error:
|
|
2460
|
+
error: getErrorMessage(error),
|
|
2438
2461
|
fetchedAt,
|
|
2439
2462
|
requestId: msg.requestId,
|
|
2440
2463
|
},
|
|
@@ -2561,7 +2584,7 @@ export class Session {
|
|
|
2561
2584
|
type: "list_provider_modes_response",
|
|
2562
2585
|
payload: {
|
|
2563
2586
|
provider: msg.provider,
|
|
2564
|
-
error:
|
|
2587
|
+
error: getErrorMessage(error),
|
|
2565
2588
|
fetchedAt,
|
|
2566
2589
|
requestId: msg.requestId,
|
|
2567
2590
|
},
|
|
@@ -2618,7 +2641,7 @@ export class Session {
|
|
|
2618
2641
|
type: "list_provider_features_response",
|
|
2619
2642
|
payload: {
|
|
2620
2643
|
provider: msg.draftConfig.provider,
|
|
2621
|
-
error:
|
|
2644
|
+
error: getErrorMessage(error),
|
|
2622
2645
|
fetchedAt,
|
|
2623
2646
|
requestId: msg.requestId,
|
|
2624
2647
|
},
|
|
@@ -2645,7 +2668,7 @@ export class Session {
|
|
|
2645
2668
|
type: "list_available_providers_response",
|
|
2646
2669
|
payload: {
|
|
2647
2670
|
providers: [],
|
|
2648
|
-
error:
|
|
2671
|
+
error: getErrorMessage(error),
|
|
2649
2672
|
fetchedAt,
|
|
2650
2673
|
requestId: msg.requestId,
|
|
2651
2674
|
},
|
|
@@ -2757,14 +2780,19 @@ export class Session {
|
|
|
2757
2780
|
const patch = diff.diff.length > maxPatchChars
|
|
2758
2781
|
? `${diff.diff.slice(0, maxPatchChars)}\n\n... (diff truncated to ${maxPatchChars} chars)\n`
|
|
2759
2782
|
: diff.diff;
|
|
2760
|
-
const prompt =
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
"",
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2783
|
+
const prompt = await buildMetadataPrompt({
|
|
2784
|
+
cwd,
|
|
2785
|
+
workspaceGitService: this.workspaceGitService,
|
|
2786
|
+
configKey: "commitMessage",
|
|
2787
|
+
before: "Write a concise git commit message for the changes below.",
|
|
2788
|
+
after: [
|
|
2789
|
+
"Return JSON only with a single field 'message'.",
|
|
2790
|
+
"",
|
|
2791
|
+
fileList,
|
|
2792
|
+
"",
|
|
2793
|
+
patch.length > 0 ? patch : "(No diff available)",
|
|
2794
|
+
].join("\n"),
|
|
2795
|
+
});
|
|
2768
2796
|
try {
|
|
2769
2797
|
const result = await generateStructuredAgentResponseWithFallback({
|
|
2770
2798
|
manager: this.agentManager,
|
|
@@ -2814,14 +2842,19 @@ export class Session {
|
|
|
2814
2842
|
const patch = diff.diff.length > maxPatchChars
|
|
2815
2843
|
? `${diff.diff.slice(0, maxPatchChars)}\n\n... (diff truncated to ${maxPatchChars} chars)\n`
|
|
2816
2844
|
: diff.diff;
|
|
2817
|
-
const prompt =
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
"",
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2845
|
+
const prompt = await buildMetadataPrompt({
|
|
2846
|
+
cwd,
|
|
2847
|
+
workspaceGitService: this.workspaceGitService,
|
|
2848
|
+
configKey: "pullRequest",
|
|
2849
|
+
before: "Write a pull request title and body for the changes below.",
|
|
2850
|
+
after: [
|
|
2851
|
+
"Return JSON only with fields 'title' and 'body'.",
|
|
2852
|
+
"",
|
|
2853
|
+
fileList,
|
|
2854
|
+
"",
|
|
2855
|
+
patch.length > 0 ? patch : "(No diff available)",
|
|
2856
|
+
].join("\n"),
|
|
2857
|
+
});
|
|
2825
2858
|
try {
|
|
2826
2859
|
return await generateStructuredAgentResponseWithFallback({
|
|
2827
2860
|
manager: this.agentManager,
|
|
@@ -2861,7 +2894,7 @@ export class Session {
|
|
|
2861
2894
|
return snapshot.git.isDirty === true;
|
|
2862
2895
|
}
|
|
2863
2896
|
catch (error) {
|
|
2864
|
-
throw new Error(`Unable to inspect git status for ${cwd}: ${error
|
|
2897
|
+
throw new Error(`Unable to inspect git status for ${cwd}: ${getErrorMessage(error)}`, {
|
|
2865
2898
|
cause: error,
|
|
2866
2899
|
});
|
|
2867
2900
|
}
|
|
@@ -2934,7 +2967,7 @@ export class Session {
|
|
|
2934
2967
|
id: uuidv4(),
|
|
2935
2968
|
timestamp: new Date(),
|
|
2936
2969
|
type: "error",
|
|
2937
|
-
content: `Failed to set agent mode: ${error
|
|
2970
|
+
content: `Failed to set agent mode: ${getErrorMessage(error)}`,
|
|
2938
2971
|
},
|
|
2939
2972
|
});
|
|
2940
2973
|
this.emit({
|
|
@@ -2943,9 +2976,7 @@ export class Session {
|
|
|
2943
2976
|
requestId,
|
|
2944
2977
|
agentId,
|
|
2945
2978
|
accepted: false,
|
|
2946
|
-
error: error
|
|
2947
|
-
? String(error.message)
|
|
2948
|
-
: "Failed to set agent mode",
|
|
2979
|
+
error: getErrorMessageOr(error, "Failed to set agent mode"),
|
|
2949
2980
|
},
|
|
2950
2981
|
});
|
|
2951
2982
|
}
|
|
@@ -2968,7 +2999,7 @@ export class Session {
|
|
|
2968
2999
|
id: uuidv4(),
|
|
2969
3000
|
timestamp: new Date(),
|
|
2970
3001
|
type: "error",
|
|
2971
|
-
content: `Failed to set agent model: ${error
|
|
3002
|
+
content: `Failed to set agent model: ${getErrorMessage(error)}`,
|
|
2972
3003
|
},
|
|
2973
3004
|
});
|
|
2974
3005
|
this.emit({
|
|
@@ -2977,9 +3008,7 @@ export class Session {
|
|
|
2977
3008
|
requestId,
|
|
2978
3009
|
agentId,
|
|
2979
3010
|
accepted: false,
|
|
2980
|
-
error: error
|
|
2981
|
-
? String(error.message)
|
|
2982
|
-
: "Failed to set agent model",
|
|
3011
|
+
error: getErrorMessageOr(error, "Failed to set agent model"),
|
|
2983
3012
|
},
|
|
2984
3013
|
});
|
|
2985
3014
|
}
|
|
@@ -3002,7 +3031,7 @@ export class Session {
|
|
|
3002
3031
|
id: uuidv4(),
|
|
3003
3032
|
timestamp: new Date(),
|
|
3004
3033
|
type: "error",
|
|
3005
|
-
content: `Failed to set agent feature: ${error
|
|
3034
|
+
content: `Failed to set agent feature: ${getErrorMessage(error)}`,
|
|
3006
3035
|
},
|
|
3007
3036
|
});
|
|
3008
3037
|
this.emit({
|
|
@@ -3011,9 +3040,7 @@ export class Session {
|
|
|
3011
3040
|
requestId,
|
|
3012
3041
|
agentId,
|
|
3013
3042
|
accepted: false,
|
|
3014
|
-
error: error
|
|
3015
|
-
? String(error.message)
|
|
3016
|
-
: "Failed to set agent feature",
|
|
3043
|
+
error: getErrorMessageOr(error, "Failed to set agent feature"),
|
|
3017
3044
|
},
|
|
3018
3045
|
});
|
|
3019
3046
|
}
|
|
@@ -3036,7 +3063,7 @@ export class Session {
|
|
|
3036
3063
|
id: uuidv4(),
|
|
3037
3064
|
timestamp: new Date(),
|
|
3038
3065
|
type: "error",
|
|
3039
|
-
content: `Failed to set agent thinking option: ${error
|
|
3066
|
+
content: `Failed to set agent thinking option: ${getErrorMessage(error)}`,
|
|
3040
3067
|
},
|
|
3041
3068
|
});
|
|
3042
3069
|
this.emit({
|
|
@@ -3045,9 +3072,7 @@ export class Session {
|
|
|
3045
3072
|
requestId,
|
|
3046
3073
|
agentId,
|
|
3047
3074
|
accepted: false,
|
|
3048
|
-
error: error
|
|
3049
|
-
? String(error.message)
|
|
3050
|
-
: "Failed to set agent thinking option",
|
|
3075
|
+
error: getErrorMessageOr(error, "Failed to set agent thinking option"),
|
|
3051
3076
|
},
|
|
3052
3077
|
});
|
|
3053
3078
|
}
|
|
@@ -3162,7 +3187,7 @@ export class Session {
|
|
|
3162
3187
|
payload: {
|
|
3163
3188
|
agentId,
|
|
3164
3189
|
commands: [],
|
|
3165
|
-
error: error
|
|
3190
|
+
error: getErrorMessage(error),
|
|
3166
3191
|
requestId,
|
|
3167
3192
|
},
|
|
3168
3193
|
});
|
|
@@ -3189,7 +3214,7 @@ export class Session {
|
|
|
3189
3214
|
id: uuidv4(),
|
|
3190
3215
|
timestamp: new Date(),
|
|
3191
3216
|
type: "error",
|
|
3192
|
-
content: `Failed to respond to permission: ${error
|
|
3217
|
+
content: `Failed to respond to permission: ${getErrorMessage(error)}`,
|
|
3193
3218
|
},
|
|
3194
3219
|
});
|
|
3195
3220
|
throw error;
|
|
@@ -3276,7 +3301,7 @@ export class Session {
|
|
|
3276
3301
|
return;
|
|
3277
3302
|
default: {
|
|
3278
3303
|
const exhaustiveCheck = resolution;
|
|
3279
|
-
throw new Error(`Unhandled branch resolution: ${exhaustiveCheck}`);
|
|
3304
|
+
throw new Error(`Unhandled branch resolution: ${getErrorMessage(exhaustiveCheck)}`);
|
|
3280
3305
|
}
|
|
3281
3306
|
}
|
|
3282
3307
|
}
|
|
@@ -3927,6 +3952,42 @@ export class Session {
|
|
|
3927
3952
|
});
|
|
3928
3953
|
}
|
|
3929
3954
|
}
|
|
3955
|
+
async handleCheckoutPrMergeRequest(msg) {
|
|
3956
|
+
const { cwd, requestId } = msg;
|
|
3957
|
+
try {
|
|
3958
|
+
const snapshot = await this.workspaceGitService.getSnapshot(cwd);
|
|
3959
|
+
const prNumber = snapshot.github.pullRequest?.number;
|
|
3960
|
+
if (typeof prNumber !== "number") {
|
|
3961
|
+
throw new Error("Unable to determine GitHub pull request number for merge");
|
|
3962
|
+
}
|
|
3963
|
+
await this.github.mergePullRequest({
|
|
3964
|
+
cwd,
|
|
3965
|
+
prNumber,
|
|
3966
|
+
mergeMethod: msg.mergeMethod,
|
|
3967
|
+
});
|
|
3968
|
+
await this.notifyGitMutation(cwd, "merge-pr", { invalidateGithub: true });
|
|
3969
|
+
this.emit({
|
|
3970
|
+
type: "checkout_pr_merge_response",
|
|
3971
|
+
payload: {
|
|
3972
|
+
cwd,
|
|
3973
|
+
success: true,
|
|
3974
|
+
error: null,
|
|
3975
|
+
requestId,
|
|
3976
|
+
},
|
|
3977
|
+
});
|
|
3978
|
+
}
|
|
3979
|
+
catch (error) {
|
|
3980
|
+
this.emit({
|
|
3981
|
+
type: "checkout_pr_merge_response",
|
|
3982
|
+
payload: {
|
|
3983
|
+
cwd,
|
|
3984
|
+
success: false,
|
|
3985
|
+
error: toCheckoutError(error),
|
|
3986
|
+
requestId,
|
|
3987
|
+
},
|
|
3988
|
+
});
|
|
3989
|
+
}
|
|
3990
|
+
}
|
|
3930
3991
|
async handleCheckoutPrStatusRequest(msg) {
|
|
3931
3992
|
const { cwd, requestId } = msg;
|
|
3932
3993
|
try {
|
|
@@ -4157,7 +4218,7 @@ export class Session {
|
|
|
4157
4218
|
mode,
|
|
4158
4219
|
directory: null,
|
|
4159
4220
|
file: null,
|
|
4160
|
-
error: error
|
|
4221
|
+
error: getErrorMessage(error),
|
|
4161
4222
|
requestId,
|
|
4162
4223
|
},
|
|
4163
4224
|
});
|
|
@@ -4186,7 +4247,7 @@ export class Session {
|
|
|
4186
4247
|
payload: {
|
|
4187
4248
|
cwd,
|
|
4188
4249
|
icon: null,
|
|
4189
|
-
error: error
|
|
4250
|
+
error: getErrorMessage(error),
|
|
4190
4251
|
requestId,
|
|
4191
4252
|
},
|
|
4192
4253
|
});
|
|
@@ -4252,7 +4313,7 @@ export class Session {
|
|
|
4252
4313
|
fileName: null,
|
|
4253
4314
|
mimeType: null,
|
|
4254
4315
|
size: null,
|
|
4255
|
-
error: error
|
|
4316
|
+
error: getErrorMessage(error),
|
|
4256
4317
|
requestId,
|
|
4257
4318
|
},
|
|
4258
4319
|
});
|
|
@@ -4488,7 +4549,7 @@ export class Session {
|
|
|
4488
4549
|
return {
|
|
4489
4550
|
id: workspace.workspaceId,
|
|
4490
4551
|
projectId: workspace.projectId,
|
|
4491
|
-
projectDisplayName: resolvedProjectRecord?.displayName ??
|
|
4552
|
+
projectDisplayName: resolvedProjectRecord?.displayName ?? workspace.projectId,
|
|
4492
4553
|
projectRootPath: resolvedProjectRecord?.rootPath ?? workspace.cwd,
|
|
4493
4554
|
workspaceDirectory: workspace.cwd,
|
|
4494
4555
|
projectKind: (resolvedProjectRecord?.kind ?? "directory") === "git" ? "git" : "non_git",
|
|
@@ -4559,7 +4620,7 @@ export class Session {
|
|
|
4559
4620
|
return {
|
|
4560
4621
|
id: result.workspace.workspaceId,
|
|
4561
4622
|
projectId: result.workspace.projectId,
|
|
4562
|
-
projectDisplayName: projectRecord?.displayName ??
|
|
4623
|
+
projectDisplayName: projectRecord?.displayName ?? result.workspace.projectId,
|
|
4563
4624
|
projectRootPath: projectRecord?.rootPath ?? result.repoRoot,
|
|
4564
4625
|
workspaceDirectory: result.workspace.cwd,
|
|
4565
4626
|
projectKind: "git",
|
|
@@ -5011,6 +5072,42 @@ export class Session {
|
|
|
5011
5072
|
});
|
|
5012
5073
|
}
|
|
5013
5074
|
}
|
|
5075
|
+
async handleFetchRecentProviderSessions(request) {
|
|
5076
|
+
try {
|
|
5077
|
+
const result = await listImportableProviderSessions({
|
|
5078
|
+
request,
|
|
5079
|
+
agentManager: this.agentManager,
|
|
5080
|
+
agentStorage: this.agentStorage,
|
|
5081
|
+
providerRegistry: this.getProviderRegistry(),
|
|
5082
|
+
});
|
|
5083
|
+
this.emit({
|
|
5084
|
+
type: "fetch_recent_provider_sessions_response",
|
|
5085
|
+
payload: {
|
|
5086
|
+
requestId: request.requestId,
|
|
5087
|
+
entries: result.entries,
|
|
5088
|
+
...(result.filteredAlreadyImportedCount > 0
|
|
5089
|
+
? { filteredAlreadyImportedCount: result.filteredAlreadyImportedCount }
|
|
5090
|
+
: {}),
|
|
5091
|
+
},
|
|
5092
|
+
});
|
|
5093
|
+
}
|
|
5094
|
+
catch (error) {
|
|
5095
|
+
const code = error instanceof ImportSessionsRequestError
|
|
5096
|
+
? error.code
|
|
5097
|
+
: "fetch_recent_provider_sessions_failed";
|
|
5098
|
+
const message = error instanceof Error ? error.message : "Failed to fetch recent provider sessions";
|
|
5099
|
+
this.sessionLogger.error({ err: error }, "Failed to handle fetch_recent_provider_sessions_request");
|
|
5100
|
+
this.emit({
|
|
5101
|
+
type: "rpc_error",
|
|
5102
|
+
payload: {
|
|
5103
|
+
requestId: request.requestId,
|
|
5104
|
+
requestType: request.type,
|
|
5105
|
+
error: message,
|
|
5106
|
+
code,
|
|
5107
|
+
},
|
|
5108
|
+
});
|
|
5109
|
+
}
|
|
5110
|
+
}
|
|
5014
5111
|
async handleFetchWorkspacesRequest(request) {
|
|
5015
5112
|
const requestedSubscriptionId = request.subscribe?.subscriptionId?.trim();
|
|
5016
5113
|
const subscriptionId = resolveSubscriptionId(request.subscribe, requestedSubscriptionId);
|
|
@@ -5551,8 +5648,9 @@ export class Session {
|
|
|
5551
5648
|
const agentId = resolved.agentId;
|
|
5552
5649
|
const prompt = this.buildAgentPrompt(msg.text, msg.images, msg.attachments);
|
|
5553
5650
|
this.sessionLogger.trace({ agentId, messageId: msg.messageId, textPrefix: msg.text.slice(0, 80) }, "send_agent_message_request: dispatching shared sendPromptToAgent");
|
|
5651
|
+
let dispatchResult;
|
|
5554
5652
|
try {
|
|
5555
|
-
await sendPromptToAgent({
|
|
5653
|
+
dispatchResult = await sendPromptToAgent({
|
|
5556
5654
|
agentManager: this.agentManager,
|
|
5557
5655
|
agentStorage: this.agentStorage,
|
|
5558
5656
|
agentId,
|
|
@@ -5576,6 +5674,18 @@ export class Session {
|
|
|
5576
5674
|
});
|
|
5577
5675
|
return;
|
|
5578
5676
|
}
|
|
5677
|
+
if (dispatchResult.outOfBand) {
|
|
5678
|
+
this.emit({
|
|
5679
|
+
type: "send_agent_message_response",
|
|
5680
|
+
payload: {
|
|
5681
|
+
requestId: msg.requestId,
|
|
5682
|
+
agentId,
|
|
5683
|
+
accepted: true,
|
|
5684
|
+
error: null,
|
|
5685
|
+
},
|
|
5686
|
+
});
|
|
5687
|
+
return;
|
|
5688
|
+
}
|
|
5579
5689
|
const startAbort = new AbortController();
|
|
5580
5690
|
const startTimeoutMs = 15000;
|
|
5581
5691
|
const startTimeout = setTimeout(() => startAbort.abort("timeout"), startTimeoutMs);
|
|
@@ -5777,12 +5887,6 @@ export class Session {
|
|
|
5777
5887
|
const chunkBytes = Buffer.byteLength(msg.audio, "base64");
|
|
5778
5888
|
this.voiceInputChunkCount += 1;
|
|
5779
5889
|
this.voiceInputBytes += chunkBytes;
|
|
5780
|
-
if (this.voiceInputChunkCount === 1) {
|
|
5781
|
-
this.sessionLogger.info({
|
|
5782
|
-
format: chunkFormat,
|
|
5783
|
-
audioBytes: chunkBytes,
|
|
5784
|
-
}, "Received first voice_audio_chunk for active voice mode");
|
|
5785
|
-
}
|
|
5786
5890
|
const now = Date.now();
|
|
5787
5891
|
if (this.voiceInputChunkCount % 50 === 0 || now - this.voiceInputWindowStartedAt >= 1000) {
|
|
5788
5892
|
this.sessionLogger.info({
|
|
@@ -5943,7 +6047,7 @@ export class Session {
|
|
|
5943
6047
|
id: uuidv4(),
|
|
5944
6048
|
timestamp: new Date(),
|
|
5945
6049
|
type: "error",
|
|
5946
|
-
content: `Transcription error: ${error
|
|
6050
|
+
content: `Transcription error: ${getErrorMessage(error)}`,
|
|
5947
6051
|
},
|
|
5948
6052
|
});
|
|
5949
6053
|
throw error;
|
|
@@ -6110,7 +6214,6 @@ export class Session {
|
|
|
6110
6214
|
* Clear speech-in-progress flag once the user turn has completed
|
|
6111
6215
|
*/
|
|
6112
6216
|
clearSpeechInProgress(reason) {
|
|
6113
|
-
this.clearPendingVoiceSpeechStart(`clear-speech-in-progress:${reason}`);
|
|
6114
6217
|
if (!this.speechInProgress) {
|
|
6115
6218
|
return;
|
|
6116
6219
|
}
|
|
@@ -6354,6 +6457,19 @@ export class Session {
|
|
|
6354
6457
|
async handleChatPostRequest(request) {
|
|
6355
6458
|
try {
|
|
6356
6459
|
const authorAgentId = request.authorAgentId?.trim() || this.clientId;
|
|
6460
|
+
const mentionAgentIds = parseMentionAgentIds(request.body);
|
|
6461
|
+
const storedAgents = await this.agentStorage.list();
|
|
6462
|
+
const liveAgents = this.agentManager.listAgents();
|
|
6463
|
+
const fanout = await prepareChatMentionFanout({
|
|
6464
|
+
authorAgentId,
|
|
6465
|
+
mentionAgentIds,
|
|
6466
|
+
storedAgents,
|
|
6467
|
+
liveAgents,
|
|
6468
|
+
listRoomPosterAgentIds: () => this.chatService.listRoomPosterAgentIds({ room: request.room }),
|
|
6469
|
+
});
|
|
6470
|
+
if (!fanout.ok) {
|
|
6471
|
+
throw new ChatServiceError("chat_mention_fanout_limit_exceeded", fanout.error);
|
|
6472
|
+
}
|
|
6357
6473
|
const message = await this.chatService.dispatchMessage({
|
|
6358
6474
|
room: request.room,
|
|
6359
6475
|
authorAgentId,
|
|
@@ -6374,11 +6490,20 @@ export class Session {
|
|
|
6374
6490
|
body: request.body,
|
|
6375
6491
|
mentionAgentIds: message.mentionAgentIds,
|
|
6376
6492
|
logger: this.sessionLogger,
|
|
6377
|
-
|
|
6378
|
-
|
|
6493
|
+
storedAgents,
|
|
6494
|
+
liveAgents,
|
|
6495
|
+
prepared: fanout.prepared,
|
|
6379
6496
|
resolveAgentIdentifier: (identifier) => this.resolveAgentIdentifier(identifier),
|
|
6380
6497
|
sendAgentMessage: async (agentId, text) => {
|
|
6381
|
-
await
|
|
6498
|
+
await sendPromptToAgent({
|
|
6499
|
+
agentManager: this.agentManager,
|
|
6500
|
+
agentStorage: this.agentStorage,
|
|
6501
|
+
agentId,
|
|
6502
|
+
prompt: formatSystemNotificationPrompt(text),
|
|
6503
|
+
unarchive: false,
|
|
6504
|
+
recordUserMessage: false,
|
|
6505
|
+
logger: this.sessionLogger,
|
|
6506
|
+
});
|
|
6382
6507
|
},
|
|
6383
6508
|
});
|
|
6384
6509
|
}
|
|
@@ -6457,6 +6582,7 @@ export class Session {
|
|
|
6457
6582
|
target,
|
|
6458
6583
|
maxRuns: request.maxRuns,
|
|
6459
6584
|
expiresAt: request.expiresAt,
|
|
6585
|
+
runOnCreate: request.runOnCreate,
|
|
6460
6586
|
});
|
|
6461
6587
|
this.emit({
|
|
6462
6588
|
type: "schedule/create/response",
|
|
@@ -6567,6 +6693,46 @@ export class Session {
|
|
|
6567
6693
|
this.emitScheduleRpcError(request, error);
|
|
6568
6694
|
}
|
|
6569
6695
|
}
|
|
6696
|
+
async handleScheduleRunOnceRequest(request) {
|
|
6697
|
+
try {
|
|
6698
|
+
const schedule = await this.scheduleService.runOnce(request.scheduleId);
|
|
6699
|
+
this.emit({
|
|
6700
|
+
type: "schedule/run-once/response",
|
|
6701
|
+
payload: {
|
|
6702
|
+
requestId: request.requestId,
|
|
6703
|
+
schedule,
|
|
6704
|
+
error: null,
|
|
6705
|
+
},
|
|
6706
|
+
});
|
|
6707
|
+
}
|
|
6708
|
+
catch (error) {
|
|
6709
|
+
this.emitScheduleRpcError(request, error);
|
|
6710
|
+
}
|
|
6711
|
+
}
|
|
6712
|
+
async handleScheduleUpdateRequest(request) {
|
|
6713
|
+
try {
|
|
6714
|
+
const schedule = await this.scheduleService.update({
|
|
6715
|
+
id: request.scheduleId,
|
|
6716
|
+
...(request.name !== undefined ? { name: request.name } : {}),
|
|
6717
|
+
...(request.prompt !== undefined ? { prompt: request.prompt } : {}),
|
|
6718
|
+
...(request.cadence !== undefined ? { cadence: request.cadence } : {}),
|
|
6719
|
+
...(request.newAgentConfig !== undefined ? { newAgentConfig: request.newAgentConfig } : {}),
|
|
6720
|
+
...(request.maxRuns !== undefined ? { maxRuns: request.maxRuns } : {}),
|
|
6721
|
+
...(request.expiresAt !== undefined ? { expiresAt: request.expiresAt } : {}),
|
|
6722
|
+
});
|
|
6723
|
+
this.emit({
|
|
6724
|
+
type: "schedule/update/response",
|
|
6725
|
+
payload: {
|
|
6726
|
+
requestId: request.requestId,
|
|
6727
|
+
schedule,
|
|
6728
|
+
error: null,
|
|
6729
|
+
},
|
|
6730
|
+
});
|
|
6731
|
+
}
|
|
6732
|
+
catch (error) {
|
|
6733
|
+
this.emitScheduleRpcError(request, error);
|
|
6734
|
+
}
|
|
6735
|
+
}
|
|
6570
6736
|
emitLoopRpcError(request, error) {
|
|
6571
6737
|
const message = error instanceof Error ? error.message : String(error);
|
|
6572
6738
|
this.sessionLogger.error({ err: error, requestType: request.type }, "Loop request failed");
|
|
@@ -6587,10 +6753,12 @@ export class Session {
|
|
|
6587
6753
|
cwd: request.cwd,
|
|
6588
6754
|
provider: request.provider,
|
|
6589
6755
|
model: request.model,
|
|
6756
|
+
modeId: request.modeId,
|
|
6590
6757
|
workerProvider: request.workerProvider,
|
|
6591
6758
|
workerModel: request.workerModel,
|
|
6592
6759
|
verifierProvider: request.verifierProvider,
|
|
6593
6760
|
verifierModel: request.verifierModel,
|
|
6761
|
+
verifierModeId: request.verifierModeId,
|
|
6594
6762
|
verifyPrompt: request.verifyPrompt,
|
|
6595
6763
|
verifyChecks: request.verifyChecks,
|
|
6596
6764
|
archive: request.archive,
|
|
@@ -6698,6 +6866,7 @@ export function normalizeCheckoutPrStatusPayload(status) {
|
|
|
6698
6866
|
headRefName: status.headRefName,
|
|
6699
6867
|
isMerged: status.isMerged,
|
|
6700
6868
|
isDraft: status.isDraft ?? false,
|
|
6869
|
+
mergeable: status.mergeable ?? "UNKNOWN",
|
|
6701
6870
|
checks: status.checks ?? [],
|
|
6702
6871
|
checksStatus: status.checksStatus,
|
|
6703
6872
|
reviewDecision: status.reviewDecision,
|