@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,683 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @aria/tools - Meta executor tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for ask_user, quest_update, and quest_list executors.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
8
|
-
import type {
|
|
9
|
-
ToolContext,
|
|
10
|
-
QuestStoreRef,
|
|
11
|
-
QuestStoreItem,
|
|
12
|
-
QuestStoreStatus,
|
|
13
|
-
} from "../../src/types.js";
|
|
14
|
-
import {
|
|
15
|
-
executeAskUser,
|
|
16
|
-
executeQuestUpdate,
|
|
17
|
-
executeQuestList,
|
|
18
|
-
resetAskUserCounter,
|
|
19
|
-
} from "../../src/executors/meta.js";
|
|
20
|
-
|
|
21
|
-
// Helper to create a mock QuestStore
|
|
22
|
-
const createMockQuestStore = (): QuestStoreRef & { _quests: Map<string, QuestStoreItem> } => {
|
|
23
|
-
const quests = new Map<string, QuestStoreItem>();
|
|
24
|
-
return {
|
|
25
|
-
_quests: quests,
|
|
26
|
-
createQuest: vi.fn(
|
|
27
|
-
(input: {
|
|
28
|
-
id: string;
|
|
29
|
-
title: string;
|
|
30
|
-
description?: string;
|
|
31
|
-
priority?: number;
|
|
32
|
-
status?: QuestStoreStatus;
|
|
33
|
-
progress?: string;
|
|
34
|
-
blockedBy?: string;
|
|
35
|
-
}) => {
|
|
36
|
-
const now = Date.now();
|
|
37
|
-
const quest: QuestStoreItem = {
|
|
38
|
-
id: input.id,
|
|
39
|
-
title: input.title,
|
|
40
|
-
description: input.description,
|
|
41
|
-
priority: input.priority ?? 2,
|
|
42
|
-
status: input.status ?? "open",
|
|
43
|
-
progress: input.progress ?? "",
|
|
44
|
-
blockedBy: input.blockedBy,
|
|
45
|
-
attempts: 0,
|
|
46
|
-
createdAt: now,
|
|
47
|
-
updatedAt: now,
|
|
48
|
-
};
|
|
49
|
-
quests.set(input.id, quest);
|
|
50
|
-
return quest;
|
|
51
|
-
},
|
|
52
|
-
),
|
|
53
|
-
updateQuest: vi.fn(
|
|
54
|
-
(
|
|
55
|
-
id: string,
|
|
56
|
-
updates: Partial<{
|
|
57
|
-
title: string;
|
|
58
|
-
description: string;
|
|
59
|
-
priority: number;
|
|
60
|
-
status: QuestStoreStatus;
|
|
61
|
-
progress: string;
|
|
62
|
-
blockedBy: string;
|
|
63
|
-
}>,
|
|
64
|
-
) => {
|
|
65
|
-
const existing = quests.get(id);
|
|
66
|
-
if (!existing) throw new Error(`Quest not found: ${id}`);
|
|
67
|
-
// Match real QuestStore behavior: only apply non-undefined fields
|
|
68
|
-
const updated: QuestStoreItem = { ...existing, updatedAt: Date.now() };
|
|
69
|
-
for (const [key, value] of Object.entries(updates)) {
|
|
70
|
-
if (value !== undefined) (updated as Record<string, unknown>)[key] = value;
|
|
71
|
-
}
|
|
72
|
-
quests.set(id, updated);
|
|
73
|
-
return updated;
|
|
74
|
-
},
|
|
75
|
-
),
|
|
76
|
-
getQuest: vi.fn((id: string) => quests.get(id) ?? null),
|
|
77
|
-
listQuests: vi.fn((filter?: { status?: string }) => {
|
|
78
|
-
const all = Array.from(quests.values());
|
|
79
|
-
if (filter?.status) return all.filter((q) => q.status === filter.status);
|
|
80
|
-
return all;
|
|
81
|
-
}),
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
// Helper to create a base context
|
|
86
|
-
const createContext = (overrides?: Partial<ToolContext>): ToolContext => ({
|
|
87
|
-
workingDir: "/test/dir",
|
|
88
|
-
env: {},
|
|
89
|
-
confirm: async () => true,
|
|
90
|
-
...overrides,
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
describe("Meta Executors", () => {
|
|
94
|
-
describe("executeAskUser", () => {
|
|
95
|
-
beforeEach(() => {
|
|
96
|
-
resetAskUserCounter();
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it("returns answers when userInteraction is wired", async () => {
|
|
100
|
-
const mockAsk = vi.fn().mockResolvedValue([{ answer: "yes" }, { answer: "blue" }]);
|
|
101
|
-
const ctx = createContext({
|
|
102
|
-
userInteraction: { ask: mockAsk },
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const result = await executeAskUser(
|
|
106
|
-
{
|
|
107
|
-
questions: [
|
|
108
|
-
{ question: "Continue?", options: ["yes", "no"] },
|
|
109
|
-
{ question: "Favorite color?" },
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
ctx,
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
expect(result.success).toBe(true);
|
|
116
|
-
expect(result.message).toContain("2 answers");
|
|
117
|
-
expect((result.data as { answers: unknown[] }).answers).toHaveLength(2);
|
|
118
|
-
expect(mockAsk).toHaveBeenCalledWith([
|
|
119
|
-
{ question: "Continue?", options: ["yes", "no"] },
|
|
120
|
-
{ question: "Favorite color?" },
|
|
121
|
-
]);
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it("returns graceful error when userInteraction is not wired", async () => {
|
|
125
|
-
const ctx = createContext(); // no userInteraction
|
|
126
|
-
|
|
127
|
-
const result = await executeAskUser({ questions: [{ question: "Hello?" }] }, ctx);
|
|
128
|
-
|
|
129
|
-
expect(result.success).toBe(false);
|
|
130
|
-
expect(result.message).toContain("not available");
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it("rate limits: 4th call returns error (max 3 per turn)", async () => {
|
|
134
|
-
const mockAsk = vi.fn().mockResolvedValue([{ answer: "ok" }]);
|
|
135
|
-
const ctx = createContext({
|
|
136
|
-
userInteraction: { ask: mockAsk },
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
const input = { questions: [{ question: "test?" }] };
|
|
140
|
-
|
|
141
|
-
// First 3 calls succeed
|
|
142
|
-
const r1 = await executeAskUser(input, ctx);
|
|
143
|
-
expect(r1.success).toBe(true);
|
|
144
|
-
|
|
145
|
-
const r2 = await executeAskUser(input, ctx);
|
|
146
|
-
expect(r2.success).toBe(true);
|
|
147
|
-
|
|
148
|
-
const r3 = await executeAskUser(input, ctx);
|
|
149
|
-
expect(r3.success).toBe(true);
|
|
150
|
-
|
|
151
|
-
// 4th call is rate-limited
|
|
152
|
-
const r4 = await executeAskUser(input, ctx);
|
|
153
|
-
expect(r4.success).toBe(false);
|
|
154
|
-
expect(r4.message).toContain("Rate limit");
|
|
155
|
-
expect(r4.message).toContain("3");
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it("rejects empty questions array", async () => {
|
|
159
|
-
const ctx = createContext({
|
|
160
|
-
userInteraction: { ask: vi.fn() },
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
const result = await executeAskUser({ questions: [] }, ctx);
|
|
164
|
-
|
|
165
|
-
expect(result.success).toBe(false);
|
|
166
|
-
expect(result.message).toContain("required");
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
it("handles abort signal", async () => {
|
|
170
|
-
const controller = new AbortController();
|
|
171
|
-
controller.abort();
|
|
172
|
-
const ctx = createContext({
|
|
173
|
-
userInteraction: { ask: vi.fn() },
|
|
174
|
-
abortSignal: controller.signal,
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
const result = await executeAskUser({ questions: [{ question: "test?" }] }, ctx);
|
|
178
|
-
|
|
179
|
-
expect(result.success).toBe(false);
|
|
180
|
-
expect(result.message).toContain("cancelled");
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
it("does not burn ask_user quota when answers are exhausted mid-resume", async () => {
|
|
184
|
-
let invocationCount = 0;
|
|
185
|
-
const mockAsk = vi.fn(async () => {
|
|
186
|
-
invocationCount++;
|
|
187
|
-
if (invocationCount === 1) {
|
|
188
|
-
const error = new Error("ask_user requested more answers than provided.");
|
|
189
|
-
Object.assign(error, {
|
|
190
|
-
code: "ASK_USER_ANSWERS_EXHAUSTED",
|
|
191
|
-
questions: [{ question: "Choose a deployment region" }],
|
|
192
|
-
});
|
|
193
|
-
throw error;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return [{ answer: "us-east-1" }];
|
|
197
|
-
});
|
|
198
|
-
const askUserCallCounter = { count: 0 };
|
|
199
|
-
const ctx = createContext({
|
|
200
|
-
userInteraction: { ask: mockAsk },
|
|
201
|
-
askUserCallCounter,
|
|
202
|
-
});
|
|
203
|
-
const input = { questions: [{ question: "Choose a deployment region" }] };
|
|
204
|
-
|
|
205
|
-
await expect(executeAskUser(input, ctx)).rejects.toMatchObject({
|
|
206
|
-
code: "ASK_USER_ANSWERS_EXHAUSTED",
|
|
207
|
-
});
|
|
208
|
-
expect(askUserCallCounter.count).toBe(0);
|
|
209
|
-
|
|
210
|
-
const result1 = await executeAskUser(input, ctx);
|
|
211
|
-
const result2 = await executeAskUser(input, ctx);
|
|
212
|
-
const result3 = await executeAskUser(input, ctx);
|
|
213
|
-
const result4 = await executeAskUser(input, ctx);
|
|
214
|
-
|
|
215
|
-
expect(result1.success).toBe(true);
|
|
216
|
-
expect(result2.success).toBe(true);
|
|
217
|
-
expect(result3.success).toBe(true);
|
|
218
|
-
expect(result4.success).toBe(false);
|
|
219
|
-
expect(result4.message).toContain("Rate limit");
|
|
220
|
-
expect(askUserCallCounter.count).toBe(3);
|
|
221
|
-
expect(mockAsk).toHaveBeenCalledTimes(4);
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
it("still burns ask_user quota when the prompt attempt fails for non-exhaustion reasons", async () => {
|
|
225
|
-
const mockAsk = vi.fn(async () => {
|
|
226
|
-
throw new Error("socket closed");
|
|
227
|
-
});
|
|
228
|
-
const askUserCallCounter = { count: 0 };
|
|
229
|
-
const ctx = createContext({
|
|
230
|
-
userInteraction: { ask: mockAsk },
|
|
231
|
-
askUserCallCounter,
|
|
232
|
-
});
|
|
233
|
-
const input = { questions: [{ question: "Choose a deployment region" }] };
|
|
234
|
-
|
|
235
|
-
const result1 = await executeAskUser(input, ctx);
|
|
236
|
-
const result2 = await executeAskUser(input, ctx);
|
|
237
|
-
const result3 = await executeAskUser(input, ctx);
|
|
238
|
-
const result4 = await executeAskUser(input, ctx);
|
|
239
|
-
|
|
240
|
-
expect(result1.success).toBe(false);
|
|
241
|
-
expect(result1.message).toContain("socket closed");
|
|
242
|
-
expect(result2.success).toBe(false);
|
|
243
|
-
expect(result3.success).toBe(false);
|
|
244
|
-
expect(result4.success).toBe(false);
|
|
245
|
-
expect(result4.message).toContain("Rate limit");
|
|
246
|
-
expect(askUserCallCounter.count).toBe(3);
|
|
247
|
-
expect(mockAsk).toHaveBeenCalledTimes(3);
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
describe("executeQuestUpdate", () => {
|
|
252
|
-
let mockQuestStore: ReturnType<typeof createMockQuestStore>;
|
|
253
|
-
|
|
254
|
-
beforeEach(() => {
|
|
255
|
-
mockQuestStore = createMockQuestStore();
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
it("creates a quest with auto-generated ID when no id provided", async () => {
|
|
259
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
260
|
-
|
|
261
|
-
const result = await executeQuestUpdate(
|
|
262
|
-
{
|
|
263
|
-
quests: [{ title: "Fix the bug", status: "open" }],
|
|
264
|
-
},
|
|
265
|
-
ctx,
|
|
266
|
-
);
|
|
267
|
-
|
|
268
|
-
expect(result.success).toBe(true);
|
|
269
|
-
expect(result.message).toContain("1 created");
|
|
270
|
-
const data = result.data as { quests: Array<{ id: string; action: string }> };
|
|
271
|
-
expect(data.quests).toHaveLength(1);
|
|
272
|
-
expect(data.quests[0]!.id).toMatch(/^quest_/);
|
|
273
|
-
expect(data.quests[0]!.action).toBe("created");
|
|
274
|
-
expect(mockQuestStore.createQuest).toHaveBeenCalled();
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it("updates existing quest when id is provided", async () => {
|
|
278
|
-
// Pre-seed a quest
|
|
279
|
-
mockQuestStore.createQuest({
|
|
280
|
-
id: "quest_abc123",
|
|
281
|
-
title: "Old title",
|
|
282
|
-
status: "open",
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
286
|
-
|
|
287
|
-
const result = await executeQuestUpdate(
|
|
288
|
-
{
|
|
289
|
-
quests: [{ id: "quest_abc123", title: "Updated title", status: "active" }],
|
|
290
|
-
},
|
|
291
|
-
ctx,
|
|
292
|
-
);
|
|
293
|
-
|
|
294
|
-
expect(result.success).toBe(true);
|
|
295
|
-
expect(result.message).toContain("1 updated");
|
|
296
|
-
const data = result.data as { quests: Array<{ id: string; action: string }> };
|
|
297
|
-
expect(data.quests[0]!.action).toBe("updated");
|
|
298
|
-
expect(mockQuestStore.updateQuest).toHaveBeenCalledWith(
|
|
299
|
-
"quest_abc123",
|
|
300
|
-
expect.objectContaining({
|
|
301
|
-
title: "Updated title",
|
|
302
|
-
status: "active",
|
|
303
|
-
}),
|
|
304
|
-
);
|
|
305
|
-
});
|
|
306
|
-
|
|
307
|
-
it("returns error when questStore is not available", async () => {
|
|
308
|
-
const ctx = createContext(); // no questStore
|
|
309
|
-
|
|
310
|
-
const result = await executeQuestUpdate(
|
|
311
|
-
{
|
|
312
|
-
quests: [{ title: "No store", status: "open" }],
|
|
313
|
-
},
|
|
314
|
-
ctx,
|
|
315
|
-
);
|
|
316
|
-
|
|
317
|
-
expect(result.success).toBe(false);
|
|
318
|
-
expect(result.message).toContain("QuestStore is not available");
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
it("rejects empty quests array", async () => {
|
|
322
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
323
|
-
|
|
324
|
-
const result = await executeQuestUpdate({ quests: [] }, ctx);
|
|
325
|
-
|
|
326
|
-
expect(result.success).toBe(false);
|
|
327
|
-
expect(result.message).toContain("required");
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
it("reports failure when updating non-existent quest", async () => {
|
|
331
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
332
|
-
|
|
333
|
-
const result = await executeQuestUpdate(
|
|
334
|
-
{
|
|
335
|
-
quests: [{ id: "quest_nonexistent", title: "Ghost", status: "active" }],
|
|
336
|
-
},
|
|
337
|
-
ctx,
|
|
338
|
-
);
|
|
339
|
-
|
|
340
|
-
// All quests failed → result is failure
|
|
341
|
-
expect(result.success).toBe(false);
|
|
342
|
-
expect(result.message).toContain("failed");
|
|
343
|
-
const data = result.data as { quests: Array<{ action: string; error?: string }> };
|
|
344
|
-
expect(data.quests[0]!.action).toBe("failed");
|
|
345
|
-
expect(data.quests[0]!.error).toContain("Quest not found");
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
it("creates quest with priority and blockedBy", async () => {
|
|
349
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
350
|
-
|
|
351
|
-
const result = await executeQuestUpdate(
|
|
352
|
-
{
|
|
353
|
-
quests: [
|
|
354
|
-
{
|
|
355
|
-
title: "Blocked task",
|
|
356
|
-
status: "blocked",
|
|
357
|
-
priority: 1,
|
|
358
|
-
blocked_by: "quest_xyz",
|
|
359
|
-
},
|
|
360
|
-
],
|
|
361
|
-
},
|
|
362
|
-
ctx,
|
|
363
|
-
);
|
|
364
|
-
|
|
365
|
-
expect(result.success).toBe(true);
|
|
366
|
-
expect(mockQuestStore.createQuest).toHaveBeenCalledWith(
|
|
367
|
-
expect.objectContaining({
|
|
368
|
-
title: "Blocked task",
|
|
369
|
-
status: "blocked",
|
|
370
|
-
priority: 1,
|
|
371
|
-
blockedBy: "quest_xyz",
|
|
372
|
-
}),
|
|
373
|
-
);
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
// P1-3: Runtime status validation
|
|
377
|
-
it("rejects invalid status values", async () => {
|
|
378
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
379
|
-
|
|
380
|
-
const result = await executeQuestUpdate(
|
|
381
|
-
{
|
|
382
|
-
quests: [{ title: "Bad status", status: "invalid_status" as QuestStoreStatus }],
|
|
383
|
-
},
|
|
384
|
-
ctx,
|
|
385
|
-
);
|
|
386
|
-
|
|
387
|
-
expect(result.success).toBe(false);
|
|
388
|
-
expect(result.message).toContain("failed");
|
|
389
|
-
const data = result.data as { quests: Array<{ action: string; error?: string }> };
|
|
390
|
-
expect(data.quests[0]!.action).toBe("failed");
|
|
391
|
-
expect(data.quests[0]!.error).toContain("Invalid status");
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
// P0-2: Mixed batch — some succeed, some fail
|
|
395
|
-
it("continues processing batch when one quest fails", async () => {
|
|
396
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
397
|
-
|
|
398
|
-
const result = await executeQuestUpdate(
|
|
399
|
-
{
|
|
400
|
-
quests: [
|
|
401
|
-
{ title: "Good quest", status: "open" },
|
|
402
|
-
{ id: "quest_doesnt_exist", title: "Will fail", status: "active" },
|
|
403
|
-
{ title: "Another good one", status: "open" },
|
|
404
|
-
],
|
|
405
|
-
},
|
|
406
|
-
ctx,
|
|
407
|
-
);
|
|
408
|
-
|
|
409
|
-
// Partial success — not all failed
|
|
410
|
-
expect(result.success).toBe(true);
|
|
411
|
-
expect(result.message).toContain("2 created");
|
|
412
|
-
expect(result.message).toContain("1 failed");
|
|
413
|
-
expect(result.message).toContain("partial failure");
|
|
414
|
-
const data = result.data as {
|
|
415
|
-
quests: Array<{ action: string; title: string; error?: string }>;
|
|
416
|
-
};
|
|
417
|
-
expect(data.quests).toHaveLength(3);
|
|
418
|
-
expect(data.quests[0]!.action).toBe("created");
|
|
419
|
-
expect(data.quests[1]!.action).toBe("failed");
|
|
420
|
-
expect(data.quests[2]!.action).toBe("created");
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
// P0-1: Notes map to progress consistently on create
|
|
424
|
-
it("maps notes to progress on create", async () => {
|
|
425
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
426
|
-
|
|
427
|
-
await executeQuestUpdate(
|
|
428
|
-
{
|
|
429
|
-
quests: [{ title: "Quest with notes", status: "open", notes: "Some progress info" }],
|
|
430
|
-
},
|
|
431
|
-
ctx,
|
|
432
|
-
);
|
|
433
|
-
|
|
434
|
-
expect(mockQuestStore.createQuest).toHaveBeenCalledWith(
|
|
435
|
-
expect.objectContaining({
|
|
436
|
-
progress: "Some progress info",
|
|
437
|
-
}),
|
|
438
|
-
);
|
|
439
|
-
// Should NOT map notes to description
|
|
440
|
-
const callArg = (mockQuestStore.createQuest as ReturnType<typeof vi.fn>).mock.calls[0][0];
|
|
441
|
-
expect(callArg.description).toBeUndefined();
|
|
442
|
-
});
|
|
443
|
-
|
|
444
|
-
// P0-1: Notes map to progress consistently on update
|
|
445
|
-
it("maps notes to progress on update", async () => {
|
|
446
|
-
mockQuestStore.createQuest({
|
|
447
|
-
id: "quest_progress",
|
|
448
|
-
title: "Test quest",
|
|
449
|
-
status: "open",
|
|
450
|
-
});
|
|
451
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
452
|
-
|
|
453
|
-
await executeQuestUpdate(
|
|
454
|
-
{
|
|
455
|
-
quests: [
|
|
456
|
-
{ id: "quest_progress", title: "Test quest", status: "active", notes: "Now active" },
|
|
457
|
-
],
|
|
458
|
-
},
|
|
459
|
-
ctx,
|
|
460
|
-
);
|
|
461
|
-
|
|
462
|
-
expect(mockQuestStore.updateQuest).toHaveBeenCalledWith(
|
|
463
|
-
"quest_progress",
|
|
464
|
-
expect.objectContaining({
|
|
465
|
-
progress: "Now active",
|
|
466
|
-
}),
|
|
467
|
-
);
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
// P1-5: Priority round-trips correctly
|
|
471
|
-
it("round-trips priority through create → list", async () => {
|
|
472
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
473
|
-
|
|
474
|
-
await executeQuestUpdate(
|
|
475
|
-
{
|
|
476
|
-
quests: [{ title: "Critical", status: "open", priority: 0 }],
|
|
477
|
-
},
|
|
478
|
-
ctx,
|
|
479
|
-
);
|
|
480
|
-
|
|
481
|
-
const listResult = await executeQuestList({}, ctx);
|
|
482
|
-
const data = listResult.data as { quests: Array<{ priority: number }> };
|
|
483
|
-
expect(data.quests[0]!.priority).toBe(0);
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
// R4: Create without title fails
|
|
487
|
-
it("rejects quest creation without title", async () => {
|
|
488
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
489
|
-
|
|
490
|
-
const result = await executeQuestUpdate(
|
|
491
|
-
{
|
|
492
|
-
quests: [{ status: "open" }],
|
|
493
|
-
},
|
|
494
|
-
ctx,
|
|
495
|
-
);
|
|
496
|
-
|
|
497
|
-
expect(result.success).toBe(false);
|
|
498
|
-
const data = result.data as { quests: Array<{ action: string; error?: string }> };
|
|
499
|
-
expect(data.quests[0]!.action).toBe("failed");
|
|
500
|
-
expect(data.quests[0]!.error).toContain("title is required");
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
// R4: Create defaults status to "open" when not specified
|
|
504
|
-
it("defaults status to open when creating without status", async () => {
|
|
505
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
506
|
-
|
|
507
|
-
const result = await executeQuestUpdate(
|
|
508
|
-
{
|
|
509
|
-
quests: [{ title: "No status quest" }],
|
|
510
|
-
},
|
|
511
|
-
ctx,
|
|
512
|
-
);
|
|
513
|
-
|
|
514
|
-
expect(result.success).toBe(true);
|
|
515
|
-
const data = result.data as { quests: Array<{ status: string }> };
|
|
516
|
-
expect(data.quests[0]!.status).toBe("open");
|
|
517
|
-
expect(mockQuestStore.createQuest).toHaveBeenCalledWith(
|
|
518
|
-
expect.objectContaining({ status: "open" }),
|
|
519
|
-
);
|
|
520
|
-
});
|
|
521
|
-
|
|
522
|
-
// R4: Partial update — only status, preserves title
|
|
523
|
-
it("updates only status without overwriting title", async () => {
|
|
524
|
-
mockQuestStore.createQuest({
|
|
525
|
-
id: "quest_partial",
|
|
526
|
-
title: "Original title",
|
|
527
|
-
status: "open",
|
|
528
|
-
});
|
|
529
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
530
|
-
|
|
531
|
-
const result = await executeQuestUpdate(
|
|
532
|
-
{
|
|
533
|
-
quests: [{ id: "quest_partial", status: "active" }],
|
|
534
|
-
},
|
|
535
|
-
ctx,
|
|
536
|
-
);
|
|
537
|
-
|
|
538
|
-
expect(result.success).toBe(true);
|
|
539
|
-
const data = result.data as { quests: Array<{ title: string; status: string }> };
|
|
540
|
-
expect(data.quests[0]!.title).toBe("Original title");
|
|
541
|
-
expect(data.quests[0]!.status).toBe("active");
|
|
542
|
-
// updateQuest should NOT have title in the updates
|
|
543
|
-
expect(mockQuestStore.updateQuest).toHaveBeenCalledWith("quest_partial", {
|
|
544
|
-
status: "active",
|
|
545
|
-
});
|
|
546
|
-
});
|
|
547
|
-
|
|
548
|
-
// R4: Partial update — only notes, preserves title and status
|
|
549
|
-
it("updates only notes without overwriting other fields", async () => {
|
|
550
|
-
mockQuestStore.createQuest({
|
|
551
|
-
id: "quest_notes_only",
|
|
552
|
-
title: "Keep this title",
|
|
553
|
-
status: "active",
|
|
554
|
-
progress: "Old progress",
|
|
555
|
-
});
|
|
556
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
557
|
-
|
|
558
|
-
const result = await executeQuestUpdate(
|
|
559
|
-
{
|
|
560
|
-
quests: [{ id: "quest_notes_only", notes: "New progress" }],
|
|
561
|
-
},
|
|
562
|
-
ctx,
|
|
563
|
-
);
|
|
564
|
-
|
|
565
|
-
expect(result.success).toBe(true);
|
|
566
|
-
// Should only pass progress to updateQuest, not title or status
|
|
567
|
-
expect(mockQuestStore.updateQuest).toHaveBeenCalledWith("quest_notes_only", {
|
|
568
|
-
progress: "New progress",
|
|
569
|
-
});
|
|
570
|
-
// Title should be preserved from the store
|
|
571
|
-
const data = result.data as { quests: Array<{ title: string; status: string }> };
|
|
572
|
-
expect(data.quests[0]!.title).toBe("Keep this title");
|
|
573
|
-
expect(data.quests[0]!.status).toBe("active");
|
|
574
|
-
});
|
|
575
|
-
|
|
576
|
-
// P1-5: Abort signal for quest update
|
|
577
|
-
it("handles abort signal", async () => {
|
|
578
|
-
const controller = new AbortController();
|
|
579
|
-
controller.abort();
|
|
580
|
-
const ctx = createContext({
|
|
581
|
-
questStore: mockQuestStore,
|
|
582
|
-
abortSignal: controller.signal,
|
|
583
|
-
});
|
|
584
|
-
|
|
585
|
-
const result = await executeQuestUpdate(
|
|
586
|
-
{
|
|
587
|
-
quests: [{ title: "Will not run", status: "open" }],
|
|
588
|
-
},
|
|
589
|
-
ctx,
|
|
590
|
-
);
|
|
591
|
-
|
|
592
|
-
expect(result.success).toBe(false);
|
|
593
|
-
expect(result.message).toContain("cancelled");
|
|
594
|
-
});
|
|
595
|
-
});
|
|
596
|
-
|
|
597
|
-
describe("executeQuestList", () => {
|
|
598
|
-
let mockQuestStore: ReturnType<typeof createMockQuestStore>;
|
|
599
|
-
|
|
600
|
-
beforeEach(() => {
|
|
601
|
-
mockQuestStore = createMockQuestStore();
|
|
602
|
-
});
|
|
603
|
-
|
|
604
|
-
it("lists quests from QuestStore", async () => {
|
|
605
|
-
mockQuestStore.createQuest({ id: "quest_a", title: "Fix bug", status: "open" });
|
|
606
|
-
mockQuestStore.createQuest({ id: "quest_b", title: "Add feature", status: "active" });
|
|
607
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
608
|
-
|
|
609
|
-
const result = await executeQuestList({}, ctx);
|
|
610
|
-
|
|
611
|
-
expect(result.success).toBe(true);
|
|
612
|
-
expect(result.message).toContain("2 quests");
|
|
613
|
-
const data = result.data as { quests: unknown[]; count: number };
|
|
614
|
-
expect(data.count).toBe(2);
|
|
615
|
-
expect(data.quests).toHaveLength(2);
|
|
616
|
-
});
|
|
617
|
-
|
|
618
|
-
it("filters by status", async () => {
|
|
619
|
-
mockQuestStore.createQuest({ id: "quest_a", title: "Fix bug", status: "open" });
|
|
620
|
-
mockQuestStore.createQuest({ id: "quest_b", title: "Done feature", status: "done" });
|
|
621
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
622
|
-
|
|
623
|
-
const result = await executeQuestList({ status: "open" }, ctx);
|
|
624
|
-
|
|
625
|
-
expect(result.success).toBe(true);
|
|
626
|
-
const data = result.data as { quests: Array<{ id: string }>; count: number };
|
|
627
|
-
expect(data.count).toBe(1);
|
|
628
|
-
expect(data.quests[0]!.id).toBe("quest_a");
|
|
629
|
-
});
|
|
630
|
-
|
|
631
|
-
it("returns error when questStore is not available", async () => {
|
|
632
|
-
const ctx = createContext(); // no questStore
|
|
633
|
-
|
|
634
|
-
const result = await executeQuestList({}, ctx);
|
|
635
|
-
|
|
636
|
-
expect(result.success).toBe(false);
|
|
637
|
-
expect(result.message).toContain("QuestStore is not available");
|
|
638
|
-
});
|
|
639
|
-
|
|
640
|
-
it("returns empty list when no quests exist", async () => {
|
|
641
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
642
|
-
|
|
643
|
-
const result = await executeQuestList({}, ctx);
|
|
644
|
-
|
|
645
|
-
expect(result.success).toBe(true);
|
|
646
|
-
const data = result.data as { quests: unknown[]; count: number };
|
|
647
|
-
expect(data.count).toBe(0);
|
|
648
|
-
expect(data.quests).toHaveLength(0);
|
|
649
|
-
});
|
|
650
|
-
|
|
651
|
-
// P1-5: Abort signal for quest list
|
|
652
|
-
it("handles abort signal", async () => {
|
|
653
|
-
const controller = new AbortController();
|
|
654
|
-
controller.abort();
|
|
655
|
-
const ctx = createContext({
|
|
656
|
-
questStore: mockQuestStore,
|
|
657
|
-
abortSignal: controller.signal,
|
|
658
|
-
});
|
|
659
|
-
|
|
660
|
-
const result = await executeQuestList({}, ctx);
|
|
661
|
-
|
|
662
|
-
expect(result.success).toBe(false);
|
|
663
|
-
expect(result.message).toContain("cancelled");
|
|
664
|
-
});
|
|
665
|
-
|
|
666
|
-
// P0-1: Notes from list come from progress, not description
|
|
667
|
-
it("returns notes from progress field, not description", async () => {
|
|
668
|
-
mockQuestStore.createQuest({
|
|
669
|
-
id: "quest_notes",
|
|
670
|
-
title: "Test",
|
|
671
|
-
status: "open",
|
|
672
|
-
description: "Some description",
|
|
673
|
-
progress: "Actual progress",
|
|
674
|
-
});
|
|
675
|
-
const ctx = createContext({ questStore: mockQuestStore });
|
|
676
|
-
|
|
677
|
-
const result = await executeQuestList({}, ctx);
|
|
678
|
-
const data = result.data as { quests: Array<{ notes: string }> };
|
|
679
|
-
// Notes should come from progress, NOT description
|
|
680
|
-
expect(data.quests[0]!.notes).toBe("Actual progress");
|
|
681
|
-
});
|
|
682
|
-
});
|
|
683
|
-
});
|