@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,144 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { JinaSearchProvider } from "../../src/providers/jina.js";
|
|
3
|
-
import type { SearchResult } from "../../src/providers/search-provider.js";
|
|
4
|
-
|
|
5
|
-
describe("JinaSearchProvider", () => {
|
|
6
|
-
let provider: JinaSearchProvider;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
provider = new JinaSearchProvider();
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
afterEach(() => {
|
|
13
|
-
vi.restoreAllMocks();
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("has correct provider metadata", () => {
|
|
17
|
-
expect(provider.name).toBe("jina");
|
|
18
|
-
expect(provider.requiresApiKey).toBe(false);
|
|
19
|
-
expect(provider.priority).toBe(5);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it("isAvailable returns true (no API key required)", () => {
|
|
23
|
-
// Jina's free tier doesn't require an API key
|
|
24
|
-
const available = provider.isAvailable();
|
|
25
|
-
expect(available).toBe(true);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it("returns SearchResult[] on success", async () => {
|
|
29
|
-
const mockResults: SearchResult[] = [
|
|
30
|
-
{
|
|
31
|
-
title: "TypeScript Handbook",
|
|
32
|
-
url: "https://www.typescriptlang.org/docs/handbook",
|
|
33
|
-
content: "The TypeScript Handbook is a comprehensive guide to the TypeScript language.",
|
|
34
|
-
score: 0.95,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
title: "TypeScript GitHub",
|
|
38
|
-
url: "https://github.com/microsoft/TypeScript",
|
|
39
|
-
content: "TypeScript is a superset of JavaScript that compiles to clean JavaScript output.",
|
|
40
|
-
score: 0.88,
|
|
41
|
-
},
|
|
42
|
-
];
|
|
43
|
-
|
|
44
|
-
// Mock global fetch to simulate Jina API response
|
|
45
|
-
vi.stubGlobal(
|
|
46
|
-
"fetch",
|
|
47
|
-
vi.fn().mockResolvedValue({
|
|
48
|
-
ok: true,
|
|
49
|
-
status: 200,
|
|
50
|
-
json: async () => ({
|
|
51
|
-
data: mockResults.map((r) => ({
|
|
52
|
-
title: r.title,
|
|
53
|
-
url: r.url,
|
|
54
|
-
content: r.content,
|
|
55
|
-
score: r.score,
|
|
56
|
-
})),
|
|
57
|
-
}),
|
|
58
|
-
}),
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
const results = await provider.search("TypeScript");
|
|
62
|
-
expect(results).toBeInstanceOf(Array);
|
|
63
|
-
expect(results.length).toBeGreaterThan(0);
|
|
64
|
-
for (const result of results) {
|
|
65
|
-
expect(result).toHaveProperty("title");
|
|
66
|
-
expect(result).toHaveProperty("url");
|
|
67
|
-
expect(result).toHaveProperty("content");
|
|
68
|
-
expect(typeof result.title).toBe("string");
|
|
69
|
-
expect(typeof result.url).toBe("string");
|
|
70
|
-
expect(typeof result.content).toBe("string");
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it("respects limit option", async () => {
|
|
75
|
-
vi.stubGlobal(
|
|
76
|
-
"fetch",
|
|
77
|
-
vi.fn().mockResolvedValue({
|
|
78
|
-
ok: true,
|
|
79
|
-
status: 200,
|
|
80
|
-
json: async () => ({
|
|
81
|
-
data: [{ title: "Result 1", url: "https://example.com/1", content: "Content 1" }],
|
|
82
|
-
}),
|
|
83
|
-
}),
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
const results = await provider.search("TypeScript", { limit: 1 });
|
|
87
|
-
expect(results.length).toBeLessThanOrEqual(1);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it("handles API errors (4xx/5xx)", async () => {
|
|
91
|
-
vi.stubGlobal(
|
|
92
|
-
"fetch",
|
|
93
|
-
vi.fn().mockResolvedValue({
|
|
94
|
-
ok: false,
|
|
95
|
-
status: 500,
|
|
96
|
-
statusText: "Internal Server Error",
|
|
97
|
-
}),
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
await expect(provider.search("test query")).rejects.toThrow();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it("handles 429 rate limit errors", async () => {
|
|
104
|
-
vi.stubGlobal(
|
|
105
|
-
"fetch",
|
|
106
|
-
vi.fn().mockResolvedValue({
|
|
107
|
-
ok: false,
|
|
108
|
-
status: 429,
|
|
109
|
-
statusText: "Too Many Requests",
|
|
110
|
-
}),
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
await expect(provider.search("test query")).rejects.toThrow();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it("returns empty array for no results", async () => {
|
|
117
|
-
vi.stubGlobal(
|
|
118
|
-
"fetch",
|
|
119
|
-
vi.fn().mockResolvedValue({
|
|
120
|
-
ok: true,
|
|
121
|
-
status: 200,
|
|
122
|
-
json: async () => ({ data: [] }),
|
|
123
|
-
}),
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
const results = await provider.search("xyzzy_nonexistent_query_12345");
|
|
127
|
-
expect(results).toEqual([]);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("handles network timeout", async () => {
|
|
131
|
-
vi.stubGlobal(
|
|
132
|
-
"fetch",
|
|
133
|
-
vi.fn().mockRejectedValue(new DOMException("The operation was aborted", "AbortError")),
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
await expect(provider.search("test query")).rejects.toThrow();
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it("handles fetch network failure", async () => {
|
|
140
|
-
vi.stubGlobal("fetch", vi.fn().mockRejectedValue(new TypeError("Failed to fetch")));
|
|
141
|
-
|
|
142
|
-
await expect(provider.search("test query")).rejects.toThrow();
|
|
143
|
-
});
|
|
144
|
-
});
|
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { SearchProviderRouter } from "../../src/providers/router.js";
|
|
3
|
-
import { JinaSearchProvider } from "../../src/providers/jina.js";
|
|
4
|
-
import { DuckDuckGoSearchProvider } from "../../src/providers/duckduckgo.js";
|
|
5
|
-
import { TavilySearchProvider } from "../../src/providers/tavily.js";
|
|
6
|
-
import { BraveSearchProvider } from "../../src/providers/brave.js";
|
|
7
|
-
import { ExaSearchProvider } from "../../src/providers/exa.js";
|
|
8
|
-
import { FirecrawlSearchProvider } from "../../src/providers/firecrawl.js";
|
|
9
|
-
import type { SearchProvider, SearchResult } from "../../src/providers/search-provider.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Helper to create a mock provider with controllable availability and search behavior.
|
|
13
|
-
*/
|
|
14
|
-
function createMockProvider(
|
|
15
|
-
overrides: Partial<SearchProvider> & { name: string; priority: number },
|
|
16
|
-
): SearchProvider {
|
|
17
|
-
return {
|
|
18
|
-
requiresApiKey: false,
|
|
19
|
-
isAvailable: () => true,
|
|
20
|
-
search: vi.fn().mockResolvedValue([]),
|
|
21
|
-
...overrides,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
describe("SearchProviderRouter", () => {
|
|
26
|
-
afterEach(() => {
|
|
27
|
-
vi.restoreAllMocks();
|
|
28
|
-
vi.unstubAllEnvs();
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
describe("resolve()", () => {
|
|
32
|
-
it("selects highest-priority available provider", () => {
|
|
33
|
-
// Lower priority number = higher priority
|
|
34
|
-
const brave = createMockProvider({ name: "brave", priority: 1, isAvailable: () => true });
|
|
35
|
-
const firecrawl = createMockProvider({
|
|
36
|
-
name: "firecrawl",
|
|
37
|
-
priority: 2,
|
|
38
|
-
isAvailable: () => true,
|
|
39
|
-
});
|
|
40
|
-
const jina = createMockProvider({ name: "jina", priority: 5, isAvailable: () => true });
|
|
41
|
-
|
|
42
|
-
const router = new SearchProviderRouter([jina, brave, firecrawl]);
|
|
43
|
-
const selected = router.resolve();
|
|
44
|
-
|
|
45
|
-
expect(selected.name).toBe("brave");
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it("skips unavailable providers", () => {
|
|
49
|
-
const brave = createMockProvider({ name: "brave", priority: 1, isAvailable: () => false });
|
|
50
|
-
const firecrawl = createMockProvider({
|
|
51
|
-
name: "firecrawl",
|
|
52
|
-
priority: 2,
|
|
53
|
-
isAvailable: () => true,
|
|
54
|
-
});
|
|
55
|
-
const jina = createMockProvider({ name: "jina", priority: 5, isAvailable: () => true });
|
|
56
|
-
|
|
57
|
-
const router = new SearchProviderRouter([brave, firecrawl, jina]);
|
|
58
|
-
const selected = router.resolve();
|
|
59
|
-
|
|
60
|
-
expect(selected.name).toBe("firecrawl");
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("respects ARIA_SEARCH_PROVIDER override", () => {
|
|
64
|
-
vi.stubEnv("ARIA_SEARCH_PROVIDER", "jina");
|
|
65
|
-
|
|
66
|
-
const brave = createMockProvider({ name: "brave", priority: 1, isAvailable: () => true });
|
|
67
|
-
const jina = createMockProvider({ name: "jina", priority: 5, isAvailable: () => true });
|
|
68
|
-
|
|
69
|
-
const router = new SearchProviderRouter([brave, jina]);
|
|
70
|
-
const selected = router.resolve();
|
|
71
|
-
|
|
72
|
-
expect(selected.name).toBe("jina");
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it("throws if ARIA_SEARCH_PROVIDER override names unavailable provider", () => {
|
|
76
|
-
vi.stubEnv("ARIA_SEARCH_PROVIDER", "nonexistent");
|
|
77
|
-
|
|
78
|
-
const jina = createMockProvider({ name: "jina", priority: 5, isAvailable: () => true });
|
|
79
|
-
const router = new SearchProviderRouter([jina]);
|
|
80
|
-
|
|
81
|
-
expect(() => router.resolve()).toThrow();
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it("falls back to Jina when no API keys set", () => {
|
|
85
|
-
// All API-key providers are unavailable; Jina (no key required) should be selected
|
|
86
|
-
const brave = createMockProvider({
|
|
87
|
-
name: "brave",
|
|
88
|
-
priority: 1,
|
|
89
|
-
requiresApiKey: true,
|
|
90
|
-
isAvailable: () => false,
|
|
91
|
-
});
|
|
92
|
-
const tavily = createMockProvider({
|
|
93
|
-
name: "tavily",
|
|
94
|
-
priority: 4,
|
|
95
|
-
requiresApiKey: true,
|
|
96
|
-
isAvailable: () => false,
|
|
97
|
-
});
|
|
98
|
-
const jina = createMockProvider({
|
|
99
|
-
name: "jina",
|
|
100
|
-
priority: 5,
|
|
101
|
-
requiresApiKey: false,
|
|
102
|
-
isAvailable: () => true,
|
|
103
|
-
});
|
|
104
|
-
const duckduckgo = createMockProvider({
|
|
105
|
-
name: "duckduckgo",
|
|
106
|
-
priority: 6,
|
|
107
|
-
requiresApiKey: false,
|
|
108
|
-
isAvailable: () => true,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
const router = new SearchProviderRouter([brave, tavily, jina, duckduckgo]);
|
|
112
|
-
const selected = router.resolve();
|
|
113
|
-
|
|
114
|
-
// Jina has higher priority (5) than DuckDuckGo (6), so it should be selected
|
|
115
|
-
expect(selected.name).toBe("jina");
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it("throws when no providers are available", () => {
|
|
119
|
-
const unavailable = createMockProvider({
|
|
120
|
-
name: "dead",
|
|
121
|
-
priority: 1,
|
|
122
|
-
isAvailable: () => false,
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const router = new SearchProviderRouter([unavailable]);
|
|
126
|
-
|
|
127
|
-
expect(() => router.resolve()).toThrow();
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
describe("search()", () => {
|
|
132
|
-
it("delegates search to resolved provider", async () => {
|
|
133
|
-
const mockResults: SearchResult[] = [
|
|
134
|
-
{ title: "Test", url: "https://test.com", content: "Test content" },
|
|
135
|
-
];
|
|
136
|
-
const provider = createMockProvider({
|
|
137
|
-
name: "mock",
|
|
138
|
-
priority: 1,
|
|
139
|
-
search: vi.fn().mockResolvedValue(mockResults),
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
const router = new SearchProviderRouter([provider]);
|
|
143
|
-
const results = await router.search("test query");
|
|
144
|
-
|
|
145
|
-
expect(results).toEqual(mockResults);
|
|
146
|
-
expect(provider.search).toHaveBeenCalledWith("test query", undefined);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it("passes options through to the provider", async () => {
|
|
150
|
-
const searchFn = vi.fn().mockResolvedValue([]);
|
|
151
|
-
const provider = createMockProvider({
|
|
152
|
-
name: "mock",
|
|
153
|
-
priority: 1,
|
|
154
|
-
search: searchFn,
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
const router = new SearchProviderRouter([provider]);
|
|
158
|
-
await router.search("test", { limit: 5, topic: "news" });
|
|
159
|
-
|
|
160
|
-
expect(searchFn).toHaveBeenCalledWith("test", { limit: 5, topic: "news" });
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it("passes abort signal through to providers", async () => {
|
|
164
|
-
const searchFn = vi.fn().mockResolvedValue([]);
|
|
165
|
-
const provider = createMockProvider({
|
|
166
|
-
name: "mock",
|
|
167
|
-
priority: 1,
|
|
168
|
-
search: searchFn,
|
|
169
|
-
});
|
|
170
|
-
const signal = new AbortController().signal;
|
|
171
|
-
|
|
172
|
-
const router = new SearchProviderRouter([provider]);
|
|
173
|
-
await router.search("test", { limit: 5, signal });
|
|
174
|
-
|
|
175
|
-
expect(searchFn).toHaveBeenCalledWith("test", { limit: 5, signal });
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it("short-circuits when abort signal is already aborted", async () => {
|
|
179
|
-
const searchFn = vi.fn().mockResolvedValue([]);
|
|
180
|
-
const provider = createMockProvider({
|
|
181
|
-
name: "mock",
|
|
182
|
-
priority: 1,
|
|
183
|
-
search: searchFn,
|
|
184
|
-
});
|
|
185
|
-
const controller = new AbortController();
|
|
186
|
-
controller.abort();
|
|
187
|
-
|
|
188
|
-
const router = new SearchProviderRouter([provider]);
|
|
189
|
-
await expect(router.search("test", { signal: controller.signal })).rejects.toThrow(
|
|
190
|
-
"Search aborted",
|
|
191
|
-
);
|
|
192
|
-
expect(searchFn).not.toHaveBeenCalled();
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it("falls back to DuckDuckGo when Jina fails", async () => {
|
|
196
|
-
const jinaSearch = vi.fn().mockRejectedValue(new Error("Jina API error"));
|
|
197
|
-
const ddgResults: SearchResult[] = [
|
|
198
|
-
{ title: "DDG Result", url: "https://ddg.com", content: "Fallback content" },
|
|
199
|
-
];
|
|
200
|
-
const ddgSearch = vi.fn().mockResolvedValue(ddgResults);
|
|
201
|
-
|
|
202
|
-
const jina = createMockProvider({
|
|
203
|
-
name: "jina",
|
|
204
|
-
priority: 5,
|
|
205
|
-
search: jinaSearch,
|
|
206
|
-
});
|
|
207
|
-
const ddg = createMockProvider({
|
|
208
|
-
name: "duckduckgo",
|
|
209
|
-
priority: 6,
|
|
210
|
-
search: ddgSearch,
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
// Only these two free providers available
|
|
214
|
-
const router = new SearchProviderRouter([jina, ddg]);
|
|
215
|
-
const results = await router.search("test query");
|
|
216
|
-
|
|
217
|
-
expect(results).toEqual(ddgResults);
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it("circuit breaker: tries in priority order, skips failing providers", async () => {
|
|
221
|
-
const braveSearch = vi.fn().mockRejectedValue(new Error("Brave down"));
|
|
222
|
-
const firecrawlSearch = vi.fn().mockRejectedValue(new Error("Firecrawl down"));
|
|
223
|
-
const exaResults: SearchResult[] = [
|
|
224
|
-
{ title: "Exa Result", url: "https://exa.ai/r", content: "Found via Exa" },
|
|
225
|
-
];
|
|
226
|
-
const exaSearch = vi.fn().mockResolvedValue(exaResults);
|
|
227
|
-
|
|
228
|
-
const brave = createMockProvider({ name: "brave", priority: 1, search: braveSearch });
|
|
229
|
-
const firecrawl = createMockProvider({
|
|
230
|
-
name: "firecrawl",
|
|
231
|
-
priority: 2,
|
|
232
|
-
search: firecrawlSearch,
|
|
233
|
-
});
|
|
234
|
-
const exa = createMockProvider({ name: "exa", priority: 3, search: exaSearch });
|
|
235
|
-
|
|
236
|
-
const router = new SearchProviderRouter([brave, firecrawl, exa]);
|
|
237
|
-
const results = await router.search("important query");
|
|
238
|
-
|
|
239
|
-
// Should have tried brave first, then firecrawl, then exa
|
|
240
|
-
expect(braveSearch).toHaveBeenCalledTimes(1);
|
|
241
|
-
expect(firecrawlSearch).toHaveBeenCalledTimes(1);
|
|
242
|
-
expect(exaSearch).toHaveBeenCalledTimes(1);
|
|
243
|
-
expect(results).toEqual(exaResults);
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
it("all providers unavailable throws AggregateError", async () => {
|
|
247
|
-
const provider1 = createMockProvider({
|
|
248
|
-
name: "p1",
|
|
249
|
-
priority: 1,
|
|
250
|
-
search: vi.fn().mockRejectedValue(new Error("p1 failed")),
|
|
251
|
-
});
|
|
252
|
-
const provider2 = createMockProvider({
|
|
253
|
-
name: "p2",
|
|
254
|
-
priority: 2,
|
|
255
|
-
search: vi.fn().mockRejectedValue(new Error("p2 failed")),
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
const router = new SearchProviderRouter([provider1, provider2]);
|
|
259
|
-
|
|
260
|
-
try {
|
|
261
|
-
await router.search("doomed query");
|
|
262
|
-
expect.unreachable("Should have thrown");
|
|
263
|
-
} catch (err) {
|
|
264
|
-
// Should aggregate all provider errors
|
|
265
|
-
expect(err).toBeInstanceOf(AggregateError);
|
|
266
|
-
const aggErr = err as AggregateError;
|
|
267
|
-
expect(aggErr.errors).toHaveLength(2);
|
|
268
|
-
expect(aggErr.errors[0]).toBeInstanceOf(Error);
|
|
269
|
-
expect(aggErr.errors[1]).toBeInstanceOf(Error);
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
it("does not retry a provider that already failed in this search", async () => {
|
|
274
|
-
const failingSearch = vi.fn().mockRejectedValue(new Error("always fails"));
|
|
275
|
-
const successSearch = vi
|
|
276
|
-
.fn()
|
|
277
|
-
.mockResolvedValue([{ title: "OK", url: "https://ok.com", content: "Success" }]);
|
|
278
|
-
|
|
279
|
-
const failing = createMockProvider({ name: "failing", priority: 1, search: failingSearch });
|
|
280
|
-
const success = createMockProvider({ name: "success", priority: 2, search: successSearch });
|
|
281
|
-
|
|
282
|
-
const router = new SearchProviderRouter([failing, success]);
|
|
283
|
-
await router.search("test");
|
|
284
|
-
|
|
285
|
-
// Failing provider should only be called once, not retried
|
|
286
|
-
expect(failingSearch).toHaveBeenCalledTimes(1);
|
|
287
|
-
expect(successSearch).toHaveBeenCalledTimes(1);
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
describe("integration with real provider classes", () => {
|
|
292
|
-
it("can instantiate router with all real provider classes", () => {
|
|
293
|
-
const router = new SearchProviderRouter([
|
|
294
|
-
new BraveSearchProvider(),
|
|
295
|
-
new FirecrawlSearchProvider(),
|
|
296
|
-
new ExaSearchProvider(),
|
|
297
|
-
new TavilySearchProvider(),
|
|
298
|
-
new JinaSearchProvider(),
|
|
299
|
-
new DuckDuckGoSearchProvider(),
|
|
300
|
-
]);
|
|
301
|
-
|
|
302
|
-
// Just verify construction doesn't throw
|
|
303
|
-
expect(router).toBeDefined();
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
it("resolve() with real providers picks based on availability", () => {
|
|
307
|
-
// Without any API keys set, only keyless providers are available
|
|
308
|
-
vi.stubEnv("BRAVE_API_KEY", "");
|
|
309
|
-
vi.stubEnv("FIRECRAWL_API_KEY", "");
|
|
310
|
-
vi.stubEnv("EXA_API_KEY", "");
|
|
311
|
-
vi.stubEnv("TAVILY_API_KEY", "");
|
|
312
|
-
|
|
313
|
-
const router = new SearchProviderRouter([
|
|
314
|
-
new BraveSearchProvider(),
|
|
315
|
-
new FirecrawlSearchProvider(),
|
|
316
|
-
new ExaSearchProvider(),
|
|
317
|
-
new TavilySearchProvider(),
|
|
318
|
-
new JinaSearchProvider(),
|
|
319
|
-
new DuckDuckGoSearchProvider(),
|
|
320
|
-
]);
|
|
321
|
-
|
|
322
|
-
const selected = router.resolve();
|
|
323
|
-
|
|
324
|
-
// Should select Jina (priority 5) or DuckDuckGo (priority 6) — both keyless
|
|
325
|
-
expect(["jina", "duckduckgo"]).toContain(selected.name);
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
|
-
});
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { TavilySearchProvider } from "../../src/providers/tavily.js";
|
|
3
|
-
import type { SearchResult } from "../../src/providers/search-provider.js";
|
|
4
|
-
|
|
5
|
-
describe("TavilySearchProvider", () => {
|
|
6
|
-
let provider: TavilySearchProvider;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
provider = new TavilySearchProvider();
|
|
10
|
-
// Simulate TAVILY_API_KEY being set for tests that need it
|
|
11
|
-
vi.stubEnv("TAVILY_API_KEY", "tvly-test-key-12345");
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
vi.restoreAllMocks();
|
|
16
|
-
vi.unstubAllEnvs();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it("has correct provider metadata", () => {
|
|
20
|
-
expect(provider.name).toBe("tavily");
|
|
21
|
-
expect(provider.requiresApiKey).toBe(true);
|
|
22
|
-
expect(provider.priority).toBe(4);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it("isAvailable returns true when TAVILY_API_KEY is set", () => {
|
|
26
|
-
const available = provider.isAvailable();
|
|
27
|
-
expect(available).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it("isAvailable returns false when TAVILY_API_KEY is missing", () => {
|
|
31
|
-
vi.stubEnv("TAVILY_API_KEY", "");
|
|
32
|
-
const freshProvider = new TavilySearchProvider();
|
|
33
|
-
expect(freshProvider.isAvailable()).toBe(false);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it("returns SearchResult[] on success", async () => {
|
|
37
|
-
const mockResults: SearchResult[] = [
|
|
38
|
-
{
|
|
39
|
-
title: "Tavily AI Search",
|
|
40
|
-
url: "https://tavily.com",
|
|
41
|
-
content: "Tavily is an AI-native search engine optimized for LLMs and AI agents.",
|
|
42
|
-
score: 0.98,
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
title: "Tavily API Documentation",
|
|
46
|
-
url: "https://docs.tavily.com",
|
|
47
|
-
content: "Complete API reference for Tavily search endpoints.",
|
|
48
|
-
score: 0.91,
|
|
49
|
-
},
|
|
50
|
-
];
|
|
51
|
-
|
|
52
|
-
vi.stubGlobal(
|
|
53
|
-
"fetch",
|
|
54
|
-
vi.fn().mockResolvedValue({
|
|
55
|
-
ok: true,
|
|
56
|
-
status: 200,
|
|
57
|
-
json: async () => ({
|
|
58
|
-
results: mockResults.map((r) => ({
|
|
59
|
-
title: r.title,
|
|
60
|
-
url: r.url,
|
|
61
|
-
content: r.content,
|
|
62
|
-
score: r.score,
|
|
63
|
-
})),
|
|
64
|
-
}),
|
|
65
|
-
}),
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
const results = await provider.search("AI search engine");
|
|
69
|
-
expect(results).toBeInstanceOf(Array);
|
|
70
|
-
expect(results.length).toBeGreaterThan(0);
|
|
71
|
-
for (const result of results) {
|
|
72
|
-
expect(result).toHaveProperty("title");
|
|
73
|
-
expect(result).toHaveProperty("url");
|
|
74
|
-
expect(result).toHaveProperty("content");
|
|
75
|
-
expect(typeof result.title).toBe("string");
|
|
76
|
-
expect(typeof result.url).toBe("string");
|
|
77
|
-
expect(typeof result.content).toBe("string");
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it("includes score in results when available", async () => {
|
|
82
|
-
vi.stubGlobal(
|
|
83
|
-
"fetch",
|
|
84
|
-
vi.fn().mockResolvedValue({
|
|
85
|
-
ok: true,
|
|
86
|
-
status: 200,
|
|
87
|
-
json: async () => ({
|
|
88
|
-
results: [
|
|
89
|
-
{ title: "Result", url: "https://example.com", content: "Content", score: 0.95 },
|
|
90
|
-
],
|
|
91
|
-
}),
|
|
92
|
-
}),
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
const results = await provider.search("test");
|
|
96
|
-
expect(results[0].score).toBe(0.95);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it("passes topic option to API", async () => {
|
|
100
|
-
const fetchMock = vi.fn().mockResolvedValue({
|
|
101
|
-
ok: true,
|
|
102
|
-
status: 200,
|
|
103
|
-
json: async () => ({ results: [] }),
|
|
104
|
-
});
|
|
105
|
-
vi.stubGlobal("fetch", fetchMock);
|
|
106
|
-
|
|
107
|
-
await provider.search("latest news", { topic: "news" });
|
|
108
|
-
|
|
109
|
-
// Verify the fetch call included the topic parameter
|
|
110
|
-
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
111
|
-
const callArgs = fetchMock.mock.calls[0];
|
|
112
|
-
const body = JSON.parse(callArgs[1]?.body as string);
|
|
113
|
-
expect(body.topic).toBe("news");
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it("handles API errors (4xx/5xx)", async () => {
|
|
117
|
-
vi.stubGlobal(
|
|
118
|
-
"fetch",
|
|
119
|
-
vi.fn().mockResolvedValue({
|
|
120
|
-
ok: false,
|
|
121
|
-
status: 401,
|
|
122
|
-
statusText: "Unauthorized",
|
|
123
|
-
}),
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
await expect(provider.search("test query")).rejects.toThrow();
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it("returns empty array for no results", async () => {
|
|
130
|
-
vi.stubGlobal(
|
|
131
|
-
"fetch",
|
|
132
|
-
vi.fn().mockResolvedValue({
|
|
133
|
-
ok: true,
|
|
134
|
-
status: 200,
|
|
135
|
-
json: async () => ({ results: [] }),
|
|
136
|
-
}),
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
const results = await provider.search("xyzzy_nonexistent_query_12345");
|
|
140
|
-
expect(results).toEqual([]);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it("handles network timeout", async () => {
|
|
144
|
-
vi.stubGlobal(
|
|
145
|
-
"fetch",
|
|
146
|
-
vi.fn().mockRejectedValue(new DOMException("The operation was aborted", "AbortError")),
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
await expect(provider.search("test query")).rejects.toThrow();
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it("handles 422 validation error from API", async () => {
|
|
153
|
-
vi.stubGlobal(
|
|
154
|
-
"fetch",
|
|
155
|
-
vi.fn().mockResolvedValue({
|
|
156
|
-
ok: false,
|
|
157
|
-
status: 422,
|
|
158
|
-
statusText: "Unprocessable Entity",
|
|
159
|
-
json: async () => ({ detail: "Invalid query parameter" }),
|
|
160
|
-
}),
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
await expect(provider.search("")).rejects.toThrow();
|
|
164
|
-
});
|
|
165
|
-
});
|