@aria-cli/tools 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cjs/.tsbuildinfo +1 -0
- package/dist-cjs/ask-user-interaction.d.ts +10 -0
- package/dist-cjs/ask-user-interaction.js +28 -0
- package/dist-cjs/ask-user-interaction.js.map +1 -0
- package/dist-cjs/cache/web-cache.d.ts +52 -0
- package/dist-cjs/cache/web-cache.js +71 -0
- package/dist-cjs/cache/web-cache.js.map +1 -0
- package/dist-cjs/definitions/arion.d.ts +8 -0
- package/dist-cjs/definitions/arion.js +108 -0
- package/dist-cjs/definitions/arion.js.map +1 -0
- package/dist-cjs/definitions/browser/browser.d.ts +2 -0
- package/dist-cjs/definitions/browser/browser.js +422 -0
- package/dist-cjs/definitions/browser/browser.js.map +1 -0
- package/dist-cjs/definitions/browser/index.d.ts +1 -0
- package/dist-cjs/definitions/browser/index.js +9 -0
- package/dist-cjs/definitions/browser/index.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-downloads.d.ts +13 -0
- package/dist-cjs/definitions/browser/pw-downloads.js +118 -0
- package/dist-cjs/definitions/browser/pw-downloads.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-interactions.d.ts +78 -0
- package/dist-cjs/definitions/browser/pw-interactions.js +214 -0
- package/dist-cjs/definitions/browser/pw-interactions.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-responses.d.ts +28 -0
- package/dist-cjs/definitions/browser/pw-responses.js +85 -0
- package/dist-cjs/definitions/browser/pw-responses.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-session.d.ts +65 -0
- package/dist-cjs/definitions/browser/pw-session.js +327 -0
- package/dist-cjs/definitions/browser/pw-session.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-shared.d.ts +22 -0
- package/dist-cjs/definitions/browser/pw-shared.js +73 -0
- package/dist-cjs/definitions/browser/pw-shared.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-snapshot.d.ts +34 -0
- package/dist-cjs/definitions/browser/pw-snapshot.js +308 -0
- package/dist-cjs/definitions/browser/pw-snapshot.js.map +1 -0
- package/dist-cjs/definitions/browser/pw-state.d.ts +22 -0
- package/dist-cjs/definitions/browser/pw-state.js +71 -0
- package/dist-cjs/definitions/browser/pw-state.js.map +1 -0
- package/dist-cjs/definitions/browser/types.d.ts +277 -0
- package/dist-cjs/definitions/browser/types.js +6 -0
- package/dist-cjs/definitions/browser/types.js.map +1 -0
- package/dist-cjs/definitions/code-intelligence.d.ts +8 -0
- package/dist-cjs/definitions/code-intelligence.js +474 -0
- package/dist-cjs/definitions/code-intelligence.js.map +1 -0
- package/dist-cjs/definitions/core.d.ts +47 -0
- package/dist-cjs/definitions/core.js +134 -0
- package/dist-cjs/definitions/core.js.map +1 -0
- package/dist-cjs/definitions/delegation.d.ts +11 -0
- package/dist-cjs/definitions/delegation.js +516 -0
- package/dist-cjs/definitions/delegation.js.map +1 -0
- package/dist-cjs/definitions/deploy.d.ts +15 -0
- package/dist-cjs/definitions/deploy.js +69 -0
- package/dist-cjs/definitions/deploy.js.map +1 -0
- package/dist-cjs/definitions/filesystem.d.ts +9 -0
- package/dist-cjs/definitions/filesystem.js +200 -0
- package/dist-cjs/definitions/filesystem.js.map +1 -0
- package/dist-cjs/definitions/frg.d.ts +3 -0
- package/dist-cjs/definitions/frg.js +67 -0
- package/dist-cjs/definitions/frg.js.map +1 -0
- package/dist-cjs/definitions/index.d.ts +19 -0
- package/dist-cjs/definitions/index.js +44 -0
- package/dist-cjs/definitions/index.js.map +1 -0
- package/dist-cjs/definitions/memory.d.ts +8 -0
- package/dist-cjs/definitions/memory.js +127 -0
- package/dist-cjs/definitions/memory.js.map +1 -0
- package/dist-cjs/definitions/messaging.d.ts +11 -0
- package/dist-cjs/definitions/messaging.js +632 -0
- package/dist-cjs/definitions/messaging.js.map +1 -0
- package/dist-cjs/definitions/meta.d.ts +11 -0
- package/dist-cjs/definitions/meta.js +353 -0
- package/dist-cjs/definitions/meta.js.map +1 -0
- package/dist-cjs/definitions/network.d.ts +11 -0
- package/dist-cjs/definitions/network.js +163 -0
- package/dist-cjs/definitions/network.js.map +1 -0
- package/dist-cjs/definitions/outlook.d.ts +2 -0
- package/dist-cjs/definitions/outlook.js +281 -0
- package/dist-cjs/definitions/outlook.js.map +1 -0
- package/dist-cjs/definitions/patch/apply-patch.d.ts +11 -0
- package/dist-cjs/definitions/patch/apply-patch.js +192 -0
- package/dist-cjs/definitions/patch/apply-patch.js.map +1 -0
- package/dist-cjs/definitions/patch/fuzzy-match.d.ts +10 -0
- package/dist-cjs/definitions/patch/fuzzy-match.js +173 -0
- package/dist-cjs/definitions/patch/fuzzy-match.js.map +1 -0
- package/dist-cjs/definitions/patch/index.d.ts +1 -0
- package/dist-cjs/definitions/patch/index.js +6 -0
- package/dist-cjs/definitions/patch/index.js.map +1 -0
- package/dist-cjs/definitions/patch/patch-parser.d.ts +50 -0
- package/dist-cjs/definitions/patch/patch-parser.js +216 -0
- package/dist-cjs/definitions/patch/patch-parser.js.map +1 -0
- package/dist-cjs/definitions/patch/sandbox-paths.d.ts +18 -0
- package/dist-cjs/definitions/patch/sandbox-paths.js +114 -0
- package/dist-cjs/definitions/patch/sandbox-paths.js.map +1 -0
- package/dist-cjs/definitions/process/index.d.ts +1 -0
- package/dist-cjs/definitions/process/index.js +9 -0
- package/dist-cjs/definitions/process/index.js.map +1 -0
- package/dist-cjs/definitions/process/process-registry.d.ts +67 -0
- package/dist-cjs/definitions/process/process-registry.js +232 -0
- package/dist-cjs/definitions/process/process-registry.js.map +1 -0
- package/dist-cjs/definitions/process/process.d.ts +9 -0
- package/dist-cjs/definitions/process/process.js +390 -0
- package/dist-cjs/definitions/process/process.js.map +1 -0
- package/dist-cjs/definitions/process/pty-keys.d.ts +13 -0
- package/dist-cjs/definitions/process/pty-keys.js +260 -0
- package/dist-cjs/definitions/process/pty-keys.js.map +1 -0
- package/dist-cjs/definitions/process/session-slug.d.ts +1 -0
- package/dist-cjs/definitions/process/session-slug.js +146 -0
- package/dist-cjs/definitions/process/session-slug.js.map +1 -0
- package/dist-cjs/definitions/quip.d.ts +2 -0
- package/dist-cjs/definitions/quip.js +199 -0
- package/dist-cjs/definitions/quip.js.map +1 -0
- package/dist-cjs/definitions/search.d.ts +9 -0
- package/dist-cjs/definitions/search.js +64 -0
- package/dist-cjs/definitions/search.js.map +1 -0
- package/dist-cjs/definitions/session-history.d.ts +11 -0
- package/dist-cjs/definitions/session-history.js +73 -0
- package/dist-cjs/definitions/session-history.js.map +1 -0
- package/dist-cjs/definitions/shell.d.ts +8 -0
- package/dist-cjs/definitions/shell.js +185 -0
- package/dist-cjs/definitions/shell.js.map +1 -0
- package/dist-cjs/definitions/slack.d.ts +2 -0
- package/dist-cjs/definitions/slack.js +184 -0
- package/dist-cjs/definitions/slack.js.map +1 -0
- package/dist-cjs/definitions/web.d.ts +8 -0
- package/dist-cjs/definitions/web.js +113 -0
- package/dist-cjs/definitions/web.js.map +1 -0
- package/dist-cjs/executors/apply-patch.d.ts +51 -0
- package/dist-cjs/executors/apply-patch.js +939 -0
- package/dist-cjs/executors/apply-patch.js.map +1 -0
- package/dist-cjs/executors/arion.d.ts +50 -0
- package/dist-cjs/executors/arion.js +126 -0
- package/dist-cjs/executors/arion.js.map +1 -0
- package/dist-cjs/executors/code-intelligence.d.ts +138 -0
- package/dist-cjs/executors/code-intelligence.js +926 -0
- package/dist-cjs/executors/code-intelligence.js.map +1 -0
- package/dist-cjs/executors/deploy.d.ts +169 -0
- package/dist-cjs/executors/deploy.js +870 -0
- package/dist-cjs/executors/deploy.js.map +1 -0
- package/dist-cjs/executors/filesystem.d.ts +150 -0
- package/dist-cjs/executors/filesystem.js +1168 -0
- package/dist-cjs/executors/filesystem.js.map +1 -0
- package/dist-cjs/executors/frg-freshness.d.ts +93 -0
- package/dist-cjs/executors/frg-freshness.js +628 -0
- package/dist-cjs/executors/frg-freshness.js.map +1 -0
- package/dist-cjs/executors/frg.d.ts +27 -0
- package/dist-cjs/executors/frg.js +335 -0
- package/dist-cjs/executors/frg.js.map +1 -0
- package/dist-cjs/executors/index.d.ts +44 -0
- package/dist-cjs/executors/index.js +144 -0
- package/dist-cjs/executors/index.js.map +1 -0
- package/dist-cjs/executors/learning-meta.d.ts +87 -0
- package/dist-cjs/executors/learning-meta.js +1166 -0
- package/dist-cjs/executors/learning-meta.js.map +1 -0
- package/dist-cjs/executors/lsp-client.d.ts +38 -0
- package/dist-cjs/executors/lsp-client.js +311 -0
- package/dist-cjs/executors/lsp-client.js.map +1 -0
- package/dist-cjs/executors/memory.d.ts +203 -0
- package/dist-cjs/executors/memory.js +797 -0
- package/dist-cjs/executors/memory.js.map +1 -0
- package/dist-cjs/executors/meta.d.ts +73 -0
- package/dist-cjs/executors/meta.js +227 -0
- package/dist-cjs/executors/meta.js.map +1 -0
- package/dist-cjs/executors/process-registry.d.ts +98 -0
- package/dist-cjs/executors/process-registry.js +470 -0
- package/dist-cjs/executors/process-registry.js.map +1 -0
- package/dist-cjs/executors/pty-session-store.d.ts +14 -0
- package/dist-cjs/executors/pty-session-store.js +35 -0
- package/dist-cjs/executors/pty-session-store.js.map +1 -0
- package/dist-cjs/executors/pty.d.ts +133 -0
- package/dist-cjs/executors/pty.js +313 -0
- package/dist-cjs/executors/pty.js.map +1 -0
- package/dist-cjs/executors/restart.d.ts +13 -0
- package/dist-cjs/executors/restart.js +156 -0
- package/dist-cjs/executors/restart.js.map +1 -0
- package/dist-cjs/executors/search-freshness.d.ts +50 -0
- package/dist-cjs/executors/search-freshness.js +235 -0
- package/dist-cjs/executors/search-freshness.js.map +1 -0
- package/dist-cjs/executors/search-types.d.ts +52 -0
- package/dist-cjs/executors/search-types.js +57 -0
- package/dist-cjs/executors/search-types.js.map +1 -0
- package/dist-cjs/executors/search.d.ts +11 -0
- package/dist-cjs/executors/search.js +103 -0
- package/dist-cjs/executors/search.js.map +1 -0
- package/dist-cjs/executors/self-diagnose.d.ts +89 -0
- package/dist-cjs/executors/self-diagnose.js +435 -0
- package/dist-cjs/executors/self-diagnose.js.map +1 -0
- package/dist-cjs/executors/session-history.d.ts +75 -0
- package/dist-cjs/executors/session-history.js +321 -0
- package/dist-cjs/executors/session-history.js.map +1 -0
- package/dist-cjs/executors/shell-safety.d.ts +27 -0
- package/dist-cjs/executors/shell-safety.js +479 -0
- package/dist-cjs/executors/shell-safety.js.map +1 -0
- package/dist-cjs/executors/shell.d.ts +168 -0
- package/dist-cjs/executors/shell.js +1002 -0
- package/dist-cjs/executors/shell.js.map +1 -0
- package/dist-cjs/executors/utils.d.ts +20 -0
- package/dist-cjs/executors/utils.js +74 -0
- package/dist-cjs/executors/utils.js.map +1 -0
- package/dist-cjs/executors/web.d.ts +89 -0
- package/dist-cjs/executors/web.js +548 -0
- package/dist-cjs/executors/web.js.map +1 -0
- package/dist-cjs/extraction/content-extraction.d.ts +48 -0
- package/dist-cjs/extraction/content-extraction.js +244 -0
- package/dist-cjs/extraction/content-extraction.js.map +1 -0
- package/dist-cjs/extraction/index.d.ts +4 -0
- package/dist-cjs/extraction/index.js +9 -0
- package/dist-cjs/extraction/index.js.map +1 -0
- package/dist-cjs/headless-control-contract.d.ts +3182 -0
- package/dist-cjs/headless-control-contract.js +973 -0
- package/dist-cjs/headless-control-contract.js.map +1 -0
- package/dist-cjs/index.d.ts +62 -0
- package/dist-cjs/index.js +438 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/local-control-http-auth.d.ts +2 -0
- package/dist-cjs/local-control-http-auth.js +6 -0
- package/dist-cjs/local-control-http-auth.js.map +1 -0
- package/dist-cjs/mcp/client.d.ts +68 -0
- package/dist-cjs/mcp/client.js +186 -0
- package/dist-cjs/mcp/client.js.map +1 -0
- package/dist-cjs/mcp/connection.d.ts +54 -0
- package/dist-cjs/mcp/connection.js +485 -0
- package/dist-cjs/mcp/connection.js.map +1 -0
- package/dist-cjs/mcp/index.d.ts +10 -0
- package/dist-cjs/mcp/index.js +31 -0
- package/dist-cjs/mcp/index.js.map +1 -0
- package/dist-cjs/mcp/jsonrpc.d.ts +36 -0
- package/dist-cjs/mcp/jsonrpc.js +149 -0
- package/dist-cjs/mcp/jsonrpc.js.map +1 -0
- package/dist-cjs/mcp/types.d.ts +178 -0
- package/dist-cjs/mcp/types.js +9 -0
- package/dist-cjs/mcp/types.js.map +1 -0
- package/dist-cjs/network-control-adapter.d.ts +4 -0
- package/dist-cjs/network-control-adapter.js +78 -0
- package/dist-cjs/network-control-adapter.js.map +1 -0
- package/dist-cjs/network-runtime/address-types.d.ts +201 -0
- package/dist-cjs/network-runtime/address-types.js +169 -0
- package/dist-cjs/network-runtime/address-types.js.map +1 -0
- package/dist-cjs/network-runtime/db-owner-fencing.d.ts +43 -0
- package/dist-cjs/network-runtime/db-owner-fencing.js +77 -0
- package/dist-cjs/network-runtime/db-owner-fencing.js.map +1 -0
- package/dist-cjs/network-runtime/delivery-receipts.d.ts +117 -0
- package/dist-cjs/network-runtime/delivery-receipts.js +277 -0
- package/dist-cjs/network-runtime/delivery-receipts.js.map +1 -0
- package/dist-cjs/network-runtime/direct-endpoint-authority.d.ts +8 -0
- package/dist-cjs/network-runtime/direct-endpoint-authority.js +30 -0
- package/dist-cjs/network-runtime/direct-endpoint-authority.js.map +1 -0
- package/dist-cjs/network-runtime/index.d.ts +24 -0
- package/dist-cjs/network-runtime/index.js +173 -0
- package/dist-cjs/network-runtime/index.js.map +1 -0
- package/dist-cjs/network-runtime/local-control-contract.d.ts +758 -0
- package/dist-cjs/network-runtime/local-control-contract.js +634 -0
- package/dist-cjs/network-runtime/local-control-contract.js.map +1 -0
- package/dist-cjs/network-runtime/node-store-contract.d.ts +49 -0
- package/dist-cjs/network-runtime/node-store-contract.js +39 -0
- package/dist-cjs/network-runtime/node-store-contract.js.map +1 -0
- package/dist-cjs/network-runtime/pair-route-contract.d.ts +100 -0
- package/dist-cjs/network-runtime/pair-route-contract.js +81 -0
- package/dist-cjs/network-runtime/pair-route-contract.js.map +1 -0
- package/dist-cjs/network-runtime/peer-capabilities.d.ts +10 -0
- package/dist-cjs/network-runtime/peer-capabilities.js +38 -0
- package/dist-cjs/network-runtime/peer-capabilities.js.map +1 -0
- package/dist-cjs/network-runtime/peer-principal-ref.d.ts +9 -0
- package/dist-cjs/network-runtime/peer-principal-ref.js +16 -0
- package/dist-cjs/network-runtime/peer-principal-ref.js.map +1 -0
- package/dist-cjs/network-runtime/peer-state-machine.d.ts +70 -0
- package/dist-cjs/network-runtime/peer-state-machine.js +130 -0
- package/dist-cjs/network-runtime/peer-state-machine.js.map +1 -0
- package/dist-cjs/network-runtime/protocol-schemas.d.ts +328 -0
- package/dist-cjs/network-runtime/protocol-schemas.js +213 -0
- package/dist-cjs/network-runtime/protocol-schemas.js.map +1 -0
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.d.ts +81 -0
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.js +64 -0
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.js.map +1 -0
- package/dist-cjs/outlook/desktop-session.d.ts +68 -0
- package/dist-cjs/outlook/desktop-session.js +319 -0
- package/dist-cjs/outlook/desktop-session.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/policy.d.ts +43 -0
- package/dist-cjs/policy.js +156 -0
- package/dist-cjs/policy.js.map +1 -0
- package/dist-cjs/providers/brave.d.ts +10 -0
- package/dist-cjs/providers/brave.js +67 -0
- package/dist-cjs/providers/brave.js.map +1 -0
- package/dist-cjs/providers/duckduckgo.d.ts +18 -0
- package/dist-cjs/providers/duckduckgo.js +181 -0
- package/dist-cjs/providers/duckduckgo.js.map +1 -0
- package/dist-cjs/providers/exa.d.ts +10 -0
- package/dist-cjs/providers/exa.js +68 -0
- package/dist-cjs/providers/exa.js.map +1 -0
- package/dist-cjs/providers/firecrawl.d.ts +10 -0
- package/dist-cjs/providers/firecrawl.js +60 -0
- package/dist-cjs/providers/firecrawl.js.map +1 -0
- package/dist-cjs/providers/index.d.ts +8 -0
- package/dist-cjs/providers/index.js +18 -0
- package/dist-cjs/providers/index.js.map +1 -0
- package/dist-cjs/providers/jina.d.ts +10 -0
- package/dist-cjs/providers/jina.js +54 -0
- package/dist-cjs/providers/jina.js.map +1 -0
- package/dist-cjs/providers/router.d.ts +21 -0
- package/dist-cjs/providers/router.js +101 -0
- package/dist-cjs/providers/router.js.map +1 -0
- package/dist-cjs/providers/search-provider.d.ts +35 -0
- package/dist-cjs/providers/search-provider.js +37 -0
- package/dist-cjs/providers/search-provider.js.map +1 -0
- package/dist-cjs/providers/tavily.d.ts +10 -0
- package/dist-cjs/providers/tavily.js +59 -0
- package/dist-cjs/providers/tavily.js.map +1 -0
- package/dist-cjs/quip/desktop-session.d.ts +69 -0
- package/dist-cjs/quip/desktop-session.js +354 -0
- package/dist-cjs/quip/desktop-session.js.map +1 -0
- package/dist-cjs/registry/index.d.ts +1 -0
- package/dist-cjs/registry/index.js +7 -0
- package/dist-cjs/registry/index.js.map +1 -0
- package/dist-cjs/registry/registry.d.ts +156 -0
- package/dist-cjs/registry/registry.js +762 -0
- package/dist-cjs/registry/registry.js.map +1 -0
- package/dist-cjs/runtime-socket-local-control-client.d.ts +10 -0
- package/dist-cjs/runtime-socket-local-control-client.js +368 -0
- package/dist-cjs/runtime-socket-local-control-client.js.map +1 -0
- package/dist-cjs/security/dns-normalization.d.ts +6 -0
- package/dist-cjs/security/dns-normalization.js +23 -0
- package/dist-cjs/security/dns-normalization.js.map +1 -0
- package/dist-cjs/security/dns-pinning.d.ts +27 -0
- package/dist-cjs/security/dns-pinning.js +161 -0
- package/dist-cjs/security/dns-pinning.js.map +1 -0
- package/dist-cjs/security/external-content.d.ts +40 -0
- package/dist-cjs/security/external-content.js +96 -0
- package/dist-cjs/security/external-content.js.map +1 -0
- package/dist-cjs/security/ssrf.d.ts +40 -0
- package/dist-cjs/security/ssrf.js +222 -0
- package/dist-cjs/security/ssrf.js.map +1 -0
- package/dist-cjs/slack/desktop-session.d.ts +69 -0
- package/dist-cjs/slack/desktop-session.js +367 -0
- package/dist-cjs/slack/desktop-session.js.map +1 -0
- package/dist-cjs/tool-factory.d.ts +46 -0
- package/dist-cjs/tool-factory.js +51 -0
- package/dist-cjs/tool-factory.js.map +1 -0
- package/dist-cjs/types.d.ts +1192 -0
- package/dist-cjs/types.js +9 -0
- package/dist-cjs/types.js.map +1 -0
- package/dist-cjs/utils/retry.d.ts +11 -0
- package/dist-cjs/utils/retry.js +170 -0
- package/dist-cjs/utils/retry.js.map +1 -0
- package/dist-cjs/utils/safe-parse-json.d.ts +26 -0
- package/dist-cjs/utils/safe-parse-json.js +165 -0
- package/dist-cjs/utils/safe-parse-json.js.map +1 -0
- package/dist-cjs/utils/url.d.ts +10 -0
- package/dist-cjs/utils/url.js +24 -0
- package/dist-cjs/utils/url.js.map +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @aria/tools - Spawned Process Registry
|
|
4
|
+
*
|
|
5
|
+
* Tracks PIDs of child processes spawned by shell executors.
|
|
6
|
+
* Allows bulk cleanup (SIGTERM then SIGKILL) when a RunSession closes,
|
|
7
|
+
* preventing orphaned processes from lingering.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SpawnedProcessRegistry = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* How long to wait after SIGTERM before escalating to SIGKILL (ms).
|
|
13
|
+
*/
|
|
14
|
+
const SIGKILL_TIMEOUT_MS = 2000;
|
|
15
|
+
const POST_KILL_POLL_INTERVAL_MS = 25;
|
|
16
|
+
const PROCESS_REAP_POLL_INTERVAL_MS = 250;
|
|
17
|
+
/**
|
|
18
|
+
* Max number of exited-process snapshots to retain for observability.
|
|
19
|
+
*/
|
|
20
|
+
const EXIT_HISTORY_LIMIT = 100;
|
|
21
|
+
/**
|
|
22
|
+
* Registry that tracks spawned child process PIDs.
|
|
23
|
+
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* - Shell executors call `add(pid)` after spawning a process
|
|
26
|
+
* - Shell executors call `remove(pid)` when a process exits normally
|
|
27
|
+
* - RunSession calls `killAll()` during close() to clean up orphans
|
|
28
|
+
*/
|
|
29
|
+
class SpawnedProcessRegistry {
|
|
30
|
+
active = new Map();
|
|
31
|
+
exited = new Map();
|
|
32
|
+
waiters = new Map();
|
|
33
|
+
reapers = new Map();
|
|
34
|
+
/**
|
|
35
|
+
* Register a spawned process PID.
|
|
36
|
+
*/
|
|
37
|
+
add(pid, metadata = {}) {
|
|
38
|
+
const existing = this.active.get(pid);
|
|
39
|
+
if (existing) {
|
|
40
|
+
this.active.set(pid, {
|
|
41
|
+
...existing,
|
|
42
|
+
command: metadata.command ?? existing.command,
|
|
43
|
+
args: metadata.args ? [...metadata.args] : existing.args,
|
|
44
|
+
cwd: metadata.cwd ?? existing.cwd,
|
|
45
|
+
interactive: metadata.interactive ?? existing.interactive,
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const startedAtMs = Date.now();
|
|
50
|
+
this.active.set(pid, {
|
|
51
|
+
pid,
|
|
52
|
+
command: metadata.command ?? null,
|
|
53
|
+
args: metadata.args ? [...metadata.args] : [],
|
|
54
|
+
cwd: metadata.cwd ?? null,
|
|
55
|
+
interactive: metadata.interactive ?? false,
|
|
56
|
+
reapOnExit: isTrackedProcessAlive(pid),
|
|
57
|
+
deferredExitCode: null,
|
|
58
|
+
deferredSignal: null,
|
|
59
|
+
startedAtMs,
|
|
60
|
+
startedAt: new Date(startedAtMs).toISOString(),
|
|
61
|
+
});
|
|
62
|
+
this.exited.delete(pid);
|
|
63
|
+
this.ensureReaper(pid);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Deregister a process PID (e.g., after normal exit).
|
|
67
|
+
*/
|
|
68
|
+
remove(pid, exit = {}) {
|
|
69
|
+
const record = this.active.get(pid);
|
|
70
|
+
if (!record) {
|
|
71
|
+
const exitedRecord = this.exited.get(pid);
|
|
72
|
+
if (exitedRecord) {
|
|
73
|
+
this.exited.set(pid, {
|
|
74
|
+
...exitedRecord,
|
|
75
|
+
exitCode: exitedRecord.exitCode ?? normalizeExitCode(exit.exitCode),
|
|
76
|
+
signal: exitedRecord.exitCode !== null
|
|
77
|
+
? exitedRecord.signal
|
|
78
|
+
: (exitedRecord.signal ?? normalizeSignal(exit.signal)),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.clearReaper(pid);
|
|
84
|
+
this.active.delete(pid);
|
|
85
|
+
const endedAtMs = Date.now();
|
|
86
|
+
const recordedExitCode = normalizeExitCode(exit.exitCode) ?? record.deferredExitCode;
|
|
87
|
+
const exitedRecord = {
|
|
88
|
+
...record,
|
|
89
|
+
exitCode: recordedExitCode,
|
|
90
|
+
signal: record.deferredSignal ?? normalizeSignal(exit.signal),
|
|
91
|
+
endedAtMs,
|
|
92
|
+
endedAt: new Date(endedAtMs).toISOString(),
|
|
93
|
+
};
|
|
94
|
+
this.exited.set(pid, exitedRecord);
|
|
95
|
+
this.pruneExitedHistory();
|
|
96
|
+
const waiters = this.waiters.get(pid);
|
|
97
|
+
if (waiters && waiters.length > 0) {
|
|
98
|
+
this.waiters.delete(pid);
|
|
99
|
+
for (const waiter of waiters) {
|
|
100
|
+
waiter(exitedRecord);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Check whether a PID is tracked.
|
|
106
|
+
*/
|
|
107
|
+
has(pid) {
|
|
108
|
+
return this.active.has(pid);
|
|
109
|
+
}
|
|
110
|
+
recordExitMetadata(pid, exit = {}) {
|
|
111
|
+
const record = this.active.get(pid);
|
|
112
|
+
if (!record) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
record.deferredExitCode = normalizeExitCode(exit.exitCode);
|
|
116
|
+
record.deferredSignal = normalizeSignal(exit.signal);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Number of tracked PIDs.
|
|
120
|
+
*/
|
|
121
|
+
get size() {
|
|
122
|
+
return this.active.size;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Return a snapshot of all tracked PIDs.
|
|
126
|
+
*/
|
|
127
|
+
getAll() {
|
|
128
|
+
return [...this.active.keys()];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Return process snapshots for observability.
|
|
132
|
+
*/
|
|
133
|
+
listProcesses(options = {}) {
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
const snapshots = [];
|
|
136
|
+
for (const pid of [...this.active.keys()]) {
|
|
137
|
+
this.reapIfExited(pid);
|
|
138
|
+
}
|
|
139
|
+
for (const record of this.active.values()) {
|
|
140
|
+
snapshots.push(this.toRunningSnapshot(record, now));
|
|
141
|
+
}
|
|
142
|
+
if (options.includeExited) {
|
|
143
|
+
for (const record of this.exited.values()) {
|
|
144
|
+
snapshots.push(this.toExitedSnapshot(record));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return snapshots.sort((a, b) => a.pid - b.pid);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Return a single process snapshot by PID.
|
|
151
|
+
*/
|
|
152
|
+
getProcess(pid) {
|
|
153
|
+
this.reapIfExited(pid);
|
|
154
|
+
const activeRecord = this.active.get(pid);
|
|
155
|
+
if (activeRecord) {
|
|
156
|
+
return this.toRunningSnapshot(activeRecord);
|
|
157
|
+
}
|
|
158
|
+
const exitedRecord = this.exited.get(pid);
|
|
159
|
+
if (exitedRecord) {
|
|
160
|
+
return this.toExitedSnapshot(exitedRecord);
|
|
161
|
+
}
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Wait for a tracked process to exit, up to timeoutMs.
|
|
166
|
+
*/
|
|
167
|
+
async waitForExit(pid, timeoutMs = 30_000) {
|
|
168
|
+
this.reapIfExited(pid);
|
|
169
|
+
const exitedRecord = this.exited.get(pid);
|
|
170
|
+
if (exitedRecord) {
|
|
171
|
+
return {
|
|
172
|
+
pid,
|
|
173
|
+
status: "exited",
|
|
174
|
+
timedOut: false,
|
|
175
|
+
process: this.toExitedSnapshot(exitedRecord),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const activeRecord = this.active.get(pid);
|
|
179
|
+
if (!activeRecord) {
|
|
180
|
+
return {
|
|
181
|
+
pid,
|
|
182
|
+
status: "not_found",
|
|
183
|
+
timedOut: false,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (timeoutMs <= 0) {
|
|
187
|
+
return {
|
|
188
|
+
pid,
|
|
189
|
+
status: "running",
|
|
190
|
+
timedOut: true,
|
|
191
|
+
process: this.toRunningSnapshot(activeRecord),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return new Promise((resolve) => {
|
|
195
|
+
let settled = false;
|
|
196
|
+
const settle = (result) => {
|
|
197
|
+
if (settled)
|
|
198
|
+
return;
|
|
199
|
+
settled = true;
|
|
200
|
+
resolve(result);
|
|
201
|
+
};
|
|
202
|
+
const removeWaiter = (target) => {
|
|
203
|
+
const existing = this.waiters.get(pid);
|
|
204
|
+
if (!existing)
|
|
205
|
+
return;
|
|
206
|
+
const next = existing.filter((entry) => entry !== target);
|
|
207
|
+
if (next.length === 0) {
|
|
208
|
+
this.waiters.delete(pid);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
this.waiters.set(pid, next);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const waiter = (record) => {
|
|
215
|
+
clearTimeout(timeoutId);
|
|
216
|
+
removeWaiter(waiter);
|
|
217
|
+
settle({
|
|
218
|
+
pid,
|
|
219
|
+
status: "exited",
|
|
220
|
+
timedOut: false,
|
|
221
|
+
process: this.toExitedSnapshot(record),
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
const timeoutId = setTimeout(() => {
|
|
225
|
+
const current = this.active.get(pid);
|
|
226
|
+
if (current) {
|
|
227
|
+
removeWaiter(waiter);
|
|
228
|
+
settle({
|
|
229
|
+
pid,
|
|
230
|
+
status: "running",
|
|
231
|
+
timedOut: true,
|
|
232
|
+
process: this.toRunningSnapshot(current),
|
|
233
|
+
});
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const exited = this.exited.get(pid);
|
|
237
|
+
if (exited) {
|
|
238
|
+
removeWaiter(waiter);
|
|
239
|
+
settle({
|
|
240
|
+
pid,
|
|
241
|
+
status: "exited",
|
|
242
|
+
timedOut: false,
|
|
243
|
+
process: this.toExitedSnapshot(exited),
|
|
244
|
+
});
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
removeWaiter(waiter);
|
|
248
|
+
settle({
|
|
249
|
+
pid,
|
|
250
|
+
status: "not_found",
|
|
251
|
+
timedOut: false,
|
|
252
|
+
});
|
|
253
|
+
}, timeoutMs);
|
|
254
|
+
const existingWaiters = this.waiters.get(pid) ?? [];
|
|
255
|
+
existingWaiters.push(waiter);
|
|
256
|
+
this.waiters.set(pid, existingWaiters);
|
|
257
|
+
// Close the race window where remove() can happen between the initial
|
|
258
|
+
// active check above and waiter registration.
|
|
259
|
+
const exitedAfterRegistration = this.exited.get(pid);
|
|
260
|
+
if (exitedAfterRegistration) {
|
|
261
|
+
clearTimeout(timeoutId);
|
|
262
|
+
removeWaiter(waiter);
|
|
263
|
+
settle({
|
|
264
|
+
pid,
|
|
265
|
+
status: "exited",
|
|
266
|
+
timedOut: false,
|
|
267
|
+
process: this.toExitedSnapshot(exitedAfterRegistration),
|
|
268
|
+
});
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (!this.active.has(pid)) {
|
|
272
|
+
clearTimeout(timeoutId);
|
|
273
|
+
removeWaiter(waiter);
|
|
274
|
+
settle({
|
|
275
|
+
pid,
|
|
276
|
+
status: "not_found",
|
|
277
|
+
timedOut: false,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Send SIGTERM to all tracked PIDs, then SIGKILL after a timeout
|
|
284
|
+
* for any that are still alive. Clears the registry afterwards.
|
|
285
|
+
*
|
|
286
|
+
* Returns the list of PIDs that were signalled.
|
|
287
|
+
*/
|
|
288
|
+
async killAll() {
|
|
289
|
+
const tracked = [...this.active.keys()];
|
|
290
|
+
if (tracked.length === 0)
|
|
291
|
+
return [];
|
|
292
|
+
// Phase 1: SIGTERM all tracked processes
|
|
293
|
+
const alive = [];
|
|
294
|
+
const signaledTerm = new Set();
|
|
295
|
+
for (const pid of tracked) {
|
|
296
|
+
if (isTrackedProcessAlive(pid)) {
|
|
297
|
+
if (sendSignalToTrackedProcess(pid, "SIGTERM")) {
|
|
298
|
+
alive.push(pid);
|
|
299
|
+
signaledTerm.add(pid);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (alive.length === 0) {
|
|
304
|
+
for (const pid of tracked) {
|
|
305
|
+
this.remove(pid);
|
|
306
|
+
}
|
|
307
|
+
return tracked;
|
|
308
|
+
}
|
|
309
|
+
// Phase 2: Wait, then SIGKILL any survivors
|
|
310
|
+
await new Promise((resolve) => setTimeout(resolve, SIGKILL_TIMEOUT_MS));
|
|
311
|
+
const signaledKill = new Set();
|
|
312
|
+
for (const pid of alive) {
|
|
313
|
+
if (isTrackedProcessAlive(pid)) {
|
|
314
|
+
if (sendSignalToTrackedProcess(pid, "SIGKILL")) {
|
|
315
|
+
signaledKill.add(pid);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
await waitForProcessesToExit([...signaledKill], SIGKILL_TIMEOUT_MS);
|
|
320
|
+
for (const pid of tracked) {
|
|
321
|
+
this.remove(pid, {
|
|
322
|
+
signal: signaledKill.has(pid) ? "SIGKILL" : signaledTerm.has(pid) ? "SIGTERM" : null,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
return tracked;
|
|
326
|
+
}
|
|
327
|
+
toRunningSnapshot(record, now = Date.now()) {
|
|
328
|
+
return {
|
|
329
|
+
pid: record.pid,
|
|
330
|
+
command: record.command,
|
|
331
|
+
args: [...record.args],
|
|
332
|
+
cwd: record.cwd,
|
|
333
|
+
interactive: record.interactive,
|
|
334
|
+
startedAt: record.startedAt,
|
|
335
|
+
runtimeMs: Math.max(0, now - record.startedAtMs),
|
|
336
|
+
status: "running",
|
|
337
|
+
exitCode: null,
|
|
338
|
+
signal: null,
|
|
339
|
+
endedAt: null,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
toExitedSnapshot(record) {
|
|
343
|
+
return {
|
|
344
|
+
pid: record.pid,
|
|
345
|
+
command: record.command,
|
|
346
|
+
args: [...record.args],
|
|
347
|
+
cwd: record.cwd,
|
|
348
|
+
interactive: record.interactive,
|
|
349
|
+
startedAt: record.startedAt,
|
|
350
|
+
runtimeMs: Math.max(0, record.endedAtMs - record.startedAtMs),
|
|
351
|
+
status: "exited",
|
|
352
|
+
exitCode: record.exitCode,
|
|
353
|
+
signal: record.signal,
|
|
354
|
+
endedAt: record.endedAt,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
pruneExitedHistory() {
|
|
358
|
+
while (this.exited.size > EXIT_HISTORY_LIMIT) {
|
|
359
|
+
const oldestPid = this.exited.keys().next().value;
|
|
360
|
+
if (oldestPid === undefined) {
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
this.exited.delete(oldestPid);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
ensureReaper(pid) {
|
|
367
|
+
if (!this.active.get(pid)?.reapOnExit) {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
if (this.reapers.has(pid)) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const timer = setInterval(() => {
|
|
374
|
+
this.reapIfExited(pid);
|
|
375
|
+
}, PROCESS_REAP_POLL_INTERVAL_MS);
|
|
376
|
+
timer.unref?.();
|
|
377
|
+
this.reapers.set(pid, timer);
|
|
378
|
+
}
|
|
379
|
+
clearReaper(pid) {
|
|
380
|
+
const timer = this.reapers.get(pid);
|
|
381
|
+
if (!timer) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
clearInterval(timer);
|
|
385
|
+
this.reapers.delete(pid);
|
|
386
|
+
}
|
|
387
|
+
reapIfExited(pid) {
|
|
388
|
+
const record = this.active.get(pid);
|
|
389
|
+
if (!record) {
|
|
390
|
+
this.clearReaper(pid);
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
if (!record.reapOnExit) {
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
if (isTrackedProcessAlive(pid)) {
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
this.remove(pid);
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
exports.SpawnedProcessRegistry = SpawnedProcessRegistry;
|
|
404
|
+
/**
|
|
405
|
+
* Check whether a process is still alive by sending signal 0.
|
|
406
|
+
*/
|
|
407
|
+
function isProcessAlive(pid) {
|
|
408
|
+
try {
|
|
409
|
+
process.kill(pid, 0);
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
function isTrackedProcessAlive(pid) {
|
|
417
|
+
if (pid > 0) {
|
|
418
|
+
try {
|
|
419
|
+
process.kill(-pid, 0);
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
// Fall back to the tracked pid itself when the process group is gone or unsupported.
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return isProcessAlive(pid);
|
|
427
|
+
}
|
|
428
|
+
function sendSignalToTrackedProcess(pid, signal) {
|
|
429
|
+
try {
|
|
430
|
+
if (pid > 0) {
|
|
431
|
+
process.kill(-pid, signal);
|
|
432
|
+
return true;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
// Fall back to the tracked pid itself when there is no process group to target.
|
|
437
|
+
}
|
|
438
|
+
try {
|
|
439
|
+
process.kill(pid, signal);
|
|
440
|
+
return true;
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
async function waitForProcessesToExit(pids, timeoutMs) {
|
|
447
|
+
if (pids.length === 0) {
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
const deadline = Date.now() + timeoutMs;
|
|
451
|
+
while (Date.now() < deadline) {
|
|
452
|
+
if (pids.every((pid) => !isTrackedProcessAlive(pid))) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
await new Promise((resolve) => setTimeout(resolve, POST_KILL_POLL_INTERVAL_MS));
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
function normalizeExitCode(value) {
|
|
459
|
+
if (typeof value !== "number" || Number.isNaN(value)) {
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
return value;
|
|
463
|
+
}
|
|
464
|
+
function normalizeSignal(value) {
|
|
465
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
return value;
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=process-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-registry.js","sourceRoot":"","sources":["../../src/executors/process-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTYSessionStore — manages PTY sessions for interactive process I/O.
|
|
3
|
+
* Separate from SpawnedProcessRegistry (which is a PID-only cleanup safety net).
|
|
4
|
+
*/
|
|
5
|
+
import type { PTYSession } from "./pty.js";
|
|
6
|
+
export declare class PTYSessionStore {
|
|
7
|
+
private sessions;
|
|
8
|
+
add(pid: number, session: PTYSession): void;
|
|
9
|
+
get(pid: number): PTYSession | undefined;
|
|
10
|
+
has(pid: number): boolean;
|
|
11
|
+
remove(pid: number): void;
|
|
12
|
+
closeAll(): Promise<void>;
|
|
13
|
+
get size(): number;
|
|
14
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PTYSessionStore = void 0;
|
|
4
|
+
class PTYSessionStore {
|
|
5
|
+
sessions = new Map();
|
|
6
|
+
add(pid, session) {
|
|
7
|
+
this.sessions.set(pid, session);
|
|
8
|
+
}
|
|
9
|
+
get(pid) {
|
|
10
|
+
return this.sessions.get(pid);
|
|
11
|
+
}
|
|
12
|
+
has(pid) {
|
|
13
|
+
return this.sessions.has(pid);
|
|
14
|
+
}
|
|
15
|
+
remove(pid) {
|
|
16
|
+
this.sessions.delete(pid);
|
|
17
|
+
}
|
|
18
|
+
async closeAll() {
|
|
19
|
+
const sessions = Array.from(this.sessions.values());
|
|
20
|
+
this.sessions.clear();
|
|
21
|
+
await Promise.allSettled(sessions.map((s) => {
|
|
22
|
+
try {
|
|
23
|
+
return Promise.resolve(s.close());
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
get size() {
|
|
31
|
+
return this.sessions.size;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.PTYSessionStore = PTYSessionStore;
|
|
35
|
+
//# sourceMappingURL=pty-session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty-session-store.js","sourceRoot":"","sources":["../../src/executors/pty-session-store.ts"],"names":[],"mappings":";;;AAMA,MAAa,eAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEjD,GAAG,CAAC,GAAW,EAAE,OAAmB;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,UAAU,CACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;CACF;AApCD,0CAoCC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @aria/tools - PTY executor for interactive terminal programs
|
|
3
|
+
*
|
|
4
|
+
* Provides PTY (pseudo-terminal) support for running interactive programs
|
|
5
|
+
* that require a terminal environment (like vim, less, etc.)
|
|
6
|
+
*/
|
|
7
|
+
import * as nodePty from "node-pty";
|
|
8
|
+
/**
|
|
9
|
+
* Options for creating a PTY session.
|
|
10
|
+
*/
|
|
11
|
+
export interface PTYOptions {
|
|
12
|
+
/** Command to execute */
|
|
13
|
+
command: string;
|
|
14
|
+
/** Arguments to pass to the command */
|
|
15
|
+
args?: string[];
|
|
16
|
+
/** Working directory */
|
|
17
|
+
cwd?: string;
|
|
18
|
+
/** Environment variables */
|
|
19
|
+
env?: Record<string, string>;
|
|
20
|
+
/** Terminal columns (default: 80) */
|
|
21
|
+
cols?: number;
|
|
22
|
+
/** Terminal rows (default: 24) */
|
|
23
|
+
rows?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Result of running a command in a PTY.
|
|
27
|
+
*/
|
|
28
|
+
export interface PTYResult {
|
|
29
|
+
/** All output from the command */
|
|
30
|
+
output: string;
|
|
31
|
+
/** Exit code of the process */
|
|
32
|
+
exitCode: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Error thrown when a PTY operation times out.
|
|
36
|
+
*/
|
|
37
|
+
export declare class PTYTimeoutError extends Error {
|
|
38
|
+
readonly output: string;
|
|
39
|
+
constructor(message: string, output: string);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Error thrown when a PTY operation fails.
|
|
43
|
+
*/
|
|
44
|
+
export declare class PTYError extends Error {
|
|
45
|
+
readonly output?: string | undefined;
|
|
46
|
+
constructor(message: string, output?: string | undefined);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A session wrapping a PTY process.
|
|
50
|
+
* Provides methods for interacting with the process and collecting output.
|
|
51
|
+
*/
|
|
52
|
+
export declare class PTYSession {
|
|
53
|
+
private static MAX_OUTPUT;
|
|
54
|
+
private _output;
|
|
55
|
+
private _isRunning;
|
|
56
|
+
private _exitCode;
|
|
57
|
+
private _exitPromise;
|
|
58
|
+
private _exitResolve;
|
|
59
|
+
private _pty;
|
|
60
|
+
private _dataDisposable;
|
|
61
|
+
private _exitDisposable;
|
|
62
|
+
constructor(pty: nodePty.IPty);
|
|
63
|
+
/**
|
|
64
|
+
* Write data to the terminal input.
|
|
65
|
+
*/
|
|
66
|
+
write(data: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Resize the terminal.
|
|
69
|
+
*/
|
|
70
|
+
resize(cols: number, rows: number): void;
|
|
71
|
+
/**
|
|
72
|
+
* Wait for a pattern to appear in the output.
|
|
73
|
+
* @param pattern String or RegExp to match
|
|
74
|
+
* @param timeoutMs Timeout in milliseconds (default: 5000)
|
|
75
|
+
* @returns The output accumulated up to and including the match
|
|
76
|
+
*/
|
|
77
|
+
waitFor(pattern: string | RegExp, timeoutMs?: number): Promise<string>;
|
|
78
|
+
/**
|
|
79
|
+
* Wait for the process to exit.
|
|
80
|
+
* @param timeoutMs Timeout in milliseconds (default: 30000)
|
|
81
|
+
* @returns The complete output
|
|
82
|
+
*/
|
|
83
|
+
waitForExit(timeoutMs?: number): Promise<string>;
|
|
84
|
+
/**
|
|
85
|
+
* Kill the process.
|
|
86
|
+
* @param signal Signal to send (default: SIGHUP on Unix)
|
|
87
|
+
*/
|
|
88
|
+
kill(signal?: string): void;
|
|
89
|
+
/**
|
|
90
|
+
* Close the session and clean up resources.
|
|
91
|
+
*/
|
|
92
|
+
close(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get the current output buffer.
|
|
95
|
+
*/
|
|
96
|
+
get output(): string;
|
|
97
|
+
/**
|
|
98
|
+
* Check if the process is still running.
|
|
99
|
+
*/
|
|
100
|
+
get isRunning(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Get the process ID.
|
|
103
|
+
*/
|
|
104
|
+
get pid(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Get the exit code (undefined if still running).
|
|
107
|
+
*/
|
|
108
|
+
get exitCode(): number | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Get the current terminal columns.
|
|
111
|
+
*/
|
|
112
|
+
get cols(): number;
|
|
113
|
+
/**
|
|
114
|
+
* Get the current terminal rows.
|
|
115
|
+
*/
|
|
116
|
+
get rows(): number;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create a new PTY session.
|
|
120
|
+
* @param options Options for the PTY
|
|
121
|
+
* @returns A PTYSession wrapping the process
|
|
122
|
+
*/
|
|
123
|
+
export declare function createPTYSession(options: PTYOptions): Promise<PTYSession>;
|
|
124
|
+
/**
|
|
125
|
+
* Run a command in a PTY and wait for it to complete.
|
|
126
|
+
* This is a convenience function for commands that don't require interaction.
|
|
127
|
+
*
|
|
128
|
+
* @param options Options for the PTY, with optional timeout
|
|
129
|
+
* @returns The output and exit code
|
|
130
|
+
*/
|
|
131
|
+
export declare function runInPTY(options: PTYOptions & {
|
|
132
|
+
timeoutMs?: number;
|
|
133
|
+
}): Promise<PTYResult>;
|