@aria-cli/tools 1.0.8 → 1.0.10
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/package.json +9 -6
- package/dist-cjs/.tsbuildinfo +0 -1
- package/dist-cjs/ask-user-interaction.d.ts +0 -10
- package/dist-cjs/ask-user-interaction.js +0 -28
- package/dist-cjs/ask-user-interaction.js.map +0 -1
- package/dist-cjs/cache/web-cache.d.ts +0 -52
- package/dist-cjs/cache/web-cache.js +0 -71
- package/dist-cjs/cache/web-cache.js.map +0 -1
- package/dist-cjs/definitions/arion.d.ts +0 -8
- package/dist-cjs/definitions/arion.js +0 -108
- package/dist-cjs/definitions/arion.js.map +0 -1
- package/dist-cjs/definitions/browser/browser.d.ts +0 -2
- package/dist-cjs/definitions/browser/browser.js +0 -422
- package/dist-cjs/definitions/browser/browser.js.map +0 -1
- package/dist-cjs/definitions/browser/index.d.ts +0 -1
- package/dist-cjs/definitions/browser/index.js +0 -9
- package/dist-cjs/definitions/browser/index.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-downloads.d.ts +0 -13
- package/dist-cjs/definitions/browser/pw-downloads.js +0 -118
- package/dist-cjs/definitions/browser/pw-downloads.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-interactions.d.ts +0 -78
- package/dist-cjs/definitions/browser/pw-interactions.js +0 -214
- package/dist-cjs/definitions/browser/pw-interactions.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-responses.d.ts +0 -28
- package/dist-cjs/definitions/browser/pw-responses.js +0 -85
- package/dist-cjs/definitions/browser/pw-responses.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-session.d.ts +0 -65
- package/dist-cjs/definitions/browser/pw-session.js +0 -327
- package/dist-cjs/definitions/browser/pw-session.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-shared.d.ts +0 -22
- package/dist-cjs/definitions/browser/pw-shared.js +0 -73
- package/dist-cjs/definitions/browser/pw-shared.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-snapshot.d.ts +0 -34
- package/dist-cjs/definitions/browser/pw-snapshot.js +0 -308
- package/dist-cjs/definitions/browser/pw-snapshot.js.map +0 -1
- package/dist-cjs/definitions/browser/pw-state.d.ts +0 -22
- package/dist-cjs/definitions/browser/pw-state.js +0 -71
- package/dist-cjs/definitions/browser/pw-state.js.map +0 -1
- package/dist-cjs/definitions/browser/types.d.ts +0 -277
- package/dist-cjs/definitions/browser/types.js +0 -6
- package/dist-cjs/definitions/browser/types.js.map +0 -1
- package/dist-cjs/definitions/code-intelligence.d.ts +0 -8
- package/dist-cjs/definitions/code-intelligence.js +0 -474
- package/dist-cjs/definitions/code-intelligence.js.map +0 -1
- package/dist-cjs/definitions/core.d.ts +0 -47
- package/dist-cjs/definitions/core.js +0 -134
- package/dist-cjs/definitions/core.js.map +0 -1
- package/dist-cjs/definitions/delegation.d.ts +0 -11
- package/dist-cjs/definitions/delegation.js +0 -516
- package/dist-cjs/definitions/delegation.js.map +0 -1
- package/dist-cjs/definitions/deploy.d.ts +0 -15
- package/dist-cjs/definitions/deploy.js +0 -69
- package/dist-cjs/definitions/deploy.js.map +0 -1
- package/dist-cjs/definitions/filesystem.d.ts +0 -9
- package/dist-cjs/definitions/filesystem.js +0 -200
- package/dist-cjs/definitions/filesystem.js.map +0 -1
- package/dist-cjs/definitions/frg.d.ts +0 -3
- package/dist-cjs/definitions/frg.js +0 -67
- package/dist-cjs/definitions/frg.js.map +0 -1
- package/dist-cjs/definitions/index.d.ts +0 -19
- package/dist-cjs/definitions/index.js +0 -44
- package/dist-cjs/definitions/index.js.map +0 -1
- package/dist-cjs/definitions/memory.d.ts +0 -8
- package/dist-cjs/definitions/memory.js +0 -127
- package/dist-cjs/definitions/memory.js.map +0 -1
- package/dist-cjs/definitions/messaging.d.ts +0 -11
- package/dist-cjs/definitions/messaging.js +0 -632
- package/dist-cjs/definitions/messaging.js.map +0 -1
- package/dist-cjs/definitions/meta.d.ts +0 -11
- package/dist-cjs/definitions/meta.js +0 -353
- package/dist-cjs/definitions/meta.js.map +0 -1
- package/dist-cjs/definitions/network.d.ts +0 -11
- package/dist-cjs/definitions/network.js +0 -163
- package/dist-cjs/definitions/network.js.map +0 -1
- package/dist-cjs/definitions/outlook.d.ts +0 -2
- package/dist-cjs/definitions/outlook.js +0 -281
- package/dist-cjs/definitions/outlook.js.map +0 -1
- package/dist-cjs/definitions/patch/apply-patch.d.ts +0 -11
- package/dist-cjs/definitions/patch/apply-patch.js +0 -192
- package/dist-cjs/definitions/patch/apply-patch.js.map +0 -1
- package/dist-cjs/definitions/patch/fuzzy-match.d.ts +0 -10
- package/dist-cjs/definitions/patch/fuzzy-match.js +0 -173
- package/dist-cjs/definitions/patch/fuzzy-match.js.map +0 -1
- package/dist-cjs/definitions/patch/index.d.ts +0 -1
- package/dist-cjs/definitions/patch/index.js +0 -6
- package/dist-cjs/definitions/patch/index.js.map +0 -1
- package/dist-cjs/definitions/patch/patch-parser.d.ts +0 -50
- package/dist-cjs/definitions/patch/patch-parser.js +0 -216
- package/dist-cjs/definitions/patch/patch-parser.js.map +0 -1
- package/dist-cjs/definitions/patch/sandbox-paths.d.ts +0 -18
- package/dist-cjs/definitions/patch/sandbox-paths.js +0 -114
- package/dist-cjs/definitions/patch/sandbox-paths.js.map +0 -1
- package/dist-cjs/definitions/process/index.d.ts +0 -1
- package/dist-cjs/definitions/process/index.js +0 -9
- package/dist-cjs/definitions/process/index.js.map +0 -1
- package/dist-cjs/definitions/process/process-registry.d.ts +0 -67
- package/dist-cjs/definitions/process/process-registry.js +0 -232
- package/dist-cjs/definitions/process/process-registry.js.map +0 -1
- package/dist-cjs/definitions/process/process.d.ts +0 -9
- package/dist-cjs/definitions/process/process.js +0 -390
- package/dist-cjs/definitions/process/process.js.map +0 -1
- package/dist-cjs/definitions/process/pty-keys.d.ts +0 -13
- package/dist-cjs/definitions/process/pty-keys.js +0 -260
- package/dist-cjs/definitions/process/pty-keys.js.map +0 -1
- package/dist-cjs/definitions/process/session-slug.d.ts +0 -1
- package/dist-cjs/definitions/process/session-slug.js +0 -146
- package/dist-cjs/definitions/process/session-slug.js.map +0 -1
- package/dist-cjs/definitions/quip.d.ts +0 -2
- package/dist-cjs/definitions/quip.js +0 -199
- package/dist-cjs/definitions/quip.js.map +0 -1
- package/dist-cjs/definitions/search.d.ts +0 -9
- package/dist-cjs/definitions/search.js +0 -64
- package/dist-cjs/definitions/search.js.map +0 -1
- package/dist-cjs/definitions/session-history.d.ts +0 -11
- package/dist-cjs/definitions/session-history.js +0 -73
- package/dist-cjs/definitions/session-history.js.map +0 -1
- package/dist-cjs/definitions/shell.d.ts +0 -8
- package/dist-cjs/definitions/shell.js +0 -185
- package/dist-cjs/definitions/shell.js.map +0 -1
- package/dist-cjs/definitions/slack.d.ts +0 -2
- package/dist-cjs/definitions/slack.js +0 -184
- package/dist-cjs/definitions/slack.js.map +0 -1
- package/dist-cjs/definitions/web.d.ts +0 -8
- package/dist-cjs/definitions/web.js +0 -113
- package/dist-cjs/definitions/web.js.map +0 -1
- package/dist-cjs/executors/apply-patch.d.ts +0 -51
- package/dist-cjs/executors/apply-patch.js +0 -939
- package/dist-cjs/executors/apply-patch.js.map +0 -1
- package/dist-cjs/executors/arion.d.ts +0 -50
- package/dist-cjs/executors/arion.js +0 -126
- package/dist-cjs/executors/arion.js.map +0 -1
- package/dist-cjs/executors/code-intelligence.d.ts +0 -138
- package/dist-cjs/executors/code-intelligence.js +0 -926
- package/dist-cjs/executors/code-intelligence.js.map +0 -1
- package/dist-cjs/executors/deploy.d.ts +0 -169
- package/dist-cjs/executors/deploy.js +0 -870
- package/dist-cjs/executors/deploy.js.map +0 -1
- package/dist-cjs/executors/filesystem.d.ts +0 -150
- package/dist-cjs/executors/filesystem.js +0 -1168
- package/dist-cjs/executors/filesystem.js.map +0 -1
- package/dist-cjs/executors/frg-freshness.d.ts +0 -93
- package/dist-cjs/executors/frg-freshness.js +0 -628
- package/dist-cjs/executors/frg-freshness.js.map +0 -1
- package/dist-cjs/executors/frg.d.ts +0 -27
- package/dist-cjs/executors/frg.js +0 -335
- package/dist-cjs/executors/frg.js.map +0 -1
- package/dist-cjs/executors/index.d.ts +0 -44
- package/dist-cjs/executors/index.js +0 -144
- package/dist-cjs/executors/index.js.map +0 -1
- package/dist-cjs/executors/learning-meta.d.ts +0 -87
- package/dist-cjs/executors/learning-meta.js +0 -1166
- package/dist-cjs/executors/learning-meta.js.map +0 -1
- package/dist-cjs/executors/lsp-client.d.ts +0 -38
- package/dist-cjs/executors/lsp-client.js +0 -311
- package/dist-cjs/executors/lsp-client.js.map +0 -1
- package/dist-cjs/executors/memory.d.ts +0 -203
- package/dist-cjs/executors/memory.js +0 -797
- package/dist-cjs/executors/memory.js.map +0 -1
- package/dist-cjs/executors/meta.d.ts +0 -73
- package/dist-cjs/executors/meta.js +0 -227
- package/dist-cjs/executors/meta.js.map +0 -1
- package/dist-cjs/executors/process-registry.d.ts +0 -98
- package/dist-cjs/executors/process-registry.js +0 -470
- package/dist-cjs/executors/process-registry.js.map +0 -1
- package/dist-cjs/executors/pty-session-store.d.ts +0 -14
- package/dist-cjs/executors/pty-session-store.js +0 -35
- package/dist-cjs/executors/pty-session-store.js.map +0 -1
- package/dist-cjs/executors/pty.d.ts +0 -133
- package/dist-cjs/executors/pty.js +0 -313
- package/dist-cjs/executors/pty.js.map +0 -1
- package/dist-cjs/executors/restart.d.ts +0 -13
- package/dist-cjs/executors/restart.js +0 -156
- package/dist-cjs/executors/restart.js.map +0 -1
- package/dist-cjs/executors/search-freshness.d.ts +0 -50
- package/dist-cjs/executors/search-freshness.js +0 -235
- package/dist-cjs/executors/search-freshness.js.map +0 -1
- package/dist-cjs/executors/search-types.d.ts +0 -52
- package/dist-cjs/executors/search-types.js +0 -57
- package/dist-cjs/executors/search-types.js.map +0 -1
- package/dist-cjs/executors/search.d.ts +0 -11
- package/dist-cjs/executors/search.js +0 -103
- package/dist-cjs/executors/search.js.map +0 -1
- package/dist-cjs/executors/self-diagnose.d.ts +0 -89
- package/dist-cjs/executors/self-diagnose.js +0 -435
- package/dist-cjs/executors/self-diagnose.js.map +0 -1
- package/dist-cjs/executors/session-history.d.ts +0 -75
- package/dist-cjs/executors/session-history.js +0 -321
- package/dist-cjs/executors/session-history.js.map +0 -1
- package/dist-cjs/executors/shell-safety.d.ts +0 -27
- package/dist-cjs/executors/shell-safety.js +0 -479
- package/dist-cjs/executors/shell-safety.js.map +0 -1
- package/dist-cjs/executors/shell.d.ts +0 -168
- package/dist-cjs/executors/shell.js +0 -1002
- package/dist-cjs/executors/shell.js.map +0 -1
- package/dist-cjs/executors/utils.d.ts +0 -20
- package/dist-cjs/executors/utils.js +0 -74
- package/dist-cjs/executors/utils.js.map +0 -1
- package/dist-cjs/executors/web.d.ts +0 -89
- package/dist-cjs/executors/web.js +0 -548
- package/dist-cjs/executors/web.js.map +0 -1
- package/dist-cjs/extraction/content-extraction.d.ts +0 -48
- package/dist-cjs/extraction/content-extraction.js +0 -244
- package/dist-cjs/extraction/content-extraction.js.map +0 -1
- package/dist-cjs/extraction/index.d.ts +0 -4
- package/dist-cjs/extraction/index.js +0 -9
- package/dist-cjs/extraction/index.js.map +0 -1
- package/dist-cjs/headless-control-contract.d.ts +0 -3182
- package/dist-cjs/headless-control-contract.js +0 -973
- package/dist-cjs/headless-control-contract.js.map +0 -1
- package/dist-cjs/index.d.ts +0 -62
- package/dist-cjs/index.js +0 -438
- package/dist-cjs/index.js.map +0 -1
- package/dist-cjs/local-control-http-auth.d.ts +0 -2
- package/dist-cjs/local-control-http-auth.js +0 -6
- package/dist-cjs/local-control-http-auth.js.map +0 -1
- package/dist-cjs/mcp/client.d.ts +0 -68
- package/dist-cjs/mcp/client.js +0 -186
- package/dist-cjs/mcp/client.js.map +0 -1
- package/dist-cjs/mcp/connection.d.ts +0 -54
- package/dist-cjs/mcp/connection.js +0 -485
- package/dist-cjs/mcp/connection.js.map +0 -1
- package/dist-cjs/mcp/index.d.ts +0 -10
- package/dist-cjs/mcp/index.js +0 -31
- package/dist-cjs/mcp/index.js.map +0 -1
- package/dist-cjs/mcp/jsonrpc.d.ts +0 -36
- package/dist-cjs/mcp/jsonrpc.js +0 -149
- package/dist-cjs/mcp/jsonrpc.js.map +0 -1
- package/dist-cjs/mcp/types.d.ts +0 -178
- package/dist-cjs/mcp/types.js +0 -9
- package/dist-cjs/mcp/types.js.map +0 -1
- package/dist-cjs/network-control-adapter.d.ts +0 -4
- package/dist-cjs/network-control-adapter.js +0 -78
- package/dist-cjs/network-control-adapter.js.map +0 -1
- package/dist-cjs/network-runtime/address-types.d.ts +0 -201
- package/dist-cjs/network-runtime/address-types.js +0 -169
- package/dist-cjs/network-runtime/address-types.js.map +0 -1
- package/dist-cjs/network-runtime/db-owner-fencing.d.ts +0 -43
- package/dist-cjs/network-runtime/db-owner-fencing.js +0 -77
- package/dist-cjs/network-runtime/db-owner-fencing.js.map +0 -1
- package/dist-cjs/network-runtime/delivery-receipts.d.ts +0 -117
- package/dist-cjs/network-runtime/delivery-receipts.js +0 -277
- package/dist-cjs/network-runtime/delivery-receipts.js.map +0 -1
- package/dist-cjs/network-runtime/direct-endpoint-authority.d.ts +0 -8
- package/dist-cjs/network-runtime/direct-endpoint-authority.js +0 -30
- package/dist-cjs/network-runtime/direct-endpoint-authority.js.map +0 -1
- package/dist-cjs/network-runtime/index.d.ts +0 -24
- package/dist-cjs/network-runtime/index.js +0 -173
- package/dist-cjs/network-runtime/index.js.map +0 -1
- package/dist-cjs/network-runtime/local-control-contract.d.ts +0 -758
- package/dist-cjs/network-runtime/local-control-contract.js +0 -634
- package/dist-cjs/network-runtime/local-control-contract.js.map +0 -1
- package/dist-cjs/network-runtime/node-store-contract.d.ts +0 -49
- package/dist-cjs/network-runtime/node-store-contract.js +0 -39
- package/dist-cjs/network-runtime/node-store-contract.js.map +0 -1
- package/dist-cjs/network-runtime/pair-route-contract.d.ts +0 -100
- package/dist-cjs/network-runtime/pair-route-contract.js +0 -81
- package/dist-cjs/network-runtime/pair-route-contract.js.map +0 -1
- package/dist-cjs/network-runtime/peer-capabilities.d.ts +0 -10
- package/dist-cjs/network-runtime/peer-capabilities.js +0 -38
- package/dist-cjs/network-runtime/peer-capabilities.js.map +0 -1
- package/dist-cjs/network-runtime/peer-principal-ref.d.ts +0 -9
- package/dist-cjs/network-runtime/peer-principal-ref.js +0 -16
- package/dist-cjs/network-runtime/peer-principal-ref.js.map +0 -1
- package/dist-cjs/network-runtime/peer-state-machine.d.ts +0 -70
- package/dist-cjs/network-runtime/peer-state-machine.js +0 -130
- package/dist-cjs/network-runtime/peer-state-machine.js.map +0 -1
- package/dist-cjs/network-runtime/protocol-schemas.d.ts +0 -328
- package/dist-cjs/network-runtime/protocol-schemas.js +0 -213
- package/dist-cjs/network-runtime/protocol-schemas.js.map +0 -1
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.d.ts +0 -81
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.js +0 -64
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.js.map +0 -1
- package/dist-cjs/outlook/desktop-session.d.ts +0 -68
- package/dist-cjs/outlook/desktop-session.js +0 -319
- package/dist-cjs/outlook/desktop-session.js.map +0 -1
- package/dist-cjs/package.json +0 -3
- package/dist-cjs/policy.d.ts +0 -43
- package/dist-cjs/policy.js +0 -156
- package/dist-cjs/policy.js.map +0 -1
- package/dist-cjs/providers/brave.d.ts +0 -10
- package/dist-cjs/providers/brave.js +0 -67
- package/dist-cjs/providers/brave.js.map +0 -1
- package/dist-cjs/providers/duckduckgo.d.ts +0 -18
- package/dist-cjs/providers/duckduckgo.js +0 -181
- package/dist-cjs/providers/duckduckgo.js.map +0 -1
- package/dist-cjs/providers/exa.d.ts +0 -10
- package/dist-cjs/providers/exa.js +0 -68
- package/dist-cjs/providers/exa.js.map +0 -1
- package/dist-cjs/providers/firecrawl.d.ts +0 -10
- package/dist-cjs/providers/firecrawl.js +0 -60
- package/dist-cjs/providers/firecrawl.js.map +0 -1
- package/dist-cjs/providers/index.d.ts +0 -8
- package/dist-cjs/providers/index.js +0 -18
- package/dist-cjs/providers/index.js.map +0 -1
- package/dist-cjs/providers/jina.d.ts +0 -10
- package/dist-cjs/providers/jina.js +0 -54
- package/dist-cjs/providers/jina.js.map +0 -1
- package/dist-cjs/providers/router.d.ts +0 -21
- package/dist-cjs/providers/router.js +0 -101
- package/dist-cjs/providers/router.js.map +0 -1
- package/dist-cjs/providers/search-provider.d.ts +0 -35
- package/dist-cjs/providers/search-provider.js +0 -37
- package/dist-cjs/providers/search-provider.js.map +0 -1
- package/dist-cjs/providers/tavily.d.ts +0 -10
- package/dist-cjs/providers/tavily.js +0 -59
- package/dist-cjs/providers/tavily.js.map +0 -1
- package/dist-cjs/quip/desktop-session.d.ts +0 -69
- package/dist-cjs/quip/desktop-session.js +0 -354
- package/dist-cjs/quip/desktop-session.js.map +0 -1
- package/dist-cjs/registry/index.d.ts +0 -1
- package/dist-cjs/registry/index.js +0 -7
- package/dist-cjs/registry/index.js.map +0 -1
- package/dist-cjs/registry/registry.d.ts +0 -156
- package/dist-cjs/registry/registry.js +0 -762
- package/dist-cjs/registry/registry.js.map +0 -1
- package/dist-cjs/runtime-socket-local-control-client.d.ts +0 -10
- package/dist-cjs/runtime-socket-local-control-client.js +0 -368
- package/dist-cjs/runtime-socket-local-control-client.js.map +0 -1
- package/dist-cjs/security/dns-normalization.d.ts +0 -6
- package/dist-cjs/security/dns-normalization.js +0 -23
- package/dist-cjs/security/dns-normalization.js.map +0 -1
- package/dist-cjs/security/dns-pinning.d.ts +0 -27
- package/dist-cjs/security/dns-pinning.js +0 -161
- package/dist-cjs/security/dns-pinning.js.map +0 -1
- package/dist-cjs/security/external-content.d.ts +0 -40
- package/dist-cjs/security/external-content.js +0 -96
- package/dist-cjs/security/external-content.js.map +0 -1
- package/dist-cjs/security/ssrf.d.ts +0 -40
- package/dist-cjs/security/ssrf.js +0 -222
- package/dist-cjs/security/ssrf.js.map +0 -1
- package/dist-cjs/slack/desktop-session.d.ts +0 -69
- package/dist-cjs/slack/desktop-session.js +0 -367
- package/dist-cjs/slack/desktop-session.js.map +0 -1
- package/dist-cjs/tool-factory.d.ts +0 -46
- package/dist-cjs/tool-factory.js +0 -51
- package/dist-cjs/tool-factory.js.map +0 -1
- package/dist-cjs/types.d.ts +0 -1192
- package/dist-cjs/types.js +0 -9
- package/dist-cjs/types.js.map +0 -1
- package/dist-cjs/utils/retry.d.ts +0 -11
- package/dist-cjs/utils/retry.js +0 -170
- package/dist-cjs/utils/retry.js.map +0 -1
- package/dist-cjs/utils/safe-parse-json.d.ts +0 -26
- package/dist-cjs/utils/safe-parse-json.js +0 -165
- package/dist-cjs/utils/safe-parse-json.js.map +0 -1
- package/dist-cjs/utils/url.d.ts +0 -10
- package/dist-cjs/utils/url.js +0 -24
- package/dist-cjs/utils/url.js.map +0 -1
- package/src/__tests__/web-fetch-download.test.ts +0 -433
- package/src/__tests__/web-tools.test.ts +0 -619
- package/src/ask-user-interaction.ts +0 -33
- package/src/cache/web-cache.ts +0 -110
- package/src/definitions/arion.ts +0 -118
- package/src/definitions/browser/browser.ts +0 -502
- package/src/definitions/browser/index.ts +0 -5
- package/src/definitions/browser/pw-downloads.ts +0 -142
- package/src/definitions/browser/pw-interactions.ts +0 -282
- package/src/definitions/browser/pw-responses.ts +0 -98
- package/src/definitions/browser/pw-session.ts +0 -405
- package/src/definitions/browser/pw-shared.ts +0 -85
- package/src/definitions/browser/pw-snapshot.ts +0 -383
- package/src/definitions/browser/pw-state.ts +0 -101
- package/src/definitions/browser/types.ts +0 -203
- package/src/definitions/code-intelligence.ts +0 -526
- package/src/definitions/core.ts +0 -118
- package/src/definitions/delegation.ts +0 -567
- package/src/definitions/deploy.ts +0 -73
- package/src/definitions/filesystem.ts +0 -217
- package/src/definitions/frg.ts +0 -67
- package/src/definitions/index.ts +0 -28
- package/src/definitions/memory.ts +0 -150
- package/src/definitions/messaging.ts +0 -734
- package/src/definitions/meta.ts +0 -392
- package/src/definitions/network.ts +0 -179
- package/src/definitions/outlook.ts +0 -318
- package/src/definitions/patch/apply-patch.ts +0 -235
- package/src/definitions/patch/fuzzy-match.ts +0 -217
- package/src/definitions/patch/index.ts +0 -1
- package/src/definitions/patch/patch-parser.ts +0 -297
- package/src/definitions/patch/sandbox-paths.ts +0 -129
- package/src/definitions/process/index.ts +0 -5
- package/src/definitions/process/process-registry.ts +0 -303
- package/src/definitions/process/process.ts +0 -456
- package/src/definitions/process/pty-keys.ts +0 -298
- package/src/definitions/process/session-slug.ts +0 -147
- package/src/definitions/quip.ts +0 -225
- package/src/definitions/search.ts +0 -67
- package/src/definitions/session-history.ts +0 -79
- package/src/definitions/shell.ts +0 -202
- package/src/definitions/slack.ts +0 -211
- package/src/definitions/web.ts +0 -119
- package/src/executors/apply-patch.ts +0 -1035
- package/src/executors/arion.ts +0 -199
- package/src/executors/code-intelligence.ts +0 -1179
- package/src/executors/deploy.ts +0 -1066
- package/src/executors/filesystem.ts +0 -1428
- package/src/executors/frg-freshness.ts +0 -743
- package/src/executors/frg.ts +0 -394
- package/src/executors/index.ts +0 -280
- package/src/executors/learning-meta.ts +0 -1367
- package/src/executors/lsp-client.ts +0 -355
- package/src/executors/memory.ts +0 -978
- package/src/executors/meta.ts +0 -293
- package/src/executors/process-registry.ts +0 -570
- package/src/executors/pty-session-store.ts +0 -43
- package/src/executors/pty.ts +0 -342
- package/src/executors/restart.ts +0 -133
- package/src/executors/search-freshness.ts +0 -249
- package/src/executors/search-types.ts +0 -98
- package/src/executors/search.ts +0 -89
- package/src/executors/self-diagnose.ts +0 -552
- package/src/executors/session-history.ts +0 -435
- package/src/executors/shell-safety.ts +0 -519
- package/src/executors/shell.ts +0 -1243
- package/src/executors/utils.ts +0 -40
- package/src/executors/web.ts +0 -786
- package/src/extraction/content-extraction.ts +0 -281
- package/src/extraction/index.ts +0 -5
- package/src/headless-control-contract.ts +0 -1149
- package/src/index.ts +0 -788
- package/src/local-control-http-auth.ts +0 -2
- package/src/mcp/client.ts +0 -218
- package/src/mcp/connection.ts +0 -568
- package/src/mcp/index.ts +0 -11
- package/src/mcp/jsonrpc.ts +0 -195
- package/src/mcp/types.ts +0 -199
- package/src/network-control-adapter.ts +0 -88
- package/src/network-runtime/address-types.ts +0 -218
- package/src/network-runtime/db-owner-fencing.ts +0 -91
- package/src/network-runtime/delivery-receipts.ts +0 -372
- package/src/network-runtime/direct-endpoint-authority.ts +0 -35
- package/src/network-runtime/index.ts +0 -316
- package/src/network-runtime/local-control-contract.ts +0 -784
- package/src/network-runtime/node-store-contract.ts +0 -46
- package/src/network-runtime/pair-route-contract.ts +0 -97
- package/src/network-runtime/peer-capabilities.ts +0 -48
- package/src/network-runtime/peer-principal-ref.ts +0 -20
- package/src/network-runtime/peer-state-machine.ts +0 -160
- package/src/network-runtime/protocol-schemas.ts +0 -265
- package/src/network-runtime/runtime-bootstrap-contract.ts +0 -83
- package/src/outlook/desktop-session.ts +0 -409
- package/src/policy.ts +0 -171
- package/src/providers/brave.ts +0 -80
- package/src/providers/duckduckgo.ts +0 -199
- package/src/providers/exa.ts +0 -85
- package/src/providers/firecrawl.ts +0 -77
- package/src/providers/index.ts +0 -8
- package/src/providers/jina.ts +0 -70
- package/src/providers/router.ts +0 -121
- package/src/providers/search-provider.ts +0 -74
- package/src/providers/tavily.ts +0 -74
- package/src/quip/desktop-session.ts +0 -435
- package/src/registry/index.ts +0 -1
- package/src/registry/registry.ts +0 -905
- package/src/runtime-socket-local-control-client.ts +0 -632
- package/src/security/dns-normalization.ts +0 -34
- package/src/security/dns-pinning.ts +0 -138
- package/src/security/external-content.ts +0 -129
- package/src/security/ssrf.ts +0 -207
- package/src/slack/desktop-session.ts +0 -493
- package/src/tool-factory.ts +0 -91
- package/src/types.ts +0 -1341
- package/src/utils/retry.ts +0 -163
- package/src/utils/safe-parse-json.ts +0 -176
- package/src/utils/url.ts +0 -20
- package/tests/benchmarks/registry.bench.ts +0 -57
- package/tests/cache/web-cache.test.ts +0 -147
- package/tests/critical-integration.test.ts +0 -1465
- package/tests/definitions/apply-patch.test.ts +0 -586
- package/tests/definitions/browser.test.ts +0 -495
- package/tests/definitions/delegation-pause-resume.test.ts +0 -758
- package/tests/definitions/execution.test.ts +0 -671
- package/tests/definitions/messaging-inbox-scope.test.ts +0 -229
- package/tests/definitions/messaging.test.ts +0 -1468
- package/tests/definitions/outlook.test.ts +0 -30
- package/tests/definitions/process.test.ts +0 -469
- package/tests/definitions/slack.test.ts +0 -28
- package/tests/definitions/tool-inventory.test.ts +0 -218
- package/tests/e2e/delegation-quest-orchestration.e2e.test.ts +0 -433
- package/tests/e2e/memory-tool-discovery-contract.e2e.test.ts +0 -81
- package/tests/executors/apply-patch.test.ts +0 -538
- package/tests/executors/arion.test.ts +0 -309
- package/tests/executors/conversation-primitives.test.ts +0 -250
- package/tests/executors/deploy.test.ts +0 -746
- package/tests/executors/filesystem-tools.test.ts +0 -357
- package/tests/executors/filesystem.test.ts +0 -959
- package/tests/executors/frg-freshness.test.ts +0 -136
- package/tests/executors/frg-merge.test.ts +0 -70
- package/tests/executors/frg-session-content.test.ts +0 -40
- package/tests/executors/frg.test.ts +0 -56
- package/tests/executors/memory-bugfixes.test.ts +0 -257
- package/tests/executors/memory-real-memoria.integration.test.ts +0 -316
- package/tests/executors/memory.test.ts +0 -853
- package/tests/executors/meta-tools.test.ts +0 -411
- package/tests/executors/meta.test.ts +0 -683
- package/tests/executors/path-containment.test.ts +0 -51
- package/tests/executors/process-registry.test.ts +0 -505
- package/tests/executors/pty.test.ts +0 -664
- package/tests/executors/quest-security.test.ts +0 -249
- package/tests/executors/read-file-media.test.ts +0 -230
- package/tests/executors/recall-knowledge-schema.test.ts +0 -209
- package/tests/executors/recall-tags.test.ts +0 -278
- package/tests/executors/remember-null-safety.contract.test.ts +0 -41
- package/tests/executors/restart.test.ts +0 -67
- package/tests/executors/search-unified.test.ts +0 -381
- package/tests/executors/session-history.test.ts +0 -340
- package/tests/executors/session-transcript.test.ts +0 -561
- package/tests/executors/shell-abort.test.ts +0 -416
- package/tests/executors/shell-env-blocklist.test.ts +0 -648
- package/tests/executors/shell-env-process.test.ts +0 -245
- package/tests/executors/shell-process-registry.test.ts +0 -334
- package/tests/executors/shell-tools.test.ts +0 -393
- package/tests/executors/shell.test.ts +0 -690
- package/tests/executors/web-abort-vs-timeout.test.ts +0 -213
- package/tests/executors/web-integration.test.ts +0 -633
- package/tests/executors/web-symlink.test.ts +0 -18
- package/tests/executors/web.test.ts +0 -1400
- package/tests/executors/write-stdin.test.ts +0 -145
- package/tests/extraction/content-extraction.test.ts +0 -153
- package/tests/guards/tools-default-test-lane.integration.test.ts +0 -21
- package/tests/guards/tools-package-test-commands.e2e.test.ts +0 -43
- package/tests/guards/tools-test-lane-manifest.contract.test.ts +0 -76
- package/tests/guards/tools-vitest-workspace-alias.contract.test.ts +0 -63
- package/tests/helpers/async-waits.ts +0 -53
- package/tests/integration/headless-control-contract.integration.test.ts +0 -153
- package/tests/integration/memory-tool-schema-parity.integration.test.ts +0 -67
- package/tests/integration/meta-tools-round-trip.integration.test.ts +0 -506
- package/tests/integration/quest-round-trip.test.ts +0 -303
- package/tests/integration/registry-executor-flow.test.ts +0 -85
- package/tests/integration.test.ts +0 -177
- package/tests/loading-tier.test.ts +0 -126
- package/tests/mcp/client-reconnect.test.ts +0 -267
- package/tests/mcp/connection.test.ts +0 -846
- package/tests/mcp/injectable-logger.test.ts +0 -83
- package/tests/mcp/jsonrpc.test.ts +0 -109
- package/tests/mcp/lifecycle.test.ts +0 -879
- package/tests/network-runtime/address-types.contract.test.ts +0 -143
- package/tests/network-runtime/continuity-bind-schema.contract.test.ts +0 -203
- package/tests/network-runtime/local-control-contract.test.ts +0 -869
- package/tests/network-runtime/local-control-invite-token.contract.test.ts +0 -146
- package/tests/network-runtime/node-store-contract.test.ts +0 -11
- package/tests/network-runtime/pair-protocol-nodeid.contract.test.ts +0 -15
- package/tests/network-runtime/peer-state-machine.contract.test.ts +0 -148
- package/tests/network-runtime/protocol-schemas.contract.test.ts +0 -512
- package/tests/network-runtime/relay-pending-nodeid.contract.test.ts +0 -62
- package/tests/network-runtime/runtime-bootstrap-contract.test.ts +0 -227
- package/tests/network-runtime/runtime-socket-local-control-client.test.ts +0 -621
- package/tests/network-runtime/wait-for-message-script.test.ts +0 -288
- package/tests/parallel.test.ts +0 -71
- package/tests/policy.test.ts +0 -184
- package/tests/print-default-test-lane.ts +0 -14
- package/tests/print-test-lane-manifest.ts +0 -22
- package/tests/providers/brave.test.ts +0 -159
- package/tests/providers/duckduckgo.test.ts +0 -207
- package/tests/providers/exa.test.ts +0 -175
- package/tests/providers/firecrawl.test.ts +0 -168
- package/tests/providers/jina.test.ts +0 -144
- package/tests/providers/router.test.ts +0 -328
- package/tests/providers/tavily.test.ts +0 -165
- package/tests/registry/discovery.test.ts +0 -154
- package/tests/registry/injectable-logger.test.ts +0 -230
- package/tests/registry/input-validation.test.ts +0 -361
- package/tests/registry/interface-completeness.test.ts +0 -85
- package/tests/registry/mcp-integration.test.ts +0 -103
- package/tests/registry/mcp-read-only-hint.test.ts +0 -60
- package/tests/registry/memoria-discovery.test.ts +0 -390
- package/tests/registry/nested-validation.test.ts +0 -283
- package/tests/registry/pseudo-tool-filtering.test.ts +0 -258
- package/tests/registry/registration-lifecycle.test.ts +0 -133
- package/tests/registry-validation.test.ts +0 -424
- package/tests/registry.test.ts +0 -460
- package/tests/security/dns-pinning.test.ts +0 -162
- package/tests/security/external-content.test.ts +0 -144
- package/tests/security/ssrf.test.ts +0 -118
- package/tests/shell-safety-integration.test.ts +0 -32
- package/tests/shell-safety.test.ts +0 -365
- package/tests/slack/desktop-session.test.ts +0 -50
- package/tests/test-lane-manifest.ts +0 -440
- package/tests/test-utils.ts +0 -27
- package/tests/tool-factory.test.ts +0 -188
- package/tests/utils/retry.test.ts +0 -231
- package/tests/utils/url.test.ts +0 -63
- package/tsconfig.cjs.json +0 -24
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -55
- package/vitest.e2e.config.ts +0 -24
- package/vitest.integration.config.ts +0 -24
- package/vitest.native.config.ts +0 -24
|
@@ -1,690 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @aria/tools - Shell executor tests
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
6
|
-
import { spawn as spawnChild } from "node:child_process";
|
|
7
|
-
import * as fs from "node:fs/promises";
|
|
8
|
-
import * as path from "node:path";
|
|
9
|
-
import * as os from "node:os";
|
|
10
|
-
import type { ToolContext } from "../../src/types.js";
|
|
11
|
-
import { SpawnedProcessRegistry } from "../../src/executors/process-registry.js";
|
|
12
|
-
import {
|
|
13
|
-
executeBash,
|
|
14
|
-
executeExec,
|
|
15
|
-
executeSpawn,
|
|
16
|
-
executeKill,
|
|
17
|
-
executeWaitProcess,
|
|
18
|
-
} from "../../src/executors/shell.js";
|
|
19
|
-
import { waitForChildExit, waitForFile } from "../helpers/async-waits.js";
|
|
20
|
-
|
|
21
|
-
// Helper to create a unique temp directory for each test
|
|
22
|
-
// Uses realpath to resolve symlinks (e.g., /var -> /private/var on macOS)
|
|
23
|
-
const createTempDir = async (): Promise<string> => {
|
|
24
|
-
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "aria-shell-test-"));
|
|
25
|
-
return fs.realpath(tempDir);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// Helper to clean up temp directory
|
|
29
|
-
const cleanupTempDir = async (dir: string): Promise<void> => {
|
|
30
|
-
await fs.rm(dir, { recursive: true, force: true });
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
// Helper to create a context
|
|
34
|
-
const createContext = (
|
|
35
|
-
workingDir: string,
|
|
36
|
-
env: Record<string, string> = {},
|
|
37
|
-
processRegistry?: SpawnedProcessRegistry,
|
|
38
|
-
): ToolContext => ({
|
|
39
|
-
workingDir,
|
|
40
|
-
env,
|
|
41
|
-
processRegistry,
|
|
42
|
-
confirm: async () => true,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const shellQuote = (value: string): string => `'${value.replace(/'/g, `'\"'\"'`)}'`;
|
|
46
|
-
|
|
47
|
-
describe("Shell Executors", () => {
|
|
48
|
-
let tempDir: string;
|
|
49
|
-
let ctx: ToolContext;
|
|
50
|
-
let processRegistry: SpawnedProcessRegistry;
|
|
51
|
-
|
|
52
|
-
beforeEach(async () => {
|
|
53
|
-
tempDir = await createTempDir();
|
|
54
|
-
processRegistry = new SpawnedProcessRegistry();
|
|
55
|
-
ctx = createContext(tempDir, {}, processRegistry);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
afterEach(async () => {
|
|
59
|
-
await cleanupTempDir(tempDir);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
describe("executeBash", () => {
|
|
63
|
-
it("should execute a simple command", async () => {
|
|
64
|
-
const result = await executeBash({ command: 'echo "hello world"' }, ctx);
|
|
65
|
-
|
|
66
|
-
expect(result.success).toBe(true);
|
|
67
|
-
expect(result.data).toMatchObject({
|
|
68
|
-
stdout: expect.stringContaining("hello world"),
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it("should capture stdout correctly", async () => {
|
|
73
|
-
const result = await executeBash({ command: 'echo "line1"; echo "line2"' }, ctx);
|
|
74
|
-
|
|
75
|
-
expect(result.success).toBe(true);
|
|
76
|
-
const data = result.data as { stdout: string };
|
|
77
|
-
expect(data.stdout).toContain("line1");
|
|
78
|
-
expect(data.stdout).toContain("line2");
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it("should capture stderr correctly", async () => {
|
|
82
|
-
const result = await executeBash({ command: 'echo "error message" >&2' }, ctx);
|
|
83
|
-
|
|
84
|
-
expect(result.success).toBe(true);
|
|
85
|
-
const data = result.data as { stderr: string };
|
|
86
|
-
expect(data.stderr).toContain("error message");
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it("should return exit code", async () => {
|
|
90
|
-
const result = await executeBash({ command: "exit 0" }, ctx);
|
|
91
|
-
|
|
92
|
-
expect(result.success).toBe(true);
|
|
93
|
-
const data = result.data as { exitCode: number };
|
|
94
|
-
expect(data.exitCode).toBe(0);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it("should handle non-zero exit code", async () => {
|
|
98
|
-
const result = await executeBash({ command: "exit 42" }, ctx);
|
|
99
|
-
|
|
100
|
-
expect(result.success).toBe(false);
|
|
101
|
-
const data = result.data as { exitCode: number };
|
|
102
|
-
expect(data.exitCode).toBe(42);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it("should handle command failure", async () => {
|
|
106
|
-
const result = await executeBash({ command: "nonexistent_command_12345" }, ctx);
|
|
107
|
-
|
|
108
|
-
expect(result.success).toBe(false);
|
|
109
|
-
expect(result.data).toBeDefined();
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it("should use working directory", async () => {
|
|
113
|
-
const result = await executeBash({ command: "pwd" }, ctx);
|
|
114
|
-
|
|
115
|
-
expect(result.success).toBe(true);
|
|
116
|
-
const data = result.data as { stdout: string };
|
|
117
|
-
expect(data.stdout.trim()).toBe(tempDir);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it("should support custom cwd option", async () => {
|
|
121
|
-
const subDir = path.join(tempDir, "subdir");
|
|
122
|
-
await fs.mkdir(subDir);
|
|
123
|
-
|
|
124
|
-
const result = await executeBash({ command: "pwd", cwd: subDir }, ctx);
|
|
125
|
-
|
|
126
|
-
expect(result.success).toBe(true);
|
|
127
|
-
const data = result.data as { stdout: string };
|
|
128
|
-
expect(data.stdout.trim()).toBe(subDir);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it("should use environment variables from context", async () => {
|
|
132
|
-
const envCtx = createContext(tempDir, { MY_VAR: "test_value" });
|
|
133
|
-
|
|
134
|
-
const result = await executeBash({ command: "echo $MY_VAR" }, envCtx);
|
|
135
|
-
|
|
136
|
-
expect(result.success).toBe(true);
|
|
137
|
-
const data = result.data as { stdout: string };
|
|
138
|
-
expect(data.stdout.trim()).toBe("test_value");
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it("should support custom environment variables in input", async () => {
|
|
142
|
-
const result = await executeBash(
|
|
143
|
-
{ command: "echo $CUSTOM_VAR", env: { CUSTOM_VAR: "custom_value" } },
|
|
144
|
-
ctx,
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
expect(result.success).toBe(true);
|
|
148
|
-
const data = result.data as { stdout: string };
|
|
149
|
-
expect(data.stdout.trim()).toBe("custom_value");
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it("should timeout long-running commands", async () => {
|
|
153
|
-
const result = await executeBash({ command: "sleep 10", timeout: 100 }, ctx);
|
|
154
|
-
|
|
155
|
-
expect(result.success).toBe(false);
|
|
156
|
-
expect(result.message?.toLowerCase()).toContain("time");
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
it("should create files in working directory", async () => {
|
|
160
|
-
await executeBash({ command: "touch testfile.txt" }, ctx);
|
|
161
|
-
|
|
162
|
-
const exists = await fs
|
|
163
|
-
.access(path.join(tempDir, "testfile.txt"))
|
|
164
|
-
.then(() => true)
|
|
165
|
-
.catch(() => false);
|
|
166
|
-
expect(exists).toBe(true);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
it("should support shell features like pipes", async () => {
|
|
170
|
-
const result = await executeBash({ command: 'echo "hello world" | grep world' }, ctx);
|
|
171
|
-
|
|
172
|
-
expect(result.success).toBe(true);
|
|
173
|
-
const data = result.data as { stdout: string };
|
|
174
|
-
expect(data.stdout).toContain("world");
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it("should support shell features like redirection", async () => {
|
|
178
|
-
await executeBash({ command: 'echo "content" > output.txt' }, ctx);
|
|
179
|
-
|
|
180
|
-
const content = await fs.readFile(path.join(tempDir, "output.txt"), "utf-8");
|
|
181
|
-
expect(content.trim()).toBe("content");
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it("should ignore inherited GIT_* context vars from process.env", async () => {
|
|
185
|
-
const originalGitEnv = {
|
|
186
|
-
GIT_DIR: process.env.GIT_DIR,
|
|
187
|
-
GIT_WORK_TREE: process.env.GIT_WORK_TREE,
|
|
188
|
-
GIT_INDEX_FILE: process.env.GIT_INDEX_FILE,
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
process.env.GIT_DIR = "/tmp/not-a-repo";
|
|
192
|
-
process.env.GIT_WORK_TREE = "/tmp/not-a-repo";
|
|
193
|
-
process.env.GIT_INDEX_FILE = "/tmp/not-a-repo/index";
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
const init = await executeBash({ command: "git init" }, ctx);
|
|
197
|
-
expect(init.success).toBe(true);
|
|
198
|
-
|
|
199
|
-
const write = await executeBash({ command: 'echo "# Test" > README.md' }, ctx);
|
|
200
|
-
expect(write.success).toBe(true);
|
|
201
|
-
|
|
202
|
-
const status = await executeBash({ command: "git status --porcelain" }, ctx);
|
|
203
|
-
expect(status.success).toBe(true);
|
|
204
|
-
const data = status.data as { stdout: string };
|
|
205
|
-
expect(data.stdout).toContain("README.md");
|
|
206
|
-
} finally {
|
|
207
|
-
if (originalGitEnv.GIT_DIR === undefined) {
|
|
208
|
-
delete process.env.GIT_DIR;
|
|
209
|
-
} else {
|
|
210
|
-
process.env.GIT_DIR = originalGitEnv.GIT_DIR;
|
|
211
|
-
}
|
|
212
|
-
if (originalGitEnv.GIT_WORK_TREE === undefined) {
|
|
213
|
-
delete process.env.GIT_WORK_TREE;
|
|
214
|
-
} else {
|
|
215
|
-
process.env.GIT_WORK_TREE = originalGitEnv.GIT_WORK_TREE;
|
|
216
|
-
}
|
|
217
|
-
if (originalGitEnv.GIT_INDEX_FILE === undefined) {
|
|
218
|
-
delete process.env.GIT_INDEX_FILE;
|
|
219
|
-
} else {
|
|
220
|
-
process.env.GIT_INDEX_FILE = originalGitEnv.GIT_INDEX_FILE;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
describe("executeExec", () => {
|
|
227
|
-
it("should execute a program directly", async () => {
|
|
228
|
-
const result = await executeExec({ program: "echo", args: ["hello", "world"] }, ctx);
|
|
229
|
-
|
|
230
|
-
expect(result.success).toBe(true);
|
|
231
|
-
const data = result.data as { stdout: string };
|
|
232
|
-
expect(data.stdout.trim()).toBe("hello world");
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it("should handle program without arguments", async () => {
|
|
236
|
-
const result = await executeExec({ program: "pwd" }, ctx);
|
|
237
|
-
|
|
238
|
-
expect(result.success).toBe(true);
|
|
239
|
-
const data = result.data as { stdout: string };
|
|
240
|
-
expect(data.stdout.trim()).toBe(tempDir);
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it("should return exit code", async () => {
|
|
244
|
-
const result = await executeExec({ program: "true" }, ctx);
|
|
245
|
-
|
|
246
|
-
expect(result.success).toBe(true);
|
|
247
|
-
const data = result.data as { exitCode: number };
|
|
248
|
-
expect(data.exitCode).toBe(0);
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
it("should handle non-zero exit code", async () => {
|
|
252
|
-
const result = await executeExec({ program: "false" }, ctx);
|
|
253
|
-
|
|
254
|
-
expect(result.success).toBe(false);
|
|
255
|
-
const data = result.data as { exitCode: number };
|
|
256
|
-
expect(data.exitCode).toBe(1);
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
it("should handle non-existent program", async () => {
|
|
260
|
-
const result = await executeExec({ program: "nonexistent_program_12345" }, ctx);
|
|
261
|
-
|
|
262
|
-
expect(result.success).toBe(false);
|
|
263
|
-
expect(result.message).toBeDefined();
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
it("should use working directory", async () => {
|
|
267
|
-
const result = await executeExec({ program: "pwd" }, ctx);
|
|
268
|
-
|
|
269
|
-
expect(result.success).toBe(true);
|
|
270
|
-
const data = result.data as { stdout: string };
|
|
271
|
-
expect(data.stdout.trim()).toBe(tempDir);
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
it("should support custom cwd option", async () => {
|
|
275
|
-
const subDir = path.join(tempDir, "subdir");
|
|
276
|
-
await fs.mkdir(subDir);
|
|
277
|
-
|
|
278
|
-
const result = await executeExec({ program: "pwd", cwd: subDir }, ctx);
|
|
279
|
-
|
|
280
|
-
expect(result.success).toBe(true);
|
|
281
|
-
const data = result.data as { stdout: string };
|
|
282
|
-
expect(data.stdout.trim()).toBe(subDir);
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
it("should use environment variables from context", async () => {
|
|
286
|
-
const envCtx = createContext(tempDir, { MY_VAR: "exec_value" });
|
|
287
|
-
|
|
288
|
-
const result = await executeExec(
|
|
289
|
-
{ program: "/bin/sh", args: ["-c", "echo $MY_VAR"] },
|
|
290
|
-
envCtx,
|
|
291
|
-
);
|
|
292
|
-
|
|
293
|
-
expect(result.success).toBe(true);
|
|
294
|
-
const data = result.data as { stdout: string };
|
|
295
|
-
expect(data.stdout.trim()).toBe("exec_value");
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
it("should support custom environment variables in input", async () => {
|
|
299
|
-
const result = await executeExec(
|
|
300
|
-
{
|
|
301
|
-
program: "/bin/sh",
|
|
302
|
-
args: ["-c", "echo $CUSTOM_VAR"],
|
|
303
|
-
env: { CUSTOM_VAR: "custom_exec_value" },
|
|
304
|
-
},
|
|
305
|
-
ctx,
|
|
306
|
-
);
|
|
307
|
-
|
|
308
|
-
expect(result.success).toBe(true);
|
|
309
|
-
const data = result.data as { stdout: string };
|
|
310
|
-
expect(data.stdout.trim()).toBe("custom_exec_value");
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
it("should timeout long-running programs", async () => {
|
|
314
|
-
const result = await executeExec({ program: "sleep", args: ["10"], timeout: 100 }, ctx);
|
|
315
|
-
|
|
316
|
-
expect(result.success).toBe(false);
|
|
317
|
-
expect(result.message?.toLowerCase()).toContain("time");
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
it("should not interpret shell metacharacters", async () => {
|
|
321
|
-
// This should print the literal string, not execute the command
|
|
322
|
-
const result = await executeExec({ program: "echo", args: ["$(whoami)"] }, ctx);
|
|
323
|
-
|
|
324
|
-
expect(result.success).toBe(true);
|
|
325
|
-
const data = result.data as { stdout: string };
|
|
326
|
-
expect(data.stdout.trim()).toBe("$(whoami)");
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
describe("executeSpawn", () => {
|
|
331
|
-
it("should spawn a background process and return PID", async () => {
|
|
332
|
-
let pid: number | undefined;
|
|
333
|
-
try {
|
|
334
|
-
const result = await executeSpawn({ program: "sleep", args: ["30"] }, ctx);
|
|
335
|
-
|
|
336
|
-
expect(result.success).toBe(true);
|
|
337
|
-
const data = result.data as { pid: number };
|
|
338
|
-
pid = data.pid;
|
|
339
|
-
expect(typeof data.pid).toBe("number");
|
|
340
|
-
expect(data.pid).toBeGreaterThan(0);
|
|
341
|
-
} finally {
|
|
342
|
-
// Clean up the spawned process
|
|
343
|
-
if (pid) {
|
|
344
|
-
try {
|
|
345
|
-
process.kill(pid, "SIGTERM");
|
|
346
|
-
} catch {
|
|
347
|
-
// Process may already be dead
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
it("should detach the process", async () => {
|
|
354
|
-
let pid: number | undefined;
|
|
355
|
-
try {
|
|
356
|
-
const result = await executeSpawn({ program: "sleep", args: ["30"] }, ctx);
|
|
357
|
-
|
|
358
|
-
expect(result.success).toBe(true);
|
|
359
|
-
const data = result.data as { pid: number };
|
|
360
|
-
pid = data.pid;
|
|
361
|
-
|
|
362
|
-
// Process should be running
|
|
363
|
-
const isRunning = () => {
|
|
364
|
-
try {
|
|
365
|
-
process.kill(data.pid, 0); // Signal 0 just checks if process exists
|
|
366
|
-
return true;
|
|
367
|
-
} catch {
|
|
368
|
-
return false;
|
|
369
|
-
}
|
|
370
|
-
};
|
|
371
|
-
|
|
372
|
-
expect(isRunning()).toBe(true);
|
|
373
|
-
} finally {
|
|
374
|
-
// Clean up
|
|
375
|
-
if (pid) {
|
|
376
|
-
try {
|
|
377
|
-
process.kill(pid, "SIGTERM");
|
|
378
|
-
} catch {
|
|
379
|
-
// Process may already be dead
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
});
|
|
384
|
-
|
|
385
|
-
it("should use working directory", async () => {
|
|
386
|
-
// Create a script that writes pwd to a file using realpath -s to resolve symlinks
|
|
387
|
-
const scriptPath = path.join(tempDir, "write_pwd.sh");
|
|
388
|
-
await fs.writeFile(scriptPath, "#!/bin/bash\npwd -P > pwd_output.txt", { mode: 0o755 });
|
|
389
|
-
const outputPath = path.join(tempDir, "pwd_output.txt");
|
|
390
|
-
const waitForOutput = waitForFile(outputPath, 10_000);
|
|
391
|
-
|
|
392
|
-
const result = await executeSpawn({ program: "/bin/bash", args: [scriptPath] }, ctx);
|
|
393
|
-
|
|
394
|
-
expect(result.success).toBe(true);
|
|
395
|
-
await waitForOutput;
|
|
396
|
-
const pwdOutput = await fs.readFile(outputPath, "utf-8");
|
|
397
|
-
expect(pwdOutput.trim()).toBe(tempDir);
|
|
398
|
-
}, 15_000);
|
|
399
|
-
|
|
400
|
-
it("should support custom cwd option", async () => {
|
|
401
|
-
const subDir = path.join(tempDir, "subdir");
|
|
402
|
-
await fs.mkdir(subDir);
|
|
403
|
-
|
|
404
|
-
const scriptPath = path.join(tempDir, "write_pwd.sh");
|
|
405
|
-
await fs.writeFile(scriptPath, "#!/bin/bash\npwd -P > pwd_output.txt", { mode: 0o755 });
|
|
406
|
-
const outputPath = path.join(subDir, "pwd_output.txt");
|
|
407
|
-
const waitForOutput = waitForFile(outputPath, 10_000);
|
|
408
|
-
|
|
409
|
-
const spawnResult = await executeSpawn(
|
|
410
|
-
{ program: "/bin/bash", args: [scriptPath], cwd: subDir },
|
|
411
|
-
ctx,
|
|
412
|
-
);
|
|
413
|
-
expect(spawnResult.success).toBe(true);
|
|
414
|
-
await waitForOutput;
|
|
415
|
-
const pwdOutput = await fs.readFile(outputPath, "utf-8");
|
|
416
|
-
expect(pwdOutput.trim()).toBe(subDir);
|
|
417
|
-
}, 15_000);
|
|
418
|
-
|
|
419
|
-
it("should use environment variables from context", async () => {
|
|
420
|
-
const envCtx = createContext(tempDir, { SPAWN_VAR: "spawn_value" });
|
|
421
|
-
|
|
422
|
-
const scriptPath = path.join(tempDir, "write_env.sh");
|
|
423
|
-
await fs.writeFile(scriptPath, "#!/bin/bash\necho $SPAWN_VAR > env_output.txt", {
|
|
424
|
-
mode: 0o755,
|
|
425
|
-
});
|
|
426
|
-
const outputPath = path.join(tempDir, "env_output.txt");
|
|
427
|
-
const waitForOutput = waitForFile(outputPath);
|
|
428
|
-
|
|
429
|
-
await executeSpawn({ program: "/bin/bash", args: [scriptPath] }, envCtx);
|
|
430
|
-
await waitForOutput;
|
|
431
|
-
const envOutput = await fs.readFile(outputPath, "utf-8");
|
|
432
|
-
expect(envOutput.trim()).toBe("spawn_value");
|
|
433
|
-
});
|
|
434
|
-
|
|
435
|
-
it("should handle non-existent program", async () => {
|
|
436
|
-
const result = await executeSpawn({ program: "nonexistent_program_12345" }, ctx);
|
|
437
|
-
|
|
438
|
-
expect(result.success).toBe(false);
|
|
439
|
-
expect(result.message).toBeDefined();
|
|
440
|
-
});
|
|
441
|
-
});
|
|
442
|
-
|
|
443
|
-
describe("executeKill", () => {
|
|
444
|
-
it("should kill a running process", async () => {
|
|
445
|
-
const child = spawnChild("sleep", ["60"], { stdio: "ignore" });
|
|
446
|
-
const pid = child.pid;
|
|
447
|
-
expect(typeof pid).toBe("number");
|
|
448
|
-
expect(pid).toBeGreaterThan(0);
|
|
449
|
-
|
|
450
|
-
try {
|
|
451
|
-
expect(() => process.kill(pid!, 0)).not.toThrow();
|
|
452
|
-
|
|
453
|
-
// Kill the process
|
|
454
|
-
const killResult = await executeKill({ pid: pid! }, ctx);
|
|
455
|
-
|
|
456
|
-
expect(killResult.success).toBe(true);
|
|
457
|
-
await waitForChildExit(child);
|
|
458
|
-
expect(() => process.kill(pid!, 0)).toThrow();
|
|
459
|
-
} finally {
|
|
460
|
-
// Ensure cleanup even if test fails
|
|
461
|
-
try {
|
|
462
|
-
process.kill(pid!, "SIGKILL");
|
|
463
|
-
} catch {
|
|
464
|
-
// Process may already be dead
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
it("should support custom signal", async () => {
|
|
470
|
-
const child = spawnChild("sleep", ["60"], { stdio: "ignore" });
|
|
471
|
-
const pid = child.pid;
|
|
472
|
-
expect(typeof pid).toBe("number");
|
|
473
|
-
expect(pid).toBeGreaterThan(0);
|
|
474
|
-
|
|
475
|
-
try {
|
|
476
|
-
// Kill with SIGKILL
|
|
477
|
-
const killResult = await executeKill({ pid: pid!, signal: "SIGKILL" }, ctx);
|
|
478
|
-
|
|
479
|
-
expect(killResult.success).toBe(true);
|
|
480
|
-
await waitForChildExit(child);
|
|
481
|
-
expect(() => process.kill(pid!, 0)).toThrow();
|
|
482
|
-
} finally {
|
|
483
|
-
// Ensure cleanup even if test fails
|
|
484
|
-
try {
|
|
485
|
-
process.kill(pid!, "SIGKILL");
|
|
486
|
-
} catch {
|
|
487
|
-
// Process may already be dead
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
it("should return error for non-existent PID", async () => {
|
|
493
|
-
// Use a very high PID that's unlikely to exist
|
|
494
|
-
const result = await executeKill({ pid: 999999999 }, ctx);
|
|
495
|
-
|
|
496
|
-
expect(result.success).toBe(false);
|
|
497
|
-
expect(result.message).toBeDefined();
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
it("should return error for invalid signal", async () => {
|
|
501
|
-
// Spawn a process
|
|
502
|
-
const spawnResult = await executeSpawn({ program: "sleep", args: ["60"] }, ctx);
|
|
503
|
-
const spawnData = spawnResult.data as { pid: number };
|
|
504
|
-
const pid = spawnData.pid;
|
|
505
|
-
|
|
506
|
-
try {
|
|
507
|
-
const result = await executeKill({ pid, signal: "INVALID_SIGNAL" }, ctx);
|
|
508
|
-
|
|
509
|
-
expect(result.success).toBe(false);
|
|
510
|
-
expect(result.message).toBeDefined();
|
|
511
|
-
} finally {
|
|
512
|
-
// Clean up
|
|
513
|
-
try {
|
|
514
|
-
process.kill(pid, "SIGTERM");
|
|
515
|
-
} catch {
|
|
516
|
-
// Process may already be dead
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
|
-
});
|
|
521
|
-
|
|
522
|
-
describe("integration: spawn and kill", () => {
|
|
523
|
-
it("should spawn a process and kill it by PID", async () => {
|
|
524
|
-
// Spawn a long-running process
|
|
525
|
-
const spawnResult = await executeSpawn({ program: "sleep", args: ["300"] }, ctx);
|
|
526
|
-
|
|
527
|
-
expect(spawnResult.success).toBe(true);
|
|
528
|
-
const { pid } = spawnResult.data as { pid: number };
|
|
529
|
-
|
|
530
|
-
try {
|
|
531
|
-
// Verify it's running
|
|
532
|
-
let isRunning = true;
|
|
533
|
-
try {
|
|
534
|
-
process.kill(pid, 0);
|
|
535
|
-
} catch {
|
|
536
|
-
isRunning = false;
|
|
537
|
-
}
|
|
538
|
-
expect(isRunning).toBe(true);
|
|
539
|
-
|
|
540
|
-
// Kill it
|
|
541
|
-
const killCtx = createContext(tempDir);
|
|
542
|
-
const killResult = await executeKill({ pid, signal: "SIGKILL" }, killCtx);
|
|
543
|
-
expect(killResult.success).toBe(true);
|
|
544
|
-
const waitResult = await executeWaitProcess({ pid, timeoutMs: 5_000 }, ctx);
|
|
545
|
-
expect(waitResult.success).toBe(true);
|
|
546
|
-
} finally {
|
|
547
|
-
// Ensure cleanup even if test fails
|
|
548
|
-
try {
|
|
549
|
-
process.kill(pid, "SIGKILL");
|
|
550
|
-
} catch {
|
|
551
|
-
// Process may already be dead
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
});
|
|
555
|
-
});
|
|
556
|
-
|
|
557
|
-
describe("abort signal", () => {
|
|
558
|
-
describe("executeBash", () => {
|
|
559
|
-
it("should return cancelled when signal is pre-aborted", async () => {
|
|
560
|
-
const ac = new AbortController();
|
|
561
|
-
ac.abort();
|
|
562
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
563
|
-
|
|
564
|
-
const result = await executeBash({ command: 'echo "should not run"' }, abortCtx);
|
|
565
|
-
|
|
566
|
-
expect(result.success).toBe(false);
|
|
567
|
-
expect(result.message).toBe("Command cancelled");
|
|
568
|
-
});
|
|
569
|
-
|
|
570
|
-
it("should cancel a running command when signal fires", async () => {
|
|
571
|
-
const ac = new AbortController();
|
|
572
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
573
|
-
const readyFile = path.join(tempDir, "bash-abort-ready");
|
|
574
|
-
const waitForReady = waitForFile(readyFile);
|
|
575
|
-
const resultPromise = executeBash(
|
|
576
|
-
{ command: `touch ${shellQuote(readyFile)}; sleep 30` },
|
|
577
|
-
abortCtx,
|
|
578
|
-
);
|
|
579
|
-
|
|
580
|
-
await waitForReady;
|
|
581
|
-
ac.abort();
|
|
582
|
-
|
|
583
|
-
const result = await resultPromise;
|
|
584
|
-
|
|
585
|
-
expect(result.success).toBe(false);
|
|
586
|
-
expect(result.message).toBe("Command cancelled");
|
|
587
|
-
});
|
|
588
|
-
});
|
|
589
|
-
|
|
590
|
-
describe("executeExec", () => {
|
|
591
|
-
it("should return cancelled when signal is pre-aborted", async () => {
|
|
592
|
-
const ac = new AbortController();
|
|
593
|
-
ac.abort();
|
|
594
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
595
|
-
|
|
596
|
-
const result = await executeExec({ program: "echo", args: ["should not run"] }, abortCtx);
|
|
597
|
-
|
|
598
|
-
expect(result.success).toBe(false);
|
|
599
|
-
expect(result.message).toBe("Command cancelled");
|
|
600
|
-
});
|
|
601
|
-
|
|
602
|
-
it("should kill process on abort", async () => {
|
|
603
|
-
const ac = new AbortController();
|
|
604
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
605
|
-
const readyFile = path.join(tempDir, "exec-abort-ready");
|
|
606
|
-
const waitForReady = waitForFile(readyFile);
|
|
607
|
-
const resultPromise = executeExec(
|
|
608
|
-
{
|
|
609
|
-
program: "/bin/sh",
|
|
610
|
-
args: ["-c", `touch ${shellQuote(readyFile)}; sleep 30`],
|
|
611
|
-
},
|
|
612
|
-
abortCtx,
|
|
613
|
-
);
|
|
614
|
-
|
|
615
|
-
await waitForReady;
|
|
616
|
-
ac.abort();
|
|
617
|
-
|
|
618
|
-
const result = await resultPromise;
|
|
619
|
-
|
|
620
|
-
expect(result.success).toBe(false);
|
|
621
|
-
expect(result.message).toBe("Command cancelled");
|
|
622
|
-
});
|
|
623
|
-
|
|
624
|
-
it("should include partial output on abort", async () => {
|
|
625
|
-
const ac = new AbortController();
|
|
626
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
627
|
-
const readyFile = path.join(tempDir, "exec-partial-ready");
|
|
628
|
-
const waitForReady = waitForFile(readyFile);
|
|
629
|
-
|
|
630
|
-
const resultPromise = executeExec(
|
|
631
|
-
{
|
|
632
|
-
program: "/bin/sh",
|
|
633
|
-
args: ["-c", `echo "partial output"; touch ${shellQuote(readyFile)}; sleep 30`],
|
|
634
|
-
},
|
|
635
|
-
abortCtx,
|
|
636
|
-
);
|
|
637
|
-
|
|
638
|
-
await waitForReady;
|
|
639
|
-
ac.abort();
|
|
640
|
-
|
|
641
|
-
const result = await resultPromise;
|
|
642
|
-
|
|
643
|
-
expect(result.success).toBe(false);
|
|
644
|
-
expect(result.message).toBe("Command cancelled");
|
|
645
|
-
const data = result.data as { stdout: string };
|
|
646
|
-
expect(data.stdout).toContain("partial output");
|
|
647
|
-
}, 10000);
|
|
648
|
-
});
|
|
649
|
-
|
|
650
|
-
describe("executeSpawn", () => {
|
|
651
|
-
it("should return cancelled when signal is pre-aborted", async () => {
|
|
652
|
-
const ac = new AbortController();
|
|
653
|
-
ac.abort();
|
|
654
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
655
|
-
|
|
656
|
-
const result = await executeSpawn({ program: "sleep", args: ["30"] }, abortCtx);
|
|
657
|
-
|
|
658
|
-
expect(result.success).toBe(false);
|
|
659
|
-
expect(result.message).toBe("Command cancelled");
|
|
660
|
-
});
|
|
661
|
-
|
|
662
|
-
it("should kill spawned process on abort", async () => {
|
|
663
|
-
const ac = new AbortController();
|
|
664
|
-
const abortCtx = { ...ctx, abortSignal: ac.signal };
|
|
665
|
-
|
|
666
|
-
const result = await executeSpawn({ program: "sleep", args: ["30"] }, abortCtx);
|
|
667
|
-
expect(result.success).toBe(true);
|
|
668
|
-
const data = result.data as { pid: number };
|
|
669
|
-
const pid = data.pid;
|
|
670
|
-
|
|
671
|
-
try {
|
|
672
|
-
// Process should be running
|
|
673
|
-
expect(() => process.kill(pid, 0)).not.toThrow();
|
|
674
|
-
|
|
675
|
-
// Abort the signal
|
|
676
|
-
ac.abort();
|
|
677
|
-
const waitResult = await executeWaitProcess({ pid, timeoutMs: 5_000 }, abortCtx);
|
|
678
|
-
expect(waitResult.success).toBe(true);
|
|
679
|
-
expect(() => process.kill(pid, 0)).toThrow();
|
|
680
|
-
} finally {
|
|
681
|
-
try {
|
|
682
|
-
process.kill(pid, "SIGKILL");
|
|
683
|
-
} catch {
|
|
684
|
-
// Process may already be dead
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
}, 10000);
|
|
688
|
-
});
|
|
689
|
-
});
|
|
690
|
-
});
|