@hyperdrive.bot/paseo-server 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +31 -0
- package/README.md +111 -0
- package/dist/scripts/dev-runner.js +37 -0
- package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
- package/dist/scripts/supervisor-entrypoint.js +141 -0
- package/dist/scripts/supervisor-log-config.js +31 -0
- package/dist/scripts/supervisor.js +252 -0
- package/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
- package/dist/server/executable-resolution/executable-resolution.js +118 -0
- package/dist/server/executable-resolution/windows.d.ts +18 -0
- package/dist/server/executable-resolution/windows.js +65 -0
- package/dist/server/extensions/daemon-backend.d.ts +11 -0
- package/dist/server/extensions/daemon-backend.js +146 -0
- package/dist/server/extensions/extension-host-manager.d.ts +48 -0
- package/dist/server/extensions/extension-host-manager.js +141 -0
- package/dist/server/extensions/extension-loader.d.ts +11 -0
- package/dist/server/extensions/extension-loader.js +47 -0
- package/dist/server/extensions/extension-service.d.ts +17 -0
- package/dist/server/extensions/extension-service.js +76 -0
- package/dist/server/server/agent/activity-curator.d.ts +28 -0
- package/dist/server/server/agent/activity-curator.js +227 -0
- package/dist/server/server/agent/agent-archive.d.ts +11 -0
- package/dist/server/server/agent/agent-archive.js +16 -0
- package/dist/server/server/agent/agent-loading.d.ts +12 -0
- package/dist/server/server/agent/agent-loading.js +55 -0
- package/dist/server/server/agent/agent-manager.d.ts +462 -0
- package/dist/server/server/agent/agent-manager.js +2955 -0
- package/dist/server/server/agent/agent-projections.d.ts +26 -0
- package/dist/server/server/agent/agent-projections.js +404 -0
- package/dist/server/server/agent/agent-prompt.d.ts +76 -0
- package/dist/server/server/agent/agent-prompt.js +230 -0
- package/dist/server/server/agent/agent-response-loop.d.ts +67 -0
- package/dist/server/server/agent/agent-response-loop.js +326 -0
- package/dist/server/server/agent/agent-routes.d.ts +18 -0
- package/dist/server/server/agent/agent-routes.js +107 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts +677 -0
- package/dist/server/server/agent/agent-sdk-types.js +22 -0
- package/dist/server/server/agent/agent-storage.d.ts +152 -0
- package/dist/server/server/agent/agent-storage.js +342 -0
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
- package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +50 -0
- package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts +27 -0
- package/dist/server/server/agent/agent-timeline-store.js +230 -0
- package/dist/server/server/agent/audio-utils.d.ts +3 -0
- package/dist/server/server/agent/audio-utils.js +19 -0
- package/dist/server/server/agent/create-agent/create.d.ts +83 -0
- package/dist/server/server/agent/create-agent/create.js +289 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +54 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +152 -0
- package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
- package/dist/server/server/agent/create-agent-mode.js +62 -0
- package/dist/server/server/agent/create-agent-title.d.ts +10 -0
- package/dist/server/server/agent/create-agent-title.js +34 -0
- package/dist/server/server/agent/dictation-debug.d.ts +13 -0
- package/dist/server/server/agent/dictation-debug.js +50 -0
- package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
- package/dist/server/server/agent/foreground-run-state.js +160 -0
- package/dist/server/server/agent/import-sessions.d.ts +47 -0
- package/dist/server/server/agent/import-sessions.js +145 -0
- package/dist/server/server/agent/lifecycle-command.d.ts +73 -0
- package/dist/server/server/agent/lifecycle-command.js +92 -0
- package/dist/server/server/agent/mcp-server.d.ts +22 -0
- package/dist/server/server/agent/mcp-server.js +544 -0
- package/dist/server/server/agent/mcp-shared.d.ts +193 -0
- package/dist/server/server/agent/mcp-shared.js +197 -0
- package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
- package/dist/server/server/agent/pcm16-resampler.js +63 -0
- package/dist/server/server/agent/permission-response.d.ts +15 -0
- package/dist/server/server/agent/permission-response.js +14 -0
- package/dist/server/server/agent/prompt-attachments.d.ts +7 -0
- package/dist/server/server/agent/prompt-attachments.js +90 -0
- package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
- package/dist/server/server/agent/provider-history-timestamps.js +16 -0
- package/dist/server/server/agent/provider-launch-config.d.ts +51 -0
- package/dist/server/server/agent/provider-launch-config.js +183 -0
- package/dist/server/server/agent/provider-notices.d.ts +3 -0
- package/dist/server/server/agent/provider-notices.js +5 -0
- package/dist/server/server/agent/provider-registry.d.ts +49 -0
- package/dist/server/server/agent/provider-registry.js +578 -0
- package/dist/server/server/agent/provider-session-import.d.ts +10 -0
- package/dist/server/server/agent/provider-session-import.js +49 -0
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +137 -0
- package/dist/server/server/agent/provider-snapshot-manager.js +694 -0
- package/dist/server/server/agent/providers/acp-agent.d.ts +354 -0
- package/dist/server/server/agent/providers/acp-agent.js +2438 -0
- package/dist/server/server/agent/providers/claude/agent.d.ts +341 -0
- package/dist/server/server/agent/providers/claude/agent.js +4606 -0
- package/dist/server/server/agent/providers/claude/background-shell-kill-keys.d.ts +32 -0
- package/dist/server/server/agent/providers/claude/background-shell-kill-keys.js +34 -0
- package/dist/server/server/agent/providers/claude/background-task-tracker.d.ts +49 -0
- package/dist/server/server/agent/providers/claude/background-task-tracker.js +119 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
- package/dist/server/server/agent/providers/claude/hook-handler.d.ts +37 -0
- package/dist/server/server/agent/providers/claude/hook-handler.js +193 -0
- package/dist/server/server/agent/providers/claude/hooks/event-translator.d.ts +49 -0
- package/dist/server/server/agent/providers/claude/hooks/event-translator.js +151 -0
- package/dist/server/server/agent/providers/claude/image-compression.d.ts +10 -0
- package/dist/server/server/agent/providers/claude/image-compression.js +32 -0
- package/dist/server/server/agent/providers/claude/model-manifest.d.ts +104 -0
- package/dist/server/server/agent/providers/claude/model-manifest.js +221 -0
- package/dist/server/server/agent/providers/claude/models.d.ts +11 -0
- package/dist/server/server/agent/providers/claude/models.js +97 -0
- package/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
- package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
- package/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
- package/dist/server/server/agent/providers/claude/project-dir.js +57 -0
- package/dist/server/server/agent/providers/claude/pty-session-launcher.d.ts +41 -0
- package/dist/server/server/agent/providers/claude/pty-session-launcher.js +131 -0
- package/dist/server/server/agent/providers/claude/resume-source.d.ts +11 -0
- package/dist/server/server/agent/providers/claude/resume-source.js +37 -0
- package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
- package/dist/server/server/agent/providers/claude/rewind.js +30 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +22 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js +232 -0
- package/dist/server/server/agent/providers/claude/spawn-config-writer.d.ts +70 -0
- package/dist/server/server/agent/providers/claude/spawn-config-writer.js +229 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +47 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +292 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -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.js +130 -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.js +129 -0
- package/dist/server/server/agent/providers/claude/transport/claude-paths.d.ts +31 -0
- package/dist/server/server/agent/providers/claude/transport/claude-paths.js +63 -0
- package/dist/server/server/agent/providers/claude/transport/continue-flag.d.ts +31 -0
- package/dist/server/server/agent/providers/claude/transport/continue-flag.js +42 -0
- package/dist/server/server/agent/providers/claude/transport/pty-query.d.ts +62 -0
- package/dist/server/server/agent/providers/claude/transport/pty-query.js +265 -0
- package/dist/server/server/agent/providers/claude/transport/pty.d.ts +50 -0
- package/dist/server/server/agent/providers/claude/transport/pty.js +211 -0
- package/dist/server/server/agent/providers/claude/transport/redact.d.ts +2 -0
- package/dist/server/server/agent/providers/claude/transport/redact.js +5 -0
- package/dist/server/server/agent/providers/claude/transport/sdk.d.ts +63 -0
- package/dist/server/server/agent/providers/claude/transport/sdk.js +207 -0
- package/dist/server/server/agent/providers/claude/transport/transcript-sdk-reader.d.ts +27 -0
- package/dist/server/server/agent/providers/claude/transport/transcript-sdk-reader.js +162 -0
- package/dist/server/server/agent/providers/claude/transport/transcript-tailer.d.ts +28 -0
- package/dist/server/server/agent/providers/claude/transport/transcript-tailer.js +166 -0
- package/dist/server/server/agent/providers/claude/transport/truncate-session.d.ts +41 -0
- package/dist/server/server/agent/providers/claude/transport/truncate-session.js +86 -0
- package/dist/server/server/agent/providers/claude/transport/types.d.ts +47 -0
- package/dist/server/server/agent/providers/claude/transport/types.js +2 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +90 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.js +262 -0
- package/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
- package/dist/server/server/agent/providers/codex/rewind.js +46 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +36 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +217 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +830 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +308 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js +4514 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.js +45 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.js +187 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +15 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +18 -0
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +355 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +42 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +161 -0
- package/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
- package/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +85 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js +1010 -0
- package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
- package/dist/server/server/agent/providers/mock-slow-provider.js +39 -0
- package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/paths.js +7 -0
- package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
- package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
- package/dist/server/server/agent/providers/opencode/server-manager.d.ts +91 -0
- package/dist/server/server/agent/providers/opencode/server-manager.js +425 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +25 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.js +39 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.d.ts +92 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.js +268 -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.js +256 -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.js +53 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +286 -0
- package/dist/server/server/agent/providers/opencode-agent.js +2857 -0
- package/dist/server/server/agent/providers/pi/agent.d.ts +137 -0
- package/dist/server/server/agent/providers/pi/agent.js +1650 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.js +233 -0
- package/dist/server/server/agent/providers/pi/history-mapper.d.ts +9 -0
- package/dist/server/server/agent/providers/pi/history-mapper.js +140 -0
- package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
- package/dist/server/server/agent/providers/pi/rewind.js +8 -0
- package/dist/server/server/agent/providers/pi/rpc-types.d.ts +208 -0
- package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
- package/dist/server/server/agent/providers/pi/runtime.d.ts +57 -0
- package/dist/server/server/agent/providers/pi/runtime.js +56 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.js +346 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +83 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +184 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +112 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.js +284 -0
- package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
- package/dist/server/server/agent/providers/provider-image-output.js +111 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
- package/dist/server/server/agent/providers/provider-runner.js +81 -0
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +3 -0
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +60 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
- package/dist/server/server/agent/recordings-debug.d.ts +3 -0
- package/dist/server/server/agent/recordings-debug.js +19 -0
- package/dist/server/server/agent/render-file-attachment.d.ts +29 -0
- package/dist/server/server/agent/render-file-attachment.js +41 -0
- package/dist/server/server/agent/resolve-resume-cwd.d.ts +14 -0
- package/dist/server/server/agent/resolve-resume-cwd.js +49 -0
- package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
- package/dist/server/server/agent/rewind/rewind.js +29 -0
- package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
- package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
- package/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
- package/dist/server/server/agent/runtime-mcp-config.js +53 -0
- package/dist/server/server/agent/session-digest-generator.d.ts +37 -0
- package/dist/server/server/agent/session-digest-generator.js +115 -0
- package/dist/server/server/agent/session-digest.d.ts +35 -0
- package/dist/server/server/agent/session-digest.js +104 -0
- package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
- package/dist/server/server/agent/structured-generation-providers.js +236 -0
- package/dist/server/server/agent/stt-debug.d.ts +10 -0
- package/dist/server/server/agent/stt-debug.js +33 -0
- package/dist/server/server/agent/stt-manager.d.ts +38 -0
- package/dist/server/server/agent/stt-manager.js +246 -0
- package/dist/server/server/agent/system-prompt.d.ts +2 -0
- package/dist/server/server/agent/system-prompt.js +8 -0
- package/dist/server/server/agent/timeline-append.d.ts +10 -0
- package/dist/server/server/agent/timeline-append.js +27 -0
- package/dist/server/server/agent/timeline-projection.d.ts +71 -0
- package/dist/server/server/agent/timeline-projection.js +373 -0
- package/dist/server/server/agent/tools/paseo-tools.d.ts +54 -0
- package/dist/server/server/agent/tools/paseo-tools.js +2197 -0
- package/dist/server/server/agent/tools/types.d.ts +36 -0
- package/dist/server/server/agent/tools/types.js +2 -0
- package/dist/server/server/agent/tts-debug.d.ts +8 -0
- package/dist/server/server/agent/tts-debug.js +24 -0
- package/dist/server/server/agent/tts-manager.d.ts +41 -0
- package/dist/server/server/agent/tts-manager.js +375 -0
- package/dist/server/server/agent/wait-for-agent-tracker.d.ts +15 -0
- package/dist/server/server/agent/wait-for-agent-tracker.js +53 -0
- package/dist/server/server/agent-attention-policy.d.ts +29 -0
- package/dist/server/server/agent-attention-policy.js +36 -0
- package/dist/server/server/atomic-file.d.ts +3 -0
- package/dist/server/server/atomic-file.js +19 -0
- package/dist/server/server/auth.d.ts +38 -0
- package/dist/server/server/auth.js +143 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +92 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
- package/dist/server/server/auto-archive-on-merge/index.js +15 -0
- package/dist/server/server/bootstrap.d.ts +126 -0
- package/dist/server/server/bootstrap.js +1193 -0
- package/dist/server/server/browser-tools/broker.d.ts +45 -0
- package/dist/server/server/browser-tools/broker.js +390 -0
- package/dist/server/server/browser-tools/errors.d.ts +22 -0
- package/dist/server/server/browser-tools/errors.js +27 -0
- package/dist/server/server/browser-tools/policy.d.ts +10 -0
- package/dist/server/server/browser-tools/policy.js +16 -0
- package/dist/server/server/browser-tools/tools.d.ts +16 -0
- package/dist/server/server/browser-tools/tools.js +845 -0
- package/dist/server/server/chat/chat-mentions.d.ts +47 -0
- package/dist/server/server/chat/chat-mentions.js +113 -0
- package/dist/server/server/chat/chat-service.d.ts +78 -0
- package/dist/server/server/chat/chat-service.js +337 -0
- package/dist/server/server/checkout/status-projection.d.ts +19 -0
- package/dist/server/server/checkout/status-projection.js +102 -0
- package/dist/server/server/checkout-diff-manager.d.ts +41 -0
- package/dist/server/server/checkout-diff-manager.js +189 -0
- package/dist/server/server/checkout-git-utils.d.ts +11 -0
- package/dist/server/server/checkout-git-utils.js +34 -0
- package/dist/server/server/client-message-id.d.ts +3 -0
- package/dist/server/server/client-message-id.js +12 -0
- package/dist/server/server/config.d.ts +17 -0
- package/dist/server/server/config.js +320 -0
- package/dist/server/server/connection-offer.d.ts +20 -0
- package/dist/server/server/connection-offer.js +59 -0
- package/dist/server/server/daemon-config-store.d.ts +25 -0
- package/dist/server/server/daemon-config-store.js +194 -0
- package/dist/server/server/daemon-keypair.d.ts +8 -0
- package/dist/server/server/daemon-keypair.js +42 -0
- package/dist/server/server/daemon-version.d.ts +5 -0
- package/dist/server/server/daemon-version.js +22 -0
- package/dist/server/server/daemon-worker.d.ts +2 -0
- package/dist/server/server/daemon-worker.js +251 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +87 -0
- package/dist/server/server/dictation/dictation-stream-manager.js +572 -0
- package/dist/server/server/editor-targets.d.ts +18 -0
- package/dist/server/server/editor-targets.js +109 -0
- package/dist/server/server/exports.d.ts +24 -0
- package/dist/server/server/exports.js +24 -0
- package/dist/server/server/file-download/token-store.d.ts +24 -0
- package/dist/server/server/file-download/token-store.js +40 -0
- package/dist/server/server/file-explorer/file-download-frames.d.ts +27 -0
- package/dist/server/server/file-explorer/file-download-frames.js +47 -0
- package/dist/server/server/file-explorer/service.d.ts +75 -0
- package/dist/server/server/file-explorer/service.js +308 -0
- package/dist/server/server/file-upload/index.d.ts +27 -0
- package/dist/server/server/file-upload/index.js +158 -0
- package/dist/server/server/hostnames.d.ts +13 -0
- package/dist/server/server/hostnames.js +94 -0
- package/dist/server/server/json-utils.d.ts +11 -0
- package/dist/server/server/json-utils.js +45 -0
- package/dist/server/server/lifecycle-reasons.d.ts +4 -0
- package/dist/server/server/lifecycle-reasons.js +6 -0
- package/dist/server/server/logger.d.ts +29 -0
- package/dist/server/server/logger.js +125 -0
- package/dist/server/server/loop-service.d.ts +234 -0
- package/dist/server/server/loop-service.js +769 -0
- package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
- package/dist/server/server/managed-processes/managed-processes.js +326 -0
- package/dist/server/server/meetings/capture-http.d.ts +3 -0
- package/dist/server/server/meetings/capture-http.js +71 -0
- package/dist/server/server/meetings/capture-orchestrator.d.ts +123 -0
- package/dist/server/server/meetings/capture-orchestrator.js +531 -0
- package/dist/server/server/meetings/capture-stream-ws.d.ts +42 -0
- package/dist/server/server/meetings/capture-stream-ws.js +68 -0
- package/dist/server/server/meetings/live-transcription.d.ts +57 -0
- package/dist/server/server/meetings/live-transcription.js +280 -0
- package/dist/server/server/meetings/meetings-http.d.ts +42 -0
- package/dist/server/server/meetings/meetings-http.js +266 -0
- package/dist/server/server/messages.d.ts +9 -0
- package/dist/server/server/messages.js +29 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
- package/dist/server/server/monitoring/telemetry.d.ts +13 -0
- package/dist/server/server/monitoring/telemetry.js +21 -0
- package/dist/server/server/package-version.d.ts +19 -0
- package/dist/server/server/package-version.js +60 -0
- package/dist/server/server/pagination/cursor.d.ts +16 -0
- package/dist/server/server/pagination/cursor.js +62 -0
- package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
- package/dist/server/server/pagination/sortable-pager.js +68 -0
- package/dist/server/server/pairing-offer.d.ts +18 -0
- package/dist/server/server/pairing-offer.js +47 -0
- package/dist/server/server/pairing-qr.d.ts +7 -0
- package/dist/server/server/pairing-qr.js +45 -0
- package/dist/server/server/paseo-env.d.ts +13 -0
- package/dist/server/server/paseo-env.js +53 -0
- package/dist/server/server/paseo-home.d.ts +2 -0
- package/dist/server/server/paseo-home.js +19 -0
- package/dist/server/server/paseo-worktree-service.d.ts +52 -0
- package/dist/server/server/paseo-worktree-service.js +294 -0
- package/dist/server/server/path-utils.d.ts +5 -0
- package/dist/server/server/path-utils.js +34 -0
- package/dist/server/server/persisted-config.d.ts +333 -0
- package/dist/server/server/persisted-config.js +402 -0
- package/dist/server/server/persistence-hooks.d.ts +32 -0
- package/dist/server/server/persistence-hooks.js +97 -0
- package/dist/server/server/pid-lock.d.ts +32 -0
- package/dist/server/server/pid-lock.js +170 -0
- package/dist/server/server/private-files.d.ts +6 -0
- package/dist/server/server/private-files.js +37 -0
- package/dist/server/server/process-diagnostics.d.ts +17 -0
- package/dist/server/server/process-diagnostics.js +22 -0
- package/dist/server/server/push/categories.d.ts +35 -0
- package/dist/server/server/push/categories.js +40 -0
- package/dist/server/server/push/expo-worker.d.ts +51 -0
- package/dist/server/server/push/expo-worker.js +149 -0
- package/dist/server/server/push/index.d.ts +39 -0
- package/dist/server/server/push/index.js +45 -0
- package/dist/server/server/push/notifications.d.ts +9 -0
- package/dist/server/server/push/notifications.js +15 -0
- package/dist/server/server/push/push-service.d.ts +20 -0
- package/dist/server/server/push/push-service.js +66 -0
- package/dist/server/server/push/routes.d.ts +28 -0
- package/dist/server/server/push/routes.js +74 -0
- package/dist/server/server/push/subscriptions.d.ts +42 -0
- package/dist/server/server/push/subscriptions.js +112 -0
- package/dist/server/server/push/token-store.d.ts +29 -0
- package/dist/server/server/push/token-store.js +78 -0
- package/dist/server/server/push/triggers.d.ts +68 -0
- package/dist/server/server/push/triggers.js +103 -0
- package/dist/server/server/push/vapid-keys.d.ts +15 -0
- package/dist/server/server/push/vapid-keys.js +52 -0
- package/dist/server/server/push/web-worker.d.ts +44 -0
- package/dist/server/server/push/web-worker.js +99 -0
- package/dist/server/server/relay-transport.d.ts +31 -0
- package/dist/server/server/relay-transport.js +514 -0
- package/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
- package/dist/server/server/resolve-workspace-id-for-path.js +41 -0
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +32 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +121 -0
- package/dist/server/server/schedule/cron.d.ts +4 -0
- package/dist/server/server/schedule/cron.js +81 -0
- package/dist/server/server/schedule/service.d.ts +52 -0
- package/dist/server/server/schedule/service.js +628 -0
- package/dist/server/server/schedule/store.d.ts +13 -0
- package/dist/server/server/schedule/store.js +57 -0
- package/dist/server/server/script-health-monitor.d.ts +39 -0
- package/dist/server/server/script-health-monitor.js +159 -0
- package/dist/server/server/script-proxy.d.ts +3 -0
- package/dist/server/server/script-proxy.js +2 -0
- package/dist/server/server/script-route-branch-handler.d.ts +10 -0
- package/dist/server/server/script-route-branch-handler.js +11 -0
- package/dist/server/server/script-status-projection.d.ts +36 -0
- package/dist/server/server/script-status-projection.js +200 -0
- package/dist/server/server/server-id.d.ts +17 -0
- package/dist/server/server/server-id.js +68 -0
- package/dist/server/server/service-proxy.d.ts +237 -0
- package/dist/server/server/service-proxy.js +714 -0
- package/dist/server/server/session/agent-config/agent-config-session.d.ts +50 -0
- package/dist/server/server/session/agent-config/agent-config-session.js +98 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +59 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.js +220 -0
- package/dist/server/server/session/chat/chat-schedule-loop-session.d.ts +120 -0
- package/dist/server/server/session/chat/chat-schedule-loop-session.js +489 -0
- package/dist/server/server/session/checkout/checkout-session.d.ts +140 -0
- package/dist/server/server/session/checkout/checkout-session.js +927 -0
- package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
- package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
- package/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
- package/dist/server/server/session/daemon/daemon-session.d.ts +76 -0
- package/dist/server/server/session/daemon/daemon-session.js +148 -0
- package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
- package/dist/server/server/session/daemon/diagnostics.js +431 -0
- package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
- package/dist/server/server/session/daemon/install-origin.js +64 -0
- package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
- package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
- package/dist/server/server/session/files/workspace-files-session.d.ts +43 -0
- package/dist/server/server/session/files/workspace-files-session.js +218 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
- package/dist/server/server/session/project-config/project-config-session.d.ts +34 -0
- package/dist/server/server/session/project-config/project-config-session.js +125 -0
- package/dist/server/server/session/provider/provider-catalog-session.d.ts +74 -0
- package/dist/server/server/session/provider/provider-catalog-session.js +343 -0
- package/dist/server/server/session/session-rename-route.d.ts +4 -0
- package/dist/server/server/session/session-rename-route.js +71 -0
- package/dist/server/server/session/session-rename-service.d.ts +25 -0
- package/dist/server/server/session/session-rename-service.js +76 -0
- package/dist/server/server/session/voice/voice-session.d.ts +166 -0
- package/dist/server/server/session/voice/voice-session.js +893 -0
- package/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
- package/dist/server/server/session/voice/voice-turn-controller.js +393 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +36 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +34 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +190 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
- package/dist/server/server/session.d.ts +562 -0
- package/dist/server/server/session.js +5787 -0
- package/dist/server/server/speech/audio.d.ts +10 -0
- package/dist/server/server/speech/audio.js +101 -0
- package/dist/server/server/speech/provider-resolver.d.ts +3 -0
- package/dist/server/server/speech/provider-resolver.js +7 -0
- package/dist/server/server/speech/providers/local/config.d.ts +30 -0
- package/dist/server/server/speech/providers/local/config.js +134 -0
- package/dist/server/server/speech/providers/local/models.d.ts +11 -0
- package/dist/server/server/speech/providers/local/models.js +17 -0
- package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
- package/dist/server/server/speech/providers/local/runtime.js +135 -0
- package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +56 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +74 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +15 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +142 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -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.js +137 -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.js +133 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -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.js +101 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
- package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
- package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
- package/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
- package/dist/server/server/speech/providers/local/worker-client.js +611 -0
- package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
- package/dist/server/server/speech/providers/local/worker-process.js +270 -0
- package/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
- package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
- package/dist/server/server/speech/providers/openai/config.d.ts +19 -0
- package/dist/server/server/speech/providers/openai/config.js +148 -0
- package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
- package/dist/server/server/speech/providers/openai/runtime.js +102 -0
- package/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
- package/dist/server/server/speech/providers/openai/stt.js +209 -0
- package/dist/server/server/speech/providers/openai/tts.d.ts +19 -0
- package/dist/server/server/speech/providers/openai/tts.js +48 -0
- package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
- package/dist/server/server/speech/speech-config-resolver.js +132 -0
- package/dist/server/server/speech/speech-provider.d.ts +59 -0
- package/dist/server/server/speech/speech-provider.js +2 -0
- package/dist/server/server/speech/speech-runtime.d.ts +45 -0
- package/dist/server/server/speech/speech-runtime.js +562 -0
- package/dist/server/server/speech/speech-types.d.ts +22 -0
- package/dist/server/server/speech/speech-types.js +8 -0
- package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
- package/dist/server/server/speech/turn-detection-provider.js +2 -0
- package/dist/server/server/uploads/file-attachment-validation.d.ts +61 -0
- package/dist/server/server/uploads/file-attachment-validation.js +56 -0
- package/dist/server/server/uploads/staging-service.d.ts +91 -0
- package/dist/server/server/uploads/staging-service.js +144 -0
- package/dist/server/server/utils/diff-highlighter.d.ts +57 -0
- package/dist/server/server/utils/diff-highlighter.js +279 -0
- package/dist/server/server/voice/voice-turn-controller.d.ts +38 -0
- package/dist/server/server/voice/voice-turn-controller.js +393 -0
- package/dist/server/server/voice-config.d.ts +15 -0
- package/dist/server/server/voice-config.js +54 -0
- package/dist/server/server/voice-permission-policy.d.ts +4 -0
- package/dist/server/server/voice-permission-policy.js +13 -0
- package/dist/server/server/voice-types.d.ts +12 -0
- package/dist/server/server/voice-types.js +2 -0
- package/dist/server/server/watch/composer-dictate.d.ts +42 -0
- package/dist/server/server/watch/composer-dictate.js +37 -0
- package/dist/server/server/watch/notification-action.d.ts +38 -0
- package/dist/server/server/watch/notification-action.js +54 -0
- package/dist/server/server/watch/notification-registry.d.ts +16 -0
- package/dist/server/server/watch/notification-registry.js +2 -0
- package/dist/server/server/web-ui.d.ts +10 -0
- package/dist/server/server/web-ui.js +205 -0
- package/dist/server/server/websocket/runtime-metrics.d.ts +94 -0
- package/dist/server/server/websocket/runtime-metrics.js +148 -0
- package/dist/server/server/websocket-server.d.ts +193 -0
- package/dist/server/server/websocket-server.js +1768 -0
- package/dist/server/server/workflow/workflow-feature.d.ts +2 -0
- package/dist/server/server/workflow/workflow-feature.js +8 -0
- package/dist/server/server/workflow/workflow-http-routes.d.ts +27 -0
- package/dist/server/server/workflow/workflow-http-routes.js +97 -0
- package/dist/server/server/workflow/workflow-manager.d.ts +228 -0
- package/dist/server/server/workflow/workflow-manager.js +444 -0
- package/dist/server/server/workflow/workflow-progress.d.ts +95 -0
- package/dist/server/server/workflow/workflow-progress.js +178 -0
- package/dist/server/server/workflow/workflow-storage.d.ts +36 -0
- package/dist/server/server/workflow/workflow-storage.js +143 -0
- package/dist/server/server/workspace/all-sessions-route.d.ts +32 -0
- package/dist/server/server/workspace/all-sessions-route.js +138 -0
- package/dist/server/server/workspace/session-openable.d.ts +16 -0
- package/dist/server/server/workspace/session-openable.js +48 -0
- package/dist/server/server/workspace/sessions-route.d.ts +15 -0
- package/dist/server/server/workspace/sessions-route.js +108 -0
- package/dist/server/server/workspace/sessions-search-route.d.ts +68 -0
- package/dist/server/server/workspace/sessions-search-route.js +203 -0
- package/dist/server/server/workspace-archive-service.d.ts +65 -0
- package/dist/server/server/workspace-archive-service.js +229 -0
- package/dist/server/server/workspace-auto-name.d.ts +55 -0
- package/dist/server/server/workspace-auto-name.js +128 -0
- package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
- package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
- package/dist/server/server/workspace-directory.d.ts +93 -0
- package/dist/server/server/workspace-directory.js +422 -0
- package/dist/server/server/workspace-git-metadata.d.ts +24 -0
- package/dist/server/server/workspace-git-metadata.js +55 -0
- package/dist/server/server/workspace-git-service.d.ts +257 -0
- package/dist/server/server/workspace-git-service.js +1386 -0
- package/dist/server/server/workspace-reconciliation-service.d.ts +57 -0
- package/dist/server/server/workspace-reconciliation-service.js +278 -0
- package/dist/server/server/workspace-registry-bootstrap.d.ts +13 -0
- package/dist/server/server/workspace-registry-bootstrap.js +121 -0
- package/dist/server/server/workspace-registry-model.d.ts +55 -0
- package/dist/server/server/workspace-registry-model.js +190 -0
- package/dist/server/server/workspace-registry.d.ts +117 -0
- package/dist/server/server/workspace-registry.js +194 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
- package/dist/server/server/workspace-script-runtime-store.js +78 -0
- package/dist/server/server/workspace-service-env.d.ts +18 -0
- package/dist/server/server/workspace-service-env.js +85 -0
- package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
- package/dist/server/server/workspace-service-port-registry.js +59 -0
- package/dist/server/server/worktree/commands.d.ts +55 -0
- package/dist/server/server/worktree/commands.js +107 -0
- package/dist/server/server/worktree-bootstrap.d.ts +76 -0
- package/dist/server/server/worktree-bootstrap.js +720 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
- package/dist/server/server/worktree-branch-name-generator.js +91 -0
- package/dist/server/server/worktree-core.d.ts +31 -0
- package/dist/server/server/worktree-core.js +105 -0
- package/dist/server/server/worktree-errors.d.ts +12 -0
- package/dist/server/server/worktree-errors.js +28 -0
- package/dist/server/server/worktree-session.d.ts +152 -0
- package/dist/server/server/worktree-session.js +466 -0
- package/dist/server/services/github-service.d.ts +337 -0
- package/dist/server/services/github-service.js +2101 -0
- package/dist/server/services/quota-fetcher/manifest.d.ts +4 -0
- package/dist/server/services/quota-fetcher/manifest.js +52 -0
- package/dist/server/services/quota-fetcher/provider.d.ts +17 -0
- package/dist/server/services/quota-fetcher/provider.js +2 -0
- package/dist/server/services/quota-fetcher/providers/claude.d.ts +26 -0
- package/dist/server/services/quota-fetcher/providers/claude.js +217 -0
- package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/codex.js +211 -0
- package/dist/server/services/quota-fetcher/providers/copilot.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/copilot.js +75 -0
- package/dist/server/services/quota-fetcher/providers/cursor.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/cursor.js +123 -0
- package/dist/server/services/quota-fetcher/providers/grok.d.ts +18 -0
- package/dist/server/services/quota-fetcher/providers/grok.js +89 -0
- package/dist/server/services/quota-fetcher/providers/kimi.d.ts +20 -0
- package/dist/server/services/quota-fetcher/providers/kimi.js +89 -0
- package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
- package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
- package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
- package/dist/server/services/quota-fetcher/service.d.ts +28 -0
- package/dist/server/services/quota-fetcher/service.js +58 -0
- package/dist/server/services/quota-fetcher/usage.d.ts +22 -0
- package/dist/server/services/quota-fetcher/usage.js +49 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +20 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.js +59 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
- package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
- package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
- package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
- package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
- package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
- package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +46 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
- package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
- package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
- package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
- package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
- package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/server/terminal/terminal-capture.d.ts +12 -0
- package/dist/server/terminal/terminal-capture.js +43 -0
- package/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
- package/dist/server/terminal/terminal-manager-factory.js +5 -0
- package/dist/server/terminal/terminal-manager.d.ts +78 -0
- package/dist/server/terminal/terminal-manager.js +319 -0
- package/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
- package/dist/server/terminal/terminal-output-coalescer.js +73 -0
- package/dist/server/terminal/terminal-restore.d.ts +18 -0
- package/dist/server/terminal/terminal-restore.js +52 -0
- package/dist/server/terminal/terminal-session-controller.d.ts +85 -0
- package/dist/server/terminal/terminal-session-controller.js +819 -0
- package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
- package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
- package/dist/server/terminal/terminal-worker-process.js +304 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts +119 -0
- package/dist/server/terminal/terminal-worker-protocol.js +2 -0
- package/dist/server/terminal/terminal.d.ts +151 -0
- package/dist/server/terminal/terminal.js +1161 -0
- package/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
- package/dist/server/terminal/worker-terminal-manager.js +688 -0
- package/dist/server/utils/build-metadata-prompt.d.ts +19 -0
- package/dist/server/utils/build-metadata-prompt.js +29 -0
- package/dist/server/utils/checkout-git.d.ts +253 -0
- package/dist/server/utils/checkout-git.js +2238 -0
- package/dist/server/utils/directory-suggestions.d.ts +26 -0
- package/dist/server/utils/directory-suggestions.js +830 -0
- package/dist/server/utils/git-rev-parse-path.d.ts +3 -0
- package/dist/server/utils/git-rev-parse-path.js +21 -0
- package/dist/server/utils/github-remote.d.ts +9 -0
- package/dist/server/utils/github-remote.js +62 -0
- package/dist/server/utils/paseo-config-file.d.ts +30 -0
- package/dist/server/utils/paseo-config-file.js +90 -0
- package/dist/server/utils/path.d.ts +18 -0
- package/dist/server/utils/path.js +123 -0
- package/dist/server/utils/project-icon.d.ts +39 -0
- package/dist/server/utils/project-icon.js +364 -0
- package/dist/server/utils/promise-timeout.d.ts +9 -0
- package/dist/server/utils/promise-timeout.js +25 -0
- package/dist/server/utils/run-git-command.d.ts +37 -0
- package/dist/server/utils/run-git-command.js +232 -0
- package/dist/server/utils/spawn.d.ts +33 -0
- package/dist/server/utils/spawn.js +71 -0
- package/dist/server/utils/string-command-shell.d.ts +10 -0
- package/dist/server/utils/string-command-shell.js +21 -0
- package/dist/server/utils/tree-kill.d.ts +18 -0
- package/dist/server/utils/tree-kill.js +77 -0
- package/dist/server/utils/windows-command.d.ts +15 -0
- package/dist/server/utils/windows-command.js +41 -0
- package/dist/server/utils/worktree-metadata.d.ts +39 -0
- package/dist/server/utils/worktree-metadata.js +174 -0
- package/dist/server/utils/worktree.d.ts +205 -0
- package/dist/server/utils/worktree.js +1119 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-127b8d280bb901a810b0c9fa094d4945.js +5 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-127b8d280bb901a810b0c9fa094d4945.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-127b8d280bb901a810b0c9fa094d4945.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-127b8d280bb901a810b0c9fa094d4945.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-127b8d280bb901a810b0c9fa094d4945.js.map.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-0e6ed782245f4dda6e0a73171a133d45.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-0e6ed782245f4dda6e0a73171a133d45.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-0e6ed782245f4dda6e0a73171a133d45.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-0e6ed782245f4dda6e0a73171a133d45.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-0e6ed782245f4dda6e0a73171a133d45.js.map.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-b31c4d6fb6383454381e43410736cb89.js +16533 -0
- package/dist/server/web-ui/_expo/static/js/web/index-b31c4d6fb6383454381e43410736cb89.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-b31c4d6fb6383454381e43410736cb89.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-b31c4d6fb6383454381e43410736cb89.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-b31c4d6fb6383454381e43410736cb89.js.map.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-0d03551c4ea3780f5b81db6a7aebb017.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-0d03551c4ea3780f5b81db6a7aebb017.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-0d03551c4ea3780f5b81db6a7aebb017.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-0d03551c4ea3780f5b81db6a7aebb017.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-0d03551c4ea3780f5b81db6a7aebb017.js.map.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-feda55adc8031781db083743ca73cbc3.js +5 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-feda55adc8031781db083743ca73cbc3.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-feda55adc8031781db083743ca73cbc3.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-feda55adc8031781db083743ca73cbc3.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-feda55adc8031781db083743ca73cbc3.js.map.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/profiler-593c9481537cb12f4b6c17ef48bcba1c.js +11 -0
- package/dist/server/web-ui/_expo/static/js/web/profiler-593c9481537cb12f4b6c17ef48bcba1c.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/profiler-593c9481537cb12f4b6c17ef48bcba1c.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/profiler-593c9481537cb12f4b6c17ef48bcba1c.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/profiler-593c9481537cb12f4b6c17ef48bcba1c.js.map.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/startRecording-533a4fe1acfc37460ac2912610062d3a.js +60 -0
- package/dist/server/web-ui/_expo/static/js/web/startRecording-533a4fe1acfc37460ac2912610062d3a.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/startRecording-533a4fe1acfc37460ac2912610062d3a.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/startRecording-533a4fe1acfc37460ac2912610062d3a.js.map.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/startRecording-533a4fe1acfc37460ac2912610062d3a.js.map.gz +0 -0
- package/dist/server/web-ui/apple-touch-icon.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/antigravity.6e91a685c33435e0b466a56db86cf141.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/cursor.c31d6bce4fe9aadc3fe59962f4c4fcf3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/file-explorer.3e15e8f72c825c85ce336bcb0cdef776.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/finder.7f68fc2c475621a672e1be09309d5567.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/vscode.832bdb4c685d930f1c864c793703600b.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/webstorm.aa5dc2cd8c20cc0a155c4c5c5ab3c5f5.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
- package/dist/server/web-ui/favicon.ico +0 -0
- package/dist/server/web-ui/index.html +90 -0
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/dist/server/web-ui/manifest.json +27 -0
- package/dist/server/web-ui/manifest.json.br +0 -0
- package/dist/server/web-ui/manifest.json.gz +0 -0
- package/dist/server/web-ui/metadata.json +1 -0
- package/dist/server/web-ui/metadata.json.br +1 -0
- package/dist/server/web-ui/metadata.json.gz +0 -0
- package/dist/server/web-ui/pwa-icon-192.png +0 -0
- package/dist/server/web-ui/pwa-icon-512.png +0 -0
- package/dist/server/web-ui/robots.txt +2 -0
- package/dist/server/web-ui/service-worker.js +87 -0
- package/dist/server/web-ui/service-worker.js.br +0 -0
- package/dist/server/web-ui/service-worker.js.gz +0 -0
- package/dist/src/executable-resolution/executable-resolution.js +118 -0
- package/dist/src/executable-resolution/windows.js +65 -0
- package/dist/src/server/agent/provider-launch-config.js +183 -0
- package/dist/src/server/paseo-env.js +53 -0
- package/dist/src/server/paseo-home.js +19 -0
- package/dist/src/server/persisted-config.js +402 -0
- package/dist/src/server/pid-lock.js +170 -0
- package/dist/src/server/private-files.js +37 -0
- package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
- package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/src/utils/spawn.js +71 -0
- package/dist/src/utils/windows-command.js +41 -0
- package/package.json +143 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { open, readFile, unlink, mkdir } from "node:fs/promises";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { hostname } from "node:os";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
export const pidLockInfoSchema = z.object({
|
|
7
|
+
pid: z.number(),
|
|
8
|
+
startedAt: z.string(),
|
|
9
|
+
hostname: z.string(),
|
|
10
|
+
uid: z.number(),
|
|
11
|
+
listen: z.string().nullable(),
|
|
12
|
+
desktopManaged: z.boolean().optional(),
|
|
13
|
+
});
|
|
14
|
+
function parsePidLockInfo(raw) {
|
|
15
|
+
const result = pidLockInfoSchema.safeParse(raw);
|
|
16
|
+
return result.success ? result.data : null;
|
|
17
|
+
}
|
|
18
|
+
function isErrnoException(err) {
|
|
19
|
+
return err instanceof Error && "code" in err;
|
|
20
|
+
}
|
|
21
|
+
export class PidLockError extends Error {
|
|
22
|
+
constructor(message, existingLock) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.existingLock = existingLock;
|
|
25
|
+
this.name = "PidLockError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function isPidRunning(pid) {
|
|
29
|
+
try {
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function getPidFilePath(paseoHome) {
|
|
38
|
+
return join(paseoHome, "paseo.pid");
|
|
39
|
+
}
|
|
40
|
+
function resolveOwnerPid(ownerPid) {
|
|
41
|
+
if (typeof ownerPid === "number" && Number.isInteger(ownerPid) && ownerPid > 0) {
|
|
42
|
+
return ownerPid;
|
|
43
|
+
}
|
|
44
|
+
return process.pid;
|
|
45
|
+
}
|
|
46
|
+
export async function acquirePidLock(paseoHome, listen, options) {
|
|
47
|
+
const pidPath = getPidFilePath(paseoHome);
|
|
48
|
+
// Ensure paseoHome directory exists
|
|
49
|
+
if (!existsSync(paseoHome)) {
|
|
50
|
+
await mkdir(paseoHome, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
// Try to read existing lock
|
|
53
|
+
let existingLock = null;
|
|
54
|
+
try {
|
|
55
|
+
const content = await readFile(pidPath, "utf-8");
|
|
56
|
+
existingLock = parsePidLockInfo(JSON.parse(content));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// No existing lock or invalid JSON - that's fine
|
|
60
|
+
}
|
|
61
|
+
// Check if existing lock is stale
|
|
62
|
+
const lockOwnerPid = resolveOwnerPid(options?.ownerPid);
|
|
63
|
+
if (existingLock) {
|
|
64
|
+
if (isPidRunning(existingLock.pid)) {
|
|
65
|
+
if (existingLock.pid === lockOwnerPid) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
throw new PidLockError(`Another Paseo daemon is already running (PID ${existingLock.pid}, started ${existingLock.startedAt})`, existingLock);
|
|
69
|
+
}
|
|
70
|
+
// Stale lock - remove it
|
|
71
|
+
await unlink(pidPath).catch(() => { });
|
|
72
|
+
}
|
|
73
|
+
// Create new lock with exclusive flag
|
|
74
|
+
const lockInfo = {
|
|
75
|
+
pid: lockOwnerPid,
|
|
76
|
+
startedAt: new Date().toISOString(),
|
|
77
|
+
hostname: hostname(),
|
|
78
|
+
uid: process.getuid?.() ?? 0,
|
|
79
|
+
listen,
|
|
80
|
+
...(process.env.PASEO_DESKTOP_MANAGED === "1" ? { desktopManaged: true } : {}),
|
|
81
|
+
};
|
|
82
|
+
let fd;
|
|
83
|
+
try {
|
|
84
|
+
fd = await open(pidPath, "wx");
|
|
85
|
+
await fd.write(JSON.stringify(lockInfo));
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
if (isErrnoException(err) && err.code === "EEXIST") {
|
|
89
|
+
// Race condition - another process created the file
|
|
90
|
+
// Re-read and check
|
|
91
|
+
try {
|
|
92
|
+
const content = await readFile(pidPath, "utf-8");
|
|
93
|
+
const raceLock = parsePidLockInfo(JSON.parse(content));
|
|
94
|
+
if (raceLock) {
|
|
95
|
+
throw new PidLockError(`Another Paseo daemon is already running (PID ${raceLock.pid})`, raceLock);
|
|
96
|
+
}
|
|
97
|
+
throw new PidLockError("Failed to acquire PID lock due to race condition");
|
|
98
|
+
}
|
|
99
|
+
catch (innerErr) {
|
|
100
|
+
if (innerErr instanceof PidLockError)
|
|
101
|
+
throw innerErr;
|
|
102
|
+
throw new PidLockError("Failed to acquire PID lock due to race condition");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
await fd?.close();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export async function updatePidLock(paseoHome, patch, options) {
|
|
112
|
+
const pidPath = getPidFilePath(paseoHome);
|
|
113
|
+
const lockOwnerPid = resolveOwnerPid(options?.ownerPid);
|
|
114
|
+
const content = await readFile(pidPath, "utf-8");
|
|
115
|
+
const existingLock = parsePidLockInfo(JSON.parse(content));
|
|
116
|
+
if (!existingLock) {
|
|
117
|
+
throw new PidLockError("Cannot update PID lock: invalid lock file");
|
|
118
|
+
}
|
|
119
|
+
if (existingLock.pid !== lockOwnerPid) {
|
|
120
|
+
throw new PidLockError(`Cannot update PID lock owned by PID ${existingLock.pid}`, existingLock);
|
|
121
|
+
}
|
|
122
|
+
const updatedLock = {
|
|
123
|
+
...existingLock,
|
|
124
|
+
...patch,
|
|
125
|
+
};
|
|
126
|
+
const fd = await open(pidPath, "r+");
|
|
127
|
+
try {
|
|
128
|
+
await fd.truncate(0);
|
|
129
|
+
await fd.writeFile(JSON.stringify(updatedLock));
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
await fd.close();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export async function releasePidLock(paseoHome, options) {
|
|
136
|
+
const pidPath = getPidFilePath(paseoHome);
|
|
137
|
+
const lockOwnerPid = resolveOwnerPid(options?.ownerPid);
|
|
138
|
+
try {
|
|
139
|
+
// Only remove if it's our lock
|
|
140
|
+
const content = await readFile(pidPath, "utf-8");
|
|
141
|
+
const lock = parsePidLockInfo(JSON.parse(content));
|
|
142
|
+
if (lock?.pid === lockOwnerPid) {
|
|
143
|
+
await unlink(pidPath);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Ignore errors - lock may already be gone
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export async function getPidLockInfo(paseoHome) {
|
|
151
|
+
const pidPath = getPidFilePath(paseoHome);
|
|
152
|
+
try {
|
|
153
|
+
const content = await readFile(pidPath, "utf-8");
|
|
154
|
+
return parsePidLockInfo(JSON.parse(content));
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export async function isLocked(paseoHome) {
|
|
161
|
+
const info = await getPidLockInfo(paseoHome);
|
|
162
|
+
if (!info) {
|
|
163
|
+
return { locked: false };
|
|
164
|
+
}
|
|
165
|
+
if (!isPidRunning(info.pid)) {
|
|
166
|
+
return { locked: false, info };
|
|
167
|
+
}
|
|
168
|
+
return { locked: true, info };
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=pid-lock.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const PRIVATE_DIRECTORY_MODE = 448;
|
|
2
|
+
export declare const PRIVATE_FILE_MODE = 384;
|
|
3
|
+
export declare function ensurePrivateDirectory(directoryPath: string): void;
|
|
4
|
+
export declare function ensurePrivateFile(filePath: string): void;
|
|
5
|
+
export declare function writePrivateFileAtomicSync(filePath: string, data: string | NodeJS.ArrayBufferView): void;
|
|
6
|
+
//# sourceMappingURL=private-files.d.ts.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export const PRIVATE_DIRECTORY_MODE = 0o700;
|
|
5
|
+
export const PRIVATE_FILE_MODE = 0o600;
|
|
6
|
+
function chmodBestEffort(targetPath, mode) {
|
|
7
|
+
if (process.platform === "win32") {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
chmodSync(targetPath, mode);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Keep startup resilient if the filesystem does not support POSIX modes.
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function ensurePrivateDirectory(directoryPath) {
|
|
18
|
+
mkdirSync(directoryPath, { recursive: true, mode: PRIVATE_DIRECTORY_MODE });
|
|
19
|
+
chmodBestEffort(directoryPath, PRIVATE_DIRECTORY_MODE);
|
|
20
|
+
}
|
|
21
|
+
export function ensurePrivateFile(filePath) {
|
|
22
|
+
chmodBestEffort(filePath, PRIVATE_FILE_MODE);
|
|
23
|
+
}
|
|
24
|
+
export function writePrivateFileAtomicSync(filePath, data) {
|
|
25
|
+
ensurePrivateDirectory(path.dirname(filePath));
|
|
26
|
+
const tmpPath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${process.pid}.${randomUUID()}.tmp`);
|
|
27
|
+
try {
|
|
28
|
+
writeFileSync(tmpPath, data, { mode: PRIVATE_FILE_MODE });
|
|
29
|
+
renameSync(tmpPath, filePath);
|
|
30
|
+
ensurePrivateFile(filePath);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
rmSync(tmpPath, { force: true });
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=private-files.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ProcessMemoryDiagnostics {
|
|
2
|
+
rss: number;
|
|
3
|
+
heapTotal: number;
|
|
4
|
+
heapUsed: number;
|
|
5
|
+
external: number;
|
|
6
|
+
arrayBuffers: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ProcessDiagnostics {
|
|
9
|
+
pid: number;
|
|
10
|
+
ppid: number;
|
|
11
|
+
uptimeSeconds: number;
|
|
12
|
+
memory: ProcessMemoryDiagnostics;
|
|
13
|
+
}
|
|
14
|
+
export declare function getProcessMemoryDiagnostics(): ProcessMemoryDiagnostics;
|
|
15
|
+
export declare function getProcessUptimeSeconds(): number;
|
|
16
|
+
export declare function getProcessDiagnostics(): ProcessDiagnostics;
|
|
17
|
+
//# sourceMappingURL=process-diagnostics.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function getProcessMemoryDiagnostics() {
|
|
2
|
+
const memory = process.memoryUsage();
|
|
3
|
+
return {
|
|
4
|
+
rss: memory.rss,
|
|
5
|
+
heapTotal: memory.heapTotal,
|
|
6
|
+
heapUsed: memory.heapUsed,
|
|
7
|
+
external: memory.external,
|
|
8
|
+
arrayBuffers: memory.arrayBuffers,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function getProcessUptimeSeconds() {
|
|
12
|
+
return Math.round(process.uptime() * 1000) / 1000;
|
|
13
|
+
}
|
|
14
|
+
export function getProcessDiagnostics() {
|
|
15
|
+
return {
|
|
16
|
+
pid: process.pid,
|
|
17
|
+
ppid: process.ppid,
|
|
18
|
+
uptimeSeconds: getProcessUptimeSeconds(),
|
|
19
|
+
memory: getProcessMemoryDiagnostics(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=process-diagnostics.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { PushTriggerKind } from "./triggers.js";
|
|
2
|
+
/**
|
|
3
|
+
* Story 6.4 / D.1 (FR4.1) — Lock-Screen permission approval category.
|
|
4
|
+
*
|
|
5
|
+
* iOS renders interactive notification action buttons when a push carries a
|
|
6
|
+
* `categoryId` that matches a category the app registered at runtime via
|
|
7
|
+
* `Notifications.setNotificationCategoryAsync`. This module is the single
|
|
8
|
+
* server-side source of truth for that category's identifier + actions so the
|
|
9
|
+
* push payload (`expo-worker.ts`) and the app's runtime registration agree.
|
|
10
|
+
*
|
|
11
|
+
* The two actions are BACKGROUND actions (`opensAppToForeground: false`) so
|
|
12
|
+
* tapping Approve / Reject on the Lock Screen dispatches the decision over the
|
|
13
|
+
* daemon WebSocket WITHOUT foregrounding the app (the AC).
|
|
14
|
+
*/
|
|
15
|
+
export declare const PERMISSION_REQUEST_CATEGORY_ID = "agent_permission_request";
|
|
16
|
+
export declare const PERMISSION_ACTION_APPROVE = "approve";
|
|
17
|
+
export declare const PERMISSION_ACTION_REJECT = "reject";
|
|
18
|
+
export interface NotificationActionDefinition {
|
|
19
|
+
identifier: string;
|
|
20
|
+
buttonTitle: string;
|
|
21
|
+
/** false = background action that does NOT bring the app to the foreground. */
|
|
22
|
+
opensAppToForeground: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface NotificationCategoryDefinition {
|
|
25
|
+
identifier: string;
|
|
26
|
+
actions: NotificationActionDefinition[];
|
|
27
|
+
}
|
|
28
|
+
export declare const PERMISSION_REQUEST_CATEGORY: NotificationCategoryDefinition;
|
|
29
|
+
/**
|
|
30
|
+
* Map a push trigger kind to the iOS notification `categoryId` to attach.
|
|
31
|
+
* Only permission requests carry the interactive Approve/Reject category;
|
|
32
|
+
* every other kind returns `null` (a plain notification with no actions).
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolvePushCategoryId(kind: PushTriggerKind): string | null;
|
|
35
|
+
//# sourceMappingURL=categories.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 6.4 / D.1 (FR4.1) — Lock-Screen permission approval category.
|
|
3
|
+
*
|
|
4
|
+
* iOS renders interactive notification action buttons when a push carries a
|
|
5
|
+
* `categoryId` that matches a category the app registered at runtime via
|
|
6
|
+
* `Notifications.setNotificationCategoryAsync`. This module is the single
|
|
7
|
+
* server-side source of truth for that category's identifier + actions so the
|
|
8
|
+
* push payload (`expo-worker.ts`) and the app's runtime registration agree.
|
|
9
|
+
*
|
|
10
|
+
* The two actions are BACKGROUND actions (`opensAppToForeground: false`) so
|
|
11
|
+
* tapping Approve / Reject on the Lock Screen dispatches the decision over the
|
|
12
|
+
* daemon WebSocket WITHOUT foregrounding the app (the AC).
|
|
13
|
+
*/
|
|
14
|
+
export const PERMISSION_REQUEST_CATEGORY_ID = "agent_permission_request";
|
|
15
|
+
export const PERMISSION_ACTION_APPROVE = "approve";
|
|
16
|
+
export const PERMISSION_ACTION_REJECT = "reject";
|
|
17
|
+
export const PERMISSION_REQUEST_CATEGORY = {
|
|
18
|
+
identifier: PERMISSION_REQUEST_CATEGORY_ID,
|
|
19
|
+
actions: [
|
|
20
|
+
{
|
|
21
|
+
identifier: PERMISSION_ACTION_APPROVE,
|
|
22
|
+
buttonTitle: "Approve",
|
|
23
|
+
opensAppToForeground: false,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
identifier: PERMISSION_ACTION_REJECT,
|
|
27
|
+
buttonTitle: "Reject",
|
|
28
|
+
opensAppToForeground: false,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Map a push trigger kind to the iOS notification `categoryId` to attach.
|
|
34
|
+
* Only permission requests carry the interactive Approve/Reject category;
|
|
35
|
+
* every other kind returns `null` (a plain notification with no actions).
|
|
36
|
+
*/
|
|
37
|
+
export function resolvePushCategoryId(kind) {
|
|
38
|
+
return kind === "permission_needed" ? PERMISSION_REQUEST_CATEGORY_ID : null;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=categories.js.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type pino from "pino";
|
|
2
|
+
import { type ExpoPushMessage, type ExpoPushReceipt, type ExpoPushTicket } from "expo-server-sdk";
|
|
3
|
+
import type { PushTriggerEmitter } from "./triggers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Story PASEO-CHAT-ACTIONS-V1-story-1.003 — Expo Push delivery worker.
|
|
6
|
+
*
|
|
7
|
+
* Subscribes to the pushTrigger emitter from Story 1.1, fans out one Expo Push
|
|
8
|
+
* message per registered Expo token (from Story 1.2 store), and reaps receipts
|
|
9
|
+
* after a configurable delay to detect DeviceNotRegistered (token cleanup).
|
|
10
|
+
*
|
|
11
|
+
* Honors PASEO_PUSH_ENABLED=false as a kill switch (mirrors the epic Rollback
|
|
12
|
+
* Plan). Errors from the Expo HTTPS API are logged and swallowed — the daemon
|
|
13
|
+
* never crashes on push failure.
|
|
14
|
+
*/
|
|
15
|
+
export interface ExpoSubscriptionStore {
|
|
16
|
+
listExpoTokens(): string[];
|
|
17
|
+
removeExpoToken(token: string): void;
|
|
18
|
+
}
|
|
19
|
+
export interface ExpoWorkerEnv {
|
|
20
|
+
PASEO_PUSH_ENABLED?: string;
|
|
21
|
+
EXPO_ACCESS_TOKEN?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ExpoWorkerClient {
|
|
24
|
+
chunkPushNotifications(messages: ExpoPushMessage[]): ExpoPushMessage[][];
|
|
25
|
+
sendPushNotificationsAsync(messages: ExpoPushMessage[]): Promise<ExpoPushTicket[]>;
|
|
26
|
+
chunkPushNotificationReceiptIds(ids: string[]): string[][];
|
|
27
|
+
getPushNotificationReceiptsAsync(ids: string[]): Promise<{
|
|
28
|
+
[id: string]: ExpoPushReceipt;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
export interface StartExpoPushWorkerOptions {
|
|
32
|
+
pushTrigger: PushTriggerEmitter;
|
|
33
|
+
subscriptionStore: ExpoSubscriptionStore;
|
|
34
|
+
logger: pino.Logger;
|
|
35
|
+
env?: ExpoWorkerEnv;
|
|
36
|
+
/** Override for tests. Production calls `new Expo({ accessToken })`. */
|
|
37
|
+
clientFactory?: (env: ExpoWorkerEnv) => ExpoWorkerClient;
|
|
38
|
+
/** Receipt-fetch delay; Expo requires ≥15 min in production. Tests override. */
|
|
39
|
+
receiptDelayMs?: number;
|
|
40
|
+
/** Override for tests. Used to schedule the deferred receipt fetch. */
|
|
41
|
+
setTimer?: (fn: () => void, ms: number) => unknown;
|
|
42
|
+
/** Override for tests. Used to cancel scheduled receipt fetches on stop(). */
|
|
43
|
+
clearTimer?: (handle: unknown) => void;
|
|
44
|
+
/** Token-validator hook. Defaults to `Expo.isExpoPushToken`. */
|
|
45
|
+
isExpoPushToken?: (value: unknown) => boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface ExpoPushWorker {
|
|
48
|
+
stop(): void;
|
|
49
|
+
}
|
|
50
|
+
export declare function startExpoPushWorker(options: StartExpoPushWorkerOptions): ExpoPushWorker;
|
|
51
|
+
//# sourceMappingURL=expo-worker.d.ts.map
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Expo, } from "expo-server-sdk";
|
|
2
|
+
import { resolvePushCategoryId } from "./categories.js";
|
|
3
|
+
const DEFAULT_RECEIPT_DELAY_MS = 15 * 60 * 1000;
|
|
4
|
+
const BODY_BY_KIND = {
|
|
5
|
+
completed: "Agent finished",
|
|
6
|
+
permission_needed: "Permission needed",
|
|
7
|
+
input_required: "Waiting for your input",
|
|
8
|
+
};
|
|
9
|
+
export function startExpoPushWorker(options) {
|
|
10
|
+
const { pushTrigger, subscriptionStore, logger } = options;
|
|
11
|
+
const env = options.env ?? process.env;
|
|
12
|
+
const workerLogger = logger.child({ component: "expo-push-worker" });
|
|
13
|
+
if (env.PASEO_PUSH_ENABLED === "false") {
|
|
14
|
+
workerLogger.info("expo push worker disabled by PASEO_PUSH_ENABLED=false");
|
|
15
|
+
return { stop() { } };
|
|
16
|
+
}
|
|
17
|
+
const isExpoPushToken = options.isExpoPushToken ?? Expo.isExpoPushToken.bind(Expo);
|
|
18
|
+
const setTimer = options.setTimer ??
|
|
19
|
+
((fn, ms) => setTimeout(fn, ms));
|
|
20
|
+
const clearTimer = options.clearTimer ?? ((handle) => clearTimeout(handle));
|
|
21
|
+
const client = options.clientFactory?.(env) ??
|
|
22
|
+
new Expo({ accessToken: env.EXPO_ACCESS_TOKEN });
|
|
23
|
+
const receiptDelayMs = options.receiptDelayMs ?? DEFAULT_RECEIPT_DELAY_MS;
|
|
24
|
+
const pendingReceiptBatches = new Set();
|
|
25
|
+
workerLogger.info("expo push worker started");
|
|
26
|
+
const unsubscribe = pushTrigger.on((payload) => {
|
|
27
|
+
void dispatch(payload).catch((err) => {
|
|
28
|
+
workerLogger.error({ err, sessionId: payload.sessionId, kind: payload.kind }, "expo push dispatch failed");
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
async function dispatch(payload) {
|
|
32
|
+
const tokens = subscriptionStore.listExpoTokens();
|
|
33
|
+
if (tokens.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
const messages = [];
|
|
36
|
+
for (const token of tokens) {
|
|
37
|
+
if (!isExpoPushToken(token)) {
|
|
38
|
+
workerLogger.warn({ token, sessionId: payload.sessionId, kind: payload.kind }, "invalid expo push token — removing from store");
|
|
39
|
+
subscriptionStore.removeExpoToken(token);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// D.1 — permission pushes carry the iOS interactive category so the Lock
|
|
43
|
+
// Screen renders Approve/Reject; the requestId rides in `data` so the
|
|
44
|
+
// background action handler can resolve the decision (NFR1: both fields
|
|
45
|
+
// are additive and ignored by older app builds).
|
|
46
|
+
const categoryId = resolvePushCategoryId(payload.kind);
|
|
47
|
+
messages.push({
|
|
48
|
+
to: token,
|
|
49
|
+
sound: "default",
|
|
50
|
+
title: payload.agentTitle,
|
|
51
|
+
body: BODY_BY_KIND[payload.kind],
|
|
52
|
+
...(categoryId ? { categoryId } : {}),
|
|
53
|
+
data: {
|
|
54
|
+
deepLink: payload.deepLink,
|
|
55
|
+
webPath: payload.webPath,
|
|
56
|
+
serverId: payload.serverId,
|
|
57
|
+
sessionId: payload.sessionId,
|
|
58
|
+
agentId: payload.agentId,
|
|
59
|
+
kind: payload.kind,
|
|
60
|
+
...(payload.requestId ? { requestId: payload.requestId } : {}),
|
|
61
|
+
...(categoryId ? { categoryId } : {}),
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (messages.length === 0)
|
|
66
|
+
return;
|
|
67
|
+
const chunks = client.chunkPushNotifications(messages);
|
|
68
|
+
const ticketsByReceiptId = new Map();
|
|
69
|
+
for (const chunk of chunks) {
|
|
70
|
+
let tickets;
|
|
71
|
+
try {
|
|
72
|
+
tickets = await client.sendPushNotificationsAsync(chunk);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
workerLogger.error({ err, sessionId: payload.sessionId, kind: payload.kind, count: chunk.length }, "sendPushNotificationsAsync rejected");
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
tickets.forEach((ticket, idx) => {
|
|
79
|
+
const token = String(chunk[idx]?.to ?? "");
|
|
80
|
+
if (ticket.status === "error") {
|
|
81
|
+
const details = ticket.details;
|
|
82
|
+
if (details?.error === "DeviceNotRegistered" && token) {
|
|
83
|
+
workerLogger.warn({ sessionId: payload.sessionId, kind: payload.kind }, "DeviceNotRegistered ticket — removing token");
|
|
84
|
+
subscriptionStore.removeExpoToken(token);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
workerLogger.error({ ticket, sessionId: payload.sessionId, kind: payload.kind }, "expo push ticket error");
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (ticket.id && token) {
|
|
92
|
+
ticketsByReceiptId.set(ticket.id, token);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
workerLogger.info({ tokens: messages.length, sessionId: payload.sessionId, kind: payload.kind }, "expo push batch sent");
|
|
97
|
+
if (ticketsByReceiptId.size === 0)
|
|
98
|
+
return;
|
|
99
|
+
const batch = { ticketsByReceiptId, handle: null };
|
|
100
|
+
const handle = setTimer(() => {
|
|
101
|
+
pendingReceiptBatches.delete(batch);
|
|
102
|
+
void reapReceipts(batch).catch((err) => {
|
|
103
|
+
workerLogger.error({ err }, "reapReceipts threw");
|
|
104
|
+
});
|
|
105
|
+
}, receiptDelayMs);
|
|
106
|
+
batch.handle = handle;
|
|
107
|
+
pendingReceiptBatches.add(batch);
|
|
108
|
+
}
|
|
109
|
+
async function reapReceipts(batch) {
|
|
110
|
+
const ids = Array.from(batch.ticketsByReceiptId.keys());
|
|
111
|
+
if (ids.length === 0)
|
|
112
|
+
return;
|
|
113
|
+
const idChunks = client.chunkPushNotificationReceiptIds(ids);
|
|
114
|
+
for (const idChunk of idChunks) {
|
|
115
|
+
let receipts;
|
|
116
|
+
try {
|
|
117
|
+
receipts = await client.getPushNotificationReceiptsAsync(idChunk);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
workerLogger.error({ err }, "getPushNotificationReceiptsAsync rejected");
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
for (const [receiptId, receipt] of Object.entries(receipts)) {
|
|
124
|
+
if (receipt.status !== "error")
|
|
125
|
+
continue;
|
|
126
|
+
const errReceipt = receipt;
|
|
127
|
+
const token = batch.ticketsByReceiptId.get(receiptId);
|
|
128
|
+
if (errReceipt.details?.error === "DeviceNotRegistered" && token) {
|
|
129
|
+
workerLogger.warn({ receiptId }, "DeviceNotRegistered receipt — removing token");
|
|
130
|
+
subscriptionStore.removeExpoToken(token);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
workerLogger.error({ receipt }, "expo push receipt error");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
stop() {
|
|
140
|
+
unsubscribe();
|
|
141
|
+
for (const batch of pendingReceiptBatches) {
|
|
142
|
+
clearTimer(batch.handle);
|
|
143
|
+
}
|
|
144
|
+
pendingReceiptBatches.clear();
|
|
145
|
+
workerLogger.info("expo push worker stopped");
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=expo-worker.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import type { AgentManager } from "../agent/agent-manager.js";
|
|
3
|
+
import type { PushSubscriptionStore } from "./subscriptions.js";
|
|
4
|
+
import { type PushTriggerEmitter } from "./triggers.js";
|
|
5
|
+
import type { VapidKeys } from "./vapid-keys.js";
|
|
6
|
+
export type { PushTriggerEmitter, PushTriggerKind, PushTriggerPayload } from "./triggers.js";
|
|
7
|
+
export interface PushSubsystem {
|
|
8
|
+
triggerEmitter: PushTriggerEmitter;
|
|
9
|
+
/**
|
|
10
|
+
* Tear down all push-subsystem subscriptions (attention listener, worker, etc.).
|
|
11
|
+
*/
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
export interface CreatePushSubsystemOptions {
|
|
15
|
+
agentManager: AgentManager;
|
|
16
|
+
serverId: string;
|
|
17
|
+
logger: Logger;
|
|
18
|
+
/**
|
|
19
|
+
* Story PASEO-CHAT-ACTIONS-V1-story-1.002 subscription store. When provided,
|
|
20
|
+
* Story 1.3 starts the Expo Push delivery worker against this store, and
|
|
21
|
+
* Story 1.4 starts the Web Push worker (if `vapidKeys` is also provided).
|
|
22
|
+
*/
|
|
23
|
+
subscriptionStore?: PushSubscriptionStore;
|
|
24
|
+
/**
|
|
25
|
+
* Story PASEO-CHAT-ACTIONS-V1-story-1.004 VAPID key pair. When provided
|
|
26
|
+
* (alongside `subscriptionStore`), the Web Push delivery worker is started.
|
|
27
|
+
*/
|
|
28
|
+
vapidKeys?: VapidKeys;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Composition root for the push subsystem. Stories 1.3 (Expo worker) and 1.4
|
|
32
|
+
* (Web Push worker) attach to `triggerEmitter.on(...)` here.
|
|
33
|
+
*
|
|
34
|
+
* Honors the `PASEO_PUSH_ENABLED=false` kill switch at the emitter layer —
|
|
35
|
+
* downstream workers also re-check the env var as a defense in depth (the
|
|
36
|
+
* worker logs a specific disabled-message that the rollback runbook greps for).
|
|
37
|
+
*/
|
|
38
|
+
export declare function createPushSubsystem(options: CreatePushSubsystemOptions): PushSubsystem;
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { startExpoPushWorker } from "./expo-worker.js";
|
|
2
|
+
import { startWebPushWorker } from "./web-worker.js";
|
|
3
|
+
import { createPushTriggerEmitter } from "./triggers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Composition root for the push subsystem. Stories 1.3 (Expo worker) and 1.4
|
|
6
|
+
* (Web Push worker) attach to `triggerEmitter.on(...)` here.
|
|
7
|
+
*
|
|
8
|
+
* Honors the `PASEO_PUSH_ENABLED=false` kill switch at the emitter layer —
|
|
9
|
+
* downstream workers also re-check the env var as a defense in depth (the
|
|
10
|
+
* worker logs a specific disabled-message that the rollback runbook greps for).
|
|
11
|
+
*/
|
|
12
|
+
export function createPushSubsystem(options) {
|
|
13
|
+
const triggerEmitter = createPushTriggerEmitter({
|
|
14
|
+
agentManager: options.agentManager,
|
|
15
|
+
serverId: options.serverId,
|
|
16
|
+
logger: options.logger,
|
|
17
|
+
});
|
|
18
|
+
const unsubscribeAttention = triggerEmitter.subscribeToAttention();
|
|
19
|
+
let expoWorker = null;
|
|
20
|
+
let webWorker = null;
|
|
21
|
+
if (options.subscriptionStore) {
|
|
22
|
+
expoWorker = startExpoPushWorker({
|
|
23
|
+
pushTrigger: triggerEmitter,
|
|
24
|
+
subscriptionStore: options.subscriptionStore,
|
|
25
|
+
logger: options.logger,
|
|
26
|
+
});
|
|
27
|
+
if (options.vapidKeys) {
|
|
28
|
+
webWorker = startWebPushWorker({
|
|
29
|
+
pushTrigger: triggerEmitter,
|
|
30
|
+
subscriptionStore: options.subscriptionStore,
|
|
31
|
+
vapidKeys: options.vapidKeys,
|
|
32
|
+
logger: options.logger,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
triggerEmitter,
|
|
38
|
+
dispose() {
|
|
39
|
+
unsubscribeAttention();
|
|
40
|
+
expoWorker?.stop();
|
|
41
|
+
webWorker?.stop();
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type pino from "pino";
|
|
2
|
+
import { type PushPayload } from "./push-service.js";
|
|
3
|
+
import type { PushTokenStore } from "./token-store.js";
|
|
4
|
+
export type { PushPayload };
|
|
5
|
+
export interface PushNotificationSender {
|
|
6
|
+
send(payload: PushPayload): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function createPushNotificationSender(logger: pino.Logger, tokenStore: PushTokenStore): PushNotificationSender;
|
|
9
|
+
//# sourceMappingURL=notifications.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PushService } from "./push-service.js";
|
|
2
|
+
export function createPushNotificationSender(logger, tokenStore) {
|
|
3
|
+
const pushService = new PushService(logger, tokenStore);
|
|
4
|
+
return {
|
|
5
|
+
async send(payload) {
|
|
6
|
+
const tokens = tokenStore.getAllTokens();
|
|
7
|
+
logger.info({ tokenCount: tokens.length }, "Sending push notification");
|
|
8
|
+
if (tokens.length === 0) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
await pushService.sendPush(tokens, payload);
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PushTokenStore } from "./token-store.js";
|
|
2
|
+
import type pino from "pino";
|
|
3
|
+
export interface PushPayload {
|
|
4
|
+
title: string;
|
|
5
|
+
body: string;
|
|
6
|
+
data?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Service for sending Expo push notifications.
|
|
10
|
+
* Handles batching and invalid token removal.
|
|
11
|
+
*/
|
|
12
|
+
export declare class PushService {
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly tokenStore;
|
|
15
|
+
constructor(logger: pino.Logger, tokenStore: PushTokenStore);
|
|
16
|
+
sendPush(tokens: string[], payload: PushPayload): Promise<void>;
|
|
17
|
+
private sendBatch;
|
|
18
|
+
private handleTickets;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=push-service.d.ts.map
|