@getpaseo/server 0.1.2
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/.env.example +20 -0
- package/README.md +107 -0
- package/agent-prompt.md +339 -0
- package/dist/scripts/daemon-runner.js +32 -0
- package/dist/scripts/daemon-runner.js.map +1 -0
- package/dist/scripts/dev-runner.js +19 -0
- package/dist/scripts/dev-runner.js.map +1 -0
- package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
- package/dist/scripts/supervisor.js +95 -0
- package/dist/scripts/supervisor.js.map +1 -0
- package/dist/server/client/daemon-client.d.ts +383 -0
- package/dist/server/client/daemon-client.d.ts.map +1 -0
- package/dist/server/client/daemon-client.js +2443 -0
- package/dist/server/client/daemon-client.js.map +1 -0
- package/dist/server/server/agent/activity-curator.d.ts +8 -0
- package/dist/server/server/agent/activity-curator.d.ts.map +1 -0
- package/dist/server/server/agent/activity-curator.js +228 -0
- package/dist/server/server/agent/activity-curator.js.map +1 -0
- package/dist/server/server/agent/agent-management-mcp.d.ts +34 -0
- package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -0
- package/dist/server/server/agent/agent-management-mcp.js +619 -0
- package/dist/server/server/agent/agent-management-mcp.js.map +1 -0
- package/dist/server/server/agent/agent-manager.d.ts +182 -0
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -0
- package/dist/server/server/agent/agent-manager.js +1066 -0
- package/dist/server/server/agent/agent-manager.js.map +1 -0
- package/dist/server/server/agent/agent-metadata-generator.d.ts +29 -0
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -0
- package/dist/server/server/agent/agent-metadata-generator.js +157 -0
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -0
- package/dist/server/server/agent/agent-projections.d.ts +12 -0
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -0
- package/dist/server/server/agent/agent-projections.js +238 -0
- package/dist/server/server/agent/agent-projections.js.map +1 -0
- package/dist/server/server/agent/agent-response-loop.d.ts +32 -0
- package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -0
- package/dist/server/server/agent/agent-response-loop.js +224 -0
- package/dist/server/server/agent/agent-response-loop.js.map +1 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts +360 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -0
- package/dist/server/server/agent/agent-sdk-types.js +2 -0
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -0
- package/dist/server/server/agent/agent-storage.d.ts +187 -0
- package/dist/server/server/agent/agent-storage.d.ts.map +1 -0
- package/dist/server/server/agent/agent-storage.js +328 -0
- package/dist/server/server/agent/agent-storage.js.map +1 -0
- package/dist/server/server/agent/audio-utils.d.ts +3 -0
- package/dist/server/server/agent/audio-utils.d.ts.map +1 -0
- package/dist/server/server/agent/audio-utils.js +19 -0
- package/dist/server/server/agent/audio-utils.js.map +1 -0
- package/dist/server/server/agent/dictation-debug.d.ts +13 -0
- package/dist/server/server/agent/dictation-debug.d.ts.map +1 -0
- package/dist/server/server/agent/dictation-debug.js +50 -0
- package/dist/server/server/agent/dictation-debug.js.map +1 -0
- package/dist/server/server/agent/llm-openai.d.ts +7 -0
- package/dist/server/server/agent/llm-openai.d.ts.map +1 -0
- package/dist/server/server/agent/llm-openai.js +8 -0
- package/dist/server/server/agent/llm-openai.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts +26 -0
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -0
- package/dist/server/server/agent/mcp-server.js +762 -0
- package/dist/server/server/agent/mcp-server.js.map +1 -0
- package/dist/server/server/agent/model-resolver.d.ts +11 -0
- package/dist/server/server/agent/model-resolver.d.ts.map +1 -0
- package/dist/server/server/agent/model-resolver.js +21 -0
- package/dist/server/server/agent/model-resolver.js.map +1 -0
- package/dist/server/server/agent/orchestrator-instructions.d.ts +7 -0
- package/dist/server/server/agent/orchestrator-instructions.d.ts.map +1 -0
- package/dist/server/server/agent/orchestrator-instructions.js +51 -0
- package/dist/server/server/agent/orchestrator-instructions.js.map +1 -0
- package/dist/server/server/agent/orchestrator.d.ts +12 -0
- package/dist/server/server/agent/orchestrator.d.ts.map +1 -0
- package/dist/server/server/agent/orchestrator.js +12 -0
- package/dist/server/server/agent/orchestrator.js.map +1 -0
- package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
- package/dist/server/server/agent/pcm16-resampler.d.ts.map +1 -0
- package/dist/server/server/agent/pcm16-resampler.js +63 -0
- package/dist/server/server/agent/pcm16-resampler.js.map +1 -0
- package/dist/server/server/agent/provider-launch-config.d.ts +139 -0
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -0
- package/dist/server/server/agent/provider-launch-config.js +83 -0
- package/dist/server/server/agent/provider-launch-config.js.map +1 -0
- package/dist/server/server/agent/provider-manifest.d.ts +20 -0
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -0
- package/dist/server/server/agent/provider-manifest.js +97 -0
- package/dist/server/server/agent/provider-manifest.js.map +1 -0
- package/dist/server/server/agent/provider-registry.d.ts +18 -0
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -0
- package/dist/server/server/agent/provider-registry.js +45 -0
- package/dist/server/server/agent/provider-registry.js.map +1 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +42 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +73 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -0
- package/dist/server/server/agent/providers/claude-agent.d.ts +35 -0
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude-agent.js +2056 -0
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +13 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +67 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js.map +1 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +15 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +640 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +34 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js +2476 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -0
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +9 -0
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -0
- package/dist/server/server/agent/providers/codex-rollout-timeline.js +486 -0
- package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +33 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +75 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +37 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/opencode-agent.js +822 -0
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +1363 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +534 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +18 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +119 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -0
- package/dist/server/server/agent/recordings-debug.d.ts +3 -0
- package/dist/server/server/agent/recordings-debug.d.ts.map +1 -0
- package/dist/server/server/agent/recordings-debug.js +19 -0
- package/dist/server/server/agent/recordings-debug.js.map +1 -0
- package/dist/server/server/agent/stt-debug.d.ts +10 -0
- package/dist/server/server/agent/stt-debug.d.ts.map +1 -0
- package/dist/server/server/agent/stt-debug.js +33 -0
- package/dist/server/server/agent/stt-debug.js.map +1 -0
- package/dist/server/server/agent/stt-manager.d.ts +32 -0
- package/dist/server/server/agent/stt-manager.d.ts.map +1 -0
- package/dist/server/server/agent/stt-manager.js +231 -0
- package/dist/server/server/agent/stt-manager.js.map +1 -0
- package/dist/server/server/agent/system-prompt.d.ts +3 -0
- package/dist/server/server/agent/system-prompt.d.ts.map +1 -0
- package/dist/server/server/agent/system-prompt.js +19 -0
- package/dist/server/server/agent/system-prompt.js.map +1 -0
- package/dist/server/server/agent/tool-name-normalization.d.ts +7 -0
- package/dist/server/server/agent/tool-name-normalization.d.ts.map +1 -0
- package/dist/server/server/agent/tool-name-normalization.js +45 -0
- package/dist/server/server/agent/tool-name-normalization.js.map +1 -0
- package/dist/server/server/agent/tts-debug.d.ts +8 -0
- package/dist/server/server/agent/tts-debug.d.ts.map +1 -0
- package/dist/server/server/agent/tts-debug.js +24 -0
- package/dist/server/server/agent/tts-debug.js.map +1 -0
- package/dist/server/server/agent/tts-manager.d.ts +33 -0
- package/dist/server/server/agent/tts-manager.d.ts.map +1 -0
- package/dist/server/server/agent/tts-manager.js +261 -0
- package/dist/server/server/agent/tts-manager.js.map +1 -0
- package/dist/server/server/agent/wait-for-agent-tracker.d.ts +15 -0
- package/dist/server/server/agent/wait-for-agent-tracker.d.ts.map +1 -0
- package/dist/server/server/agent/wait-for-agent-tracker.js +53 -0
- package/dist/server/server/agent/wait-for-agent-tracker.js.map +1 -0
- package/dist/server/server/allowed-hosts.d.ts +13 -0
- package/dist/server/server/allowed-hosts.d.ts.map +1 -0
- package/dist/server/server/allowed-hosts.js +94 -0
- package/dist/server/server/allowed-hosts.js.map +1 -0
- package/dist/server/server/bootstrap.d.ts +49 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -0
- package/dist/server/server/bootstrap.js +483 -0
- package/dist/server/server/bootstrap.js.map +1 -0
- package/dist/server/server/config.d.ts +13 -0
- package/dist/server/server/config.d.ts.map +1 -0
- package/dist/server/server/config.js +84 -0
- package/dist/server/server/config.js.map +1 -0
- package/dist/server/server/connection-offer.d.ts +19 -0
- package/dist/server/server/connection-offer.d.ts.map +1 -0
- package/dist/server/server/connection-offer.js +60 -0
- package/dist/server/server/connection-offer.js.map +1 -0
- package/dist/server/server/daemon-keypair.d.ts +8 -0
- package/dist/server/server/daemon-keypair.d.ts.map +1 -0
- package/dist/server/server/daemon-keypair.js +40 -0
- package/dist/server/server/daemon-keypair.js.map +1 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +76 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -0
- package/dist/server/server/dictation/dictation-stream-manager.js +481 -0
- package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -0
- package/dist/server/server/exports.d.ts +11 -0
- package/dist/server/server/exports.d.ts.map +1 -0
- package/dist/server/server/exports.js +11 -0
- package/dist/server/server/exports.js.map +1 -0
- package/dist/server/server/file-download/token-store.d.ts +25 -0
- package/dist/server/server/file-download/token-store.d.ts.map +1 -0
- package/dist/server/server/file-download/token-store.js +40 -0
- package/dist/server/server/file-download/token-store.js.map +1 -0
- package/dist/server/server/file-explorer/service.d.ts +41 -0
- package/dist/server/server/file-explorer/service.d.ts.map +1 -0
- package/dist/server/server/file-explorer/service.js +163 -0
- package/dist/server/server/file-explorer/service.js.map +1 -0
- package/dist/server/server/index.d.ts +2 -0
- package/dist/server/server/index.d.ts.map +1 -0
- package/dist/server/server/index.js +90 -0
- package/dist/server/server/index.js.map +1 -0
- package/dist/server/server/json-utils.d.ts +11 -0
- package/dist/server/server/json-utils.d.ts.map +1 -0
- package/dist/server/server/json-utils.js +45 -0
- package/dist/server/server/json-utils.js.map +1 -0
- package/dist/server/server/logger.d.ts +12 -0
- package/dist/server/server/logger.d.ts.map +1 -0
- package/dist/server/server/logger.js +29 -0
- package/dist/server/server/logger.js.map +1 -0
- package/dist/server/server/messages.d.ts +9 -0
- package/dist/server/server/messages.d.ts.map +1 -0
- package/dist/server/server/messages.js +29 -0
- package/dist/server/server/messages.js.map +1 -0
- package/dist/server/server/pairing-offer.d.ts +16 -0
- package/dist/server/server/pairing-offer.d.ts.map +1 -0
- package/dist/server/server/pairing-offer.js +45 -0
- package/dist/server/server/pairing-offer.js.map +1 -0
- package/dist/server/server/pairing-qr.d.ts +7 -0
- package/dist/server/server/pairing-qr.d.ts.map +1 -0
- package/dist/server/server/pairing-qr.js +45 -0
- package/dist/server/server/pairing-qr.js.map +1 -0
- package/dist/server/server/paseo-home.d.ts +2 -0
- package/dist/server/server/paseo-home.d.ts.map +1 -0
- package/dist/server/server/paseo-home.js +19 -0
- package/dist/server/server/paseo-home.js.map +1 -0
- package/dist/server/server/path-utils.d.ts +3 -0
- package/dist/server/server/path-utils.d.ts.map +1 -0
- package/dist/server/server/path-utils.js +20 -0
- package/dist/server/server/path-utils.js.map +1 -0
- package/dist/server/server/persisted-config.d.ts +500 -0
- package/dist/server/server/persisted-config.d.ts.map +1 -0
- package/dist/server/server/persisted-config.js +212 -0
- package/dist/server/server/persisted-config.js.map +1 -0
- package/dist/server/server/persistence-hooks.d.ts +24 -0
- package/dist/server/server/persistence-hooks.d.ts.map +1 -0
- package/dist/server/server/persistence-hooks.js +60 -0
- package/dist/server/server/persistence-hooks.js.map +1 -0
- package/dist/server/server/pid-lock.d.ts +19 -0
- package/dist/server/server/pid-lock.d.ts.map +1 -0
- package/dist/server/server/pid-lock.js +115 -0
- package/dist/server/server/pid-lock.js.map +1 -0
- package/dist/server/server/push/push-service.d.ts +21 -0
- package/dist/server/server/push/push-service.d.ts.map +1 -0
- package/dist/server/server/push/push-service.js +68 -0
- package/dist/server/server/push/push-service.js.map +1 -0
- package/dist/server/server/push/token-store.d.ts +18 -0
- package/dist/server/server/push/token-store.d.ts.map +1 -0
- package/dist/server/server/push/token-store.js +70 -0
- package/dist/server/server/push/token-store.js.map +1 -0
- package/dist/server/server/relay-transport.d.ts +22 -0
- package/dist/server/server/relay-transport.d.ts.map +1 -0
- package/dist/server/server/relay-transport.js +374 -0
- package/dist/server/server/relay-transport.js.map +1 -0
- package/dist/server/server/server-id.d.ts +17 -0
- package/dist/server/server/server-id.d.ts.map +1 -0
- package/dist/server/server/server-id.js +63 -0
- package/dist/server/server/server-id.js.map +1 -0
- package/dist/server/server/session.d.ts +360 -0
- package/dist/server/server/session.d.ts.map +1 -0
- package/dist/server/server/session.js +4615 -0
- package/dist/server/server/session.js.map +1 -0
- package/dist/server/server/speech/audio.d.ts +10 -0
- package/dist/server/server/speech/audio.d.ts.map +1 -0
- package/dist/server/server/speech/audio.js +101 -0
- package/dist/server/server/speech/audio.js.map +1 -0
- package/dist/server/server/speech/providers/local/config.d.ts +26 -0
- package/dist/server/server/speech/providers/local/config.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/config.js +93 -0
- package/dist/server/server/speech/providers/local/config.js.map +1 -0
- package/dist/server/server/speech/providers/local/models.d.ts +12 -0
- package/dist/server/server/speech/providers/local/models.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/models.js +18 -0
- package/dist/server/server/speech/providers/local/models.js.map +1 -0
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +24 -0
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +422 -0
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -0
- package/dist/server/server/speech/providers/local/runtime.d.ts +30 -0
- package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/runtime.js +254 -0
- package/dist/server/server/speech/providers/local/runtime.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +117 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +166 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +17 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +151 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +68 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +37 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +79 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +7 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +11 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +7 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +44 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +131 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +132 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts +23 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +112 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +23 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +140 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +95 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -0
- package/dist/server/server/speech/providers/openai/config.d.ts +22 -0
- package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -0
- package/dist/server/server/speech/providers/openai/config.js +94 -0
- package/dist/server/server/speech/providers/openai/config.js.map +1 -0
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts +42 -0
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -0
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +165 -0
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -0
- package/dist/server/server/speech/providers/openai/runtime.d.ts +27 -0
- package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -0
- package/dist/server/server/speech/providers/openai/runtime.js +103 -0
- package/dist/server/server/speech/providers/openai/runtime.js.map +1 -0
- package/dist/server/server/speech/providers/openai/stt.d.ts +22 -0
- package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -0
- package/dist/server/server/speech/providers/openai/stt.js +208 -0
- package/dist/server/server/speech/providers/openai/stt.js.map +1 -0
- package/dist/server/server/speech/providers/openai/tts.d.ts +18 -0
- package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -0
- package/dist/server/server/speech/providers/openai/tts.js +46 -0
- package/dist/server/server/speech/providers/openai/tts.js.map +1 -0
- package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
- package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -0
- package/dist/server/server/speech/speech-config-resolver.js +64 -0
- package/dist/server/server/speech/speech-config-resolver.js.map +1 -0
- package/dist/server/server/speech/speech-provider.d.ts +59 -0
- package/dist/server/server/speech/speech-provider.d.ts.map +1 -0
- package/dist/server/server/speech/speech-provider.js +2 -0
- package/dist/server/server/speech/speech-provider.js.map +1 -0
- package/dist/server/server/speech/speech-runtime.d.ts +20 -0
- package/dist/server/server/speech/speech-runtime.d.ts.map +1 -0
- package/dist/server/server/speech/speech-runtime.js +119 -0
- package/dist/server/server/speech/speech-runtime.js.map +1 -0
- package/dist/server/server/speech/speech-types.d.ts +20 -0
- package/dist/server/server/speech/speech-types.d.ts.map +1 -0
- package/dist/server/server/speech/speech-types.js +7 -0
- package/dist/server/server/speech/speech-types.js.map +1 -0
- package/dist/server/server/terminal-mcp/index.d.ts +4 -0
- package/dist/server/server/terminal-mcp/index.d.ts.map +1 -0
- package/dist/server/server/terminal-mcp/index.js +3 -0
- package/dist/server/server/terminal-mcp/index.js.map +1 -0
- package/dist/server/server/terminal-mcp/server.d.ts +10 -0
- package/dist/server/server/terminal-mcp/server.d.ts.map +1 -0
- package/dist/server/server/terminal-mcp/server.js +217 -0
- package/dist/server/server/terminal-mcp/server.js.map +1 -0
- package/dist/server/server/terminal-mcp/terminal-manager.d.ts +123 -0
- package/dist/server/server/terminal-mcp/terminal-manager.d.ts.map +1 -0
- package/dist/server/server/terminal-mcp/terminal-manager.js +351 -0
- package/dist/server/server/terminal-mcp/terminal-manager.js.map +1 -0
- package/dist/server/server/terminal-mcp/tmux.d.ts +207 -0
- package/dist/server/server/terminal-mcp/tmux.d.ts.map +1 -0
- package/dist/server/server/terminal-mcp/tmux.js +924 -0
- package/dist/server/server/terminal-mcp/tmux.js.map +1 -0
- package/dist/server/server/types.d.ts +5 -0
- package/dist/server/server/types.d.ts.map +1 -0
- package/dist/server/server/types.js +3 -0
- package/dist/server/server/types.js.map +1 -0
- package/dist/server/server/utils/diff-highlighter.d.ts +52 -0
- package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -0
- package/dist/server/server/utils/diff-highlighter.js +244 -0
- package/dist/server/server/utils/diff-highlighter.js.map +1 -0
- package/dist/server/server/utils/syntax-highlighter.d.ts +10 -0
- package/dist/server/server/utils/syntax-highlighter.d.ts.map +1 -0
- package/dist/server/server/utils/syntax-highlighter.js +141 -0
- package/dist/server/server/utils/syntax-highlighter.js.map +1 -0
- package/dist/server/server/voice-config.d.ts +14 -0
- package/dist/server/server/voice-config.d.ts.map +1 -0
- package/dist/server/server/voice-config.js +51 -0
- package/dist/server/server/voice-config.js.map +1 -0
- package/dist/server/server/voice-mcp-bridge-command.d.ts +17 -0
- package/dist/server/server/voice-mcp-bridge-command.d.ts.map +1 -0
- package/dist/server/server/voice-mcp-bridge-command.js +31 -0
- package/dist/server/server/voice-mcp-bridge-command.js.map +1 -0
- package/dist/server/server/voice-mcp-bridge.d.ts +18 -0
- package/dist/server/server/voice-mcp-bridge.d.ts.map +1 -0
- package/dist/server/server/voice-mcp-bridge.js +109 -0
- package/dist/server/server/voice-mcp-bridge.js.map +1 -0
- package/dist/server/server/voice-permission-policy.d.ts +4 -0
- package/dist/server/server/voice-permission-policy.d.ts.map +1 -0
- package/dist/server/server/voice-permission-policy.js +13 -0
- package/dist/server/server/voice-permission-policy.js.map +1 -0
- package/dist/server/server/voice-types.d.ts +17 -0
- package/dist/server/server/voice-types.d.ts.map +1 -0
- package/dist/server/server/voice-types.js +2 -0
- package/dist/server/server/voice-types.js.map +1 -0
- package/dist/server/server/websocket-server.d.ts +80 -0
- package/dist/server/server/websocket-server.d.ts.map +1 -0
- package/dist/server/server/websocket-server.js +447 -0
- package/dist/server/server/websocket-server.js.map +1 -0
- package/dist/server/shared/agent-lifecycle.d.ts +3 -0
- package/dist/server/shared/agent-lifecycle.d.ts.map +1 -0
- package/dist/server/shared/agent-lifecycle.js +8 -0
- package/dist/server/shared/agent-lifecycle.js.map +1 -0
- package/dist/server/shared/connection-offer.d.ts +62 -0
- package/dist/server/shared/connection-offer.d.ts.map +1 -0
- package/dist/server/shared/connection-offer.js +17 -0
- package/dist/server/shared/connection-offer.js.map +1 -0
- package/dist/server/shared/daemon-endpoints.d.ts +19 -0
- package/dist/server/shared/daemon-endpoints.d.ts.map +1 -0
- package/dist/server/shared/daemon-endpoints.js +98 -0
- package/dist/server/shared/daemon-endpoints.js.map +1 -0
- package/dist/server/shared/messages.d.ts +36729 -0
- package/dist/server/shared/messages.d.ts.map +1 -0
- package/dist/server/shared/messages.js +1666 -0
- package/dist/server/shared/messages.js.map +1 -0
- package/dist/server/shared/path-utils.d.ts +2 -0
- package/dist/server/shared/path-utils.d.ts.map +1 -0
- package/dist/server/shared/path-utils.js +16 -0
- package/dist/server/shared/path-utils.js.map +1 -0
- package/dist/server/shared/tool-call-display.d.ts +11 -0
- package/dist/server/shared/tool-call-display.d.ts.map +1 -0
- package/dist/server/shared/tool-call-display.js +82 -0
- package/dist/server/shared/tool-call-display.js.map +1 -0
- package/dist/server/terminal/terminal-manager.d.ts +14 -0
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -0
- package/dist/server/terminal/terminal-manager.js +67 -0
- package/dist/server/terminal/terminal-manager.js.map +1 -0
- package/dist/server/terminal/terminal.d.ts +67 -0
- package/dist/server/terminal/terminal.d.ts.map +1 -0
- package/dist/server/terminal/terminal.js +190 -0
- package/dist/server/terminal/terminal.js.map +1 -0
- package/dist/server/utils/checkout-git.d.ts +138 -0
- package/dist/server/utils/checkout-git.d.ts.map +1 -0
- package/dist/server/utils/checkout-git.js +1079 -0
- package/dist/server/utils/checkout-git.js.map +1 -0
- package/dist/server/utils/path.d.ts +5 -0
- package/dist/server/utils/path.d.ts.map +1 -0
- package/dist/server/utils/path.js +15 -0
- package/dist/server/utils/path.js.map +1 -0
- package/dist/server/utils/project-icon.d.ts +39 -0
- package/dist/server/utils/project-icon.d.ts.map +1 -0
- package/dist/server/utils/project-icon.js +391 -0
- package/dist/server/utils/project-icon.js.map +1 -0
- package/dist/server/utils/worktree-metadata.d.ts +21 -0
- package/dist/server/utils/worktree-metadata.d.ts.map +1 -0
- package/dist/server/utils/worktree-metadata.js +74 -0
- package/dist/server/utils/worktree-metadata.js.map +1 -0
- package/dist/server/utils/worktree.d.ts +95 -0
- package/dist/server/utils/worktree.d.ts.map +1 -0
- package/dist/server/utils/worktree.js +568 -0
- package/dist/server/utils/worktree.js.map +1 -0
- package/package.json +108 -0
package/.env.example
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# OpenAI API Key (for GPT-4, Whisper STT, and TTS)
|
|
2
|
+
OPENAI_API_KEY=
|
|
3
|
+
|
|
4
|
+
# TTS Configuration (optional - defaults shown)
|
|
5
|
+
TTS_VOICE=alloy
|
|
6
|
+
# Available voices: alloy, echo, fable, onyx, nova, shimmer
|
|
7
|
+
TTS_MODEL=tts-1
|
|
8
|
+
# Available models: tts-1 (faster), tts-1-hd (higher quality)
|
|
9
|
+
|
|
10
|
+
# Server Configuration
|
|
11
|
+
# Location for runtime state (agents.json, etc.). Defaults to ~/.paseo
|
|
12
|
+
PASEO_HOME=~/.paseo
|
|
13
|
+
|
|
14
|
+
# Listen address. Defaults to 127.0.0.1:6767
|
|
15
|
+
# Can be host:port, /path/to/socket, or unix:///path/to/socket
|
|
16
|
+
PASEO_LISTEN=127.0.0.1:6767
|
|
17
|
+
|
|
18
|
+
# Debug recordings (dictation + STT input + TTS output)
|
|
19
|
+
# When enabled, recordings are saved under `${cwd}/.debug/recordings/`
|
|
20
|
+
PASEO_DICTATION_DEBUG=1
|
package/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Voice Assistant
|
|
2
|
+
|
|
3
|
+
A voice-controlled terminal assistant that runs as a single local service.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install dependencies
|
|
9
|
+
npm install
|
|
10
|
+
|
|
11
|
+
# Copy environment variables
|
|
12
|
+
cp .env.example .env
|
|
13
|
+
# Edit .env and add your API keys (OpenAI, Deepgram)
|
|
14
|
+
|
|
15
|
+
# Run development servers
|
|
16
|
+
npm run dev
|
|
17
|
+
|
|
18
|
+
# Open browser to http://localhost:5173
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Architecture
|
|
22
|
+
|
|
23
|
+
- **Express Server** (port 3000) - Serves API and built UI in production
|
|
24
|
+
- **Vite Dev Server** (port 5173) - Hot-reload React UI in development
|
|
25
|
+
- **WebSocket** (`/ws`) - Real-time bidirectional communication
|
|
26
|
+
- **Agent** - STT → LLM → TTS pipeline with terminal control
|
|
27
|
+
- **Daemon** - tmux-based terminal management (in-process)
|
|
28
|
+
|
|
29
|
+
## Development
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Run both servers (recommended)
|
|
33
|
+
npm run dev
|
|
34
|
+
|
|
35
|
+
# Or run separately:
|
|
36
|
+
npm run dev:server # Express on port 3000
|
|
37
|
+
npm run dev:ui # Vite on port 5173
|
|
38
|
+
|
|
39
|
+
# Type checking
|
|
40
|
+
npm run typecheck
|
|
41
|
+
|
|
42
|
+
# Build for production
|
|
43
|
+
npm run build
|
|
44
|
+
|
|
45
|
+
# Start production server
|
|
46
|
+
npm start
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Project Status
|
|
50
|
+
|
|
51
|
+
**✅ Completed** (Phases 1-2):
|
|
52
|
+
- Package setup and configuration
|
|
53
|
+
- Express server with WebSocket
|
|
54
|
+
- React UI with Vite
|
|
55
|
+
- WebSocket client with ping/pong testing
|
|
56
|
+
|
|
57
|
+
**⏳ In Progress** (Phase 3):
|
|
58
|
+
- Terminal control (tmux integration)
|
|
59
|
+
|
|
60
|
+
**📋 Planned** (Phases 4-9):
|
|
61
|
+
- LLM integration (OpenAI GPT-4)
|
|
62
|
+
- Agent orchestrator
|
|
63
|
+
- Speech-to-Text (Deepgram)
|
|
64
|
+
- Text-to-Speech (OpenAI)
|
|
65
|
+
- Audio streaming
|
|
66
|
+
- UI polish
|
|
67
|
+
|
|
68
|
+
See [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) for complete details.
|
|
69
|
+
|
|
70
|
+
## Environment Variables
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
OPENAI_API_KEY=your-openai-key-here # GPT-4 and TTS
|
|
74
|
+
DEEPGRAM_API_KEY=your-deepgram-key-here # Streaming STT
|
|
75
|
+
STT_MODEL=whisper-1 # Optional: override to gpt-4o-transcribe, etc.
|
|
76
|
+
STT_CONFIDENCE_THRESHOLD=-3.0 # Optional: reject low-confidence clips
|
|
77
|
+
STT_DEBUG_AUDIO_DIR=.stt-debug # Optional: persist raw dictation audio for debugging
|
|
78
|
+
PASEO_HOME=~/.paseo # Runtime state directory (agents/, etc.)
|
|
79
|
+
PASEO_LISTEN=127.0.0.1:6767 # Listen address (host:port or /path/to/socket)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`PASEO_HOME` defaults to `~/.paseo` and isolates runtime artifacts like `agents/`. `PASEO_LISTEN` controls the daemon listen address. For blue/green testing you can run a parallel server without touching production state:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
PASEO_HOME=~/.paseo-blue PASEO_LISTEN=127.0.0.1:7777 npm run dev
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Tech Stack
|
|
89
|
+
|
|
90
|
+
- **Server**: Express, TypeScript, ws (WebSocket)
|
|
91
|
+
- **Client**: React 18, Vite, TypeScript
|
|
92
|
+
- **Terminal**: tmux (via child_process)
|
|
93
|
+
- **AI**: OpenAI (LLM + TTS), Deepgram (STT)
|
|
94
|
+
|
|
95
|
+
## Testing
|
|
96
|
+
|
|
97
|
+
Currently manual testing via:
|
|
98
|
+
1. Start servers: `npm run dev`
|
|
99
|
+
2. Open http://localhost:5173
|
|
100
|
+
3. Test WebSocket connection (green status indicator)
|
|
101
|
+
4. Click "Send Ping" button to test communication
|
|
102
|
+
|
|
103
|
+
More testing guidance as features are implemented.
|
|
104
|
+
|
|
105
|
+
## License
|
|
106
|
+
|
|
107
|
+
MIT
|
package/agent-prompt.md
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# Voice Assistant System Prompt
|
|
2
|
+
|
|
3
|
+
## 1. Core Voice Rules (NON-NEGOTIABLE)
|
|
4
|
+
|
|
5
|
+
### Voice Context
|
|
6
|
+
|
|
7
|
+
You are a **voice-controlled** assistant. The user speaks to you via phone and hears your responses via TTS.
|
|
8
|
+
|
|
9
|
+
### Voice Message Envelope
|
|
10
|
+
|
|
11
|
+
Some user utterances will be wrapped in an XML tag like:
|
|
12
|
+
|
|
13
|
+
`<voice-transcription focused-agent-id="...">...</voice-transcription>`
|
|
14
|
+
|
|
15
|
+
- Treat the inner text as what the user said (STT output).
|
|
16
|
+
- `focused-agent-id` is **context only**: it means which agent screen the user is currently looking at. It does *not* mean all actions must target that agent, but it is a strong hint for ambiguous commands like “stop it” or “cancel the agent”.
|
|
17
|
+
|
|
18
|
+
**Critical constraints:**
|
|
19
|
+
|
|
20
|
+
- User typically codes from their **phone** using voice
|
|
21
|
+
- **No visual feedback** - they can't see command output unless at laptop
|
|
22
|
+
- Input comes through **speech-to-text (STT)** which makes errors
|
|
23
|
+
- Output is spoken via **text-to-speech (TTS)**
|
|
24
|
+
- User may be mobile, away from desk, multitasking
|
|
25
|
+
|
|
26
|
+
### Communication Rules
|
|
27
|
+
|
|
28
|
+
**1-3 sentences maximum per response. Always.**
|
|
29
|
+
|
|
30
|
+
- **Plain speech only** - NO markdown (no bullets, bold, lists, headers)
|
|
31
|
+
- **Progressive disclosure** - answer what's asked, let user ask for more
|
|
32
|
+
- **Start high-level** - give the gist, not every detail
|
|
33
|
+
- **Natural pauses** - leave room for user to respond or redirect
|
|
34
|
+
|
|
35
|
+
**Good example:**
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
User: "List my agents"
|
|
39
|
+
You: "You have two agents. One working on authentication in the web app, another running tests in Faro."
|
|
40
|
+
|
|
41
|
+
User: "How's the auth agent doing?"
|
|
42
|
+
You: "It finished adding the login flow and is waiting for your approval on the database migration."
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Bad example:**
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
User: "List my agents"
|
|
49
|
+
You: "You have 2 agents: 1. **auth-agent** - Working on authentication 2. **test-agent** - Running tests..."
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Handling STT Errors
|
|
53
|
+
|
|
54
|
+
Speech-to-text makes mistakes. Fix them silently using context.
|
|
55
|
+
|
|
56
|
+
**Common errors:**
|
|
57
|
+
|
|
58
|
+
- Homophones: "list" → "missed", "code" → "load"
|
|
59
|
+
- Project names: "faro" → "pharaoh", "mcp" → "empty"
|
|
60
|
+
- Technical terms: "typescript" → "type script", "npm install" → "NPM in style"
|
|
61
|
+
|
|
62
|
+
**How to handle:**
|
|
63
|
+
|
|
64
|
+
1. Use context to fix obvious mistakes silently
|
|
65
|
+
2. Ask for clarification only when truly ambiguous
|
|
66
|
+
3. Never lecture about the error - just handle it
|
|
67
|
+
4. When clarifying, be brief: "Which project? Web, agent, or MCP?"
|
|
68
|
+
|
|
69
|
+
**Examples:**
|
|
70
|
+
|
|
71
|
+
- User: "Run empty install" → Interpret as "Run npm install"
|
|
72
|
+
- User: "Check the agent" → If only one agent, check that one; if multiple, ask which
|
|
73
|
+
|
|
74
|
+
### Immediate Silence Protocol
|
|
75
|
+
|
|
76
|
+
If user says any of these, **STOP ALL OUTPUT IMMEDIATELY**:
|
|
77
|
+
|
|
78
|
+
- "I'm not talking to you"
|
|
79
|
+
- "Shut up" / "Be quiet" / "Stop talking"
|
|
80
|
+
- "Not you"
|
|
81
|
+
|
|
82
|
+
**Response: Complete silence. No acknowledgment. Wait for user to address you again.**
|
|
83
|
+
|
|
84
|
+
## 2. Delegation Pattern
|
|
85
|
+
|
|
86
|
+
### Core Rule: Always Work Through Coding Agents
|
|
87
|
+
|
|
88
|
+
Direct command-line tools (`execute_command`, `send_text_to_command`, `kill_command`, etc.) are disabled. Every change to files, git, builds, or tests must go through a coding agent. Your job is to decide when to reuse an existing agent versus spinning up a new one, then route follow-ups appropriately.
|
|
89
|
+
|
|
90
|
+
### Safe Operations (Execute Immediately)
|
|
91
|
+
|
|
92
|
+
These orchestration tools only read or summarize state:
|
|
93
|
+
|
|
94
|
+
- `list_agents()` – discover who exists before delegating
|
|
95
|
+
- `get_agent_activity()` – pull the curated activity/readout for a specific agent
|
|
96
|
+
- `wait_for_agent()` – block until an agent requests permission or completes the current run
|
|
97
|
+
|
|
98
|
+
Call them without asking when context requires it. Never fabricate their output.
|
|
99
|
+
|
|
100
|
+
### Delegated Operations (Announce + Execute)
|
|
101
|
+
|
|
102
|
+
- `create_agent()` – Ask for confirmation unless the user already issued a clear imperative (“spin up a new planner”), then acknowledge and create immediately.
|
|
103
|
+
- `send_agent_prompt()` – Route the user’s request to the focused agent. If the user explicitly names a different agent, switch focus first, then send the prompt.
|
|
104
|
+
- `set_agent_mode()`, `cancel_agent()`, `kill_agent()` – Only when the user directs you to or the agent is stuck. Confirm destructive actions.
|
|
105
|
+
|
|
106
|
+
After delegating, monitor via `wait_for_agent()` or `get_agent_activity()` and translate the relevant summary back to the user.
|
|
107
|
+
|
|
108
|
+
### When to Ask vs Act
|
|
109
|
+
|
|
110
|
+
Ask only when the routing decision is truly ambiguous. Otherwise:
|
|
111
|
+
|
|
112
|
+
- Default to the most recently addressed agent.
|
|
113
|
+
- If the user mentions a new agent (“spin up planner”, “Codex, pick this up”), treat it as both a creation/selection and a focus switch.
|
|
114
|
+
- Use activity context to disambiguate references (“keep going on the migration” → whichever agent was migrating).
|
|
115
|
+
|
|
116
|
+
### Tool Results Reporting
|
|
117
|
+
|
|
118
|
+
After any agent-facing tool call, verbally report the key result in one sentence: who acted, what happened, and whether more work is pending. Example: “Agent Planner says the test plan is drafted and still running validations.” Progressive disclosure still applies—offer deeper details only when asked.
|
|
119
|
+
|
|
120
|
+
## 4. Agent Integrations
|
|
121
|
+
|
|
122
|
+
### Your Role: Orchestrator
|
|
123
|
+
|
|
124
|
+
You orchestrate work. Agents execute.
|
|
125
|
+
|
|
126
|
+
**First action when agent work is mentioned: Call `list_agents()`**
|
|
127
|
+
|
|
128
|
+
Load the agent list before any agent interaction. Always.
|
|
129
|
+
|
|
130
|
+
#### Focus Management
|
|
131
|
+
|
|
132
|
+
- Keep a lightweight "focus" pointer to the last agent the user explicitly addressed or implicitly referenced. Route follow-up utterances there unless the user names another agent.
|
|
133
|
+
- Update focus whenever the user spins up a new agent (“create a planner for this”) or targets one by name. Treat that change as sticky until silence/irrelevant turns cause confidence to drop.
|
|
134
|
+
- When confidence is low (long gap, conflicting references), briefly confirm: “Do you want Planner or Architect on this?”
|
|
135
|
+
- Always narrate hand-offs: “Okay, handing that to Planner.”
|
|
136
|
+
- Every time you speak on behalf of an agent, prefix with `Agent <name> says …` so the user always knows who just responded and can redirect explicitly.
|
|
137
|
+
|
|
138
|
+
**Confirm before destructive agent operations:**
|
|
139
|
+
- Creating agents: "Create agent in [directory] for [task]?" (unless user already issued a direct imperative)
|
|
140
|
+
- Killing agents: "Kill agent [id] working on [task]?"
|
|
141
|
+
|
|
142
|
+
**Delegate vs execute:**
|
|
143
|
+
- Everything touching code, git, or shell runs through agents
|
|
144
|
+
- Keep lightweight questions or summaries in-orchestrator when no action is needed
|
|
145
|
+
- Active agent context → Send prompt to that agent (respect focus)
|
|
146
|
+
|
|
147
|
+
### Available Agents (Source of Truth)
|
|
148
|
+
|
|
149
|
+
We only have two coding agents. Do not call tools to discover them—treat this section as canonical. When you create or configure an agent, runtime validation will reject invalid combinations.
|
|
150
|
+
|
|
151
|
+
**Claude Code (`claude`)**
|
|
152
|
+
- Default mode: `plan`
|
|
153
|
+
- Alternate mode: `bypassPermissions`
|
|
154
|
+
- Best for deliberative work. Start in `plan` when the user wants transparency, switch to `bypassPermissions` only with explicit approval for fast execution.
|
|
155
|
+
|
|
156
|
+
**Codex (`codex`)**
|
|
157
|
+
- Default mode: `auto`
|
|
158
|
+
- Other modes: `read-only`, `full-access`
|
|
159
|
+
- Use `read-only` for safe inspection, `auto` for normal edit/run loops, and escalate to `full-access` only when the user authorizes unrestricted access.
|
|
160
|
+
|
|
161
|
+
### Creating Agents
|
|
162
|
+
|
|
163
|
+
**Confirm creation only when intent is unclear.** If the user gives a direct imperative (“spin up a new planner agent in paseo”), acknowledge and create immediately; otherwise, ask.
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
// Claude Code with planning
|
|
167
|
+
create_agent({
|
|
168
|
+
cwd: "~/dev/paseo",
|
|
169
|
+
agentType: "claude",
|
|
170
|
+
initialPrompt: "add dark mode toggle to settings page",
|
|
171
|
+
initialMode: "plan"
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
// Codex for quick edits
|
|
175
|
+
create_agent({
|
|
176
|
+
cwd: "~/dev/paseo",
|
|
177
|
+
agentType: "codex",
|
|
178
|
+
initialPrompt: "clean up the logging",
|
|
179
|
+
initialMode: "auto"
|
|
180
|
+
})
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
If the user omits `initialMode`, the defaults above apply. Invalid agentType/mode pairs will throw—just surface the error.
|
|
184
|
+
|
|
185
|
+
### Working with Agents
|
|
186
|
+
|
|
187
|
+
**Send prompts to agents:**
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
// Send task (non-blocking by default)
|
|
191
|
+
send_agent_prompt({
|
|
192
|
+
agentId: "abc123",
|
|
193
|
+
prompt: "explain how authentication works"
|
|
194
|
+
})
|
|
195
|
+
// Returns immediately, agent processes in background
|
|
196
|
+
|
|
197
|
+
// Send task and wait for completion
|
|
198
|
+
send_agent_prompt({
|
|
199
|
+
agentId: "abc123",
|
|
200
|
+
prompt: "fix the bug in auth.ts",
|
|
201
|
+
maxWait: 60000 // Wait up to 60 seconds
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
// Change mode and send prompt (Claude -> bypassPermissions, Codex -> full-access)
|
|
205
|
+
send_agent_prompt({
|
|
206
|
+
agentId: "abc123",
|
|
207
|
+
prompt: "implement user registration",
|
|
208
|
+
sessionMode: "bypassPermissions"
|
|
209
|
+
})
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Check agent status:**
|
|
213
|
+
|
|
214
|
+
```javascript
|
|
215
|
+
// Get current status
|
|
216
|
+
get_agent_status({ agentId: "abc123" })
|
|
217
|
+
// Returns: { status: "processing", info: {...} }
|
|
218
|
+
|
|
219
|
+
// Get agent activity (curated, human-readable)
|
|
220
|
+
get_agent_activity({
|
|
221
|
+
agentId: "abc123",
|
|
222
|
+
format: "curated" // Clean summary of what agent did
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
// List all agents
|
|
226
|
+
list_agents()
|
|
227
|
+
// Returns: { agents: [{id, status, createdAt, ...}, ...] }
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Control agents:**
|
|
231
|
+
|
|
232
|
+
```javascript
|
|
233
|
+
// Change session mode (safe, no confirmation needed)
|
|
234
|
+
set_agent_mode({
|
|
235
|
+
agentId: "abc123",
|
|
236
|
+
modeId: "plan"
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
// Cancel current task (safe, no confirmation needed)
|
|
240
|
+
cancel_agent({ agentId: "abc123" })
|
|
241
|
+
|
|
242
|
+
// Kill agent (REQUIRES confirmation first)
|
|
243
|
+
kill_agent({ agentId: "abc123" })
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Agent Workflow Pattern
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
// 1. Load agents first
|
|
250
|
+
list_agents()
|
|
251
|
+
|
|
252
|
+
// 2. If creating new agent, confirm first
|
|
253
|
+
// You: "Create agent in ~/dev/project for authentication?"
|
|
254
|
+
// User: "yes"
|
|
255
|
+
|
|
256
|
+
// 3. Create with type + mode
|
|
257
|
+
create_agent({
|
|
258
|
+
cwd: "~/dev/project",
|
|
259
|
+
agentType: "claude",
|
|
260
|
+
initialPrompt: "add authentication",
|
|
261
|
+
initialMode: "plan"
|
|
262
|
+
})
|
|
263
|
+
|
|
264
|
+
// 4. Monitor or send follow-up tasks
|
|
265
|
+
get_agent_activity({ agentId })
|
|
266
|
+
send_agent_prompt({ agentId, prompt: "add tests" })
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## 5. Git & GitHub
|
|
270
|
+
|
|
271
|
+
### Git Worktree Utilities
|
|
272
|
+
|
|
273
|
+
Custom utilities for safe worktree management:
|
|
274
|
+
|
|
275
|
+
**create-worktree:**
|
|
276
|
+
- Creates new git worktree with new branch
|
|
277
|
+
- Example: `create-worktree "feature"` creates `~/dev/repo-feature`
|
|
278
|
+
- Outputs WORKTREE_PATH for you to parse
|
|
279
|
+
|
|
280
|
+
**delete-worktree:**
|
|
281
|
+
- Preserves the branch, only deletes directory
|
|
282
|
+
- Safe to use - won't lose work
|
|
283
|
+
- Run from within worktree directory
|
|
284
|
+
|
|
285
|
+
### GitHub CLI (gh)
|
|
286
|
+
|
|
287
|
+
Already authenticated. Use for:
|
|
288
|
+
|
|
289
|
+
- Creating PRs: `gh pr create`
|
|
290
|
+
- Viewing PRs: `gh pr view`
|
|
291
|
+
- Managing issues: `gh issue list`
|
|
292
|
+
- Checking CI: `gh pr checks`
|
|
293
|
+
|
|
294
|
+
## 6. Projects & Context
|
|
295
|
+
|
|
296
|
+
### Project Locations
|
|
297
|
+
|
|
298
|
+
All projects in `~/dev`:
|
|
299
|
+
|
|
300
|
+
**paseo**
|
|
301
|
+
- Location: `~/dev/paseo`
|
|
302
|
+
- Packages: `voice-assistant`
|
|
303
|
+
|
|
304
|
+
**Faro** (Autonomous Competitive Intelligence)
|
|
305
|
+
- Bare repo: `~/dev/faro`
|
|
306
|
+
- Main checkout: `~/dev/faro/main`
|
|
307
|
+
|
|
308
|
+
**Blank.page** (Minimal browser text editor)
|
|
309
|
+
- Location: `~/dev/blank.page/editor`
|
|
310
|
+
|
|
311
|
+
### Decision Rules
|
|
312
|
+
|
|
313
|
+
**Agent work mentioned?**
|
|
314
|
+
1. Call `list_agents()` first
|
|
315
|
+
2. Reuse existing agent if task relates to its work
|
|
316
|
+
3. Only confirm new-agent creation when the request is ambiguous. Clear imperatives (“spin up a new planner agent”) should be acknowledged and executed immediately.
|
|
317
|
+
|
|
318
|
+
**Creating/killing agents?**
|
|
319
|
+
- Ask: "Create agent in [dir] for [task]?" when intent isn’t explicit
|
|
320
|
+
- Ask: "Kill agent [id]?"
|
|
321
|
+
- Wait for "yes"
|
|
322
|
+
|
|
323
|
+
**Task routing:**
|
|
324
|
+
- All coding tasks → Delegate to an agent
|
|
325
|
+
- Active agent + related work → Delegate to that agent
|
|
326
|
+
- If the user explicitly mentions another agent, switch focus before delegating
|
|
327
|
+
|
|
328
|
+
**Context tracking:**
|
|
329
|
+
- Track active agents and their directories
|
|
330
|
+
- Use conversation context to resolve ambiguity
|
|
331
|
+
- Fix STT errors silently
|
|
332
|
+
- Maintain a recency-based focus pointer and narrate any focus change out loud
|
|
333
|
+
|
|
334
|
+
### Core Reminders
|
|
335
|
+
|
|
336
|
+
- Call actual tools, never just describe
|
|
337
|
+
- 1-3 sentences max per response
|
|
338
|
+
- Always report agent/tool results verbally (preface with "Agent X says …" when relaying)
|
|
339
|
+
- Default to action when context is clear
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { runSupervisor } from "./supervisor.js";
|
|
4
|
+
function resolveWorkerEntry() {
|
|
5
|
+
const candidates = [
|
|
6
|
+
fileURLToPath(new URL("../server/server/index.js", import.meta.url)),
|
|
7
|
+
fileURLToPath(new URL("../dist/server/server/index.js", import.meta.url)),
|
|
8
|
+
fileURLToPath(new URL("../src/server/index.ts", import.meta.url)),
|
|
9
|
+
fileURLToPath(new URL("../../src/server/index.ts", import.meta.url)),
|
|
10
|
+
];
|
|
11
|
+
for (const candidate of candidates) {
|
|
12
|
+
if (existsSync(candidate)) {
|
|
13
|
+
return candidate;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return candidates[0];
|
|
17
|
+
}
|
|
18
|
+
function resolveWorkerExecArgv() {
|
|
19
|
+
const workerEntry = resolveWorkerEntry();
|
|
20
|
+
return workerEntry.endsWith(".ts") ? ["--import", "tsx"] : [];
|
|
21
|
+
}
|
|
22
|
+
runSupervisor({
|
|
23
|
+
name: "DaemonRunner",
|
|
24
|
+
startupMessage: "Starting daemon worker (IPC restart enabled)",
|
|
25
|
+
resolveWorkerEntry,
|
|
26
|
+
workerArgs: process.argv.slice(2),
|
|
27
|
+
workerEnv: process.env,
|
|
28
|
+
workerExecArgv: resolveWorkerExecArgv(),
|
|
29
|
+
restartOnCrash: false,
|
|
30
|
+
shutdownReasons: ["cli_shutdown"],
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=daemon-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-runner.js","sourceRoot":"","sources":["../../scripts/daemon-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,SAAS,kBAAkB;IACzB,MAAM,UAAU,GAAG;QACjB,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,aAAa,CAAC,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrE,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,aAAa,CAAC;IACZ,IAAI,EAAE,cAAc;IACpB,cAAc,EAAE,8CAA8C;IAC9D,kBAAkB;IAClB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC,GAAG;IACtB,cAAc,EAAE,qBAAqB,EAAE;IACvC,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,CAAC,cAAc,CAAC;CAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { runSupervisor } from "./supervisor.js";
|
|
4
|
+
const WORKER_ENTRY = fileURLToPath(new URL("../src/server/index.ts", import.meta.url));
|
|
5
|
+
if (!existsSync(WORKER_ENTRY)) {
|
|
6
|
+
throw new Error(`Dev worker entry not found: ${WORKER_ENTRY}`);
|
|
7
|
+
}
|
|
8
|
+
runSupervisor({
|
|
9
|
+
name: "DevRunner",
|
|
10
|
+
startupMessage: "Starting server worker (crash restarts enabled)",
|
|
11
|
+
resolveWorkerEntry: () => WORKER_ENTRY,
|
|
12
|
+
workerArgs: process.argv.slice(2),
|
|
13
|
+
workerEnv: process.env,
|
|
14
|
+
// Always run worker with tsx so dev server uses TypeScript sources directly.
|
|
15
|
+
workerExecArgv: ["--import", "tsx"],
|
|
16
|
+
restartOnCrash: true,
|
|
17
|
+
shutdownReasons: ["cli_shutdown"],
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=dev-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-runner.js","sourceRoot":"","sources":["../../scripts/dev-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,aAAa,CAAC;IACZ,IAAI,EAAE,WAAW;IACjB,cAAc,EAAE,iDAAiD;IACjE,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY;IACtC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC,GAAG;IACtB,6EAA6E;IAC7E,cAAc,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;IACnC,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,CAAC,cAAc,CAAC;CAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import net from "node:net";
|
|
2
|
+
|
|
3
|
+
function parseArgs(argv) {
|
|
4
|
+
let socketPath = null;
|
|
5
|
+
|
|
6
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
7
|
+
const arg = argv[index];
|
|
8
|
+
if (arg === "--socket") {
|
|
9
|
+
socketPath = argv[index + 1] ?? null;
|
|
10
|
+
index += 1;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (!socketPath || !socketPath.trim()) {
|
|
15
|
+
throw new Error("Missing required --socket <path>");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return { socketPath: socketPath.trim() };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function main() {
|
|
22
|
+
const { socketPath } = parseArgs(process.argv.slice(2));
|
|
23
|
+
const socket = net.createConnection(socketPath);
|
|
24
|
+
|
|
25
|
+
socket.on("error", (error) => {
|
|
26
|
+
process.stderr.write(`MCP stdio-socket bridge error: ${error.message}\n`);
|
|
27
|
+
process.exitCode = 1;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
process.stdin.on("error", (error) => {
|
|
31
|
+
process.stderr.write(`MCP stdio-socket bridge stdin error: ${error.message}\n`);
|
|
32
|
+
socket.destroy();
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
process.stdout.on("error", (error) => {
|
|
37
|
+
process.stderr.write(`MCP stdio-socket bridge stdout error: ${error.message}\n`);
|
|
38
|
+
socket.destroy();
|
|
39
|
+
process.exitCode = 1;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
await new Promise((resolve, reject) => {
|
|
43
|
+
socket.once("connect", resolve);
|
|
44
|
+
socket.once("error", reject);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
process.stdin.pipe(socket);
|
|
48
|
+
socket.pipe(process.stdout);
|
|
49
|
+
|
|
50
|
+
await new Promise((resolve) => {
|
|
51
|
+
socket.once("close", resolve);
|
|
52
|
+
process.stdin.once("end", () => {
|
|
53
|
+
socket.end();
|
|
54
|
+
resolve();
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
main().catch((error) => {
|
|
60
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { fork } from "child_process";
|
|
2
|
+
function describeExit(code, signal) {
|
|
3
|
+
return signal ?? (typeof code === "number" ? `code ${code}` : "unknown");
|
|
4
|
+
}
|
|
5
|
+
function isRestartMessage(msg) {
|
|
6
|
+
return (typeof msg === "object" &&
|
|
7
|
+
msg !== null &&
|
|
8
|
+
"type" in msg &&
|
|
9
|
+
msg.type === "paseo:restart");
|
|
10
|
+
}
|
|
11
|
+
export function runSupervisor(options) {
|
|
12
|
+
const shutdownReasons = new Set(options.shutdownReasons ?? ["cli_shutdown"]);
|
|
13
|
+
const restartOnCrash = options.restartOnCrash ?? false;
|
|
14
|
+
const workerArgs = options.workerArgs ?? process.argv.slice(2);
|
|
15
|
+
const workerEnv = options.workerEnv ?? process.env;
|
|
16
|
+
const workerExecArgv = options.workerExecArgv ?? ["--import", "tsx"];
|
|
17
|
+
let child = null;
|
|
18
|
+
let restarting = false;
|
|
19
|
+
let shuttingDown = false;
|
|
20
|
+
const log = (message) => {
|
|
21
|
+
process.stderr.write(`[${options.name}] ${message}\n`);
|
|
22
|
+
};
|
|
23
|
+
const spawnWorker = () => {
|
|
24
|
+
let workerEntry;
|
|
25
|
+
try {
|
|
26
|
+
// Resolve at spawn time so restarts pick up current filesystem state.
|
|
27
|
+
workerEntry = options.resolveWorkerEntry();
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
31
|
+
log(`Failed to resolve worker entry: ${message}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
child = fork(workerEntry, workerArgs, {
|
|
36
|
+
stdio: "inherit",
|
|
37
|
+
env: workerEnv,
|
|
38
|
+
execArgv: workerExecArgv,
|
|
39
|
+
});
|
|
40
|
+
child.on("message", (msg) => {
|
|
41
|
+
if (!isRestartMessage(msg)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (msg.reason && shutdownReasons.has(msg.reason)) {
|
|
45
|
+
requestShutdown(`Shutdown requested by worker (${msg.reason})`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
requestRestart("Restart requested by worker");
|
|
49
|
+
});
|
|
50
|
+
child.on("exit", (code, signal) => {
|
|
51
|
+
const exitDescriptor = describeExit(code, signal);
|
|
52
|
+
if (shuttingDown) {
|
|
53
|
+
log(`Worker exited (${exitDescriptor}). Supervisor shutting down.`);
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
56
|
+
if (restarting || (restartOnCrash && code !== 0 && code !== null)) {
|
|
57
|
+
restarting = false;
|
|
58
|
+
log(`Worker exited (${exitDescriptor}). Restarting worker...`);
|
|
59
|
+
spawnWorker();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
log(`Worker exited (${exitDescriptor}). Supervisor exiting.`);
|
|
63
|
+
process.exit(typeof code === "number" ? code : 0);
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
const requestRestart = (reason) => {
|
|
67
|
+
if (!child || restarting || shuttingDown) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
restarting = true;
|
|
71
|
+
log(`${reason}. Stopping worker for restart...`);
|
|
72
|
+
child.kill("SIGTERM");
|
|
73
|
+
};
|
|
74
|
+
const requestShutdown = (reason) => {
|
|
75
|
+
if (shuttingDown) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
shuttingDown = true;
|
|
79
|
+
restarting = false;
|
|
80
|
+
log(`${reason}. Stopping worker...`);
|
|
81
|
+
if (!child) {
|
|
82
|
+
process.exit(0);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
child.kill("SIGTERM");
|
|
86
|
+
};
|
|
87
|
+
const forwardSignal = (signal) => {
|
|
88
|
+
requestShutdown(`Received ${signal}`);
|
|
89
|
+
};
|
|
90
|
+
process.on("SIGINT", () => forwardSignal("SIGINT"));
|
|
91
|
+
process.on("SIGTERM", () => forwardSignal("SIGTERM"));
|
|
92
|
+
process.stdout.write(`[${options.name}] ${options.startupMessage}\n`);
|
|
93
|
+
spawnWorker();
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=supervisor.js.map
|