@getpaseo/server 0.1.35 → 0.1.38
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/dev-runner.js +1 -1
- package/dist/scripts/dev-runner.js.map +1 -1
- package/dist/scripts/{daemon-runner.js → supervisor-entrypoint.js} +38 -10
- package/dist/scripts/supervisor-entrypoint.js.map +1 -0
- package/dist/scripts/supervisor.js +33 -7
- package/dist/scripts/supervisor.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +175 -0
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +235 -0
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +13 -0
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +53 -0
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +10 -10
- package/dist/server/server/agent/agent-storage.js +9 -4
- package/dist/server/server/agent/agent-storage.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +38 -1
- package/dist/server/server/agent/provider-launch-config.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 +24 -5
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent-attention-policy.d.ts +1 -1
- package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
- package/dist/server/server/bootstrap.d.ts +0 -4
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +65 -40
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/chat/chat-mentions.d.ts +31 -0
- package/dist/server/server/chat/chat-mentions.d.ts.map +1 -0
- package/dist/server/server/chat/chat-mentions.js +71 -0
- package/dist/server/server/chat/chat-mentions.js.map +1 -0
- package/dist/server/server/chat/chat-rpc-schemas.d.ts +728 -0
- package/dist/server/server/chat/chat-rpc-schemas.d.ts.map +1 -0
- package/dist/server/server/chat/chat-rpc-schemas.js +103 -0
- package/dist/server/server/chat/chat-rpc-schemas.js.map +1 -0
- package/dist/server/server/chat/chat-service.d.ts +74 -0
- package/dist/server/server/chat/chat-service.d.ts.map +1 -0
- package/dist/server/server/chat/chat-service.js +330 -0
- package/dist/server/server/chat/chat-service.js.map +1 -0
- package/dist/server/server/chat/chat-types.d.ts +75 -0
- package/dist/server/server/chat/chat-types.d.ts.map +1 -0
- package/dist/server/server/chat/chat-types.js +22 -0
- package/dist/server/server/chat/chat-types.js.map +1 -0
- package/dist/server/server/checkout-diff-manager.d.ts +41 -0
- package/dist/server/server/checkout-diff-manager.d.ts.map +1 -0
- package/dist/server/server/checkout-diff-manager.js +272 -0
- package/dist/server/server/checkout-diff-manager.js.map +1 -0
- package/dist/server/server/checkout-git-utils.d.ts +9 -0
- package/dist/server/server/checkout-git-utils.d.ts.map +1 -0
- package/dist/server/server/checkout-git-utils.js +37 -0
- package/dist/server/server/checkout-git-utils.js.map +1 -0
- package/dist/server/server/index.js +0 -4
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +2937 -0
- package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -0
- package/dist/server/server/loop/rpc-schemas.js +159 -0
- package/dist/server/server/loop/rpc-schemas.js.map +1 -0
- package/dist/server/server/loop-service.d.ts +520 -0
- package/dist/server/server/loop-service.d.ts.map +1 -0
- package/dist/server/server/loop-service.js +741 -0
- package/dist/server/server/loop-service.js.map +1 -0
- package/dist/server/server/persisted-config.d.ts +10 -10
- package/dist/server/server/pid-lock.d.ts +7 -2
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +21 -0
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/schedule/cron.d.ts +4 -0
- package/dist/server/server/schedule/cron.d.ts.map +1 -0
- package/dist/server/server/schedule/cron.js +103 -0
- package/dist/server/server/schedule/cron.js.map +1 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts +2773 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -0
- package/dist/server/server/schedule/rpc-schemas.js +112 -0
- package/dist/server/server/schedule/rpc-schemas.js.map +1 -0
- package/dist/server/server/schedule/service.d.ts +39 -0
- package/dist/server/server/schedule/service.d.ts.map +1 -0
- package/dist/server/server/schedule/service.js +397 -0
- package/dist/server/server/schedule/service.js.map +1 -0
- package/dist/server/server/schedule/store.d.ts +13 -0
- package/dist/server/server/schedule/store.d.ts.map +1 -0
- package/dist/server/server/schedule/store.js +56 -0
- package/dist/server/server/schedule/store.js.map +1 -0
- package/dist/server/server/schedule/types.d.ts +710 -0
- package/dist/server/server/schedule/types.d.ts.map +1 -0
- package/dist/server/server/schedule/types.js +73 -0
- package/dist/server/server/schedule/types.js.map +1 -0
- package/dist/server/server/session.d.ts +40 -19
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +779 -568
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +19 -3
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +12 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +71 -14
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/shared/messages.d.ts +37933 -16895
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +41 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/terminal/terminal-manager.js +2 -2
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts +12 -0
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +73 -3
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/directory-suggestions.js +20 -4
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/src/server/pid-lock.js +21 -0
- package/dist/src/server/pid-lock.js.map +1 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +19 -3
- package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -1
- package/package.json +4 -3
- package/dist/scripts/daemon-runner.js.map +0 -1
- package/dist/src/server/agent/activity-curator.js +0 -243
- package/dist/src/server/agent/activity-curator.js.map +0 -1
- package/dist/src/server/agent/agent-manager.js +0 -1802
- package/dist/src/server/agent/agent-manager.js.map +0 -1
- package/dist/src/server/agent/agent-metadata-generator.js +0 -161
- package/dist/src/server/agent/agent-metadata-generator.js.map +0 -1
- package/dist/src/server/agent/agent-projections.js +0 -254
- package/dist/src/server/agent/agent-projections.js.map +0 -1
- package/dist/src/server/agent/agent-response-loop.js +0 -304
- package/dist/src/server/agent/agent-response-loop.js.map +0 -1
- package/dist/src/server/agent/agent-sdk-types.js +0 -12
- package/dist/src/server/agent/agent-sdk-types.js.map +0 -1
- package/dist/src/server/agent/agent-storage.js +0 -297
- package/dist/src/server/agent/agent-storage.js.map +0 -1
- package/dist/src/server/agent/agent-title-limits.js +0 -3
- package/dist/src/server/agent/agent-title-limits.js.map +0 -1
- package/dist/src/server/agent/audio-utils.js +0 -19
- package/dist/src/server/agent/audio-utils.js.map +0 -1
- package/dist/src/server/agent/dictation-debug.js +0 -50
- package/dist/src/server/agent/dictation-debug.js.map +0 -1
- package/dist/src/server/agent/mcp-server.js +0 -754
- package/dist/src/server/agent/mcp-server.js.map +0 -1
- package/dist/src/server/agent/orchestrator-instructions.js +0 -51
- package/dist/src/server/agent/orchestrator-instructions.js.map +0 -1
- package/dist/src/server/agent/pcm16-resampler.js +0 -63
- package/dist/src/server/agent/pcm16-resampler.js.map +0 -1
- package/dist/src/server/agent/provider-launch-config.js +0 -176
- package/dist/src/server/agent/provider-launch-config.js.map +0 -1
- package/dist/src/server/agent/provider-manifest.js +0 -127
- package/dist/src/server/agent/provider-manifest.js.map +0 -1
- package/dist/src/server/agent/provider-registry.js +0 -45
- package/dist/src/server/agent/provider-registry.js.map +0 -1
- package/dist/src/server/agent/providers/claude/partial-json.js +0 -306
- package/dist/src/server/agent/providers/claude/partial-json.js.map +0 -1
- package/dist/src/server/agent/providers/claude/sdk-model-resolver.js +0 -104
- package/dist/src/server/agent/providers/claude/sdk-model-resolver.js.map +0 -1
- package/dist/src/server/agent/providers/claude/sidechain-tracker.js +0 -230
- package/dist/src/server/agent/providers/claude/sidechain-tracker.js.map +0 -1
- package/dist/src/server/agent/providers/claude/task-notification-tool-call.js +0 -267
- package/dist/src/server/agent/providers/claude/task-notification-tool-call.js.map +0 -1
- package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js +0 -121
- package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js.map +0 -1
- package/dist/src/server/agent/providers/claude/tool-call-mapper.js +0 -252
- package/dist/src/server/agent/providers/claude/tool-call-mapper.js.map +0 -1
- package/dist/src/server/agent/providers/claude-agent.js +0 -3147
- package/dist/src/server/agent/providers/claude-agent.js.map +0 -1
- package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js +0 -104
- package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js.map +0 -1
- package/dist/src/server/agent/providers/codex/tool-call-mapper.js +0 -758
- package/dist/src/server/agent/providers/codex/tool-call-mapper.js.map +0 -1
- package/dist/src/server/agent/providers/codex-app-server-agent.js +0 -2949
- package/dist/src/server/agent/providers/codex-app-server-agent.js.map +0 -1
- package/dist/src/server/agent/providers/codex-rollout-timeline.js +0 -544
- package/dist/src/server/agent/providers/codex-rollout-timeline.js.map +0 -1
- package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
- package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
- package/dist/src/server/agent/providers/opencode/tool-call-mapper.js +0 -144
- package/dist/src/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
- package/dist/src/server/agent/providers/opencode-agent.js +0 -1193
- package/dist/src/server/agent/providers/opencode-agent.js.map +0 -1
- package/dist/src/server/agent/providers/tool-call-detail-primitives.js +0 -686
- package/dist/src/server/agent/providers/tool-call-detail-primitives.js.map +0 -1
- package/dist/src/server/agent/providers/tool-call-mapper-utils.js +0 -115
- package/dist/src/server/agent/providers/tool-call-mapper-utils.js.map +0 -1
- package/dist/src/server/agent/recordings-debug.js +0 -19
- package/dist/src/server/agent/recordings-debug.js.map +0 -1
- package/dist/src/server/agent/stt-debug.js +0 -33
- package/dist/src/server/agent/stt-debug.js.map +0 -1
- package/dist/src/server/agent/stt-manager.js +0 -232
- package/dist/src/server/agent/stt-manager.js.map +0 -1
- package/dist/src/server/agent/timeline-append.js +0 -27
- package/dist/src/server/agent/timeline-append.js.map +0 -1
- package/dist/src/server/agent/timeline-projection.js +0 -215
- package/dist/src/server/agent/timeline-projection.js.map +0 -1
- package/dist/src/server/agent/tool-name-normalization.js +0 -45
- package/dist/src/server/agent/tool-name-normalization.js.map +0 -1
- package/dist/src/server/agent/tts-debug.js +0 -24
- package/dist/src/server/agent/tts-debug.js.map +0 -1
- package/dist/src/server/agent/tts-manager.js +0 -374
- package/dist/src/server/agent/tts-manager.js.map +0 -1
- package/dist/src/server/agent/wait-for-agent-tracker.js +0 -53
- package/dist/src/server/agent/wait-for-agent-tracker.js.map +0 -1
- package/dist/src/server/agent-attention-policy.js +0 -40
- package/dist/src/server/agent-attention-policy.js.map +0 -1
- package/dist/src/server/allowed-hosts.js +0 -94
- package/dist/src/server/allowed-hosts.js.map +0 -1
- package/dist/src/server/bootstrap.js +0 -581
- package/dist/src/server/bootstrap.js.map +0 -1
- package/dist/src/server/client-message-id.js +0 -12
- package/dist/src/server/client-message-id.js.map +0 -1
- package/dist/src/server/config.js +0 -73
- package/dist/src/server/config.js.map +0 -1
- package/dist/src/server/connection-offer.js +0 -59
- package/dist/src/server/connection-offer.js.map +0 -1
- package/dist/src/server/daemon-keypair.js +0 -40
- package/dist/src/server/daemon-keypair.js.map +0 -1
- package/dist/src/server/daemon-version.js +0 -22
- package/dist/src/server/daemon-version.js.map +0 -1
- package/dist/src/server/dictation/dictation-stream-manager.js +0 -571
- package/dist/src/server/dictation/dictation-stream-manager.js.map +0 -1
- package/dist/src/server/file-download/token-store.js +0 -40
- package/dist/src/server/file-download/token-store.js.map +0 -1
- package/dist/src/server/file-explorer/service.js +0 -180
- package/dist/src/server/file-explorer/service.js.map +0 -1
- package/dist/src/server/json-utils.js +0 -45
- package/dist/src/server/json-utils.js.map +0 -1
- package/dist/src/server/messages.js +0 -29
- package/dist/src/server/messages.js.map +0 -1
- package/dist/src/server/package-version.js +0 -46
- package/dist/src/server/package-version.js.map +0 -1
- package/dist/src/server/pairing-offer.js +0 -45
- package/dist/src/server/pairing-offer.js.map +0 -1
- package/dist/src/server/pairing-qr.js +0 -45
- package/dist/src/server/pairing-qr.js.map +0 -1
- package/dist/src/server/path-utils.js +0 -20
- package/dist/src/server/path-utils.js.map +0 -1
- package/dist/src/server/persisted-config.js +0 -265
- package/dist/src/server/persisted-config.js.map +0 -1
- package/dist/src/server/persistence-hooks.js +0 -60
- package/dist/src/server/persistence-hooks.js.map +0 -1
- package/dist/src/server/push/push-service.js +0 -68
- package/dist/src/server/push/push-service.js.map +0 -1
- package/dist/src/server/push/token-store.js +0 -70
- package/dist/src/server/push/token-store.js.map +0 -1
- package/dist/src/server/relay-transport.js +0 -461
- package/dist/src/server/relay-transport.js.map +0 -1
- package/dist/src/server/server-id.js +0 -63
- package/dist/src/server/server-id.js.map +0 -1
- package/dist/src/server/session.js +0 -6170
- package/dist/src/server/session.js.map +0 -1
- package/dist/src/server/speech/audio.js +0 -101
- package/dist/src/server/speech/audio.js.map +0 -1
- package/dist/src/server/speech/provider-resolver.js +0 -7
- package/dist/src/server/speech/provider-resolver.js.map +0 -1
- package/dist/src/server/speech/providers/local/config.js +0 -74
- package/dist/src/server/speech/providers/local/config.js.map +0 -1
- package/dist/src/server/speech/providers/local/models.js +0 -17
- package/dist/src/server/speech/providers/local/models.js.map +0 -1
- package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js +0 -436
- package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +0 -1
- package/dist/src/server/speech/providers/local/runtime.js +0 -238
- package/dist/src/server/speech/providers/local/runtime.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/model-catalog.js +0 -166
- package/dist/src/server/speech/providers/local/sherpa/model-catalog.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/model-downloader.js +0 -165
- package/dist/src/server/speech/providers/local/sherpa/model-downloader.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +0 -73
- package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +0 -84
- package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +0 -11
- package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +0 -102
- package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +0 -135
- package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +0 -130
- package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js +0 -110
- package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js +0 -138
- package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js +0 -98
- package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js +0 -23
- package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js.map +0 -1
- package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js +0 -107
- package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js.map +0 -1
- package/dist/src/server/speech/providers/openai/config.js +0 -80
- package/dist/src/server/speech/providers/openai/config.js.map +0 -1
- package/dist/src/server/speech/providers/openai/realtime-transcription-session.js +0 -168
- package/dist/src/server/speech/providers/openai/realtime-transcription-session.js.map +0 -1
- package/dist/src/server/speech/providers/openai/runtime.js +0 -112
- package/dist/src/server/speech/providers/openai/runtime.js.map +0 -1
- package/dist/src/server/speech/providers/openai/stt.js +0 -206
- package/dist/src/server/speech/providers/openai/stt.js.map +0 -1
- package/dist/src/server/speech/providers/openai/tts.js +0 -46
- package/dist/src/server/speech/providers/openai/tts.js.map +0 -1
- package/dist/src/server/speech/speech-config-resolver.js +0 -102
- package/dist/src/server/speech/speech-config-resolver.js.map +0 -1
- package/dist/src/server/speech/speech-provider.js +0 -2
- package/dist/src/server/speech/speech-provider.js.map +0 -1
- package/dist/src/server/speech/speech-runtime.js +0 -530
- package/dist/src/server/speech/speech-runtime.js.map +0 -1
- package/dist/src/server/speech/speech-types.js +0 -8
- package/dist/src/server/speech/speech-types.js.map +0 -1
- package/dist/src/server/speech/turn-detection-provider.js +0 -2
- package/dist/src/server/speech/turn-detection-provider.js.map +0 -1
- package/dist/src/server/utils/diff-highlighter.js +0 -257
- package/dist/src/server/utils/diff-highlighter.js.map +0 -1
- package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
- package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
- package/dist/src/server/voice/voice-turn-controller.js +0 -159
- package/dist/src/server/voice/voice-turn-controller.js.map +0 -1
- package/dist/src/server/voice-config.js +0 -51
- package/dist/src/server/voice-config.js.map +0 -1
- package/dist/src/server/voice-mcp-bridge-command.js +0 -31
- package/dist/src/server/voice-mcp-bridge-command.js.map +0 -1
- package/dist/src/server/voice-mcp-bridge.js +0 -109
- package/dist/src/server/voice-mcp-bridge.js.map +0 -1
- package/dist/src/server/voice-permission-policy.js +0 -13
- package/dist/src/server/voice-permission-policy.js.map +0 -1
- package/dist/src/server/voice-types.js +0 -2
- package/dist/src/server/voice-types.js.map +0 -1
- package/dist/src/server/websocket-server.js +0 -991
- package/dist/src/server/websocket-server.js.map +0 -1
- package/dist/src/server/workspace-registry-bootstrap.js +0 -98
- package/dist/src/server/workspace-registry-bootstrap.js.map +0 -1
- package/dist/src/server/workspace-registry-model.js +0 -175
- package/dist/src/server/workspace-registry-model.js.map +0 -1
- package/dist/src/server/workspace-registry.js +0 -151
- package/dist/src/server/workspace-registry.js.map +0 -1
- package/dist/src/server/worktree-bootstrap.js +0 -508
- package/dist/src/server/worktree-bootstrap.js.map +0 -1
- package/dist/src/shared/agent-attention-notification.js +0 -130
- package/dist/src/shared/agent-attention-notification.js.map +0 -1
- package/dist/src/shared/agent-lifecycle.js +0 -8
- package/dist/src/shared/agent-lifecycle.js.map +0 -1
- package/dist/src/shared/connection-offer.js +0 -17
- package/dist/src/shared/connection-offer.js.map +0 -1
- package/dist/src/shared/daemon-endpoints.js +0 -122
- package/dist/src/shared/daemon-endpoints.js.map +0 -1
- package/dist/src/shared/messages.js +0 -2066
- package/dist/src/shared/messages.js.map +0 -1
- package/dist/src/shared/path-utils.js +0 -16
- package/dist/src/shared/path-utils.js.map +0 -1
- package/dist/src/shared/terminal-stream-protocol.js +0 -99
- package/dist/src/shared/terminal-stream-protocol.js.map +0 -1
- package/dist/src/shared/tool-call-display.js +0 -122
- package/dist/src/shared/tool-call-display.js.map +0 -1
- package/dist/src/terminal/terminal-manager.js +0 -136
- package/dist/src/terminal/terminal-manager.js.map +0 -1
- package/dist/src/terminal/terminal.js +0 -333
- package/dist/src/terminal/terminal.js.map +0 -1
- package/dist/src/utils/checkout-git.js +0 -1448
- package/dist/src/utils/checkout-git.js.map +0 -1
- package/dist/src/utils/directory-suggestions.js +0 -655
- package/dist/src/utils/directory-suggestions.js.map +0 -1
- package/dist/src/utils/path.js +0 -15
- package/dist/src/utils/path.js.map +0 -1
- package/dist/src/utils/project-icon.js +0 -389
- package/dist/src/utils/project-icon.js.map +0 -1
- package/dist/src/utils/worktree-metadata.js +0 -116
- package/dist/src/utils/worktree-metadata.js.map +0 -1
- package/dist/src/utils/worktree.js +0 -744
- package/dist/src/utils/worktree.js.map +0 -1
|
@@ -31,23 +31,20 @@ import { isVoicePermissionAllowed } from "./voice-permission-policy.js";
|
|
|
31
31
|
import { listDirectoryEntries, readExplorerFile, getDownloadableFileInfo, } from "./file-explorer/service.js";
|
|
32
32
|
import { computeWorktreePath, getWorktreeSetupCommands, resolveWorktreeRuntimeEnv, slugify, validateBranchSlug, listPaseoWorktrees, deletePaseoWorktree, isPaseoOwnedWorktreeCwd, resolvePaseoWorktreeRootForCwd, } from "../utils/worktree.js";
|
|
33
33
|
import { createAgentWorktree, runAsyncWorktreeBootstrap } from "./worktree-bootstrap.js";
|
|
34
|
-
import { getCheckoutDiff, getCheckoutShortstat, getCheckoutStatus, getCheckoutStatusLite, listBranchSuggestions,
|
|
34
|
+
import { getCheckoutDiff, getCheckoutShortstat, getCheckoutStatus, getCheckoutStatusLite, listBranchSuggestions, commitChanges, mergeToBase, mergeFromBase, pushCurrentBranch, createPullRequest, getPullRequestStatus, resolveRepositoryDefaultBranch, } from "../utils/checkout-git.js";
|
|
35
35
|
import { getProjectIcon } from "../utils/project-icon.js";
|
|
36
36
|
import { expandTilde } from "../utils/path.js";
|
|
37
37
|
import { searchHomeDirectories, searchWorkspaceEntries } from "../utils/directory-suggestions.js";
|
|
38
|
+
import { READ_ONLY_GIT_ENV, resolveCheckoutGitDir, toCheckoutError, } from "./checkout-git-utils.js";
|
|
38
39
|
import { ensureLocalSpeechModels, getLocalSpeechModelDir, listLocalSpeechModels, } from "./speech/providers/local/models.js";
|
|
39
40
|
import { toResolver } from "./speech/provider-resolver.js";
|
|
40
41
|
import { resolveClientMessageId } from "./client-message-id.js";
|
|
42
|
+
import { ChatServiceError, } from "./chat/chat-service.js";
|
|
43
|
+
import { notifyChatMentions } from "./chat/chat-mentions.js";
|
|
41
44
|
const execAsync = promisify(exec);
|
|
42
45
|
const MAX_INITIAL_AGENT_TITLE_CHARS = Math.min(60, MAX_EXPLICIT_AGENT_TITLE_CHARS);
|
|
43
|
-
const READ_ONLY_GIT_ENV = {
|
|
44
|
-
...process.env,
|
|
45
|
-
GIT_OPTIONAL_LOCKS: "0",
|
|
46
|
-
};
|
|
47
46
|
const pendingAgentInitializations = new Map();
|
|
48
47
|
const DEFAULT_AGENT_PROVIDER = AGENT_PROVIDER_IDS[0];
|
|
49
|
-
const CHECKOUT_DIFF_WATCH_DEBOUNCE_MS = 150;
|
|
50
|
-
const CHECKOUT_DIFF_FALLBACK_REFRESH_MS = 5000;
|
|
51
48
|
const WORKSPACE_GIT_WATCH_DEBOUNCE_MS = 500;
|
|
52
49
|
const WORKSPACE_GIT_WATCH_REMOVED_FINGERPRINT = "__removed__";
|
|
53
50
|
const TERMINAL_STREAM_HIGH_WATER_BYTES = 256 * 1024;
|
|
@@ -190,8 +187,9 @@ export class Session {
|
|
|
190
187
|
this.activeTerminalStreams = new Map();
|
|
191
188
|
this.terminalIdToSlot = new Map();
|
|
192
189
|
this.nextTerminalSlot = 0;
|
|
190
|
+
this.inflightRequests = 0;
|
|
191
|
+
this.peakInflightRequests = 0;
|
|
193
192
|
this.checkoutDiffSubscriptions = new Map();
|
|
194
|
-
this.checkoutDiffTargets = new Map();
|
|
195
193
|
this.workspaceGitWatchTargets = new Map();
|
|
196
194
|
this.voiceModeAgentId = null;
|
|
197
195
|
this.voiceModeBaseConfig = null;
|
|
@@ -202,7 +200,7 @@ export class Session {
|
|
|
202
200
|
attention: 3,
|
|
203
201
|
done: 4,
|
|
204
202
|
};
|
|
205
|
-
const { clientId, onMessage, onBinaryMessage, getBinaryBufferedAmount, onLifecycleIntent, logger, downloadTokenStore, pushTokenStore, paseoHome, agentManager, agentStorage, projectRegistry, workspaceRegistry, createAgentMcpTransport, stt, tts, terminalManager, voice, voiceBridge, dictation, agentProviderRuntimeSettings, } = options;
|
|
203
|
+
const { clientId, onMessage, onBinaryMessage, getBinaryBufferedAmount, onLifecycleIntent, logger, downloadTokenStore, pushTokenStore, paseoHome, agentManager, agentStorage, projectRegistry, workspaceRegistry, chatService, scheduleService, loopService, checkoutDiffManager, createAgentMcpTransport, stt, tts, terminalManager, voice, voiceBridge, dictation, agentProviderRuntimeSettings, } = options;
|
|
206
204
|
this.clientId = clientId;
|
|
207
205
|
this.sessionId = uuidv4();
|
|
208
206
|
this.onMessage = onMessage;
|
|
@@ -216,6 +214,10 @@ export class Session {
|
|
|
216
214
|
this.agentStorage = agentStorage;
|
|
217
215
|
this.projectRegistry = projectRegistry;
|
|
218
216
|
this.workspaceRegistry = workspaceRegistry;
|
|
217
|
+
this.chatService = chatService;
|
|
218
|
+
this.scheduleService = scheduleService;
|
|
219
|
+
this.loopService = loopService;
|
|
220
|
+
this.checkoutDiffManager = checkoutDiffManager;
|
|
219
221
|
this.createAgentMcpTransport = createAgentMcpTransport;
|
|
220
222
|
this.terminalManager = terminalManager;
|
|
221
223
|
if (this.terminalManager) {
|
|
@@ -271,21 +273,11 @@ export class Session {
|
|
|
271
273
|
return this.clientActivity;
|
|
272
274
|
}
|
|
273
275
|
getRuntimeMetrics() {
|
|
274
|
-
let checkoutDiffWatcherCount = 0;
|
|
275
|
-
let checkoutDiffFallbackRefreshTargetCount = 0;
|
|
276
|
-
for (const target of this.checkoutDiffTargets.values()) {
|
|
277
|
-
checkoutDiffWatcherCount += target.watchers.length;
|
|
278
|
-
if (target.fallbackRefreshInterval) {
|
|
279
|
-
checkoutDiffFallbackRefreshTargetCount += 1;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
276
|
return {
|
|
283
|
-
checkoutDiffTargetCount: this.checkoutDiffTargets.size,
|
|
284
|
-
checkoutDiffSubscriptionCount: this.checkoutDiffSubscriptions.size,
|
|
285
|
-
checkoutDiffWatcherCount,
|
|
286
|
-
checkoutDiffFallbackRefreshTargetCount,
|
|
287
277
|
terminalDirectorySubscriptionCount: this.subscribedTerminalDirectories.size,
|
|
288
278
|
terminalSubscriptionCount: this.activeTerminalStreams.size,
|
|
279
|
+
inflightRequests: this.inflightRequests,
|
|
280
|
+
peakInflightRequests: this.peakInflightRequests,
|
|
289
281
|
};
|
|
290
282
|
}
|
|
291
283
|
/**
|
|
@@ -847,264 +839,333 @@ export class Session {
|
|
|
847
839
|
* Main entry point for processing session messages
|
|
848
840
|
*/
|
|
849
841
|
async handleMessage(msg) {
|
|
850
|
-
this.
|
|
842
|
+
this.inflightRequests++;
|
|
843
|
+
if (this.inflightRequests > this.peakInflightRequests) {
|
|
844
|
+
this.peakInflightRequests = this.inflightRequests;
|
|
845
|
+
}
|
|
851
846
|
try {
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
this.
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
847
|
+
this.sessionLogger.trace({ messageType: msg.type, payloadBytes: JSON.stringify(msg).length }, "inbound message");
|
|
848
|
+
try {
|
|
849
|
+
switch (msg.type) {
|
|
850
|
+
case "voice_audio_chunk":
|
|
851
|
+
await this.handleAudioChunk(msg);
|
|
852
|
+
break;
|
|
853
|
+
case "abort_request":
|
|
854
|
+
await this.handleAbort();
|
|
855
|
+
break;
|
|
856
|
+
case "audio_played":
|
|
857
|
+
this.handleAudioPlayed(msg.id);
|
|
858
|
+
break;
|
|
859
|
+
case "fetch_agents_request":
|
|
860
|
+
await this.handleFetchAgents(msg);
|
|
861
|
+
break;
|
|
862
|
+
case "fetch_workspaces_request":
|
|
863
|
+
await this.handleFetchWorkspacesRequest(msg);
|
|
864
|
+
break;
|
|
865
|
+
case "fetch_agent_request":
|
|
866
|
+
await this.handleFetchAgent(msg.agentId, msg.requestId);
|
|
867
|
+
break;
|
|
868
|
+
case "delete_agent_request":
|
|
869
|
+
await this.handleDeleteAgentRequest(msg.agentId, msg.requestId);
|
|
870
|
+
break;
|
|
871
|
+
case "archive_agent_request":
|
|
872
|
+
await this.handleArchiveAgentRequest(msg.agentId, msg.requestId);
|
|
873
|
+
break;
|
|
874
|
+
case "update_agent_request":
|
|
875
|
+
await this.handleUpdateAgentRequest(msg.agentId, msg.name, msg.labels, msg.requestId);
|
|
876
|
+
break;
|
|
877
|
+
case "set_voice_mode":
|
|
878
|
+
await this.handleSetVoiceMode(msg.enabled, msg.agentId, msg.requestId);
|
|
879
|
+
break;
|
|
880
|
+
case "send_agent_message_request":
|
|
881
|
+
await this.handleSendAgentMessageRequest(msg);
|
|
882
|
+
break;
|
|
883
|
+
case "wait_for_finish_request":
|
|
884
|
+
await this.handleWaitForFinish(msg.agentId, msg.requestId, msg.timeoutMs);
|
|
885
|
+
break;
|
|
886
|
+
case "dictation_stream_start":
|
|
887
|
+
{
|
|
888
|
+
const unavailable = this.resolveVoiceFeatureUnavailableContext("dictation");
|
|
889
|
+
if (unavailable) {
|
|
890
|
+
this.emit({
|
|
891
|
+
type: "dictation_stream_error",
|
|
892
|
+
payload: {
|
|
893
|
+
dictationId: msg.dictationId,
|
|
894
|
+
error: unavailable.message,
|
|
895
|
+
retryable: unavailable.retryable,
|
|
896
|
+
reasonCode: unavailable.reasonCode,
|
|
897
|
+
missingModelIds: unavailable.missingModelIds,
|
|
898
|
+
},
|
|
899
|
+
});
|
|
900
|
+
break;
|
|
901
|
+
}
|
|
904
902
|
}
|
|
903
|
+
await this.dictationStreamManager.handleStart(msg.dictationId, msg.format);
|
|
904
|
+
break;
|
|
905
|
+
case "dictation_stream_chunk":
|
|
906
|
+
await this.dictationStreamManager.handleChunk({
|
|
907
|
+
dictationId: msg.dictationId,
|
|
908
|
+
seq: msg.seq,
|
|
909
|
+
audioBase64: msg.audio,
|
|
910
|
+
format: msg.format,
|
|
911
|
+
});
|
|
912
|
+
break;
|
|
913
|
+
case "dictation_stream_finish":
|
|
914
|
+
await this.dictationStreamManager.handleFinish(msg.dictationId, msg.finalSeq);
|
|
915
|
+
break;
|
|
916
|
+
case "dictation_stream_cancel":
|
|
917
|
+
this.dictationStreamManager.handleCancel(msg.dictationId);
|
|
918
|
+
break;
|
|
919
|
+
case "create_agent_request":
|
|
920
|
+
await this.handleCreateAgentRequest(msg);
|
|
921
|
+
break;
|
|
922
|
+
case "resume_agent_request":
|
|
923
|
+
await this.handleResumeAgentRequest(msg);
|
|
924
|
+
break;
|
|
925
|
+
case "refresh_agent_request":
|
|
926
|
+
await this.handleRefreshAgentRequest(msg);
|
|
927
|
+
break;
|
|
928
|
+
case "cancel_agent_request":
|
|
929
|
+
await this.handleCancelAgentRequest(msg.agentId);
|
|
930
|
+
break;
|
|
931
|
+
case "restart_server_request":
|
|
932
|
+
await this.handleRestartServerRequest(msg.requestId, msg.reason);
|
|
933
|
+
break;
|
|
934
|
+
case "shutdown_server_request":
|
|
935
|
+
await this.handleShutdownServerRequest(msg.requestId);
|
|
936
|
+
break;
|
|
937
|
+
case "fetch_agent_timeline_request":
|
|
938
|
+
await this.handleFetchAgentTimelineRequest(msg);
|
|
939
|
+
break;
|
|
940
|
+
case "set_agent_mode_request":
|
|
941
|
+
await this.handleSetAgentModeRequest(msg.agentId, msg.modeId, msg.requestId);
|
|
942
|
+
break;
|
|
943
|
+
case "set_agent_model_request":
|
|
944
|
+
await this.handleSetAgentModelRequest(msg.agentId, msg.modelId, msg.requestId);
|
|
945
|
+
break;
|
|
946
|
+
case "set_agent_thinking_request":
|
|
947
|
+
await this.handleSetAgentThinkingRequest(msg.agentId, msg.thinkingOptionId, msg.requestId);
|
|
948
|
+
break;
|
|
949
|
+
case "agent_permission_response":
|
|
950
|
+
await this.handleAgentPermissionResponse(msg.agentId, msg.requestId, msg.response);
|
|
951
|
+
break;
|
|
952
|
+
case "checkout_status_request":
|
|
953
|
+
await this.handleCheckoutStatusRequest(msg);
|
|
954
|
+
break;
|
|
955
|
+
case "validate_branch_request":
|
|
956
|
+
await this.handleValidateBranchRequest(msg);
|
|
957
|
+
break;
|
|
958
|
+
case "branch_suggestions_request":
|
|
959
|
+
await this.handleBranchSuggestionsRequest(msg);
|
|
960
|
+
break;
|
|
961
|
+
case "directory_suggestions_request":
|
|
962
|
+
await this.handleDirectorySuggestionsRequest(msg);
|
|
963
|
+
break;
|
|
964
|
+
case "subscribe_checkout_diff_request":
|
|
965
|
+
await this.handleSubscribeCheckoutDiffRequest(msg);
|
|
966
|
+
break;
|
|
967
|
+
case "unsubscribe_checkout_diff_request":
|
|
968
|
+
this.handleUnsubscribeCheckoutDiffRequest(msg);
|
|
969
|
+
break;
|
|
970
|
+
case "checkout_commit_request":
|
|
971
|
+
await this.handleCheckoutCommitRequest(msg);
|
|
972
|
+
break;
|
|
973
|
+
case "checkout_merge_request":
|
|
974
|
+
await this.handleCheckoutMergeRequest(msg);
|
|
975
|
+
break;
|
|
976
|
+
case "checkout_merge_from_base_request":
|
|
977
|
+
await this.handleCheckoutMergeFromBaseRequest(msg);
|
|
978
|
+
break;
|
|
979
|
+
case "checkout_push_request":
|
|
980
|
+
await this.handleCheckoutPushRequest(msg);
|
|
981
|
+
break;
|
|
982
|
+
case "checkout_pr_create_request":
|
|
983
|
+
await this.handleCheckoutPrCreateRequest(msg);
|
|
984
|
+
break;
|
|
985
|
+
case "checkout_pr_status_request":
|
|
986
|
+
await this.handleCheckoutPrStatusRequest(msg);
|
|
987
|
+
break;
|
|
988
|
+
case "paseo_worktree_list_request":
|
|
989
|
+
await this.handlePaseoWorktreeListRequest(msg);
|
|
990
|
+
break;
|
|
991
|
+
case "paseo_worktree_archive_request":
|
|
992
|
+
await this.handlePaseoWorktreeArchiveRequest(msg);
|
|
993
|
+
break;
|
|
994
|
+
case "create_paseo_worktree_request":
|
|
995
|
+
await this.handleCreatePaseoWorktreeRequest(msg);
|
|
996
|
+
break;
|
|
997
|
+
case "open_project_request":
|
|
998
|
+
await this.handleOpenProjectRequest(msg);
|
|
999
|
+
break;
|
|
1000
|
+
case "archive_workspace_request":
|
|
1001
|
+
await this.handleArchiveWorkspaceRequest(msg);
|
|
1002
|
+
break;
|
|
1003
|
+
case "file_explorer_request":
|
|
1004
|
+
await this.handleFileExplorerRequest(msg);
|
|
1005
|
+
break;
|
|
1006
|
+
case "project_icon_request":
|
|
1007
|
+
await this.handleProjectIconRequest(msg);
|
|
1008
|
+
break;
|
|
1009
|
+
case "file_download_token_request":
|
|
1010
|
+
await this.handleFileDownloadTokenRequest(msg);
|
|
1011
|
+
break;
|
|
1012
|
+
case "list_provider_models_request":
|
|
1013
|
+
await this.handleListProviderModelsRequest(msg);
|
|
1014
|
+
break;
|
|
1015
|
+
case "list_available_providers_request":
|
|
1016
|
+
await this.handleListAvailableProvidersRequest(msg);
|
|
1017
|
+
break;
|
|
1018
|
+
case "speech_models_list_request":
|
|
1019
|
+
await this.handleSpeechModelsListRequest(msg);
|
|
1020
|
+
break;
|
|
1021
|
+
case "speech_models_download_request":
|
|
1022
|
+
await this.handleSpeechModelsDownloadRequest(msg);
|
|
1023
|
+
break;
|
|
1024
|
+
case "clear_agent_attention":
|
|
1025
|
+
await this.handleClearAgentAttention(msg.agentId);
|
|
1026
|
+
break;
|
|
1027
|
+
case "client_heartbeat":
|
|
1028
|
+
this.handleClientHeartbeat(msg);
|
|
1029
|
+
break;
|
|
1030
|
+
case "ping": {
|
|
1031
|
+
const now = Date.now();
|
|
1032
|
+
this.emit({
|
|
1033
|
+
type: "pong",
|
|
1034
|
+
payload: {
|
|
1035
|
+
requestId: msg.requestId,
|
|
1036
|
+
clientSentAt: msg.clientSentAt,
|
|
1037
|
+
serverReceivedAt: now,
|
|
1038
|
+
serverSentAt: now,
|
|
1039
|
+
},
|
|
1040
|
+
});
|
|
1041
|
+
break;
|
|
905
1042
|
}
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
break;
|
|
994
|
-
case "paseo_worktree_archive_request":
|
|
995
|
-
await this.handlePaseoWorktreeArchiveRequest(msg);
|
|
996
|
-
break;
|
|
997
|
-
case "create_paseo_worktree_request":
|
|
998
|
-
await this.handleCreatePaseoWorktreeRequest(msg);
|
|
999
|
-
break;
|
|
1000
|
-
case "open_project_request":
|
|
1001
|
-
await this.handleOpenProjectRequest(msg);
|
|
1002
|
-
break;
|
|
1003
|
-
case "archive_workspace_request":
|
|
1004
|
-
await this.handleArchiveWorkspaceRequest(msg);
|
|
1005
|
-
break;
|
|
1006
|
-
case "file_explorer_request":
|
|
1007
|
-
await this.handleFileExplorerRequest(msg);
|
|
1008
|
-
break;
|
|
1009
|
-
case "project_icon_request":
|
|
1010
|
-
await this.handleProjectIconRequest(msg);
|
|
1011
|
-
break;
|
|
1012
|
-
case "file_download_token_request":
|
|
1013
|
-
await this.handleFileDownloadTokenRequest(msg);
|
|
1014
|
-
break;
|
|
1015
|
-
case "list_provider_models_request":
|
|
1016
|
-
await this.handleListProviderModelsRequest(msg);
|
|
1017
|
-
break;
|
|
1018
|
-
case "list_available_providers_request":
|
|
1019
|
-
await this.handleListAvailableProvidersRequest(msg);
|
|
1020
|
-
break;
|
|
1021
|
-
case "speech_models_list_request":
|
|
1022
|
-
await this.handleSpeechModelsListRequest(msg);
|
|
1023
|
-
break;
|
|
1024
|
-
case "speech_models_download_request":
|
|
1025
|
-
await this.handleSpeechModelsDownloadRequest(msg);
|
|
1026
|
-
break;
|
|
1027
|
-
case "clear_agent_attention":
|
|
1028
|
-
await this.handleClearAgentAttention(msg.agentId);
|
|
1029
|
-
break;
|
|
1030
|
-
case "client_heartbeat":
|
|
1031
|
-
this.handleClientHeartbeat(msg);
|
|
1032
|
-
break;
|
|
1033
|
-
case "ping": {
|
|
1034
|
-
const now = Date.now();
|
|
1035
|
-
this.emit({
|
|
1036
|
-
type: "pong",
|
|
1037
|
-
payload: {
|
|
1038
|
-
requestId: msg.requestId,
|
|
1039
|
-
clientSentAt: msg.clientSentAt,
|
|
1040
|
-
serverReceivedAt: now,
|
|
1041
|
-
serverSentAt: now,
|
|
1042
|
-
},
|
|
1043
|
-
});
|
|
1044
|
-
break;
|
|
1043
|
+
case "list_commands_request":
|
|
1044
|
+
await this.handleListCommandsRequest(msg);
|
|
1045
|
+
break;
|
|
1046
|
+
case "register_push_token":
|
|
1047
|
+
this.handleRegisterPushToken(msg.token);
|
|
1048
|
+
break;
|
|
1049
|
+
case "subscribe_terminals_request":
|
|
1050
|
+
this.handleSubscribeTerminalsRequest(msg);
|
|
1051
|
+
break;
|
|
1052
|
+
case "unsubscribe_terminals_request":
|
|
1053
|
+
this.handleUnsubscribeTerminalsRequest(msg);
|
|
1054
|
+
break;
|
|
1055
|
+
case "list_terminals_request":
|
|
1056
|
+
await this.handleListTerminalsRequest(msg);
|
|
1057
|
+
break;
|
|
1058
|
+
case "create_terminal_request":
|
|
1059
|
+
await this.handleCreateTerminalRequest(msg);
|
|
1060
|
+
break;
|
|
1061
|
+
case "subscribe_terminal_request":
|
|
1062
|
+
await this.handleSubscribeTerminalRequest(msg);
|
|
1063
|
+
break;
|
|
1064
|
+
case "unsubscribe_terminal_request":
|
|
1065
|
+
this.handleUnsubscribeTerminalRequest(msg);
|
|
1066
|
+
break;
|
|
1067
|
+
case "terminal_input":
|
|
1068
|
+
this.handleTerminalInput(msg);
|
|
1069
|
+
break;
|
|
1070
|
+
case "kill_terminal_request":
|
|
1071
|
+
await this.handleKillTerminalRequest(msg);
|
|
1072
|
+
break;
|
|
1073
|
+
case "chat/create":
|
|
1074
|
+
await this.handleChatCreateRequest(msg);
|
|
1075
|
+
break;
|
|
1076
|
+
case "chat/list":
|
|
1077
|
+
await this.handleChatListRequest(msg);
|
|
1078
|
+
break;
|
|
1079
|
+
case "chat/inspect":
|
|
1080
|
+
await this.handleChatInspectRequest(msg);
|
|
1081
|
+
break;
|
|
1082
|
+
case "chat/delete":
|
|
1083
|
+
await this.handleChatDeleteRequest(msg);
|
|
1084
|
+
break;
|
|
1085
|
+
case "chat/post":
|
|
1086
|
+
await this.handleChatPostRequest(msg);
|
|
1087
|
+
break;
|
|
1088
|
+
case "chat/read":
|
|
1089
|
+
await this.handleChatReadRequest(msg);
|
|
1090
|
+
break;
|
|
1091
|
+
case "chat/wait":
|
|
1092
|
+
await this.handleChatWaitRequest(msg);
|
|
1093
|
+
break;
|
|
1094
|
+
case "schedule/create":
|
|
1095
|
+
await this.handleScheduleCreateRequest(msg);
|
|
1096
|
+
break;
|
|
1097
|
+
case "schedule/list":
|
|
1098
|
+
await this.handleScheduleListRequest(msg);
|
|
1099
|
+
break;
|
|
1100
|
+
case "schedule/inspect":
|
|
1101
|
+
await this.handleScheduleInspectRequest(msg);
|
|
1102
|
+
break;
|
|
1103
|
+
case "schedule/logs":
|
|
1104
|
+
await this.handleScheduleLogsRequest(msg);
|
|
1105
|
+
break;
|
|
1106
|
+
case "schedule/pause":
|
|
1107
|
+
await this.handleSchedulePauseRequest(msg);
|
|
1108
|
+
break;
|
|
1109
|
+
case "schedule/resume":
|
|
1110
|
+
await this.handleScheduleResumeRequest(msg);
|
|
1111
|
+
break;
|
|
1112
|
+
case "schedule/delete":
|
|
1113
|
+
await this.handleScheduleDeleteRequest(msg);
|
|
1114
|
+
break;
|
|
1115
|
+
case "loop/run":
|
|
1116
|
+
await this.handleLoopRunRequest(msg);
|
|
1117
|
+
break;
|
|
1118
|
+
case "loop/list":
|
|
1119
|
+
await this.handleLoopListRequest(msg);
|
|
1120
|
+
break;
|
|
1121
|
+
case "loop/inspect":
|
|
1122
|
+
await this.handleLoopInspectRequest(msg);
|
|
1123
|
+
break;
|
|
1124
|
+
case "loop/logs":
|
|
1125
|
+
await this.handleLoopLogsRequest(msg);
|
|
1126
|
+
break;
|
|
1127
|
+
case "loop/stop":
|
|
1128
|
+
await this.handleLoopStopRequest(msg);
|
|
1129
|
+
break;
|
|
1045
1130
|
}
|
|
1046
|
-
case "list_commands_request":
|
|
1047
|
-
await this.handleListCommandsRequest(msg);
|
|
1048
|
-
break;
|
|
1049
|
-
case "register_push_token":
|
|
1050
|
-
this.handleRegisterPushToken(msg.token);
|
|
1051
|
-
break;
|
|
1052
|
-
case "subscribe_terminals_request":
|
|
1053
|
-
this.handleSubscribeTerminalsRequest(msg);
|
|
1054
|
-
break;
|
|
1055
|
-
case "unsubscribe_terminals_request":
|
|
1056
|
-
this.handleUnsubscribeTerminalsRequest(msg);
|
|
1057
|
-
break;
|
|
1058
|
-
case "list_terminals_request":
|
|
1059
|
-
await this.handleListTerminalsRequest(msg);
|
|
1060
|
-
break;
|
|
1061
|
-
case "create_terminal_request":
|
|
1062
|
-
await this.handleCreateTerminalRequest(msg);
|
|
1063
|
-
break;
|
|
1064
|
-
case "subscribe_terminal_request":
|
|
1065
|
-
await this.handleSubscribeTerminalRequest(msg);
|
|
1066
|
-
break;
|
|
1067
|
-
case "unsubscribe_terminal_request":
|
|
1068
|
-
this.handleUnsubscribeTerminalRequest(msg);
|
|
1069
|
-
break;
|
|
1070
|
-
case "terminal_input":
|
|
1071
|
-
this.handleTerminalInput(msg);
|
|
1072
|
-
break;
|
|
1073
|
-
case "kill_terminal_request":
|
|
1074
|
-
await this.handleKillTerminalRequest(msg);
|
|
1075
|
-
break;
|
|
1076
1131
|
}
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
}
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1132
|
+
catch (error) {
|
|
1133
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
1134
|
+
this.sessionLogger.error({ err }, "Error handling message");
|
|
1135
|
+
const requestId = msg.requestId;
|
|
1136
|
+
if (typeof requestId === "string") {
|
|
1137
|
+
try {
|
|
1138
|
+
this.emit({
|
|
1139
|
+
type: "rpc_error",
|
|
1140
|
+
payload: {
|
|
1141
|
+
requestId,
|
|
1142
|
+
requestType: msg.type,
|
|
1143
|
+
error: `Request failed: ${err.message}`,
|
|
1144
|
+
code: "handler_error",
|
|
1145
|
+
},
|
|
1146
|
+
});
|
|
1147
|
+
}
|
|
1148
|
+
catch (emitError) {
|
|
1149
|
+
this.sessionLogger.error({ err: emitError }, "Failed to emit rpc_error");
|
|
1150
|
+
}
|
|
1096
1151
|
}
|
|
1152
|
+
this.emit({
|
|
1153
|
+
type: "activity_log",
|
|
1154
|
+
payload: {
|
|
1155
|
+
id: uuidv4(),
|
|
1156
|
+
timestamp: new Date(),
|
|
1157
|
+
type: "error",
|
|
1158
|
+
content: `Error: ${err.message}`,
|
|
1159
|
+
},
|
|
1160
|
+
});
|
|
1097
1161
|
}
|
|
1098
|
-
this.emit({
|
|
1099
|
-
type: "activity_log",
|
|
1100
|
-
payload: {
|
|
1101
|
-
id: uuidv4(),
|
|
1102
|
-
timestamp: new Date(),
|
|
1103
|
-
type: "error",
|
|
1104
|
-
content: `Error: ${err.message}`,
|
|
1105
|
-
},
|
|
1106
|
-
});
|
|
1107
1162
|
}
|
|
1163
|
+
finally {
|
|
1164
|
+
this.inflightRequests--;
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
resetPeakInflight() {
|
|
1168
|
+
this.peakInflightRequests = this.inflightRequests;
|
|
1108
1169
|
}
|
|
1109
1170
|
handleBinaryFrame(frame) {
|
|
1110
1171
|
const activeStream = this.activeTerminalStreams.get(frame.slot);
|
|
@@ -2210,21 +2271,6 @@ export class Session {
|
|
|
2210
2271
|
}
|
|
2211
2272
|
return baseBranch;
|
|
2212
2273
|
}
|
|
2213
|
-
toCheckoutError(error) {
|
|
2214
|
-
if (error instanceof NotGitRepoError) {
|
|
2215
|
-
return { code: "NOT_GIT_REPO", message: error.message };
|
|
2216
|
-
}
|
|
2217
|
-
if (error instanceof MergeConflictError) {
|
|
2218
|
-
return { code: "MERGE_CONFLICT", message: error.message };
|
|
2219
|
-
}
|
|
2220
|
-
if (error instanceof MergeFromBaseConflictError) {
|
|
2221
|
-
return { code: "MERGE_CONFLICT", message: error.message };
|
|
2222
|
-
}
|
|
2223
|
-
if (error instanceof Error) {
|
|
2224
|
-
return { code: "UNKNOWN", message: error.message };
|
|
2225
|
-
}
|
|
2226
|
-
return { code: "UNKNOWN", message: String(error) };
|
|
2227
|
-
}
|
|
2228
2274
|
isPathWithinRoot(rootPath, candidatePath) {
|
|
2229
2275
|
const resolvedRoot = resolve(rootPath);
|
|
2230
2276
|
const resolvedCandidate = resolve(candidatePath);
|
|
@@ -2721,7 +2767,7 @@ export class Session {
|
|
|
2721
2767
|
hasRemote: false,
|
|
2722
2768
|
remoteUrl: null,
|
|
2723
2769
|
isPaseoOwnedWorktree: false,
|
|
2724
|
-
error:
|
|
2770
|
+
error: toCheckoutError(error),
|
|
2725
2771
|
requestId,
|
|
2726
2772
|
},
|
|
2727
2773
|
});
|
|
@@ -2865,63 +2911,6 @@ export class Session {
|
|
|
2865
2911
|
});
|
|
2866
2912
|
}
|
|
2867
2913
|
}
|
|
2868
|
-
normalizeCheckoutDiffCompare(compare) {
|
|
2869
|
-
if (compare.mode === "uncommitted") {
|
|
2870
|
-
return { mode: "uncommitted" };
|
|
2871
|
-
}
|
|
2872
|
-
const trimmedBaseRef = compare.baseRef?.trim();
|
|
2873
|
-
return trimmedBaseRef ? { mode: "base", baseRef: trimmedBaseRef } : { mode: "base" };
|
|
2874
|
-
}
|
|
2875
|
-
buildCheckoutDiffTargetKey(cwd, compare) {
|
|
2876
|
-
return JSON.stringify([
|
|
2877
|
-
cwd,
|
|
2878
|
-
compare.mode,
|
|
2879
|
-
compare.mode === "base" ? (compare.baseRef ?? "") : "",
|
|
2880
|
-
]);
|
|
2881
|
-
}
|
|
2882
|
-
closeCheckoutDiffWatchTarget(target) {
|
|
2883
|
-
if (target.debounceTimer) {
|
|
2884
|
-
clearTimeout(target.debounceTimer);
|
|
2885
|
-
target.debounceTimer = null;
|
|
2886
|
-
}
|
|
2887
|
-
if (target.fallbackRefreshInterval) {
|
|
2888
|
-
clearInterval(target.fallbackRefreshInterval);
|
|
2889
|
-
target.fallbackRefreshInterval = null;
|
|
2890
|
-
}
|
|
2891
|
-
for (const watcher of target.watchers) {
|
|
2892
|
-
watcher.close();
|
|
2893
|
-
}
|
|
2894
|
-
target.watchers = [];
|
|
2895
|
-
}
|
|
2896
|
-
removeCheckoutDiffSubscription(subscriptionId) {
|
|
2897
|
-
const subscription = this.checkoutDiffSubscriptions.get(subscriptionId);
|
|
2898
|
-
if (!subscription) {
|
|
2899
|
-
return;
|
|
2900
|
-
}
|
|
2901
|
-
this.checkoutDiffSubscriptions.delete(subscriptionId);
|
|
2902
|
-
const target = this.checkoutDiffTargets.get(subscription.targetKey);
|
|
2903
|
-
if (!target) {
|
|
2904
|
-
return;
|
|
2905
|
-
}
|
|
2906
|
-
target.subscriptions.delete(subscriptionId);
|
|
2907
|
-
if (target.subscriptions.size === 0) {
|
|
2908
|
-
this.closeCheckoutDiffWatchTarget(target);
|
|
2909
|
-
this.checkoutDiffTargets.delete(subscription.targetKey);
|
|
2910
|
-
}
|
|
2911
|
-
}
|
|
2912
|
-
async resolveCheckoutGitDir(cwd) {
|
|
2913
|
-
try {
|
|
2914
|
-
const { stdout } = await execAsync("git rev-parse --absolute-git-dir", {
|
|
2915
|
-
cwd,
|
|
2916
|
-
env: READ_ONLY_GIT_ENV,
|
|
2917
|
-
});
|
|
2918
|
-
const gitDir = stdout.trim();
|
|
2919
|
-
return gitDir.length > 0 ? gitDir : null;
|
|
2920
|
-
}
|
|
2921
|
-
catch {
|
|
2922
|
-
return null;
|
|
2923
|
-
}
|
|
2924
|
-
}
|
|
2925
2914
|
async resolveWorkspaceGitRefsRoot(gitDir) {
|
|
2926
2915
|
try {
|
|
2927
2916
|
const commonDir = (await readFile(join(gitDir, "commondir"), "utf8")).trim();
|
|
@@ -3020,7 +3009,7 @@ export class Session {
|
|
|
3020
3009
|
if (this.workspaceGitWatchTargets.has(workspaceId)) {
|
|
3021
3010
|
return;
|
|
3022
3011
|
}
|
|
3023
|
-
const gitDir = await
|
|
3012
|
+
const gitDir = await resolveCheckoutGitDir(cwd);
|
|
3024
3013
|
if (!gitDir) {
|
|
3025
3014
|
return;
|
|
3026
3015
|
}
|
|
@@ -3054,228 +3043,41 @@ export class Session {
|
|
|
3054
3043
|
if (target.watchers.length === 0) {
|
|
3055
3044
|
return;
|
|
3056
3045
|
}
|
|
3057
|
-
this.workspaceGitWatchTargets.set(workspaceId, target);
|
|
3058
|
-
}
|
|
3059
|
-
async syncWorkspaceGitWatchTarget(cwd, options) {
|
|
3060
|
-
if (!options.isGit) {
|
|
3061
|
-
this.removeWorkspaceGitWatchTarget(cwd);
|
|
3062
|
-
return;
|
|
3063
|
-
}
|
|
3064
|
-
await this.ensureWorkspaceGitWatchTarget(cwd);
|
|
3065
|
-
}
|
|
3066
|
-
async resolveCheckoutWatchRoot(cwd) {
|
|
3067
|
-
try {
|
|
3068
|
-
const { stdout } = await execAsync("git rev-parse --path-format=absolute --show-toplevel", {
|
|
3069
|
-
cwd,
|
|
3070
|
-
env: READ_ONLY_GIT_ENV,
|
|
3071
|
-
});
|
|
3072
|
-
const root = stdout.trim();
|
|
3073
|
-
return root.length > 0 ? root : null;
|
|
3074
|
-
}
|
|
3075
|
-
catch {
|
|
3076
|
-
return null;
|
|
3077
|
-
}
|
|
3078
|
-
}
|
|
3079
|
-
scheduleCheckoutDiffTargetRefresh(target) {
|
|
3080
|
-
if (target.debounceTimer) {
|
|
3081
|
-
clearTimeout(target.debounceTimer);
|
|
3082
|
-
}
|
|
3083
|
-
target.debounceTimer = setTimeout(() => {
|
|
3084
|
-
target.debounceTimer = null;
|
|
3085
|
-
void this.refreshCheckoutDiffTarget(target);
|
|
3086
|
-
}, CHECKOUT_DIFF_WATCH_DEBOUNCE_MS);
|
|
3087
|
-
}
|
|
3088
|
-
emitCheckoutDiffUpdate(target, snapshot) {
|
|
3089
|
-
if (target.subscriptions.size === 0) {
|
|
3090
|
-
return;
|
|
3091
|
-
}
|
|
3092
|
-
for (const subscriptionId of target.subscriptions) {
|
|
3093
|
-
this.emit({
|
|
3094
|
-
type: "checkout_diff_update",
|
|
3095
|
-
payload: {
|
|
3096
|
-
subscriptionId,
|
|
3097
|
-
...snapshot,
|
|
3098
|
-
},
|
|
3099
|
-
});
|
|
3100
|
-
}
|
|
3101
|
-
}
|
|
3102
|
-
checkoutDiffSnapshotFingerprint(snapshot) {
|
|
3103
|
-
return JSON.stringify(snapshot);
|
|
3104
|
-
}
|
|
3105
|
-
async computeCheckoutDiffSnapshot(cwd, compare, options) {
|
|
3106
|
-
const diffCwd = options?.diffCwd ?? cwd;
|
|
3107
|
-
try {
|
|
3108
|
-
const diffResult = await getCheckoutDiff(diffCwd, {
|
|
3109
|
-
mode: compare.mode,
|
|
3110
|
-
baseRef: compare.baseRef,
|
|
3111
|
-
includeStructured: true,
|
|
3112
|
-
}, { paseoHome: this.paseoHome });
|
|
3113
|
-
const files = [...(diffResult.structured ?? [])];
|
|
3114
|
-
files.sort((a, b) => {
|
|
3115
|
-
if (a.path === b.path)
|
|
3116
|
-
return 0;
|
|
3117
|
-
return a.path < b.path ? -1 : 1;
|
|
3118
|
-
});
|
|
3119
|
-
return {
|
|
3120
|
-
cwd,
|
|
3121
|
-
files,
|
|
3122
|
-
error: null,
|
|
3123
|
-
};
|
|
3124
|
-
}
|
|
3125
|
-
catch (error) {
|
|
3126
|
-
return {
|
|
3127
|
-
cwd,
|
|
3128
|
-
files: [],
|
|
3129
|
-
error: this.toCheckoutError(error),
|
|
3130
|
-
};
|
|
3131
|
-
}
|
|
3132
|
-
}
|
|
3133
|
-
async refreshCheckoutDiffTarget(target) {
|
|
3134
|
-
if (target.refreshPromise) {
|
|
3135
|
-
target.refreshQueued = true;
|
|
3136
|
-
return;
|
|
3137
|
-
}
|
|
3138
|
-
target.refreshPromise = (async () => {
|
|
3139
|
-
do {
|
|
3140
|
-
target.refreshQueued = false;
|
|
3141
|
-
const snapshot = await this.computeCheckoutDiffSnapshot(target.cwd, target.compare, {
|
|
3142
|
-
diffCwd: target.diffCwd,
|
|
3143
|
-
});
|
|
3144
|
-
target.latestPayload = snapshot;
|
|
3145
|
-
const fingerprint = this.checkoutDiffSnapshotFingerprint(snapshot);
|
|
3146
|
-
if (fingerprint !== target.latestFingerprint) {
|
|
3147
|
-
target.latestFingerprint = fingerprint;
|
|
3148
|
-
this.emitCheckoutDiffUpdate(target, snapshot);
|
|
3149
|
-
}
|
|
3150
|
-
} while (target.refreshQueued);
|
|
3151
|
-
})();
|
|
3152
|
-
try {
|
|
3153
|
-
await target.refreshPromise;
|
|
3154
|
-
}
|
|
3155
|
-
finally {
|
|
3156
|
-
target.refreshPromise = null;
|
|
3157
|
-
}
|
|
3158
|
-
}
|
|
3159
|
-
async ensureCheckoutDiffWatchTarget(cwd, compare) {
|
|
3160
|
-
const targetKey = this.buildCheckoutDiffTargetKey(cwd, compare);
|
|
3161
|
-
const existing = this.checkoutDiffTargets.get(targetKey);
|
|
3162
|
-
if (existing) {
|
|
3163
|
-
return existing;
|
|
3164
|
-
}
|
|
3165
|
-
const watchRoot = await this.resolveCheckoutWatchRoot(cwd);
|
|
3166
|
-
const target = {
|
|
3167
|
-
key: targetKey,
|
|
3168
|
-
cwd,
|
|
3169
|
-
diffCwd: watchRoot ?? cwd,
|
|
3170
|
-
compare,
|
|
3171
|
-
subscriptions: new Set(),
|
|
3172
|
-
watchers: [],
|
|
3173
|
-
fallbackRefreshInterval: null,
|
|
3174
|
-
debounceTimer: null,
|
|
3175
|
-
refreshPromise: null,
|
|
3176
|
-
refreshQueued: false,
|
|
3177
|
-
latestPayload: null,
|
|
3178
|
-
latestFingerprint: null,
|
|
3179
|
-
};
|
|
3180
|
-
const repoWatchPath = watchRoot ?? cwd;
|
|
3181
|
-
const watchPaths = new Set([repoWatchPath]);
|
|
3182
|
-
const gitDir = await this.resolveCheckoutGitDir(cwd);
|
|
3183
|
-
if (gitDir) {
|
|
3184
|
-
watchPaths.add(gitDir);
|
|
3185
|
-
}
|
|
3186
|
-
let hasRecursiveRepoCoverage = false;
|
|
3187
|
-
const allowRecursiveRepoWatch = process.platform !== "linux";
|
|
3188
|
-
for (const watchPath of watchPaths) {
|
|
3189
|
-
const shouldTryRecursive = watchPath === repoWatchPath && allowRecursiveRepoWatch;
|
|
3190
|
-
const createWatcher = (recursive) => watch(watchPath, { recursive }, () => {
|
|
3191
|
-
this.scheduleCheckoutDiffTargetRefresh(target);
|
|
3192
|
-
});
|
|
3193
|
-
let watcher = null;
|
|
3194
|
-
let watcherIsRecursive = false;
|
|
3195
|
-
try {
|
|
3196
|
-
if (shouldTryRecursive) {
|
|
3197
|
-
watcher = createWatcher(true);
|
|
3198
|
-
watcherIsRecursive = true;
|
|
3199
|
-
}
|
|
3200
|
-
else {
|
|
3201
|
-
watcher = createWatcher(false);
|
|
3202
|
-
}
|
|
3203
|
-
}
|
|
3204
|
-
catch (error) {
|
|
3205
|
-
if (shouldTryRecursive) {
|
|
3206
|
-
try {
|
|
3207
|
-
watcher = createWatcher(false);
|
|
3208
|
-
this.sessionLogger.warn({ err: error, watchPath, cwd, compare }, "Checkout diff recursive watch unavailable; using non-recursive fallback");
|
|
3209
|
-
}
|
|
3210
|
-
catch (fallbackError) {
|
|
3211
|
-
this.sessionLogger.warn({ err: fallbackError, watchPath, cwd, compare }, "Failed to start checkout diff watcher");
|
|
3212
|
-
}
|
|
3213
|
-
}
|
|
3214
|
-
else {
|
|
3215
|
-
this.sessionLogger.warn({ err: error, watchPath, cwd, compare }, "Failed to start checkout diff watcher");
|
|
3216
|
-
}
|
|
3217
|
-
}
|
|
3218
|
-
if (!watcher) {
|
|
3219
|
-
continue;
|
|
3220
|
-
}
|
|
3221
|
-
watcher.on("error", (error) => {
|
|
3222
|
-
this.sessionLogger.warn({ err: error, watchPath, cwd, compare }, "Checkout diff watcher error");
|
|
3223
|
-
});
|
|
3224
|
-
target.watchers.push(watcher);
|
|
3225
|
-
if (watchPath === repoWatchPath && watcherIsRecursive) {
|
|
3226
|
-
hasRecursiveRepoCoverage = true;
|
|
3227
|
-
}
|
|
3228
|
-
}
|
|
3229
|
-
const missingRepoCoverage = !hasRecursiveRepoCoverage;
|
|
3230
|
-
if (target.watchers.length === 0 || missingRepoCoverage) {
|
|
3231
|
-
target.fallbackRefreshInterval = setInterval(() => {
|
|
3232
|
-
this.scheduleCheckoutDiffTargetRefresh(target);
|
|
3233
|
-
}, CHECKOUT_DIFF_FALLBACK_REFRESH_MS);
|
|
3234
|
-
this.sessionLogger.warn({
|
|
3235
|
-
cwd,
|
|
3236
|
-
compare,
|
|
3237
|
-
intervalMs: CHECKOUT_DIFF_FALLBACK_REFRESH_MS,
|
|
3238
|
-
reason: target.watchers.length === 0 ? "no_watchers" : "missing_recursive_repo_root_coverage",
|
|
3239
|
-
}, "Checkout diff watchers unavailable; using timed refresh fallback");
|
|
3046
|
+
this.workspaceGitWatchTargets.set(workspaceId, target);
|
|
3047
|
+
}
|
|
3048
|
+
async syncWorkspaceGitWatchTarget(cwd, options) {
|
|
3049
|
+
if (!options.isGit) {
|
|
3050
|
+
this.removeWorkspaceGitWatchTarget(cwd);
|
|
3051
|
+
return;
|
|
3240
3052
|
}
|
|
3241
|
-
this.
|
|
3242
|
-
return target;
|
|
3053
|
+
await this.ensureWorkspaceGitWatchTarget(cwd);
|
|
3243
3054
|
}
|
|
3244
3055
|
async handleSubscribeCheckoutDiffRequest(msg) {
|
|
3245
3056
|
const cwd = expandTilde(msg.cwd);
|
|
3246
|
-
|
|
3247
|
-
this.
|
|
3248
|
-
const
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3057
|
+
this.checkoutDiffSubscriptions.get(msg.subscriptionId)?.();
|
|
3058
|
+
this.checkoutDiffSubscriptions.delete(msg.subscriptionId);
|
|
3059
|
+
const subscription = await this.checkoutDiffManager.subscribe({ cwd, compare: msg.compare }, (snapshot) => {
|
|
3060
|
+
this.emit({
|
|
3061
|
+
type: "checkout_diff_update",
|
|
3062
|
+
payload: {
|
|
3063
|
+
subscriptionId: msg.subscriptionId,
|
|
3064
|
+
...snapshot,
|
|
3065
|
+
},
|
|
3066
|
+
});
|
|
3252
3067
|
});
|
|
3253
|
-
|
|
3254
|
-
(await this.computeCheckoutDiffSnapshot(cwd, compare, {
|
|
3255
|
-
diffCwd: target.diffCwd,
|
|
3256
|
-
}));
|
|
3257
|
-
target.latestPayload = snapshot;
|
|
3258
|
-
target.latestFingerprint = this.checkoutDiffSnapshotFingerprint(snapshot);
|
|
3068
|
+
this.checkoutDiffSubscriptions.set(msg.subscriptionId, subscription.unsubscribe);
|
|
3259
3069
|
this.emit({
|
|
3260
3070
|
type: "subscribe_checkout_diff_response",
|
|
3261
3071
|
payload: {
|
|
3262
3072
|
subscriptionId: msg.subscriptionId,
|
|
3263
|
-
...
|
|
3073
|
+
...subscription.initial,
|
|
3264
3074
|
requestId: msg.requestId,
|
|
3265
3075
|
},
|
|
3266
3076
|
});
|
|
3267
3077
|
}
|
|
3268
3078
|
handleUnsubscribeCheckoutDiffRequest(msg) {
|
|
3269
|
-
this.
|
|
3270
|
-
|
|
3271
|
-
scheduleCheckoutDiffRefreshForCwd(cwd) {
|
|
3272
|
-
const resolvedCwd = expandTilde(cwd);
|
|
3273
|
-
for (const target of this.checkoutDiffTargets.values()) {
|
|
3274
|
-
if (target.cwd !== resolvedCwd && target.diffCwd !== resolvedCwd) {
|
|
3275
|
-
continue;
|
|
3276
|
-
}
|
|
3277
|
-
this.scheduleCheckoutDiffTargetRefresh(target);
|
|
3278
|
-
}
|
|
3079
|
+
this.checkoutDiffSubscriptions.get(msg.subscriptionId)?.();
|
|
3080
|
+
this.checkoutDiffSubscriptions.delete(msg.subscriptionId);
|
|
3279
3081
|
}
|
|
3280
3082
|
async handleCheckoutCommitRequest(msg) {
|
|
3281
3083
|
const { cwd, requestId } = msg;
|
|
@@ -3291,7 +3093,7 @@ export class Session {
|
|
|
3291
3093
|
message,
|
|
3292
3094
|
addAll: msg.addAll ?? true,
|
|
3293
3095
|
});
|
|
3294
|
-
this.
|
|
3096
|
+
this.checkoutDiffManager.scheduleRefreshForCwd(cwd);
|
|
3295
3097
|
this.emit({
|
|
3296
3098
|
type: "checkout_commit_response",
|
|
3297
3099
|
payload: {
|
|
@@ -3308,7 +3110,7 @@ export class Session {
|
|
|
3308
3110
|
payload: {
|
|
3309
3111
|
cwd,
|
|
3310
3112
|
success: false,
|
|
3311
|
-
error:
|
|
3113
|
+
error: toCheckoutError(error),
|
|
3312
3114
|
requestId,
|
|
3313
3115
|
},
|
|
3314
3116
|
});
|
|
@@ -3354,7 +3156,7 @@ export class Session {
|
|
|
3354
3156
|
baseRef,
|
|
3355
3157
|
mode: msg.strategy === "squash" ? "squash" : "merge",
|
|
3356
3158
|
}, { paseoHome: this.paseoHome });
|
|
3357
|
-
this.
|
|
3159
|
+
this.checkoutDiffManager.scheduleRefreshForCwd(cwd);
|
|
3358
3160
|
this.emit({
|
|
3359
3161
|
type: "checkout_merge_response",
|
|
3360
3162
|
payload: {
|
|
@@ -3371,7 +3173,7 @@ export class Session {
|
|
|
3371
3173
|
payload: {
|
|
3372
3174
|
cwd,
|
|
3373
3175
|
success: false,
|
|
3374
|
-
error:
|
|
3176
|
+
error: toCheckoutError(error),
|
|
3375
3177
|
requestId,
|
|
3376
3178
|
},
|
|
3377
3179
|
});
|
|
@@ -3393,7 +3195,7 @@ export class Session {
|
|
|
3393
3195
|
baseRef: msg.baseRef,
|
|
3394
3196
|
requireCleanTarget: msg.requireCleanTarget ?? true,
|
|
3395
3197
|
});
|
|
3396
|
-
this.
|
|
3198
|
+
this.checkoutDiffManager.scheduleRefreshForCwd(cwd);
|
|
3397
3199
|
this.emit({
|
|
3398
3200
|
type: "checkout_merge_from_base_response",
|
|
3399
3201
|
payload: {
|
|
@@ -3410,7 +3212,7 @@ export class Session {
|
|
|
3410
3212
|
payload: {
|
|
3411
3213
|
cwd,
|
|
3412
3214
|
success: false,
|
|
3413
|
-
error:
|
|
3215
|
+
error: toCheckoutError(error),
|
|
3414
3216
|
requestId,
|
|
3415
3217
|
},
|
|
3416
3218
|
});
|
|
@@ -3436,7 +3238,7 @@ export class Session {
|
|
|
3436
3238
|
payload: {
|
|
3437
3239
|
cwd,
|
|
3438
3240
|
success: false,
|
|
3439
|
-
error:
|
|
3241
|
+
error: toCheckoutError(error),
|
|
3440
3242
|
requestId,
|
|
3441
3243
|
},
|
|
3442
3244
|
});
|
|
@@ -3477,7 +3279,7 @@ export class Session {
|
|
|
3477
3279
|
cwd,
|
|
3478
3280
|
url: null,
|
|
3479
3281
|
number: null,
|
|
3480
|
-
error:
|
|
3282
|
+
error: toCheckoutError(error),
|
|
3481
3283
|
requestId,
|
|
3482
3284
|
},
|
|
3483
3285
|
});
|
|
@@ -3505,7 +3307,7 @@ export class Session {
|
|
|
3505
3307
|
cwd,
|
|
3506
3308
|
status: null,
|
|
3507
3309
|
githubFeaturesEnabled: true,
|
|
3508
|
-
error:
|
|
3310
|
+
error: toCheckoutError(error),
|
|
3509
3311
|
requestId,
|
|
3510
3312
|
},
|
|
3511
3313
|
});
|
|
@@ -3546,7 +3348,7 @@ export class Session {
|
|
|
3546
3348
|
type: "paseo_worktree_list_response",
|
|
3547
3349
|
payload: {
|
|
3548
3350
|
worktrees: [],
|
|
3549
|
-
error:
|
|
3351
|
+
error: toCheckoutError(error),
|
|
3550
3352
|
requestId,
|
|
3551
3353
|
},
|
|
3552
3354
|
});
|
|
@@ -3677,7 +3479,7 @@ export class Session {
|
|
|
3677
3479
|
payload: {
|
|
3678
3480
|
success: false,
|
|
3679
3481
|
removedAgents: [],
|
|
3680
|
-
error:
|
|
3482
|
+
error: toCheckoutError(error),
|
|
3681
3483
|
requestId,
|
|
3682
3484
|
},
|
|
3683
3485
|
});
|
|
@@ -5639,7 +5441,7 @@ export class Session {
|
|
|
5639
5441
|
* Emit a message to the client
|
|
5640
5442
|
*/
|
|
5641
5443
|
emit(msg) {
|
|
5642
|
-
this.sessionLogger.trace({
|
|
5444
|
+
this.sessionLogger.trace({ messageType: msg.type, payloadBytes: JSON.stringify(msg).length }, "outbound message");
|
|
5643
5445
|
if (msg.type === "audio_output" &&
|
|
5644
5446
|
(process.env.TTS_DEBUG_AUDIO_DIR || isPaseoDictationDebugEnabled()) &&
|
|
5645
5447
|
msg.payload.groupId &&
|
|
@@ -5735,10 +5537,9 @@ export class Session {
|
|
|
5735
5537
|
}
|
|
5736
5538
|
this.terminalExitSubscriptions.clear();
|
|
5737
5539
|
this.disposeTerminalSubscriptions();
|
|
5738
|
-
for (const
|
|
5739
|
-
|
|
5540
|
+
for (const unsubscribe of this.checkoutDiffSubscriptions.values()) {
|
|
5541
|
+
unsubscribe();
|
|
5740
5542
|
}
|
|
5741
|
-
this.checkoutDiffTargets.clear();
|
|
5742
5543
|
this.checkoutDiffSubscriptions.clear();
|
|
5743
5544
|
for (const target of this.workspaceGitWatchTargets.values()) {
|
|
5744
5545
|
this.closeWorkspaceGitWatchTarget(target);
|
|
@@ -5765,6 +5566,416 @@ export class Session {
|
|
|
5765
5566
|
}
|
|
5766
5567
|
this.detachTerminalStream(terminalId, { emitExit: true });
|
|
5767
5568
|
}
|
|
5569
|
+
emitChatRpcError(request, error) {
|
|
5570
|
+
const message = error instanceof Error ? error.message : "Chat request failed";
|
|
5571
|
+
const code = error instanceof ChatServiceError ? error.code : "chat_request_failed";
|
|
5572
|
+
this.sessionLogger.error({ err: error, requestType: request.type }, "Chat request failed");
|
|
5573
|
+
this.emit({
|
|
5574
|
+
type: "rpc_error",
|
|
5575
|
+
payload: {
|
|
5576
|
+
requestId: request.requestId,
|
|
5577
|
+
requestType: request.type,
|
|
5578
|
+
error: message,
|
|
5579
|
+
code,
|
|
5580
|
+
},
|
|
5581
|
+
});
|
|
5582
|
+
}
|
|
5583
|
+
async handleChatCreateRequest(request) {
|
|
5584
|
+
try {
|
|
5585
|
+
const room = await this.chatService.createRoom({
|
|
5586
|
+
name: request.name,
|
|
5587
|
+
purpose: request.purpose,
|
|
5588
|
+
});
|
|
5589
|
+
this.emit({
|
|
5590
|
+
type: "chat/create/response",
|
|
5591
|
+
payload: {
|
|
5592
|
+
requestId: request.requestId,
|
|
5593
|
+
room,
|
|
5594
|
+
error: null,
|
|
5595
|
+
},
|
|
5596
|
+
});
|
|
5597
|
+
}
|
|
5598
|
+
catch (error) {
|
|
5599
|
+
this.emitChatRpcError(request, error);
|
|
5600
|
+
}
|
|
5601
|
+
}
|
|
5602
|
+
async handleChatListRequest(request) {
|
|
5603
|
+
try {
|
|
5604
|
+
const rooms = await this.chatService.listRooms();
|
|
5605
|
+
this.emit({
|
|
5606
|
+
type: "chat/list/response",
|
|
5607
|
+
payload: {
|
|
5608
|
+
requestId: request.requestId,
|
|
5609
|
+
rooms,
|
|
5610
|
+
error: null,
|
|
5611
|
+
},
|
|
5612
|
+
});
|
|
5613
|
+
}
|
|
5614
|
+
catch (error) {
|
|
5615
|
+
this.emitChatRpcError(request, error);
|
|
5616
|
+
}
|
|
5617
|
+
}
|
|
5618
|
+
async handleChatInspectRequest(request) {
|
|
5619
|
+
try {
|
|
5620
|
+
const result = await this.chatService.inspectRoom({
|
|
5621
|
+
room: request.room,
|
|
5622
|
+
});
|
|
5623
|
+
this.emit({
|
|
5624
|
+
type: "chat/inspect/response",
|
|
5625
|
+
payload: {
|
|
5626
|
+
requestId: request.requestId,
|
|
5627
|
+
room: result.room,
|
|
5628
|
+
error: null,
|
|
5629
|
+
},
|
|
5630
|
+
});
|
|
5631
|
+
}
|
|
5632
|
+
catch (error) {
|
|
5633
|
+
this.emitChatRpcError(request, error);
|
|
5634
|
+
}
|
|
5635
|
+
}
|
|
5636
|
+
async handleChatDeleteRequest(request) {
|
|
5637
|
+
try {
|
|
5638
|
+
const result = await this.chatService.deleteRoom({
|
|
5639
|
+
room: request.room,
|
|
5640
|
+
});
|
|
5641
|
+
this.emit({
|
|
5642
|
+
type: "chat/delete/response",
|
|
5643
|
+
payload: {
|
|
5644
|
+
requestId: request.requestId,
|
|
5645
|
+
room: result.room,
|
|
5646
|
+
error: null,
|
|
5647
|
+
},
|
|
5648
|
+
});
|
|
5649
|
+
}
|
|
5650
|
+
catch (error) {
|
|
5651
|
+
this.emitChatRpcError(request, error);
|
|
5652
|
+
}
|
|
5653
|
+
}
|
|
5654
|
+
async handleChatPostRequest(request) {
|
|
5655
|
+
try {
|
|
5656
|
+
const authorAgentId = request.authorAgentId?.trim() || this.clientId;
|
|
5657
|
+
const message = await this.chatService.postMessage({
|
|
5658
|
+
room: request.room,
|
|
5659
|
+
authorAgentId,
|
|
5660
|
+
body: request.body,
|
|
5661
|
+
replyToMessageId: request.replyToMessageId,
|
|
5662
|
+
});
|
|
5663
|
+
this.emit({
|
|
5664
|
+
type: "chat/post/response",
|
|
5665
|
+
payload: {
|
|
5666
|
+
requestId: request.requestId,
|
|
5667
|
+
message,
|
|
5668
|
+
error: null,
|
|
5669
|
+
},
|
|
5670
|
+
});
|
|
5671
|
+
void notifyChatMentions({
|
|
5672
|
+
room: request.room,
|
|
5673
|
+
authorAgentId,
|
|
5674
|
+
body: request.body,
|
|
5675
|
+
mentionAgentIds: message.mentionAgentIds,
|
|
5676
|
+
logger: this.sessionLogger,
|
|
5677
|
+
listStoredAgents: () => this.agentStorage.list(),
|
|
5678
|
+
listLiveAgents: () => this.agentManager.listAgents(),
|
|
5679
|
+
resolveAgentIdentifier: (identifier) => this.resolveAgentIdentifier(identifier),
|
|
5680
|
+
sendAgentMessage: (agentId, text) => this.handleSendAgentMessage(agentId, text),
|
|
5681
|
+
});
|
|
5682
|
+
}
|
|
5683
|
+
catch (error) {
|
|
5684
|
+
this.emitChatRpcError(request, error);
|
|
5685
|
+
}
|
|
5686
|
+
}
|
|
5687
|
+
async handleChatReadRequest(request) {
|
|
5688
|
+
try {
|
|
5689
|
+
const messages = await this.chatService.readMessages({
|
|
5690
|
+
room: request.room,
|
|
5691
|
+
limit: request.limit,
|
|
5692
|
+
since: request.since,
|
|
5693
|
+
authorAgentId: request.authorAgentId,
|
|
5694
|
+
});
|
|
5695
|
+
this.emit({
|
|
5696
|
+
type: "chat/read/response",
|
|
5697
|
+
payload: {
|
|
5698
|
+
requestId: request.requestId,
|
|
5699
|
+
messages,
|
|
5700
|
+
error: null,
|
|
5701
|
+
},
|
|
5702
|
+
});
|
|
5703
|
+
}
|
|
5704
|
+
catch (error) {
|
|
5705
|
+
this.emitChatRpcError(request, error);
|
|
5706
|
+
}
|
|
5707
|
+
}
|
|
5708
|
+
async handleChatWaitRequest(request) {
|
|
5709
|
+
try {
|
|
5710
|
+
const messages = await this.chatService.waitForMessages({
|
|
5711
|
+
room: request.room,
|
|
5712
|
+
afterMessageId: request.afterMessageId,
|
|
5713
|
+
timeoutMs: request.timeoutMs,
|
|
5714
|
+
});
|
|
5715
|
+
this.emit({
|
|
5716
|
+
type: "chat/wait/response",
|
|
5717
|
+
payload: {
|
|
5718
|
+
requestId: request.requestId,
|
|
5719
|
+
messages,
|
|
5720
|
+
timedOut: messages.length === 0,
|
|
5721
|
+
error: null,
|
|
5722
|
+
},
|
|
5723
|
+
});
|
|
5724
|
+
}
|
|
5725
|
+
catch (error) {
|
|
5726
|
+
this.emitChatRpcError(request, error);
|
|
5727
|
+
}
|
|
5728
|
+
}
|
|
5729
|
+
toScheduleSummary(schedule) {
|
|
5730
|
+
const { runs: _runs, ...summary } = schedule;
|
|
5731
|
+
return summary;
|
|
5732
|
+
}
|
|
5733
|
+
emitScheduleRpcError(request, error) {
|
|
5734
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
5735
|
+
this.sessionLogger.error({ err: error, requestType: request.type }, "Schedule request failed");
|
|
5736
|
+
this.emit({
|
|
5737
|
+
type: "rpc_error",
|
|
5738
|
+
payload: {
|
|
5739
|
+
requestId: request.requestId,
|
|
5740
|
+
requestType: request.type,
|
|
5741
|
+
error: message,
|
|
5742
|
+
code: "schedule_request_failed",
|
|
5743
|
+
},
|
|
5744
|
+
});
|
|
5745
|
+
}
|
|
5746
|
+
async handleScheduleCreateRequest(request) {
|
|
5747
|
+
try {
|
|
5748
|
+
const target = request.target.type === "self"
|
|
5749
|
+
? { type: "agent", agentId: request.target.agentId }
|
|
5750
|
+
: request.target;
|
|
5751
|
+
const schedule = await this.scheduleService.create({
|
|
5752
|
+
prompt: request.prompt,
|
|
5753
|
+
name: request.name,
|
|
5754
|
+
cadence: request.cadence,
|
|
5755
|
+
target,
|
|
5756
|
+
maxRuns: request.maxRuns,
|
|
5757
|
+
expiresAt: request.expiresAt,
|
|
5758
|
+
});
|
|
5759
|
+
this.emit({
|
|
5760
|
+
type: "schedule/create/response",
|
|
5761
|
+
payload: {
|
|
5762
|
+
requestId: request.requestId,
|
|
5763
|
+
schedule: this.toScheduleSummary(schedule),
|
|
5764
|
+
error: null,
|
|
5765
|
+
},
|
|
5766
|
+
});
|
|
5767
|
+
}
|
|
5768
|
+
catch (error) {
|
|
5769
|
+
this.emitScheduleRpcError(request, error);
|
|
5770
|
+
}
|
|
5771
|
+
}
|
|
5772
|
+
async handleScheduleListRequest(request) {
|
|
5773
|
+
try {
|
|
5774
|
+
const schedules = await this.scheduleService.list();
|
|
5775
|
+
this.emit({
|
|
5776
|
+
type: "schedule/list/response",
|
|
5777
|
+
payload: {
|
|
5778
|
+
requestId: request.requestId,
|
|
5779
|
+
schedules: schedules.map((schedule) => this.toScheduleSummary(schedule)),
|
|
5780
|
+
error: null,
|
|
5781
|
+
},
|
|
5782
|
+
});
|
|
5783
|
+
}
|
|
5784
|
+
catch (error) {
|
|
5785
|
+
this.emitScheduleRpcError(request, error);
|
|
5786
|
+
}
|
|
5787
|
+
}
|
|
5788
|
+
async handleScheduleInspectRequest(request) {
|
|
5789
|
+
try {
|
|
5790
|
+
const schedule = await this.scheduleService.inspect(request.scheduleId);
|
|
5791
|
+
this.emit({
|
|
5792
|
+
type: "schedule/inspect/response",
|
|
5793
|
+
payload: {
|
|
5794
|
+
requestId: request.requestId,
|
|
5795
|
+
schedule,
|
|
5796
|
+
error: null,
|
|
5797
|
+
},
|
|
5798
|
+
});
|
|
5799
|
+
}
|
|
5800
|
+
catch (error) {
|
|
5801
|
+
this.emitScheduleRpcError(request, error);
|
|
5802
|
+
}
|
|
5803
|
+
}
|
|
5804
|
+
async handleScheduleLogsRequest(request) {
|
|
5805
|
+
try {
|
|
5806
|
+
const runs = await this.scheduleService.logs(request.scheduleId);
|
|
5807
|
+
this.emit({
|
|
5808
|
+
type: "schedule/logs/response",
|
|
5809
|
+
payload: {
|
|
5810
|
+
requestId: request.requestId,
|
|
5811
|
+
runs,
|
|
5812
|
+
error: null,
|
|
5813
|
+
},
|
|
5814
|
+
});
|
|
5815
|
+
}
|
|
5816
|
+
catch (error) {
|
|
5817
|
+
this.emitScheduleRpcError(request, error);
|
|
5818
|
+
}
|
|
5819
|
+
}
|
|
5820
|
+
async handleSchedulePauseRequest(request) {
|
|
5821
|
+
try {
|
|
5822
|
+
const schedule = await this.scheduleService.pause(request.scheduleId);
|
|
5823
|
+
this.emit({
|
|
5824
|
+
type: "schedule/pause/response",
|
|
5825
|
+
payload: {
|
|
5826
|
+
requestId: request.requestId,
|
|
5827
|
+
schedule: this.toScheduleSummary(schedule),
|
|
5828
|
+
error: null,
|
|
5829
|
+
},
|
|
5830
|
+
});
|
|
5831
|
+
}
|
|
5832
|
+
catch (error) {
|
|
5833
|
+
this.emitScheduleRpcError(request, error);
|
|
5834
|
+
}
|
|
5835
|
+
}
|
|
5836
|
+
async handleScheduleResumeRequest(request) {
|
|
5837
|
+
try {
|
|
5838
|
+
const schedule = await this.scheduleService.resume(request.scheduleId);
|
|
5839
|
+
this.emit({
|
|
5840
|
+
type: "schedule/resume/response",
|
|
5841
|
+
payload: {
|
|
5842
|
+
requestId: request.requestId,
|
|
5843
|
+
schedule: this.toScheduleSummary(schedule),
|
|
5844
|
+
error: null,
|
|
5845
|
+
},
|
|
5846
|
+
});
|
|
5847
|
+
}
|
|
5848
|
+
catch (error) {
|
|
5849
|
+
this.emitScheduleRpcError(request, error);
|
|
5850
|
+
}
|
|
5851
|
+
}
|
|
5852
|
+
async handleScheduleDeleteRequest(request) {
|
|
5853
|
+
try {
|
|
5854
|
+
await this.scheduleService.delete(request.scheduleId);
|
|
5855
|
+
this.emit({
|
|
5856
|
+
type: "schedule/delete/response",
|
|
5857
|
+
payload: {
|
|
5858
|
+
requestId: request.requestId,
|
|
5859
|
+
scheduleId: request.scheduleId,
|
|
5860
|
+
error: null,
|
|
5861
|
+
},
|
|
5862
|
+
});
|
|
5863
|
+
}
|
|
5864
|
+
catch (error) {
|
|
5865
|
+
this.emitScheduleRpcError(request, error);
|
|
5866
|
+
}
|
|
5867
|
+
}
|
|
5868
|
+
emitLoopRpcError(request, error) {
|
|
5869
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
5870
|
+
this.sessionLogger.error({ err: error, requestType: request.type }, "Loop request failed");
|
|
5871
|
+
this.emit({
|
|
5872
|
+
type: "rpc_error",
|
|
5873
|
+
payload: {
|
|
5874
|
+
requestId: request.requestId,
|
|
5875
|
+
requestType: request.type,
|
|
5876
|
+
error: message,
|
|
5877
|
+
code: "loop_request_failed",
|
|
5878
|
+
},
|
|
5879
|
+
});
|
|
5880
|
+
}
|
|
5881
|
+
async handleLoopRunRequest(request) {
|
|
5882
|
+
try {
|
|
5883
|
+
const loop = await this.loopService.runLoop({
|
|
5884
|
+
prompt: request.prompt,
|
|
5885
|
+
cwd: request.cwd,
|
|
5886
|
+
provider: request.provider,
|
|
5887
|
+
model: request.model,
|
|
5888
|
+
workerProvider: request.workerProvider,
|
|
5889
|
+
workerModel: request.workerModel,
|
|
5890
|
+
verifierProvider: request.verifierProvider,
|
|
5891
|
+
verifierModel: request.verifierModel,
|
|
5892
|
+
verifyPrompt: request.verifyPrompt,
|
|
5893
|
+
verifyChecks: request.verifyChecks,
|
|
5894
|
+
archive: request.archive,
|
|
5895
|
+
name: request.name,
|
|
5896
|
+
sleepMs: request.sleepMs,
|
|
5897
|
+
maxIterations: request.maxIterations,
|
|
5898
|
+
maxTimeMs: request.maxTimeMs,
|
|
5899
|
+
});
|
|
5900
|
+
this.emit({
|
|
5901
|
+
type: "loop/run/response",
|
|
5902
|
+
payload: {
|
|
5903
|
+
requestId: request.requestId,
|
|
5904
|
+
loop,
|
|
5905
|
+
error: null,
|
|
5906
|
+
},
|
|
5907
|
+
});
|
|
5908
|
+
}
|
|
5909
|
+
catch (error) {
|
|
5910
|
+
this.emitLoopRpcError(request, error);
|
|
5911
|
+
}
|
|
5912
|
+
}
|
|
5913
|
+
async handleLoopListRequest(request) {
|
|
5914
|
+
try {
|
|
5915
|
+
const loops = await this.loopService.listLoops();
|
|
5916
|
+
this.emit({
|
|
5917
|
+
type: "loop/list/response",
|
|
5918
|
+
payload: {
|
|
5919
|
+
requestId: request.requestId,
|
|
5920
|
+
loops,
|
|
5921
|
+
error: null,
|
|
5922
|
+
},
|
|
5923
|
+
});
|
|
5924
|
+
}
|
|
5925
|
+
catch (error) {
|
|
5926
|
+
this.emitLoopRpcError(request, error);
|
|
5927
|
+
}
|
|
5928
|
+
}
|
|
5929
|
+
async handleLoopInspectRequest(request) {
|
|
5930
|
+
try {
|
|
5931
|
+
const loop = await this.loopService.inspectLoop(request.id);
|
|
5932
|
+
this.emit({
|
|
5933
|
+
type: "loop/inspect/response",
|
|
5934
|
+
payload: {
|
|
5935
|
+
requestId: request.requestId,
|
|
5936
|
+
loop,
|
|
5937
|
+
error: null,
|
|
5938
|
+
},
|
|
5939
|
+
});
|
|
5940
|
+
}
|
|
5941
|
+
catch (error) {
|
|
5942
|
+
this.emitLoopRpcError(request, error);
|
|
5943
|
+
}
|
|
5944
|
+
}
|
|
5945
|
+
async handleLoopLogsRequest(request) {
|
|
5946
|
+
try {
|
|
5947
|
+
const result = await this.loopService.getLoopLogs(request.id, request.afterSeq ?? 0);
|
|
5948
|
+
this.emit({
|
|
5949
|
+
type: "loop/logs/response",
|
|
5950
|
+
payload: {
|
|
5951
|
+
requestId: request.requestId,
|
|
5952
|
+
loop: result.loop,
|
|
5953
|
+
entries: result.entries,
|
|
5954
|
+
nextCursor: result.nextCursor,
|
|
5955
|
+
error: null,
|
|
5956
|
+
},
|
|
5957
|
+
});
|
|
5958
|
+
}
|
|
5959
|
+
catch (error) {
|
|
5960
|
+
this.emitLoopRpcError(request, error);
|
|
5961
|
+
}
|
|
5962
|
+
}
|
|
5963
|
+
async handleLoopStopRequest(request) {
|
|
5964
|
+
try {
|
|
5965
|
+
const loop = await this.loopService.stopLoop(request.id);
|
|
5966
|
+
this.emit({
|
|
5967
|
+
type: "loop/stop/response",
|
|
5968
|
+
payload: {
|
|
5969
|
+
requestId: request.requestId,
|
|
5970
|
+
loop,
|
|
5971
|
+
error: null,
|
|
5972
|
+
},
|
|
5973
|
+
});
|
|
5974
|
+
}
|
|
5975
|
+
catch (error) {
|
|
5976
|
+
this.emitLoopRpcError(request, error);
|
|
5977
|
+
}
|
|
5978
|
+
}
|
|
5768
5979
|
emitTerminalsChangedSnapshot(input) {
|
|
5769
5980
|
this.emit({
|
|
5770
5981
|
type: "terminals_changed",
|