@code-yeongyu/senpi 2026.8.30 → 2026.9.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/CHANGELOG.md +174 -2
- package/README.md +3 -0
- package/dist/core/agent-session.d.ts +28 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +161 -14
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction-execution.d.ts +14 -0
- package/dist/core/compaction/compaction-execution.d.ts.map +1 -0
- package/dist/core/compaction/compaction-execution.js +121 -0
- package/dist/core/compaction/compaction-execution.js.map +1 -0
- package/dist/core/compaction/compaction-settings.d.ts +17 -0
- package/dist/core/compaction/compaction-settings.d.ts.map +1 -0
- package/dist/core/compaction/compaction-settings.js +17 -0
- package/dist/core/compaction/compaction-settings.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +13 -26
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +7 -136
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/ideal-compaction-settings.d.ts +9 -0
- package/dist/core/compaction/ideal-compaction-settings.d.ts.map +1 -0
- package/dist/core/compaction/ideal-compaction-settings.js +7 -0
- package/dist/core/compaction/ideal-compaction-settings.js.map +1 -0
- package/dist/core/compaction-settings-access.d.ts +19 -0
- package/dist/core/compaction-settings-access.d.ts.map +1 -0
- package/dist/core/compaction-settings-access.js +10 -0
- package/dist/core/compaction-settings-access.js.map +1 -0
- package/dist/core/compaction-settings-resolver.d.ts +22 -0
- package/dist/core/compaction-settings-resolver.d.ts.map +1 -0
- package/dist/core/compaction-settings-resolver.js +46 -0
- package/dist/core/compaction-settings-resolver.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +9 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +10 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +24 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js +43 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +8 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts +17 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.js +64 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts +27 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.js +84 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/idle-retry.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.js +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle.d.ts +1 -0
- package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle.js +13 -2
- package/dist/core/extensions/builtin/compaction/idle.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +152 -154
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.js +2 -0
- package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/model-selection.d.ts +14 -0
- package/dist/core/extensions/builtin/compaction/model-selection.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-selection.js +37 -0
- package/dist/core/extensions/builtin/compaction/model-selection.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts +30 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.js +74 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts +9 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js +2 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -6
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts +46 -0
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js +103 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/policy.d.ts +12 -2
- package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/policy.js +52 -26
- package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts +8 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.js +17 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.d.ts +22 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.js +16 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts +23 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +132 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -13
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +21 -197
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts +24 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js +25 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts +27 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js +56 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts +5 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.js +76 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.js.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts +7 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.js +60 -8
- package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.d.ts +1 -2
- package/dist/core/extensions/builtin/hooks/trust.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.js +1 -72
- package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +108 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +11 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts +11 -0
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.js +18 -2
- package/dist/core/extensions/builtin/terminal/runtime-session.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.js +4 -0
- package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.d.ts +2 -0
- package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.js +28 -1
- package/dist/core/extensions/builtin/ttsr/manager.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts +14 -0
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +33 -3
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/retry-fallback/log.js +1 -1
- package/dist/core/retry-fallback/log.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js +1 -0
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +5 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-activity.d.ts +47 -0
- package/dist/core/session-activity.d.ts.map +1 -0
- package/dist/core/session-activity.js +58 -0
- package/dist/core/session-activity.js.map +1 -0
- package/dist/core/session-manager.d.ts +8 -12
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +118 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts +8 -1
- package/dist/core/session-resident-store.d.ts.map +1 -1
- package/dist/core/session-resident-store.js +12 -5
- package/dist/core/session-resident-store.js.map +1 -1
- package/dist/core/settings-manager.d.ts +8 -85
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-public-types.d.ts +11 -0
- package/dist/core/settings-public-types.d.ts.map +1 -0
- package/dist/core/settings-public-types.js +2 -0
- package/dist/core/settings-public-types.js.map +1 -0
- package/dist/core/settings-shapes.d.ts +36 -0
- package/dist/core/settings-shapes.d.ts.map +1 -0
- package/dist/core/settings-shapes.js +2 -0
- package/dist/core/settings-shapes.js.map +1 -0
- package/dist/core/shared-host-policy.d.ts +6 -0
- package/dist/core/shared-host-policy.d.ts.map +1 -0
- package/dist/core/shared-host-policy.js +7 -0
- package/dist/core/shared-host-policy.js.map +1 -0
- package/dist/core/terminal-settings.d.ts +22 -0
- package/dist/core/terminal-settings.d.ts.map +1 -0
- package/dist/core/terminal-settings.js +2 -0
- package/dist/core/terminal-settings.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -4
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +27 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/process.d.ts +13 -2
- package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/process.js +58 -12
- package/dist/modes/app-server/daemon/process.js.map +1 -1
- package/dist/modes/app-server/daemon.js +65 -7
- package/dist/modes/app-server/daemon.js.map +1 -1
- package/dist/modes/index.d.ts +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +84 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +435 -112
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +11 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +59 -6
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +12 -5
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +180 -25
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/custom-capability.d.ts +2 -0
- package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
- package/dist/modes/rpc/custom-capability.js +2 -0
- package/dist/modes/rpc/custom-capability.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts +17 -0
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
- package/dist/modes/rpc/host-ensure.js +150 -23
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts +54 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +259 -69
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +2 -2
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +89 -21
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts +38 -0
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +149 -61
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/ownership-safe-lock.d.ts +14 -0
- package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -0
- package/dist/modes/rpc/ownership-safe-lock.js +87 -0
- package/dist/modes/rpc/ownership-safe-lock.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +13 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +46 -12
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +21 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +1 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +2 -1
- package/dist/modes/rpc/session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/session-binding.js +1 -0
- package/dist/modes/rpc/session-binding.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +54 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +180 -3
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +18 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +88 -8
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +11 -1
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +25 -0
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/socket-transport.d.ts +13 -0
- package/dist/modes/rpc/socket-transport.d.ts.map +1 -0
- package/dist/modes/rpc/socket-transport.js +92 -0
- package/dist/modes/rpc/socket-transport.js.map +1 -0
- package/dist/modes/rpc/widget-line-renderer.d.ts +17 -0
- package/dist/modes/rpc/widget-line-renderer.d.ts.map +1 -0
- package/dist/modes/rpc/widget-line-renderer.js +73 -0
- package/dist/modes/rpc/widget-line-renderer.js.map +1 -0
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +11 -2
- package/dist/utils/fs-watch.js.map +1 -1
- package/docs/app-server.md +2 -2
- package/docs/containerization.md +2 -2
- package/docs/development.md +7 -7
- package/docs/extensions.md +5 -5
- package/docs/grok-neo.md +1 -1
- package/docs/index.md +1 -1
- package/docs/packages.md +2 -2
- package/docs/quickstart.md +4 -4
- package/docs/release-guide.md +21 -21
- package/docs/rpc.md +83 -6
- package/docs/sdk.md +1 -1
- package/docs/settings.md +4 -4
- package/docs/skills.md +2 -2
- package/docs/terminal-tools.md +1 -1
- package/docs/termux.md +1 -1
- package/docs/tui.md +1 -1
- package/examples/AGENTS.md +1 -1
- package/examples/sdk/README.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/skill-contribution.ts +71 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +3 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/SKILL.md +44 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/breaking-changes.md +75 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/build.md +114 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/dev-tooling.md +34 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/http-networking.md +113 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/install.md +93 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/node-compat-platforms.md +36 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/performance.md +33 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/runtime-apis.md +156 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/security.md +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/test.md +103 -0
- package/node_modules/@earendil-works/pi-agent-core/README.md +3 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +6 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +24 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +316 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js +23 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts +24 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +20 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts +42 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js +34 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts +8 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.js +51 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.js.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts +45 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/screen.js +178 -55
- package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/README.md +6 -3
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/README.md +5 -4
- package/node_modules/@earendil-works/pi-tui/native/darwin/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/native/win32/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -2,12 +2,12 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { mkdir, open, readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import * as properLockfile from "proper-lockfile";
|
|
6
5
|
import { getAgentDir } from "../../config.js";
|
|
6
|
+
import { acquireOwnershipSafeLock } from "../rpc/ownership-safe-lock.js";
|
|
7
7
|
import { inspectAppServerListenOccupancy } from "./daemon/occupancy.js";
|
|
8
8
|
import { cleanupState, pollProbe, probeListen, readSettings, runningOutput, runningUnmanagedOutput, } from "./daemon/probe.js";
|
|
9
9
|
import { parseDaemonPidFile, processMatchesPidFile, readProcessStartTime, stopValidatedPid, waitForGone, waitForStartTime, } from "./daemon/process.js";
|
|
10
|
-
const lockOptions = {
|
|
10
|
+
const lockOptions = { retries: { retries: 100, minTimeout: 20, maxTimeout: 100 } };
|
|
11
11
|
export function createDaemonPaths(agentDir = getAgentDir()) {
|
|
12
12
|
const dir = join(agentDir, "app-server-daemon");
|
|
13
13
|
return {
|
|
@@ -21,7 +21,7 @@ export function createDaemonPaths(agentDir = getAgentDir()) {
|
|
|
21
21
|
}
|
|
22
22
|
export async function withDaemonStateLock(paths, task) {
|
|
23
23
|
await mkdir(paths.dir, { recursive: true });
|
|
24
|
-
const release = await
|
|
24
|
+
const release = await acquireOwnershipSafeLock(paths.lockFile, lockOptions);
|
|
25
25
|
try {
|
|
26
26
|
return await task();
|
|
27
27
|
}
|
|
@@ -135,17 +135,72 @@ async function spawnDaemon(paths, listen) {
|
|
|
135
135
|
listen.url,
|
|
136
136
|
], {
|
|
137
137
|
detached: true,
|
|
138
|
+
windowsHide: true,
|
|
138
139
|
env: { ...process.env, SENPI_RUNTIME: "node" },
|
|
139
140
|
stdio: ["ignore", "ignore", stderr.fd],
|
|
140
141
|
});
|
|
141
142
|
const exited = observeDaemonExit(child);
|
|
142
|
-
child.unref();
|
|
143
143
|
const pid = child.pid;
|
|
144
144
|
if (pid === undefined)
|
|
145
145
|
throw new Error("failed to spawn daemon process");
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
let startTime;
|
|
147
|
+
try {
|
|
148
|
+
startTime = await Promise.race([
|
|
149
|
+
waitForStartTime(pid, 10_000),
|
|
150
|
+
exited.then(() => {
|
|
151
|
+
throw new Error(`spawned daemon ${pid} exited before its start time could be read`);
|
|
152
|
+
}),
|
|
153
|
+
]);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
// Keep the handle owned until registration succeeds. This terminates the
|
|
157
|
+
// exact child even when start-time acquisition fails, without a raw PID.
|
|
158
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
159
|
+
try {
|
|
160
|
+
child.kill("SIGTERM");
|
|
161
|
+
}
|
|
162
|
+
catch { }
|
|
163
|
+
await Promise.race([exited, delay(2_000)]);
|
|
164
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
165
|
+
try {
|
|
166
|
+
child.kill("SIGKILL");
|
|
167
|
+
}
|
|
168
|
+
catch { }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
await cleanupState(paths, listen);
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
await writeFile(paths.pidFile, `${JSON.stringify({ pid, processStartTime: startTime })}\n`, { mode: 0o600 });
|
|
176
|
+
await writeFile(paths.settingsFile, `${JSON.stringify({ listen })}\n`, { mode: 0o600 });
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
// Registration is the ownership hand-off point. Until both files exist,
|
|
180
|
+
// retain the exact ChildProcess handle and terminate it on any write
|
|
181
|
+
// failure so a partial registration can never leave an unmanaged daemon.
|
|
182
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
183
|
+
try {
|
|
184
|
+
child.kill("SIGTERM");
|
|
185
|
+
}
|
|
186
|
+
catch { }
|
|
187
|
+
await Promise.race([exited, delay(2_000)]);
|
|
188
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
189
|
+
try {
|
|
190
|
+
child.kill("SIGKILL");
|
|
191
|
+
}
|
|
192
|
+
catch (killError) {
|
|
193
|
+
throw new Error(`failed to terminate daemon after registration failure: ${killError instanceof Error ? killError.message : String(killError)}`);
|
|
194
|
+
}
|
|
195
|
+
if (!(await Promise.race([exited.then(() => true), delay(2_000).then(() => false)]))) {
|
|
196
|
+
throw new Error(`daemon ${pid} remained alive after SIGKILL during registration failure`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
await cleanupState(paths, { ...listen, ...(listen.kind === "unix" ? { path: undefined } : {}) });
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
child.unref();
|
|
149
204
|
return { pid, exited };
|
|
150
205
|
}
|
|
151
206
|
finally {
|
|
@@ -163,6 +218,9 @@ async function waitForDaemonReady(paths, listen, exited) {
|
|
|
163
218
|
controller.abort();
|
|
164
219
|
}
|
|
165
220
|
}
|
|
221
|
+
function delay(ms) {
|
|
222
|
+
return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
223
|
+
}
|
|
166
224
|
function observeDaemonExit(child) {
|
|
167
225
|
return new Promise((resolveExit) => {
|
|
168
226
|
child.once("error", (error) => resolveExit({ kind: "error", error }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/modes/app-server/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,cAAc,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACN,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEN,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GAChB,MAAM,qBAAqB,CAAC;AA4B7B,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAW,CAAC;AAE3G,MAAM,UAAU,iBAAiB,CAAC,QAAQ,GAAG,WAAW,EAAE;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAChD,OAAO;QACN,GAAG;QACH,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACpC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;QAClC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;QACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC;KACnD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,KAAkB,EAAE,IAAsB;IACtF,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvG,IAAI,CAAC;QACJ,OAAO,MAAM,IAAI,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACV,MAAM,OAAO,EAAE,CAAC;IACjB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAsC;IACrF,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QAC1D,IAAI,CAAC;YACJ,OAAO,MAAM,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7F,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,OAAsC,EACtC,KAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChG,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,OAAO;YACX,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,KAAK,MAAM;YACV,OAAO,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClC,KAAK,QAAQ;YACZ,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpC,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,MAAM,aAAa,GAAG,QAAQ,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;YACzD,MAAM,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACvC,OAAO,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAkB,EAAE,MAAuB;IACrE,MAAM,SAAS,GAAG,MAAM,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvE,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,aAAa,CAAC,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/F,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,IAAI,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,SAAS;YAAE,OAAO,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,GAAG,4BAA4B,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,gBAAgB,CACrB,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EACvF,SAAS,CACT,CAAC;IACF,MAAM,OAAO,GACZ,SAAS,CAAC,IAAI,KAAK,QAAQ;QAC1B,CAAC,CAAC,kBAAkB,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,8BAA8B;QACpF,CAAC,CAAC,qDAAqD,CAAC;IAC1D,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAkB,EAAE,MAAuB;IACpE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,MAAM,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAkB,EAAE,MAAuB;IACtE,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,IAAI,KAAK,IAAI,OAAO,IAAI,UAAU;QAAE,OAAO,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChG,IAAI,KAAK;QAAE,OAAO,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,IAAI,OAAO,IAAI,CAAC,UAAU;QAAE,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAkB,EAAE,MAAuB;IACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG;YACtC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBAC5F,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC/B,CAAC,CAAC,wBAAwB;YAC3B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAClB,UAAU,EACV;YACC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACjD,kBAAkB,EAAE;YACpB,YAAY;YACZ,UAAU;YACV,MAAM,CAAC,GAAG;SACV,EACD;YACC,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE;YAC9C,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;SACtC,CACD,CAAC;QACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACtB,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7G,MAAM,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACxB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAChC,KAAkB,EAClB,MAAuB,EACvB,MAA2B;IAE3B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CACrE,CAAC,OAAO,EAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAC5F,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAmB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/C,CAAC;YAAS,CAAC;QACV,UAAU,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAmB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAClC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,qBAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC;IAC7E,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,qBAAqB,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3D,OAAO,oBAAoB,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,KAAkB,EAAE,OAAe;IACpE,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,IAAI,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;QACrD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAkB;IAC5C,IAAI,CAAC;QACJ,OAAO,kBAAkB,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,IAAI,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QACvD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB;IAC1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,SAAS,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,IAAY;IACpD,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACzE,CAAC","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { mkdir, open, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as properLockfile from \"proper-lockfile\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { inspectAppServerListenOccupancy } from \"./daemon/occupancy.ts\";\nimport {\n\tcleanupState,\n\tpollProbe,\n\tprobeListen,\n\treadSettings,\n\trunningOutput,\n\trunningUnmanagedOutput,\n} from \"./daemon/probe.ts\";\nimport {\n\ttype DaemonPidFile,\n\tparseDaemonPidFile,\n\tprocessMatchesPidFile,\n\treadProcessStartTime,\n\tstopValidatedPid,\n\twaitForGone,\n\twaitForStartTime,\n} from \"./daemon/process.ts\";\nimport type { AppServerDaemonCommandOptions, AppServerListen } from \"./index.ts\";\n\nexport interface DaemonPaths {\n\treadonly dir: string;\n\treadonly pidFile: string;\n\treadonly lockFile: string;\n\treadonly settingsFile: string;\n\treadonly stderrLog: string;\n\treadonly tokenFile: string;\n}\n\ntype DaemonOutput = Readonly<Record<string, string | number | undefined>>;\n\ntype SpawnedDaemon = {\n\treadonly pid: number;\n\treadonly exited: Promise<DaemonExit>;\n};\n\ntype DaemonExit =\n\t| { readonly kind: \"error\"; readonly error: Error }\n\t| { readonly kind: \"exit\"; readonly code: number | null; readonly signal: NodeJS.Signals | null };\n\ntype DaemonReadiness =\n\t| { readonly kind: \"ready\"; readonly version: string }\n\t| { readonly kind: \"timed-out\" }\n\t| { readonly kind: \"exited\"; readonly exit: DaemonExit };\n\nconst lockOptions = { stale: 60_000, retries: { retries: 100, minTimeout: 20, maxTimeout: 100 } } as const;\n\nexport function createDaemonPaths(agentDir = getAgentDir()): DaemonPaths {\n\tconst dir = join(agentDir, \"app-server-daemon\");\n\treturn {\n\t\tdir,\n\t\tpidFile: join(dir, \"app-server.pid\"),\n\t\tlockFile: join(dir, \"daemon.lock\"),\n\t\tsettingsFile: join(dir, \"settings.json\"),\n\t\tstderrLog: join(dir, \"stderr.log\"),\n\t\ttokenFile: join(agentDir, \"app-server\", \"ws-token\"),\n\t};\n}\n\nexport async function withDaemonStateLock<T>(paths: DaemonPaths, task: () => Promise<T>): Promise<T> {\n\tawait mkdir(paths.dir, { recursive: true });\n\tconst release = await properLockfile.lock(paths.dir, { ...lockOptions, lockfilePath: paths.lockFile });\n\ttry {\n\t\treturn await task();\n\t} finally {\n\t\tawait release();\n\t}\n}\n\nexport async function runAppServerDaemonCommand(options: AppServerDaemonCommandOptions): Promise<void> {\n\tconst paths = createDaemonPaths();\n\tconst output = await withDaemonStateLock(paths, async () => {\n\t\ttry {\n\t\t\treturn await runLockedDaemonCommand(options, paths);\n\t\t} catch (error: unknown) {\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn { status: \"error\", message: error instanceof Error ? error.message : String(error) };\n\t\t}\n\t});\n\tprocess.stdout.write(`${JSON.stringify(output)}\\n`);\n}\n\nasync function runLockedDaemonCommand(\n\toptions: AppServerDaemonCommandOptions,\n\tpaths: DaemonPaths,\n): Promise<DaemonOutput> {\n\tconst settings = await readSettings(paths);\n\tconst listen = options.verb === \"start\" ? options.listen : (settings?.listen ?? options.listen);\n\tswitch (options.verb) {\n\t\tcase \"start\":\n\t\t\treturn startDaemon(paths, listen);\n\t\tcase \"stop\":\n\t\t\treturn stopDaemon(paths, listen);\n\t\tcase \"status\":\n\t\t\treturn statusDaemon(paths, listen);\n\t\tcase \"restart\": {\n\t\t\tconst restartListen = settings?.listen ?? options.listen;\n\t\t\tawait stopDaemon(paths, restartListen);\n\t\t\treturn startDaemon(paths, restartListen);\n\t\t}\n\t}\n}\n\nasync function startDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<DaemonOutput> {\n\tconst occupancy = await inspectAppServerListenOccupancy(paths, listen);\n\tif (occupancy.kind === \"app-server\") {\n\t\tconst pidFile = await readPidFile(paths);\n\t\tconst pid = pidFile && (await processMatchesPidFile(pidFile)) ? pidFile.pid : undefined;\n\t\tif (pid !== undefined) return runningOutput(\"already-running\", pid, listen, occupancy.version);\n\t\treturn { status: \"already-running\", listen: listen.url, version: occupancy.version };\n\t}\n\tconst pidFile = await readPidFile(paths);\n\tif (pidFile && (await processMatchesPidFile(pidFile))) {\n\t\tconst lateProbe = await pollProbe(paths, listen, 10_000);\n\t\tif (lateProbe) return runningOutput(\"already-running\", pidFile.pid, listen, lateProbe);\n\t\tthrow new Error(`managed daemon pid ${pidFile.pid} did not answer initialize`);\n\t}\n\tconst spawned = await spawnDaemon(paths, listen);\n\tconst readiness = await waitForDaemonReady(paths, listen, spawned.exited);\n\tif (readiness.kind === \"ready\") {\n\t\treturn { status: \"started\", pid: spawned.pid, listen: listen.url };\n\t}\n\tawait stopValidatedPid(\n\t\t{ pid: spawned.pid, processStartTime: (await readProcessStartTime(spawned.pid)) ?? \"\" },\n\t\t\"SIGTERM\",\n\t);\n\tconst message =\n\t\treadiness.kind === \"exited\"\n\t\t\t? `spawned daemon ${describeDaemonExit(readiness.exit)} before answering initialize`\n\t\t\t: \"spawned daemon did not answer initialize within 10s\";\n\tconst diagnostic = await appendDaemonStderr(paths, message);\n\tawait cleanupState(paths, listen);\n\tthrow new Error(diagnostic);\n}\n\nasync function stopDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<DaemonOutput> {\n\tconst pidFile = await readPidFile(paths);\n\tif (!pidFile) {\n\t\tif (!(await probeListen(paths, listen, 2_000))) await cleanupState(paths, listen);\n\t\treturn { status: \"not-running\" };\n\t}\n\tif (!(await processMatchesPidFile(pidFile))) {\n\t\tawait cleanupState(paths, listen);\n\t\treturn { status: \"not-running\" };\n\t}\n\tawait stopValidatedPid(pidFile, \"SIGTERM\");\n\tif (await processMatchesPidFile(pidFile)) {\n\t\tawait stopValidatedPid(pidFile, \"SIGKILL\");\n\t}\n\tawait waitForGone(pidFile, 10_000);\n\tawait cleanupState(paths, listen);\n\treturn { status: \"stopped\" };\n}\n\nasync function statusDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<DaemonOutput> {\n\tconst probe = await probeListen(paths, listen, 2_000);\n\tconst pidFile = await readPidFile(paths);\n\tconst pidMatches = pidFile ? await processMatchesPidFile(pidFile) : false;\n\tif (probe && pidFile && pidMatches) return runningOutput(\"running\", pidFile.pid, listen, probe);\n\tif (probe) return runningUnmanagedOutput(listen, probe);\n\tif (pidFile && !pidMatches) await cleanupState(paths, listen);\n\treturn { status: \"not-running\" };\n}\n\nasync function spawnDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<SpawnedDaemon> {\n\tconst stderr = await open(paths.stderrLog, \"w\");\n\ttry {\n\t\tconst daemonExec = process.versions.bun\n\t\t\t? process.env.npm_node_execpath && !/[/\\\\]bun(?:$|[/\\\\])/.test(process.env.npm_node_execpath)\n\t\t\t\t? process.env.npm_node_execpath\n\t\t\t\t: \"/opt/homebrew/bin/node\"\n\t\t\t: process.execPath;\n\t\tconst child = spawn(\n\t\t\tdaemonExec,\n\t\t\t[\n\t\t\t\t...(process.versions.bun ? [] : process.execArgv),\n\t\t\t\tresolveCliMainPath(),\n\t\t\t\t\"app-server\",\n\t\t\t\t\"--listen\",\n\t\t\t\tlisten.url,\n\t\t\t],\n\t\t\t{\n\t\t\t\tdetached: true,\n\t\t\t\tenv: { ...process.env, SENPI_RUNTIME: \"node\" },\n\t\t\t\tstdio: [\"ignore\", \"ignore\", stderr.fd],\n\t\t\t},\n\t\t);\n\t\tconst exited = observeDaemonExit(child);\n\t\tchild.unref();\n\t\tconst pid = child.pid;\n\t\tif (pid === undefined) throw new Error(\"failed to spawn daemon process\");\n\t\tconst startTime = await waitForStartTime(pid, 2_000);\n\t\tawait writeFile(paths.pidFile, `${JSON.stringify({ pid, processStartTime: startTime })}\\n`, { mode: 0o600 });\n\t\tawait writeFile(paths.settingsFile, `${JSON.stringify({ listen })}\\n`, { mode: 0o600 });\n\t\treturn { pid, exited };\n\t} finally {\n\t\tawait stderr.close();\n\t}\n}\n\nasync function waitForDaemonReady(\n\tpaths: DaemonPaths,\n\tlisten: AppServerListen,\n\texited: Promise<DaemonExit>,\n): Promise<DaemonReadiness> {\n\tconst controller = new AbortController();\n\ttry {\n\t\tconst probe = pollProbe(paths, listen, 10_000, controller.signal).then(\n\t\t\t(version): DaemonReadiness => (version ? { kind: \"ready\", version } : { kind: \"timed-out\" }),\n\t\t);\n\t\tconst childExit = exited.then((exit): DaemonReadiness => ({ kind: \"exited\", exit }));\n\t\treturn await Promise.race([probe, childExit]);\n\t} finally {\n\t\tcontroller.abort();\n\t}\n}\n\nfunction observeDaemonExit(child: ChildProcess): Promise<DaemonExit> {\n\treturn new Promise((resolveExit) => {\n\t\tchild.once(\"error\", (error) => resolveExit({ kind: \"error\", error }));\n\t\tchild.once(\"exit\", (code, signal) => resolveExit({ kind: \"exit\", code, signal }));\n\t});\n}\n\nfunction describeDaemonExit(exit: DaemonExit): string {\n\tif (exit.kind === \"error\") return `failed to launch (${exit.error.message})`;\n\tif (exit.signal) return `was terminated by ${exit.signal}`;\n\treturn `exited with code ${exit.code ?? \"unknown\"}`;\n}\n\nasync function appendDaemonStderr(paths: DaemonPaths, message: string): Promise<string> {\n\ttry {\n\t\tconst stderr = (await readFile(paths.stderrLog, \"utf8\")).trim();\n\t\treturn stderr ? `${message}\\n${stderr}` : message;\n\t} catch (error: unknown) {\n\t\tif (isNodeErrorCode(error, \"ENOENT\")) return message;\n\t\tthrow error;\n\t}\n}\n\nasync function readPidFile(paths: DaemonPaths): Promise<DaemonPidFile | undefined> {\n\ttry {\n\t\treturn parseDaemonPidFile(await readFile(paths.pidFile, \"utf8\"));\n\t} catch (error: unknown) {\n\t\tif (isNodeErrorCode(error, \"ENOENT\")) return undefined;\n\t\tthrow error;\n\t}\n}\n\nfunction resolveCliMainPath(): string {\n\tconst modulePath = fileURLToPath(import.meta.url);\n\tconst extension = modulePath.endsWith(\".ts\") ? \".ts\" : \".js\";\n\treturn resolve(dirname(modulePath), \"..\", \"..\", `cli-main${extension}`);\n}\n\nfunction isNodeErrorCode(error: unknown, code: string): boolean {\n\treturn error instanceof Error && \"code\" in error && error.code === code;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/modes/app-server/daemon.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { mkdir, open, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { acquireOwnershipSafeLock } from \"../rpc/ownership-safe-lock.ts\";\nimport { inspectAppServerListenOccupancy } from \"./daemon/occupancy.ts\";\nimport {\n\tcleanupState,\n\tpollProbe,\n\tprobeListen,\n\treadSettings,\n\trunningOutput,\n\trunningUnmanagedOutput,\n} from \"./daemon/probe.ts\";\nimport {\n\ttype DaemonPidFile,\n\tparseDaemonPidFile,\n\tprocessMatchesPidFile,\n\treadProcessStartTime,\n\tstopValidatedPid,\n\twaitForGone,\n\twaitForStartTime,\n} from \"./daemon/process.ts\";\nimport type { AppServerDaemonCommandOptions, AppServerListen } from \"./index.ts\";\n\nexport interface DaemonPaths {\n\treadonly dir: string;\n\treadonly pidFile: string;\n\treadonly lockFile: string;\n\treadonly settingsFile: string;\n\treadonly stderrLog: string;\n\treadonly tokenFile: string;\n}\n\ntype DaemonOutput = Readonly<Record<string, string | number | undefined>>;\n\ntype SpawnedDaemon = {\n\treadonly pid: number;\n\treadonly exited: Promise<DaemonExit>;\n};\n\ntype DaemonExit =\n\t| { readonly kind: \"error\"; readonly error: Error }\n\t| { readonly kind: \"exit\"; readonly code: number | null; readonly signal: NodeJS.Signals | null };\n\ntype DaemonReadiness =\n\t| { readonly kind: \"ready\"; readonly version: string }\n\t| { readonly kind: \"timed-out\" }\n\t| { readonly kind: \"exited\"; readonly exit: DaemonExit };\n\nconst lockOptions = { retries: { retries: 100, minTimeout: 20, maxTimeout: 100 } } as const;\n\nexport function createDaemonPaths(agentDir = getAgentDir()): DaemonPaths {\n\tconst dir = join(agentDir, \"app-server-daemon\");\n\treturn {\n\t\tdir,\n\t\tpidFile: join(dir, \"app-server.pid\"),\n\t\tlockFile: join(dir, \"daemon.lock\"),\n\t\tsettingsFile: join(dir, \"settings.json\"),\n\t\tstderrLog: join(dir, \"stderr.log\"),\n\t\ttokenFile: join(agentDir, \"app-server\", \"ws-token\"),\n\t};\n}\n\nexport async function withDaemonStateLock<T>(paths: DaemonPaths, task: () => Promise<T>): Promise<T> {\n\tawait mkdir(paths.dir, { recursive: true });\n\tconst release = await acquireOwnershipSafeLock(paths.lockFile, lockOptions);\n\ttry {\n\t\treturn await task();\n\t} finally {\n\t\tawait release();\n\t}\n}\n\nexport async function runAppServerDaemonCommand(options: AppServerDaemonCommandOptions): Promise<void> {\n\tconst paths = createDaemonPaths();\n\tconst output = await withDaemonStateLock(paths, async () => {\n\t\ttry {\n\t\t\treturn await runLockedDaemonCommand(options, paths);\n\t\t} catch (error: unknown) {\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn { status: \"error\", message: error instanceof Error ? error.message : String(error) };\n\t\t}\n\t});\n\tprocess.stdout.write(`${JSON.stringify(output)}\\n`);\n}\n\nasync function runLockedDaemonCommand(\n\toptions: AppServerDaemonCommandOptions,\n\tpaths: DaemonPaths,\n): Promise<DaemonOutput> {\n\tconst settings = await readSettings(paths);\n\tconst listen = options.verb === \"start\" ? options.listen : (settings?.listen ?? options.listen);\n\tswitch (options.verb) {\n\t\tcase \"start\":\n\t\t\treturn startDaemon(paths, listen);\n\t\tcase \"stop\":\n\t\t\treturn stopDaemon(paths, listen);\n\t\tcase \"status\":\n\t\t\treturn statusDaemon(paths, listen);\n\t\tcase \"restart\": {\n\t\t\tconst restartListen = settings?.listen ?? options.listen;\n\t\t\tawait stopDaemon(paths, restartListen);\n\t\t\treturn startDaemon(paths, restartListen);\n\t\t}\n\t}\n}\n\nasync function startDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<DaemonOutput> {\n\tconst occupancy = await inspectAppServerListenOccupancy(paths, listen);\n\tif (occupancy.kind === \"app-server\") {\n\t\tconst pidFile = await readPidFile(paths);\n\t\tconst pid = pidFile && (await processMatchesPidFile(pidFile)) ? pidFile.pid : undefined;\n\t\tif (pid !== undefined) return runningOutput(\"already-running\", pid, listen, occupancy.version);\n\t\treturn { status: \"already-running\", listen: listen.url, version: occupancy.version };\n\t}\n\tconst pidFile = await readPidFile(paths);\n\tif (pidFile && (await processMatchesPidFile(pidFile))) {\n\t\tconst lateProbe = await pollProbe(paths, listen, 10_000);\n\t\tif (lateProbe) return runningOutput(\"already-running\", pidFile.pid, listen, lateProbe);\n\t\tthrow new Error(`managed daemon pid ${pidFile.pid} did not answer initialize`);\n\t}\n\tconst spawned = await spawnDaemon(paths, listen);\n\tconst readiness = await waitForDaemonReady(paths, listen, spawned.exited);\n\tif (readiness.kind === \"ready\") {\n\t\treturn { status: \"started\", pid: spawned.pid, listen: listen.url };\n\t}\n\tawait stopValidatedPid(\n\t\t{ pid: spawned.pid, processStartTime: (await readProcessStartTime(spawned.pid)) ?? \"\" },\n\t\t\"SIGTERM\",\n\t);\n\tconst message =\n\t\treadiness.kind === \"exited\"\n\t\t\t? `spawned daemon ${describeDaemonExit(readiness.exit)} before answering initialize`\n\t\t\t: \"spawned daemon did not answer initialize within 10s\";\n\tconst diagnostic = await appendDaemonStderr(paths, message);\n\tawait cleanupState(paths, listen);\n\tthrow new Error(diagnostic);\n}\n\nasync function stopDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<DaemonOutput> {\n\tconst pidFile = await readPidFile(paths);\n\tif (!pidFile) {\n\t\tif (!(await probeListen(paths, listen, 2_000))) await cleanupState(paths, listen);\n\t\treturn { status: \"not-running\" };\n\t}\n\tif (!(await processMatchesPidFile(pidFile))) {\n\t\tawait cleanupState(paths, listen);\n\t\treturn { status: \"not-running\" };\n\t}\n\tawait stopValidatedPid(pidFile, \"SIGTERM\");\n\tif (await processMatchesPidFile(pidFile)) {\n\t\tawait stopValidatedPid(pidFile, \"SIGKILL\");\n\t}\n\tawait waitForGone(pidFile, 10_000);\n\tawait cleanupState(paths, listen);\n\treturn { status: \"stopped\" };\n}\n\nasync function statusDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<DaemonOutput> {\n\tconst probe = await probeListen(paths, listen, 2_000);\n\tconst pidFile = await readPidFile(paths);\n\tconst pidMatches = pidFile ? await processMatchesPidFile(pidFile) : false;\n\tif (probe && pidFile && pidMatches) return runningOutput(\"running\", pidFile.pid, listen, probe);\n\tif (probe) return runningUnmanagedOutput(listen, probe);\n\tif (pidFile && !pidMatches) await cleanupState(paths, listen);\n\treturn { status: \"not-running\" };\n}\n\nasync function spawnDaemon(paths: DaemonPaths, listen: AppServerListen): Promise<SpawnedDaemon> {\n\tconst stderr = await open(paths.stderrLog, \"w\");\n\ttry {\n\t\tconst daemonExec = process.versions.bun\n\t\t\t? process.env.npm_node_execpath && !/[/\\\\]bun(?:$|[/\\\\])/.test(process.env.npm_node_execpath)\n\t\t\t\t? process.env.npm_node_execpath\n\t\t\t\t: \"/opt/homebrew/bin/node\"\n\t\t\t: process.execPath;\n\t\tconst child = spawn(\n\t\t\tdaemonExec,\n\t\t\t[\n\t\t\t\t...(process.versions.bun ? [] : process.execArgv),\n\t\t\t\tresolveCliMainPath(),\n\t\t\t\t\"app-server\",\n\t\t\t\t\"--listen\",\n\t\t\t\tlisten.url,\n\t\t\t],\n\t\t\t{\n\t\t\t\tdetached: true,\n\t\t\t\twindowsHide: true,\n\t\t\t\tenv: { ...process.env, SENPI_RUNTIME: \"node\" },\n\t\t\t\tstdio: [\"ignore\", \"ignore\", stderr.fd],\n\t\t\t},\n\t\t);\n\t\tconst exited = observeDaemonExit(child);\n\t\tconst pid = child.pid;\n\t\tif (pid === undefined) throw new Error(\"failed to spawn daemon process\");\n\t\tlet startTime: string;\n\t\ttry {\n\t\t\tstartTime = await Promise.race([\n\t\t\t\twaitForStartTime(pid, 10_000),\n\t\t\t\texited.then(() => {\n\t\t\t\t\tthrow new Error(`spawned daemon ${pid} exited before its start time could be read`);\n\t\t\t\t}),\n\t\t\t]);\n\t\t} catch (error: unknown) {\n\t\t\t// Keep the handle owned until registration succeeds. This terminates the\n\t\t\t// exact child even when start-time acquisition fails, without a raw PID.\n\t\t\tif (child.exitCode === null && child.signalCode === null) {\n\t\t\t\ttry {\n\t\t\t\t\tchild.kill(\"SIGTERM\");\n\t\t\t\t} catch {}\n\t\t\t\tawait Promise.race([exited, delay(2_000)]);\n\t\t\t\tif (child.exitCode === null && child.signalCode === null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tchild.kill(\"SIGKILL\");\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait cleanupState(paths, listen);\n\t\t\tthrow error;\n\t\t}\n\t\ttry {\n\t\t\tawait writeFile(paths.pidFile, `${JSON.stringify({ pid, processStartTime: startTime })}\\n`, { mode: 0o600 });\n\t\t\tawait writeFile(paths.settingsFile, `${JSON.stringify({ listen })}\\n`, { mode: 0o600 });\n\t\t} catch (error: unknown) {\n\t\t\t// Registration is the ownership hand-off point. Until both files exist,\n\t\t\t// retain the exact ChildProcess handle and terminate it on any write\n\t\t\t// failure so a partial registration can never leave an unmanaged daemon.\n\t\t\tif (child.exitCode === null && child.signalCode === null) {\n\t\t\t\ttry {\n\t\t\t\t\tchild.kill(\"SIGTERM\");\n\t\t\t\t} catch {}\n\t\t\t\tawait Promise.race([exited, delay(2_000)]);\n\t\t\t\tif (child.exitCode === null && child.signalCode === null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tchild.kill(\"SIGKILL\");\n\t\t\t\t\t} catch (killError: unknown) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`failed to terminate daemon after registration failure: ${killError instanceof Error ? killError.message : String(killError)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!(await Promise.race([exited.then(() => true), delay(2_000).then(() => false)]))) {\n\t\t\t\t\t\tthrow new Error(`daemon ${pid} remained alive after SIGKILL during registration failure`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait cleanupState(paths, { ...listen, ...(listen.kind === \"unix\" ? { path: undefined } : {}) });\n\t\t\tthrow error;\n\t\t}\n\t\tchild.unref();\n\t\treturn { pid, exited };\n\t} finally {\n\t\tawait stderr.close();\n\t}\n}\n\nasync function waitForDaemonReady(\n\tpaths: DaemonPaths,\n\tlisten: AppServerListen,\n\texited: Promise<DaemonExit>,\n): Promise<DaemonReadiness> {\n\tconst controller = new AbortController();\n\ttry {\n\t\tconst probe = pollProbe(paths, listen, 10_000, controller.signal).then(\n\t\t\t(version): DaemonReadiness => (version ? { kind: \"ready\", version } : { kind: \"timed-out\" }),\n\t\t);\n\t\tconst childExit = exited.then((exit): DaemonReadiness => ({ kind: \"exited\", exit }));\n\t\treturn await Promise.race([probe, childExit]);\n\t} finally {\n\t\tcontroller.abort();\n\t}\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n\nfunction observeDaemonExit(child: ChildProcess): Promise<DaemonExit> {\n\treturn new Promise((resolveExit) => {\n\t\tchild.once(\"error\", (error) => resolveExit({ kind: \"error\", error }));\n\t\tchild.once(\"exit\", (code, signal) => resolveExit({ kind: \"exit\", code, signal }));\n\t});\n}\n\nfunction describeDaemonExit(exit: DaemonExit): string {\n\tif (exit.kind === \"error\") return `failed to launch (${exit.error.message})`;\n\tif (exit.signal) return `was terminated by ${exit.signal}`;\n\treturn `exited with code ${exit.code ?? \"unknown\"}`;\n}\n\nasync function appendDaemonStderr(paths: DaemonPaths, message: string): Promise<string> {\n\ttry {\n\t\tconst stderr = (await readFile(paths.stderrLog, \"utf8\")).trim();\n\t\treturn stderr ? `${message}\\n${stderr}` : message;\n\t} catch (error: unknown) {\n\t\tif (isNodeErrorCode(error, \"ENOENT\")) return message;\n\t\tthrow error;\n\t}\n}\n\nasync function readPidFile(paths: DaemonPaths): Promise<DaemonPidFile | undefined> {\n\ttry {\n\t\treturn parseDaemonPidFile(await readFile(paths.pidFile, \"utf8\"));\n\t} catch (error: unknown) {\n\t\tif (isNodeErrorCode(error, \"ENOENT\")) return undefined;\n\t\tthrow error;\n\t}\n}\n\nfunction resolveCliMainPath(): string {\n\tconst modulePath = fileURLToPath(import.meta.url);\n\tconst extension = modulePath.endsWith(\".ts\") ? \".ts\" : \".js\";\n\treturn resolve(dirname(modulePath), \"..\", \"..\", `cli-main${extension}`);\n}\n\nfunction isNodeErrorCode(error: unknown, code: string): boolean {\n\treturn error instanceof Error && \"code\" in error && error.code === code;\n}\n"]}
|
package/dist/modes/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { InteractiveMode, type InteractiveModeOptions } from "./interactive/inte
|
|
|
5
5
|
export type { JsonAgentSessionEvent } from "./json-event.ts";
|
|
6
6
|
export { type PrintModeOptions, runPrintMode } from "./print-mode.ts";
|
|
7
7
|
export { createHostDaemonPaths, type EnsuredHost, type EnsureHostOptions, ensureHost, type HostDaemonPaths, PINNED_HOST_CLIENT_CAPABILITIES, } from "./rpc/host-ensure.ts";
|
|
8
|
-
export { type ModelInfo, RpcClient, type RpcClientEvent, type RpcClientOptions, type RpcEventListener, } from "./rpc/rpc-client.ts";
|
|
8
|
+
export { isTransportGoneError, type ModelInfo, RpcClient, type RpcClientEvent, type RpcClientOptions, type RpcEventListener, RpcTransportGoneError, } from "./rpc/rpc-client.ts";
|
|
9
9
|
export { runRpcMode } from "./rpc/rpc-mode.ts";
|
|
10
10
|
export type { RpcCommand, RpcExtensionEvent, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcResponse, RpcSessionState, } from "./rpc/rpc-types.ts";
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AACjG,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EACN,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,eAAe,EACpB,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,KAAK,SAAS,EACd,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EACX,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,eAAe,GACf,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AACjG,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EACN,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,eAAe,EACpB,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,oBAAoB,EACpB,KAAK,SAAS,EACd,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EACX,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,eAAe,GACf,MAAM,oBAAoB,CAAC"}
|
package/dist/modes/index.js
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
export { InteractiveMode } from "./interactive/interactive-mode.js";
|
|
5
5
|
export { runPrintMode } from "./print-mode.js";
|
|
6
6
|
export { createHostDaemonPaths, ensureHost, PINNED_HOST_CLIENT_CAPABILITIES, } from "./rpc/host-ensure.js";
|
|
7
|
-
export { RpcClient, } from "./rpc/rpc-client.js";
|
|
7
|
+
export { isTransportGoneError, RpcClient, RpcTransportGoneError, } from "./rpc/rpc-client.js";
|
|
8
8
|
export { runRpcMode } from "./rpc/rpc-mode.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/modes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAA+B,MAAM,mCAAmC,CAAC;AAEjG,OAAO,EAAyB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EACN,qBAAqB,EAGrB,UAAU,EAEV,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAA+B,MAAM,mCAAmC,CAAC;AAEjG,OAAO,EAAyB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EACN,qBAAqB,EAGrB,UAAU,EAEV,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,oBAAoB,EAEpB,SAAS,EAIT,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["/**\n * Run modes for the coding agent.\n */\n\nexport { InteractiveMode, type InteractiveModeOptions } from \"./interactive/interactive-mode.ts\";\nexport type { JsonAgentSessionEvent } from \"./json-event.ts\";\nexport { type PrintModeOptions, runPrintMode } from \"./print-mode.ts\";\nexport {\n\tcreateHostDaemonPaths,\n\ttype EnsuredHost,\n\ttype EnsureHostOptions,\n\tensureHost,\n\ttype HostDaemonPaths,\n\tPINNED_HOST_CLIENT_CAPABILITIES,\n} from \"./rpc/host-ensure.ts\";\nexport {\n\tisTransportGoneError,\n\ttype ModelInfo,\n\tRpcClient,\n\ttype RpcClientEvent,\n\ttype RpcClientOptions,\n\ttype RpcEventListener,\n\tRpcTransportGoneError,\n} from \"./rpc/rpc-client.ts\";\nexport { runRpcMode } from \"./rpc/rpc-mode.ts\";\nexport type {\n\tRpcCommand,\n\tRpcExtensionEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcResponse,\n\tRpcSessionState,\n} from \"./rpc/rpc-types.ts\";\n"]}
|
|
@@ -7,6 +7,7 @@ import { SessionManager } from "../../core/session-manager.ts";
|
|
|
7
7
|
import { type EnsuredHost } from "../rpc/host-ensure.ts";
|
|
8
8
|
import { RpcClient, type RpcClientEvent } from "../rpc/rpc-client.ts";
|
|
9
9
|
export declare const INTERACTIVE_HOST_FALLBACK_WARNING = "Warning: shared interactive host unavailable; continuing locally";
|
|
10
|
+
export declare const INTERACTIVE_HOST_RECONNECTING_WARNING = "Warning: shared interactive host connection lost; reconnecting";
|
|
10
11
|
export interface InteractiveHostWarning {
|
|
11
12
|
readonly type: "interactive_host_fallback" | "interactive_host_action_failed";
|
|
12
13
|
readonly message: string;
|
|
@@ -44,7 +45,17 @@ export interface InteractiveHostRuntimeOptions {
|
|
|
44
45
|
export declare function createInteractiveHostRuntime(localRuntime: AgentSessionRuntime, options: InteractiveHostRuntimeOptions): Promise<AgentSessionRuntime>;
|
|
45
46
|
export declare class RemoteInteractiveRuntime {
|
|
46
47
|
#private;
|
|
47
|
-
|
|
48
|
+
get isReconnecting(): boolean;
|
|
49
|
+
get isFallback(): boolean;
|
|
50
|
+
constructor(local: AgentSessionRuntime, remoteSession: RemoteSessionProxy, client: RpcClient, lifecycle?: {
|
|
51
|
+
readonly reconnecting: Promise<void> | undefined;
|
|
52
|
+
readonly dispose: () => void;
|
|
53
|
+
} & {
|
|
54
|
+
onTransportGone: (cause: unknown) => void;
|
|
55
|
+
});
|
|
56
|
+
enterConnected(): void;
|
|
57
|
+
enterReconnecting(): void;
|
|
58
|
+
enterFallback(): Promise<void>;
|
|
48
59
|
get session(): AgentSession;
|
|
49
60
|
get services(): AgentSessionRuntime["services"];
|
|
50
61
|
get cwd(): string;
|
|
@@ -54,6 +65,8 @@ export declare class RemoteInteractiveRuntime {
|
|
|
54
65
|
setBeforeSessionInvalidate(callback?: () => void): void;
|
|
55
66
|
setRebindSession(callback?: () => Promise<void>): void;
|
|
56
67
|
setHostUiHandler(callback?: InteractiveHostUiHandler): void;
|
|
68
|
+
setClientInfo(width: number): void;
|
|
69
|
+
reRegisterClientInfo(): Promise<void>;
|
|
57
70
|
dispose(): Promise<void>;
|
|
58
71
|
newSession(options?: {
|
|
59
72
|
parentSession?: string;
|
|
@@ -84,9 +97,79 @@ interface RemoteSessionProxy {
|
|
|
84
97
|
readonly session: AgentSession;
|
|
85
98
|
setHostUiHandler(callback?: InteractiveHostUiHandler): void;
|
|
86
99
|
refresh(): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Run a replacement this runtime is driving itself, suppressing the refresh
|
|
102
|
+
* that the host's broadcast `session_replaced` would otherwise trigger. The
|
|
103
|
+
* caller owns the refresh/rebind ordering for its own replacements, so the
|
|
104
|
+
* scope must cover the command itself, not just its refresh tail.
|
|
105
|
+
*/
|
|
106
|
+
aroundLocalReplacement<T>(body: () => Promise<T>): Promise<T>;
|
|
87
107
|
abortLocalBash(): void;
|
|
88
108
|
createReplacedSessionContext(): ReplacedSessionContext;
|
|
89
109
|
}
|
|
110
|
+
/** Exported for direct coverage of the wire-event handling below. */
|
|
111
|
+
export declare function createRemoteSessionProxy(local: AgentSession, agentDir: string, client: RpcClient, initialState: ReturnType<typeof stateFromRpc>, onWarning?: (warning: InteractiveHostWarning) => void, onTransportGone?: (cause: unknown) => void, startupEvents?: readonly import("../rpc/rpc-client.ts").RpcClientEvent[]): RemoteSessionProxy;
|
|
112
|
+
declare function stateFromRpc(state: {
|
|
113
|
+
model?: AgentSession["model"];
|
|
114
|
+
thinkingLevel: AgentSession["thinkingLevel"];
|
|
115
|
+
isStreaming: boolean;
|
|
116
|
+
isCompacting: boolean;
|
|
117
|
+
pendingMessageCount: number;
|
|
118
|
+
usageTotals: import("../../core/session-manager.ts").UsageTotals;
|
|
119
|
+
contextUsage?: import("../../core/extensions/types.ts").ContextUsage;
|
|
120
|
+
retryAttempt: number;
|
|
121
|
+
isBashRunning: boolean;
|
|
122
|
+
sessionFile?: string;
|
|
123
|
+
sessionId: string;
|
|
124
|
+
sessionName?: string;
|
|
125
|
+
cwd: string;
|
|
126
|
+
projectTrusted: boolean;
|
|
127
|
+
serviceTier?: AgentSession["serviceTier"];
|
|
128
|
+
fastMode: boolean;
|
|
129
|
+
steeringMode: AgentSession["steeringMode"];
|
|
130
|
+
followUpMode: AgentSession["followUpMode"];
|
|
131
|
+
autoCompactionEnabled: boolean;
|
|
132
|
+
entries?: import("../../core/session-manager.ts").SessionEntry[];
|
|
133
|
+
favoriteModels: import("../rpc/rpc-types.ts").RpcSessionModelEntry[];
|
|
134
|
+
scopedModels: import("../rpc/rpc-types.ts").RpcSessionModelEntry[];
|
|
135
|
+
steering: string[];
|
|
136
|
+
followUp: string[];
|
|
137
|
+
ordered: Array<{
|
|
138
|
+
text: string;
|
|
139
|
+
mode: "steer" | "followUp";
|
|
140
|
+
enqueueOrder: number;
|
|
141
|
+
}>;
|
|
142
|
+
}): {
|
|
143
|
+
model?: AgentSession["model"];
|
|
144
|
+
thinkingLevel: AgentSession["thinkingLevel"];
|
|
145
|
+
isStreaming: boolean;
|
|
146
|
+
isCompacting: boolean;
|
|
147
|
+
pendingMessageCount: number;
|
|
148
|
+
usageTotals: import("../../core/session-manager.ts").UsageTotals;
|
|
149
|
+
contextUsage?: import("../../core/extensions/types.ts").ContextUsage;
|
|
150
|
+
retryAttempt: number;
|
|
151
|
+
isBashRunning: boolean;
|
|
152
|
+
sessionFile?: string;
|
|
153
|
+
sessionId: string;
|
|
154
|
+
sessionName?: string;
|
|
155
|
+
cwd: string;
|
|
156
|
+
projectTrusted: boolean;
|
|
157
|
+
serviceTier?: AgentSession["serviceTier"];
|
|
158
|
+
fastMode: boolean;
|
|
159
|
+
steeringMode: AgentSession["steeringMode"];
|
|
160
|
+
followUpMode: AgentSession["followUpMode"];
|
|
161
|
+
autoCompactionEnabled: boolean;
|
|
162
|
+
entries?: import("../../core/session-manager.ts").SessionEntry[];
|
|
163
|
+
favoriteModels: import("../rpc/rpc-types.ts").RpcSessionModelEntry[];
|
|
164
|
+
scopedModels: import("../rpc/rpc-types.ts").RpcSessionModelEntry[];
|
|
165
|
+
steering: string[];
|
|
166
|
+
followUp: string[];
|
|
167
|
+
ordered: Array<{
|
|
168
|
+
text: string;
|
|
169
|
+
mode: "steer" | "followUp";
|
|
170
|
+
enqueueOrder: number;
|
|
171
|
+
}>;
|
|
172
|
+
};
|
|
90
173
|
export declare function isInteractiveHostEvent(event: RpcClientEvent): event is Extract<RpcClientEvent, {
|
|
91
174
|
type: string;
|
|
92
175
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-host-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-host-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAgD,MAAM,6BAA6B,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAE1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,uBAAuB,CAAC;AACrE,OAAO,
|
|
1
|
+
{"version":3,"file":"interactive-host-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-host-runtime.ts"],"names":[],"mappings":"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"}
|