@code-yeongyu/senpi 2026.8.29 → 2026.8.30-3
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 +172 -0
- package/dist/core/agent-session.d.ts +47 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +406 -39
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +155 -37
- package/dist/core/bash-executor.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/credential-accounts.d.ts.map +1 -1
- package/dist/core/credential-accounts.js +23 -9
- package/dist/core/credential-accounts.js.map +1 -1
- package/dist/core/credential-pool/env-slots.d.ts.map +1 -1
- package/dist/core/credential-pool/env-slots.js +2 -0
- package/dist/core/credential-pool/env-slots.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +18 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js +32 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +8 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +164 -48
- 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 +148 -150
- 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/retained-message-safety.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/retained-message-safety.js +31 -8
- package/dist/core/extensions/builtin/compaction/retained-message-safety.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 +22 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +131 -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 +7 -196
- 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/cursor-cli-oauth/stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js +8 -28
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.js +15 -5
- package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js +16 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/manager.d.ts +5 -0
- package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/manager.js +31 -3
- package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-permission.d.ts +8 -0
- package/dist/core/extensions/builtin/terminal/monitor-permission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-permission.js +16 -0
- package/dist/core/extensions/builtin/terminal/monitor-permission.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +13 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.js +403 -3
- package/dist/core/extensions/builtin/terminal/monitor-registry.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/terminal/session-bundle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.js +1 -0
- package/dist/core/extensions/builtin/terminal/session-bundle.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/kill-bash.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/kill-bash.js +5 -2
- package/dist/core/extensions/builtin/terminal/tools/kill-bash.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts +4 -0
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js +40 -2
- package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.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-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +10 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +15 -85
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +15 -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/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +97 -15
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +8 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +76 -34
- package/dist/core/tools/output-accumulator.js.map +1 -1
- 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.map +1 -1
- package/dist/main.js +17 -5
- package/dist/main.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/components/footer.d.ts +7 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +34 -8
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/grok/chrome.d.ts +2 -0
- package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
- package/dist/modes/interactive/grok/chrome.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +132 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +633 -117
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +7 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +114 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +8 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +158 -49
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts +19 -0
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
- package/dist/modes/rpc/host-ensure.js +79 -15
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts +29 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +96 -25
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +2 -0
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +23 -12
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +6 -4
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +20 -4
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +76 -17
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-input-validation.d.ts +1 -0
- package/dist/modes/rpc/rpc-input-validation.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-validation.js +66 -0
- package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +86 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +1 -0
- package/dist/modes/rpc/session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/session-binding.js +21 -1
- package/dist/modes/rpc/session-binding.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +1 -0
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +2 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +54 -7
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-extension-ui-requests.d.ts +1 -0
- package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
- package/dist/modes/rpc/session-extension-ui-requests.js +5 -0
- package/dist/modes/rpc/session-extension-ui-requests.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +10 -2
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +58 -4
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/socket-event-fanout.d.ts +22 -0
- package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -0
- package/dist/modes/rpc/socket-event-fanout.js +84 -0
- package/dist/modes/rpc/socket-event-fanout.js.map +1 -0
- package/docs/rpc.md +22 -2
- package/docs/settings.md +34 -0
- package/docs/windows.md +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +62 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +139 -90
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +4 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +40 -20
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +3 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +28 -9
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -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 +67 -38
- 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/measure.d.ts +20 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js +443 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +2 -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 +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.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/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.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/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.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/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.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/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +7 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +5 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.js +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +19 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -258,20 +258,22 @@ function rewriteDeclaration(code, declarationStart, start, end, keyword) {
|
|
|
258
258
|
const preserveDeclaration = source.includes("//") || source.includes("/*");
|
|
259
259
|
for (const [segmentStart, segmentEnd] of splitDeclarators(code, start, end)) {
|
|
260
260
|
const segment = code.slice(segmentStart, segmentEnd);
|
|
261
|
-
if (!segment.trim())
|
|
261
|
+
if (!segment.trim()) return undefined;
|
|
262
262
|
const initializerStart = findTopLevelEquals(segment);
|
|
263
263
|
if (initializerStart < 0 && keyword === "const") return undefined;
|
|
264
264
|
const pattern = trimPattern(initializerStart < 0 ? segment : segment.slice(0, initializerStart));
|
|
265
265
|
const bindings = [];
|
|
266
266
|
collectPatternNames(pattern, bindings);
|
|
267
267
|
if (bindings.length === 0) return undefined;
|
|
268
|
+
if (preserveDeclaration) {
|
|
269
|
+
for (const name of bindings) assignments.push(`globalThis[${JSON.stringify(name)}] = ${name};`);
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
268
272
|
const target = rewriteBindingPattern(pattern);
|
|
269
273
|
if (target === undefined) return undefined;
|
|
270
274
|
const initializer = initializerStart < 0 ? "undefined" : segment.slice(initializerStart + 1).trim();
|
|
271
|
-
const [assignmentInitializer, comment] = splitTrailingLineComment(initializer);
|
|
272
|
-
const assignmentComment = preserveDeclaration ? "" : comment;
|
|
273
275
|
assignments.push(
|
|
274
|
-
`${target.startsWith("{") || target.startsWith("[") ?
|
|
276
|
+
`${target.startsWith("{") || target.startsWith("[") ? `;(${target} = ${initializer})` : `${target} = ${initializer}`};`,
|
|
275
277
|
);
|
|
276
278
|
}
|
|
277
279
|
if (assignments.length === 0) return undefined;
|
|
@@ -408,6 +410,7 @@ function splitDeclarators(code, start, end) {
|
|
|
408
410
|
if (!/\s/u.test(char)) canStartRegex = isExpressionOperator(char) || char === "(" || char === "[" || char === "{";
|
|
409
411
|
}
|
|
410
412
|
if (segmentStart < end && code.slice(segmentStart, end).trim() !== ";") ranges.push([segmentStart, end - (code[end - 1] === ";" ? 1 : 0)]);
|
|
413
|
+
else if (ranges.length > 0 && code.slice(segmentStart, end).trim() !== ";") ranges.push([end, end]);
|
|
411
414
|
return ranges;
|
|
412
415
|
}
|
|
413
416
|
|
|
@@ -501,51 +504,9 @@ function applyTextEdits(code, edits) {
|
|
|
501
504
|
return output;
|
|
502
505
|
}
|
|
503
506
|
|
|
504
|
-
function splitTrailingLineComment(source) {
|
|
505
|
-
let canStartRegex = true;
|
|
506
|
-
for (let index = 0; index < source.length; index += 1) {
|
|
507
|
-
const char = source[index];
|
|
508
|
-
const next = source[index + 1];
|
|
509
|
-
if (char === "/" && next === "/") return [source.slice(0, index).trimEnd(), source.slice(index)];
|
|
510
|
-
if (char === "/" && next === "*") {
|
|
511
|
-
index = skipBlockComment(source, index) - 1;
|
|
512
|
-
continue;
|
|
513
|
-
}
|
|
514
|
-
if (char === "'" || char === '"') {
|
|
515
|
-
index = skipQuotedLiteral(source, index) - 1;
|
|
516
|
-
canStartRegex = false;
|
|
517
|
-
continue;
|
|
518
|
-
}
|
|
519
|
-
if (char === "`") {
|
|
520
|
-
index = skipTemplateLiteral(source, index) - 1;
|
|
521
|
-
canStartRegex = false;
|
|
522
|
-
continue;
|
|
523
|
-
}
|
|
524
|
-
if (char === "/" && canStartRegex) {
|
|
525
|
-
index = skipRegexLiteral(source, index) - 1;
|
|
526
|
-
canStartRegex = false;
|
|
527
|
-
continue;
|
|
528
|
-
}
|
|
529
|
-
if (isIdentifierStart(char)) {
|
|
530
|
-
const end = readIdentifier(source, index);
|
|
531
|
-
canStartRegex = REGEX_PREFIX_KEYWORDS.has(source.slice(index, end));
|
|
532
|
-
index = end - 1;
|
|
533
|
-
continue;
|
|
534
|
-
}
|
|
535
|
-
if (isDecimalDigit(char)) {
|
|
536
|
-
index = skipNumberLiteral(source, index) - 1;
|
|
537
|
-
canStartRegex = false;
|
|
538
|
-
continue;
|
|
539
|
-
}
|
|
540
|
-
if (!/\s/u.test(char)) canStartRegex = isExpressionOperator(char) || char === "(" || char === "[" || char === "{";
|
|
541
|
-
}
|
|
542
|
-
return [source, ""];
|
|
543
|
-
}
|
|
544
|
-
|
|
545
507
|
function trimPattern(source) {
|
|
546
508
|
let start = 0;
|
|
547
|
-
|
|
548
|
-
while (start < end) {
|
|
509
|
+
while (start < source.length) {
|
|
549
510
|
if (/\s/u.test(source[start])) {
|
|
550
511
|
start += 1;
|
|
551
512
|
continue;
|
|
@@ -560,12 +521,30 @@ function trimPattern(source) {
|
|
|
560
521
|
}
|
|
561
522
|
break;
|
|
562
523
|
}
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
const
|
|
567
|
-
if (
|
|
568
|
-
|
|
524
|
+
let end = start;
|
|
525
|
+
for (let index = start; index < source.length; index += 1) {
|
|
526
|
+
const char = source[index];
|
|
527
|
+
const next = source[index + 1];
|
|
528
|
+
if (/\s/u.test(char)) continue;
|
|
529
|
+
if (char === "/" && next === "/") {
|
|
530
|
+
index = skipLineComment(source, index) - 1;
|
|
531
|
+
continue;
|
|
532
|
+
}
|
|
533
|
+
if (char === "/" && next === "*") {
|
|
534
|
+
index = skipBlockComment(source, index) - 1;
|
|
535
|
+
continue;
|
|
536
|
+
}
|
|
537
|
+
if (char === "'" || char === '"') {
|
|
538
|
+
index = skipQuotedLiteral(source, index) - 1;
|
|
539
|
+
end = index + 1;
|
|
540
|
+
continue;
|
|
541
|
+
}
|
|
542
|
+
if (char === "`") {
|
|
543
|
+
index = skipTemplateLiteral(source, index) - 1;
|
|
544
|
+
end = index + 1;
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
end = index + 1;
|
|
569
548
|
}
|
|
570
549
|
return source.slice(start, end);
|
|
571
550
|
}
|
|
@@ -733,66 +712,136 @@ function captureLastExpression(code) {
|
|
|
733
712
|
return `${head}return ${tail.replace(/;+$/u, "")};`;
|
|
734
713
|
}
|
|
735
714
|
|
|
715
|
+
const LABEL_PREFIX_RE = /^[\p{ID_Start}$_][\p{ID_Continue}\u200c\u200d$]*\s*:/u;
|
|
716
|
+
|
|
736
717
|
function isStatementOnly(source) {
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
718
|
+
if (
|
|
719
|
+
/^(?:const|let|var|if|for|while|switch|try|catch|finally|class|function|import|export|throw|return|do|break|continue|debugger)\b/u.test(
|
|
720
|
+
source,
|
|
721
|
+
)
|
|
722
|
+
)
|
|
723
|
+
return true;
|
|
724
|
+
return LABEL_PREFIX_RE.test(source);
|
|
740
725
|
}
|
|
741
726
|
|
|
727
|
+
const CONTROL_PAREN_KEYWORDS = new Set(["catch", "for", "if", "switch", "while", "with"]);
|
|
728
|
+
|
|
742
729
|
function findLastTopLevelStatementStart(code) {
|
|
743
730
|
let start = 0;
|
|
744
731
|
let round = 0;
|
|
745
732
|
let square = 0;
|
|
746
733
|
let curly = 0;
|
|
747
|
-
let
|
|
748
|
-
let
|
|
749
|
-
let
|
|
750
|
-
|
|
734
|
+
let canStartRegex = true;
|
|
735
|
+
let lastSignificant = "";
|
|
736
|
+
let pendingControlParen = false;
|
|
737
|
+
const controlParens = [];
|
|
751
738
|
for (let index = 0; index < code.length; index += 1) {
|
|
752
739
|
const char = code[index];
|
|
753
740
|
const next = code[index + 1];
|
|
754
|
-
if (
|
|
755
|
-
|
|
741
|
+
if (char === "/" && next === "/") {
|
|
742
|
+
index = skipLineComment(code, index) - 1;
|
|
756
743
|
continue;
|
|
757
744
|
}
|
|
758
|
-
if (
|
|
759
|
-
|
|
760
|
-
blockComment = false;
|
|
761
|
-
index += 1;
|
|
762
|
-
}
|
|
745
|
+
if (char === "/" && next === "*") {
|
|
746
|
+
index = skipBlockComment(code, index) - 1;
|
|
763
747
|
continue;
|
|
764
748
|
}
|
|
765
|
-
if (
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
} else if (char === quote) {
|
|
771
|
-
quote = "";
|
|
772
|
-
}
|
|
749
|
+
if (char === "'" || char === '"' || char === "`") {
|
|
750
|
+
index = (char === "`" ? skipTemplateLiteral(code, index) : skipQuotedLiteral(code, index)) - 1;
|
|
751
|
+
canStartRegex = false;
|
|
752
|
+
lastSignificant = char;
|
|
753
|
+
pendingControlParen = false;
|
|
773
754
|
continue;
|
|
774
755
|
}
|
|
775
|
-
if (char === "/" &&
|
|
776
|
-
|
|
777
|
-
|
|
756
|
+
if (char === "/" && canStartRegex) {
|
|
757
|
+
index = skipRegexLiteral(code, index) - 1;
|
|
758
|
+
canStartRegex = false;
|
|
759
|
+
lastSignificant = char;
|
|
760
|
+
pendingControlParen = false;
|
|
778
761
|
continue;
|
|
779
762
|
}
|
|
780
|
-
if (char
|
|
781
|
-
|
|
782
|
-
index
|
|
763
|
+
if (isIdentifierStart(char)) {
|
|
764
|
+
const end = readIdentifier(code, index);
|
|
765
|
+
const token = code.slice(index, end);
|
|
766
|
+
canStartRegex = REGEX_PREFIX_KEYWORDS.has(token);
|
|
767
|
+
pendingControlParen = CONTROL_PAREN_KEYWORDS.has(token);
|
|
768
|
+
lastSignificant = code[end - 1];
|
|
769
|
+
index = end - 1;
|
|
783
770
|
continue;
|
|
784
771
|
}
|
|
785
|
-
if (char
|
|
786
|
-
|
|
772
|
+
if (isDecimalDigit(char)) {
|
|
773
|
+
index = skipNumberLiteral(code, index) - 1;
|
|
774
|
+
canStartRegex = false;
|
|
775
|
+
lastSignificant = char;
|
|
776
|
+
pendingControlParen = false;
|
|
787
777
|
continue;
|
|
788
778
|
}
|
|
789
|
-
if (char === "(")
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
779
|
+
if (char === "(") {
|
|
780
|
+
round += 1;
|
|
781
|
+
controlParens.push(pendingControlParen);
|
|
782
|
+
pendingControlParen = false;
|
|
783
|
+
canStartRegex = true;
|
|
784
|
+
lastSignificant = char;
|
|
785
|
+
continue;
|
|
786
|
+
}
|
|
787
|
+
if (char === ")") {
|
|
788
|
+
round = Math.max(0, round - 1);
|
|
789
|
+
canStartRegex = controlParens.pop() === true;
|
|
790
|
+
lastSignificant = char;
|
|
791
|
+
continue;
|
|
792
|
+
}
|
|
793
|
+
if (char === "[" || char === "{") {
|
|
794
|
+
if (char === "[") square += 1;
|
|
795
|
+
else curly += 1;
|
|
796
|
+
canStartRegex = true;
|
|
797
|
+
lastSignificant = char;
|
|
798
|
+
pendingControlParen = false;
|
|
799
|
+
continue;
|
|
800
|
+
}
|
|
801
|
+
if (char === "]" || char === "}") {
|
|
802
|
+
if (char === "]") square = Math.max(0, square - 1);
|
|
803
|
+
else curly = Math.max(0, curly - 1);
|
|
804
|
+
canStartRegex = false;
|
|
805
|
+
lastSignificant = char;
|
|
806
|
+
pendingControlParen = false;
|
|
807
|
+
continue;
|
|
808
|
+
}
|
|
809
|
+
if (char === ";" && round === 0 && square === 0 && curly === 0) {
|
|
810
|
+
const nextIndex = nextSignificantIndex(code, index + 1);
|
|
811
|
+
if (nextIndex < code.length && !isContinuationKeyword(code, nextIndex)) start = nextIndex;
|
|
812
|
+
canStartRegex = true;
|
|
813
|
+
lastSignificant = char;
|
|
814
|
+
pendingControlParen = false;
|
|
815
|
+
continue;
|
|
816
|
+
}
|
|
817
|
+
if (isLineTerminator(char) && round === 0 && square === 0 && curly === 0) {
|
|
818
|
+
if (!canStartRegex) {
|
|
819
|
+
const nextIndex = nextSignificantIndex(code, index + 1);
|
|
820
|
+
if (nextIndex < code.length && !isStatementContinuation(code, nextIndex, lastSignificant)) start = nextIndex;
|
|
821
|
+
}
|
|
822
|
+
canStartRegex = true;
|
|
823
|
+
continue;
|
|
824
|
+
}
|
|
825
|
+
if (!/\s/u.test(char)) {
|
|
826
|
+
canStartRegex = isExpressionOperator(char) || char === ",";
|
|
827
|
+
lastSignificant = char;
|
|
828
|
+
pendingControlParen = false;
|
|
829
|
+
}
|
|
796
830
|
}
|
|
797
831
|
return start;
|
|
798
832
|
}
|
|
833
|
+
|
|
834
|
+
const STATEMENT_CONTINUATION_KEYWORDS = new Set(["catch", "else", "finally"]);
|
|
835
|
+
|
|
836
|
+
function isContinuationKeyword(code, index) {
|
|
837
|
+
if (!isIdentifierStart(code[index])) return false;
|
|
838
|
+
return STATEMENT_CONTINUATION_KEYWORDS.has(code.slice(index, readIdentifier(code, index)));
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
function isStatementContinuation(code, index, previousChar) {
|
|
842
|
+
const char = code[index];
|
|
843
|
+
if (char === "(" || char === "[" || char === "`") return previousChar !== "}" && previousChar !== "";
|
|
844
|
+
if (char === "!" || char === "~") return false;
|
|
845
|
+
if (char !== undefined && isDeclarationContinuation(char)) return true;
|
|
846
|
+
return isContinuationKeyword(code, index);
|
|
847
|
+
}
|
|
@@ -163,7 +163,7 @@ tool_schema(name?) → dict
|
|
|
163
163
|
completion(prompt, model?="default", system?=None, schema?=None) → str | dict
|
|
164
164
|
Oneshot, stateless (no history/tools). \`model\`: \`"smol"\` fast | \`"default"\` session | \`"slow"\` most capable. \`schema\` (JSON-Schema) → structured output, parsed object.
|
|
165
165
|
{{#if spawns}}agent(prompt, agent?="{{spawnDefaultAgent}}", model?=None, label?=None, schema?=None, handle?=False) → str | dict
|
|
166
|
-
Run a subagent → final output. \`agent\` picks another discovered agent; omit it to use \`{{spawnDefaultAgent}}\`. \`schema\` as in completion(). Background via \`local://\` files named in the prompt. \`handle\` →
|
|
166
|
+
Run a subagent → final output. \`agent\` picks another discovered agent; omit it to use \`{{spawnDefaultAgent}}\`. \`schema\` as in completion(). Background via \`local://\` files named in the prompt. \`handle\` → workflow node dict { text, output, handle: \`agent://<id>\`, id, agent } (parsed under \`data\` when \`schema\` set).
|
|
167
167
|
{{#if js}} JS: options are ONE trailing object — agent(prompt, { agent, schema, handle }).
|
|
168
168
|
{{/if}}{{/if}}parallel(thunks) → list
|
|
169
169
|
Thunks through a bounded pool (wide as a \`task\` batch — don't pre-shrink), input order kept; returns when all finish, a throwing thunk propagates.
|
|
@@ -176,14 +176,14 @@ phase(title) → None
|
|
|
176
176
|
\`\`\`
|
|
177
177
|
</prelude>
|
|
178
178
|
{{#if spawns}}
|
|
179
|
-
<
|
|
180
|
-
|
|
179
|
+
<workflow>
|
|
180
|
+
Define the workflow spec IN CODE: partition the work into logically distinct steps, one node per step, then wire them as acyclic waves — never hand-author the graph as a single opaque call.
|
|
181
181
|
- **Name nodes.** Capture each \`agent(…, {{#if py}}handle=True{{/if}}{{#if js}}{ handle: true }{{/if}}{{#if jl}}handle=true{{/if}})\` result; carries \`handle\` (\`agent://<id>\`) + \`output\`.
|
|
182
182
|
- **Wire edges by reference.** Put an upstream node's \`handle\`/\`output\` in the dependent stage's prompt — large transcript never re-inlined. Bulk: \`write("local://<name>.md", …)\`, pass the URI.
|
|
183
183
|
- **\`pipeline(items, *stages)\` = staged waves**, barrier between stages (every item clears stage N before any enters N+1). **\`parallel(thunks)\` = one wave** of independent nodes.
|
|
184
184
|
- **Isolate failure.** A raising node re-raises the lowest-index error, aborts its wave; wrap risky nodes in try/except so a failure degrades only its dependent subtree, independent branches finish.
|
|
185
185
|
- **Acyclic only.** A node never waits on its own descendant.
|
|
186
|
-
</
|
|
186
|
+
</workflow>
|
|
187
187
|
{{/if}}
|
|
188
188
|
|
|
189
189
|
<critical>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../../src/harness/env/nodejs.ts"],"names":[],"mappings":"AAoBA,OAAO,EACN,KAAK,YAAY,EACjB,cAAc,EAEd,SAAS,EACT,KAAK,QAAQ,EAGb,KAAK,MAAM,EACX,KAAK,gBAAgB,EAErB,MAAM,aAAa,CAAC;AA6NrB;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAgBxF;AA4BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,WAA8B,GAAG,IAAI,CAKrG;
|
|
1
|
+
{"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../../src/harness/env/nodejs.ts"],"names":[],"mappings":"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"}
|
|
@@ -362,6 +362,7 @@ function waitForChildProcess(child) {
|
|
|
362
362
|
child.once("close", onClose);
|
|
363
363
|
});
|
|
364
364
|
}
|
|
365
|
+
const NORMAL_CALLBACK_SETTLEMENT_TIMEOUT_MS = 5_000;
|
|
365
366
|
export class NodeExecutionEnv {
|
|
366
367
|
constructor(options) {
|
|
367
368
|
this.activeChildPids = new Set();
|
|
@@ -399,6 +400,7 @@ export class NodeExecutionEnv {
|
|
|
399
400
|
let settled = false;
|
|
400
401
|
let timedOut = false;
|
|
401
402
|
let callbackError;
|
|
403
|
+
const callbackPromises = new Set();
|
|
402
404
|
let child;
|
|
403
405
|
let timeoutId;
|
|
404
406
|
const onAbort = () => {
|
|
@@ -458,29 +460,47 @@ export class NodeExecutionEnv {
|
|
|
458
460
|
}
|
|
459
461
|
child.stdout?.setEncoding("utf8");
|
|
460
462
|
child.stderr?.setEncoding("utf8");
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
463
|
+
const handleChunk = (chunk, callback, append) => {
|
|
464
|
+
append(chunk);
|
|
465
|
+
if (callback === undefined)
|
|
466
|
+
return;
|
|
467
|
+
const callbackPromise = Promise.resolve()
|
|
468
|
+
.then(() => callback(chunk))
|
|
469
|
+
.catch((error) => {
|
|
470
|
+
if (!callbackError) {
|
|
471
|
+
const cause = toError(error);
|
|
472
|
+
callbackError = new ExecutionError("callback_error", cause.message, error);
|
|
473
|
+
onAbort();
|
|
474
|
+
}
|
|
475
|
+
throw error;
|
|
476
|
+
});
|
|
477
|
+
callbackPromises.add(callbackPromise);
|
|
478
|
+
void callbackPromise.then(() => callbackPromises.delete(callbackPromise), () => callbackPromises.delete(callbackPromise));
|
|
479
|
+
};
|
|
480
|
+
child.stdout?.on("data", (chunk) => handleChunk(chunk, options?.onStdout, (value) => (stdout += value)));
|
|
481
|
+
child.stderr?.on("data", (chunk) => handleChunk(chunk, options?.onStderr, (value) => (stderr += value)));
|
|
482
|
+
void waitForChildProcess(child).then(async (code) => {
|
|
483
|
+
// Normal command completion must not be held hostage by an observer that
|
|
484
|
+
// never settles. Abort completion uses the shorter cancellation path above;
|
|
485
|
+
// this generous bound preserves slow, legitimate callbacks without hanging
|
|
486
|
+
// the execution forever.
|
|
487
|
+
const callbacksSettled = Promise.allSettled([...callbackPromises]);
|
|
488
|
+
let callbackTimeout;
|
|
489
|
+
const callbackBound = new Promise((resolve) => {
|
|
490
|
+
callbackTimeout = setTimeout(() => resolve(false), NORMAL_CALLBACK_SETTLEMENT_TIMEOUT_MS);
|
|
491
|
+
callbackTimeout.unref?.();
|
|
492
|
+
});
|
|
474
493
|
try {
|
|
475
|
-
|
|
494
|
+
const settled = await Promise.race([callbacksSettled.then(() => true), callbackBound]);
|
|
495
|
+
if (!settled && !callbackError) {
|
|
496
|
+
settle(err(new ExecutionError("callback_error", "Output callback did not settle within 5000ms")));
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
476
499
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
onAbort();
|
|
500
|
+
finally {
|
|
501
|
+
if (callbackTimeout)
|
|
502
|
+
clearTimeout(callbackTimeout);
|
|
481
503
|
}
|
|
482
|
-
});
|
|
483
|
-
void waitForChildProcess(child).then((code) => {
|
|
484
504
|
if (callbackError) {
|
|
485
505
|
settle(err(callbackError));
|
|
486
506
|
return;
|