@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,762 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Tool Registry - Manages tool registration and discovery
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ToolRegistry = void 0;
|
|
7
|
-
exports.validateToolInput = validateToolInput;
|
|
8
|
-
const client_js_1 = require("../mcp/client.js");
|
|
9
|
-
const shell_js_1 = require("../executors/shell.js");
|
|
10
|
-
/**
|
|
11
|
-
* Validate tool input against a JSON Schema object.
|
|
12
|
-
*
|
|
13
|
-
* Lightweight validation that covers the schemas produced by our tool factory
|
|
14
|
-
* (Zod -> JSON Schema): checks top-level type, required properties, property
|
|
15
|
-
* types, enums, patterns, numeric/string/array bounds, additionalProperties,
|
|
16
|
-
* and recursively validates nested object/array schemas.
|
|
17
|
-
* Does not pull in a full JSON Schema validator like Ajv to keep the dependency
|
|
18
|
-
* footprint minimal.
|
|
19
|
-
*
|
|
20
|
-
* @returns null if valid, or a human-readable error string
|
|
21
|
-
*/
|
|
22
|
-
function isPlainObject(value) {
|
|
23
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24
|
-
}
|
|
25
|
-
function valueType(value) {
|
|
26
|
-
if (value === null)
|
|
27
|
-
return "null";
|
|
28
|
-
if (Array.isArray(value))
|
|
29
|
-
return "array";
|
|
30
|
-
return typeof value;
|
|
31
|
-
}
|
|
32
|
-
function matchesJsonSchemaType(value, schemaType) {
|
|
33
|
-
if (schemaType === "integer")
|
|
34
|
-
return typeof value === "number" && Number.isInteger(value);
|
|
35
|
-
if (schemaType === "number")
|
|
36
|
-
return typeof value === "number";
|
|
37
|
-
if (schemaType === "string")
|
|
38
|
-
return typeof value === "string";
|
|
39
|
-
if (schemaType === "boolean")
|
|
40
|
-
return typeof value === "boolean";
|
|
41
|
-
if (schemaType === "array")
|
|
42
|
-
return Array.isArray(value);
|
|
43
|
-
if (schemaType === "object")
|
|
44
|
-
return isPlainObject(value);
|
|
45
|
-
if (schemaType === "null")
|
|
46
|
-
return value === null;
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
function pathLabel(path) {
|
|
50
|
-
return path ? `Property "${path}"` : "Value";
|
|
51
|
-
}
|
|
52
|
-
function validateValueAgainstSchema(value, schema, path) {
|
|
53
|
-
const expectedType = schema.type;
|
|
54
|
-
if (expectedType) {
|
|
55
|
-
const types = Array.isArray(expectedType) ? expectedType : [expectedType];
|
|
56
|
-
const typeMatches = types.some((typeName) => matchesJsonSchemaType(value, typeName));
|
|
57
|
-
if (!typeMatches) {
|
|
58
|
-
return `${pathLabel(path)} expected type ${types.join(" | ")}; got ${valueType(value)}`;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (Array.isArray(schema.enum) && schema.enum.length > 0) {
|
|
62
|
-
const allowed = schema.enum;
|
|
63
|
-
const hasValue = allowed.some((candidate) => Object.is(candidate, value));
|
|
64
|
-
if (!hasValue) {
|
|
65
|
-
return `${pathLabel(path)} must be one of: ${allowed.map((item) => String(item)).join(", ")}`;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if ("const" in schema && !Object.is(schema.const, value)) {
|
|
69
|
-
return `${pathLabel(path)} must equal ${String(schema.const)}`;
|
|
70
|
-
}
|
|
71
|
-
if (typeof value === "string") {
|
|
72
|
-
if (typeof schema.minLength === "number" && value.length < schema.minLength) {
|
|
73
|
-
return `${pathLabel(path)} must have length >= ${schema.minLength}`;
|
|
74
|
-
}
|
|
75
|
-
if (typeof schema.maxLength === "number" && value.length > schema.maxLength) {
|
|
76
|
-
return `${pathLabel(path)} must have length <= ${schema.maxLength}`;
|
|
77
|
-
}
|
|
78
|
-
if (typeof schema.pattern === "string") {
|
|
79
|
-
try {
|
|
80
|
-
const pattern = new RegExp(schema.pattern);
|
|
81
|
-
if (!pattern.test(value)) {
|
|
82
|
-
return `${pathLabel(path)} does not match required pattern`;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// Invalid schema pattern: ignore rather than failing all validation.
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
if (typeof value === "number") {
|
|
91
|
-
if (typeof schema.minimum === "number" && value < schema.minimum) {
|
|
92
|
-
return `${pathLabel(path)} must be >= ${schema.minimum}`;
|
|
93
|
-
}
|
|
94
|
-
if (typeof schema.maximum === "number" && value > schema.maximum) {
|
|
95
|
-
return `${pathLabel(path)} must be <= ${schema.maximum}`;
|
|
96
|
-
}
|
|
97
|
-
if (typeof schema.exclusiveMinimum === "number" && value <= schema.exclusiveMinimum) {
|
|
98
|
-
return `${pathLabel(path)} must be > ${schema.exclusiveMinimum}`;
|
|
99
|
-
}
|
|
100
|
-
if (typeof schema.exclusiveMaximum === "number" && value >= schema.exclusiveMaximum) {
|
|
101
|
-
return `${pathLabel(path)} must be < ${schema.exclusiveMaximum}`;
|
|
102
|
-
}
|
|
103
|
-
if (typeof schema.multipleOf === "number" && schema.multipleOf > 0) {
|
|
104
|
-
const quotient = value / schema.multipleOf;
|
|
105
|
-
if (!Number.isInteger(quotient)) {
|
|
106
|
-
return `${pathLabel(path)} must be a multiple of ${schema.multipleOf}`;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (Array.isArray(value)) {
|
|
111
|
-
if (typeof schema.minItems === "number" && value.length < schema.minItems) {
|
|
112
|
-
return `${pathLabel(path)} must contain at least ${schema.minItems} item(s)`;
|
|
113
|
-
}
|
|
114
|
-
if (typeof schema.maxItems === "number" && value.length > schema.maxItems) {
|
|
115
|
-
return `${pathLabel(path)} must contain at most ${schema.maxItems} item(s)`;
|
|
116
|
-
}
|
|
117
|
-
if (isPlainObject(schema.items)) {
|
|
118
|
-
for (let index = 0; index < value.length; index++) {
|
|
119
|
-
const itemError = validateValueAgainstSchema(value[index], schema.items, path ? `${path}[${index}]` : `[${index}]`);
|
|
120
|
-
if (itemError)
|
|
121
|
-
return itemError;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (isPlainObject(value)) {
|
|
126
|
-
const required = Array.isArray(schema.required)
|
|
127
|
-
? schema.required.filter((item) => typeof item === "string")
|
|
128
|
-
: [];
|
|
129
|
-
if (required.length > 0) {
|
|
130
|
-
const missing = required.filter((key) => !(key in value) || value[key] === undefined);
|
|
131
|
-
if (missing.length > 0) {
|
|
132
|
-
return `${path ? `${path}: ` : ""}Missing required properties: ${missing.join(", ")}`;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
const properties = isPlainObject(schema.properties)
|
|
136
|
-
? schema.properties
|
|
137
|
-
: undefined;
|
|
138
|
-
if (properties) {
|
|
139
|
-
for (const [key, propSchema] of Object.entries(properties)) {
|
|
140
|
-
if (!(key in value) || value[key] === undefined)
|
|
141
|
-
continue;
|
|
142
|
-
if (!isPlainObject(propSchema))
|
|
143
|
-
continue;
|
|
144
|
-
const childPath = path ? `${path}.${key}` : key;
|
|
145
|
-
const nestedError = validateValueAgainstSchema(value[key], propSchema, childPath);
|
|
146
|
-
if (nestedError)
|
|
147
|
-
return nestedError;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
const additionalProperties = schema.additionalProperties;
|
|
151
|
-
if (additionalProperties === false) {
|
|
152
|
-
const allowed = new Set(properties ? Object.keys(properties) : []);
|
|
153
|
-
const unknown = Object.keys(value).filter((key) => !allowed.has(key));
|
|
154
|
-
if (unknown.length > 0) {
|
|
155
|
-
if (path) {
|
|
156
|
-
return `${path}: Unknown properties: ${unknown.join(", ")}`;
|
|
157
|
-
}
|
|
158
|
-
return `Unknown properties: ${unknown.join(", ")}`;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else if (isPlainObject(additionalProperties)) {
|
|
162
|
-
const allowed = new Set(properties ? Object.keys(properties) : []);
|
|
163
|
-
for (const [extraKey, extraValue] of Object.entries(value)) {
|
|
164
|
-
if (allowed.has(extraKey))
|
|
165
|
-
continue;
|
|
166
|
-
const childPath = path ? `${path}.${extraKey}` : extraKey;
|
|
167
|
-
const apError = validateValueAgainstSchema(extraValue, additionalProperties, childPath);
|
|
168
|
-
if (apError)
|
|
169
|
-
return apError;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
function validateToolInput(input, schema, path = "") {
|
|
176
|
-
// Only validate object-type schemas (all tool parameters are objects)
|
|
177
|
-
if (schema.type !== "object")
|
|
178
|
-
return null;
|
|
179
|
-
const prefix = path ? `${path}: ` : "";
|
|
180
|
-
// Input must be an object (or nullish, treated as empty object by many callers)
|
|
181
|
-
if (input === null || input === undefined) {
|
|
182
|
-
// If schema has required fields, this is invalid
|
|
183
|
-
const required = schema.required;
|
|
184
|
-
if (required && required.length > 0) {
|
|
185
|
-
return `${prefix}Expected an object with required properties: ${required.join(", ")}; got ${input === null ? "null" : "undefined"}`;
|
|
186
|
-
}
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
if (typeof input !== "object" || Array.isArray(input)) {
|
|
190
|
-
return `${prefix}Expected an object; got ${Array.isArray(input) ? "array" : typeof input}`;
|
|
191
|
-
}
|
|
192
|
-
return validateValueAgainstSchema(input, schema, path);
|
|
193
|
-
}
|
|
194
|
-
function isMcpToolReadOnly(tool) {
|
|
195
|
-
return tool.annotations?.readOnlyHint === true;
|
|
196
|
-
}
|
|
197
|
-
function normalizeDiscoveryIssues(rawFailures) {
|
|
198
|
-
if (!Array.isArray(rawFailures))
|
|
199
|
-
return undefined;
|
|
200
|
-
const issues = [];
|
|
201
|
-
for (const failure of rawFailures) {
|
|
202
|
-
if (typeof failure === "string") {
|
|
203
|
-
const trimmed = failure.trim();
|
|
204
|
-
if (trimmed)
|
|
205
|
-
issues.push(trimmed);
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
if (!failure || typeof failure !== "object")
|
|
209
|
-
continue;
|
|
210
|
-
const record = failure;
|
|
211
|
-
const primary = typeof record.error === "string" && record.error.trim()
|
|
212
|
-
? record.error.trim()
|
|
213
|
-
: typeof record.message === "string" && record.message.trim()
|
|
214
|
-
? record.message.trim()
|
|
215
|
-
: undefined;
|
|
216
|
-
if (primary)
|
|
217
|
-
issues.push(primary);
|
|
218
|
-
}
|
|
219
|
-
if (issues.length === 0)
|
|
220
|
-
return undefined;
|
|
221
|
-
return [...new Set(issues)];
|
|
222
|
-
}
|
|
223
|
-
function isShellTemplate(template) {
|
|
224
|
-
return template.trimStart().toLowerCase().startsWith("bash:");
|
|
225
|
-
}
|
|
226
|
-
function shellEscape(value) {
|
|
227
|
-
return `'${value.replace(/'/g, `'\"'\"'`)}'`;
|
|
228
|
-
}
|
|
229
|
-
function renderTemplate(template, inputObj, options) {
|
|
230
|
-
return template.replace(/\{\{(\w+)\}\}/g, (_match, key) => {
|
|
231
|
-
const value = inputObj[key];
|
|
232
|
-
if (value === undefined || value === null)
|
|
233
|
-
return "";
|
|
234
|
-
const stringValue = String(value);
|
|
235
|
-
return options?.escapeForShell ? shellEscape(stringValue) : stringValue;
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
class ToolRegistry {
|
|
239
|
-
tools = new Map();
|
|
240
|
-
middleware = [];
|
|
241
|
-
mcpClient;
|
|
242
|
-
logger;
|
|
243
|
-
constructor(options) {
|
|
244
|
-
this.logger = options?.logger ?? console;
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Register a middleware to wrap tool execution.
|
|
248
|
-
* Middlewares are applied in registration order (first registered = outermost).
|
|
249
|
-
*/
|
|
250
|
-
use(mw) {
|
|
251
|
-
this.middleware.push(mw);
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Register a tool
|
|
255
|
-
* @throws Error if tool already registered and override not set
|
|
256
|
-
*/
|
|
257
|
-
register(tool, options = {}) {
|
|
258
|
-
if (this.tools.has(tool.name) && !options.override) {
|
|
259
|
-
throw new Error(`Tool "${tool.name}" is already registered. Use { override: true } to replace.`);
|
|
260
|
-
}
|
|
261
|
-
this.tools.set(tool.name, tool);
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Get a tool by name
|
|
265
|
-
*/
|
|
266
|
-
get(name) {
|
|
267
|
-
return this.tools.get(name);
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Check if a tool is registered
|
|
271
|
-
*/
|
|
272
|
-
has(name) {
|
|
273
|
-
return this.tools.has(name);
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* List all tools, optionally filtered by category
|
|
277
|
-
*/
|
|
278
|
-
list(category) {
|
|
279
|
-
const all = Array.from(this.tools.values());
|
|
280
|
-
if (!category)
|
|
281
|
-
return all;
|
|
282
|
-
return all.filter((tool) => tool.category === category);
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Unregister a tool
|
|
286
|
-
* @returns true if tool was removed, false if not found
|
|
287
|
-
*/
|
|
288
|
-
unregister(name) {
|
|
289
|
-
return this.tools.delete(name);
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Get count of registered tools
|
|
293
|
-
*/
|
|
294
|
-
get size() {
|
|
295
|
-
return this.tools.size;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Clear all registered tools
|
|
299
|
-
*/
|
|
300
|
-
clear() {
|
|
301
|
-
this.tools.clear();
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Get all registered tools
|
|
305
|
-
*/
|
|
306
|
-
getAll() {
|
|
307
|
-
return Array.from(this.tools.values());
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Execute a tool by name with input validation.
|
|
311
|
-
*
|
|
312
|
-
* Validates `input` against the tool's JSON Schema `parameters` before
|
|
313
|
-
* delegating to the tool's handler. Returns a structured error result
|
|
314
|
-
* for unknown tools or validation failures instead of throwing.
|
|
315
|
-
*
|
|
316
|
-
* Tools without a `parameters` schema (or with a non-object schema)
|
|
317
|
-
* skip validation and pass input directly to the handler.
|
|
318
|
-
*/
|
|
319
|
-
async execute(name, input, context) {
|
|
320
|
-
const tool = this.tools.get(name);
|
|
321
|
-
if (!tool) {
|
|
322
|
-
return {
|
|
323
|
-
success: false,
|
|
324
|
-
message: `Tool "${name}" is not registered.`,
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
// Validate input against JSON Schema if the tool declares parameters
|
|
328
|
-
if (tool.parameters && typeof tool.parameters === "object") {
|
|
329
|
-
const schema = tool.parameters;
|
|
330
|
-
const error = validateToolInput(input, schema);
|
|
331
|
-
if (error) {
|
|
332
|
-
return {
|
|
333
|
-
success: false,
|
|
334
|
-
message: `Invalid input for tool "${name}": ${error}`,
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
// If no middleware, execute directly
|
|
339
|
-
if (this.middleware.length === 0) {
|
|
340
|
-
return tool.execute(input, context);
|
|
341
|
-
}
|
|
342
|
-
// Run through middleware chain (first registered = outermost)
|
|
343
|
-
const chain = this.middleware.reduceRight((next, mw) => () => mw(tool, input, context, next), () => tool.execute(input, context));
|
|
344
|
-
return chain();
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Convert a Tool to ToolInfo for system prompt
|
|
348
|
-
*/
|
|
349
|
-
toolToInfo(tool) {
|
|
350
|
-
const parameters = [];
|
|
351
|
-
if (tool.parameters && typeof tool.parameters === "object") {
|
|
352
|
-
const schema = tool.parameters;
|
|
353
|
-
if (schema.properties) {
|
|
354
|
-
for (const [name, prop] of Object.entries(schema.properties)) {
|
|
355
|
-
parameters.push({
|
|
356
|
-
name,
|
|
357
|
-
type: String(prop.type || "unknown"),
|
|
358
|
-
required: schema.required?.includes(name) ?? false,
|
|
359
|
-
description: prop.description,
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
return {
|
|
365
|
-
name: tool.name,
|
|
366
|
-
description: tool.description,
|
|
367
|
-
requiresConfirmation: tool.requiresConfirmation ?? tool.riskLevel === "dangerous",
|
|
368
|
-
parameters,
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Get tool info for all tools (for system prompt)
|
|
373
|
-
*/
|
|
374
|
-
getToolInfos() {
|
|
375
|
-
return this.getAll().map((tool) => this.toolToInfo(tool));
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Search for tools by name or description
|
|
379
|
-
*/
|
|
380
|
-
search(query) {
|
|
381
|
-
const queryLower = query.toLowerCase();
|
|
382
|
-
return Array.from(this.tools.values()).filter((tool) => tool.name.toLowerCase().includes(queryLower) ||
|
|
383
|
-
tool.description.toLowerCase().includes(queryLower));
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Discover and load tools from Memoria knowledge base
|
|
387
|
-
*
|
|
388
|
-
* @param memoria - Memoria instance to query
|
|
389
|
-
* @returns Number of tools discovered and loaded
|
|
390
|
-
*/
|
|
391
|
-
async discoverFromMemoria(memoria) {
|
|
392
|
-
let count = 0;
|
|
393
|
-
let offset = 0;
|
|
394
|
-
let pagesLoaded = 0;
|
|
395
|
-
const seenPageSignatures = new Set();
|
|
396
|
-
const DISCOVERY_PAGE_SIZE = 200;
|
|
397
|
-
const MAX_DISCOVERY_PAGES = 250;
|
|
398
|
-
// Valid values for validation
|
|
399
|
-
const validCategories = new Set([
|
|
400
|
-
"filesystem",
|
|
401
|
-
"code",
|
|
402
|
-
"shell",
|
|
403
|
-
"web",
|
|
404
|
-
"data",
|
|
405
|
-
"memory",
|
|
406
|
-
"meta",
|
|
407
|
-
"arion",
|
|
408
|
-
]);
|
|
409
|
-
const validRiskLevels = new Set(["safe", "moderate", "dangerous"]);
|
|
410
|
-
try {
|
|
411
|
-
while (pagesLoaded < MAX_DISCOVERY_PAGES) {
|
|
412
|
-
const tools = await memoria.recallTools({
|
|
413
|
-
query: "",
|
|
414
|
-
limit: DISCOVERY_PAGE_SIZE,
|
|
415
|
-
offset,
|
|
416
|
-
matchAll: true,
|
|
417
|
-
updateAccessStats: false,
|
|
418
|
-
});
|
|
419
|
-
pagesLoaded += 1;
|
|
420
|
-
if (tools.length === 0)
|
|
421
|
-
break;
|
|
422
|
-
const pageSignature = tools.map((tool) => String(tool.id ?? tool.name)).join("|");
|
|
423
|
-
if (pageSignature && seenPageSignatures.has(pageSignature)) {
|
|
424
|
-
this.logger.warn("Memoria discovery received a duplicate page; stopping to avoid pagination loop");
|
|
425
|
-
break;
|
|
426
|
-
}
|
|
427
|
-
if (pageSignature) {
|
|
428
|
-
seenPageSignatures.add(pageSignature);
|
|
429
|
-
}
|
|
430
|
-
for (const k of tools) {
|
|
431
|
-
try {
|
|
432
|
-
if (typeof k.name !== "string" || k.name.trim().length === 0) {
|
|
433
|
-
this.logger.warn("Skipping Memoria tool with missing name");
|
|
434
|
-
continue;
|
|
435
|
-
}
|
|
436
|
-
if (typeof k.description !== "string" || k.description.trim().length === 0) {
|
|
437
|
-
this.logger.warn(`Skipping Memoria tool "${k.name}" with missing description`);
|
|
438
|
-
continue;
|
|
439
|
-
}
|
|
440
|
-
const category = typeof k.category === "string" && validCategories.has(k.category)
|
|
441
|
-
? k.category
|
|
442
|
-
: "meta";
|
|
443
|
-
if (category === "meta" && k.category !== "meta") {
|
|
444
|
-
this.logger.warn(`Memoria tool "${k.name}" has invalid/missing category; defaulting to "meta"`);
|
|
445
|
-
}
|
|
446
|
-
const parameters = k.parameters && typeof k.parameters === "object"
|
|
447
|
-
? k.parameters
|
|
448
|
-
: { type: "object", properties: {}, additionalProperties: true };
|
|
449
|
-
if (!k.parameters || typeof k.parameters !== "object") {
|
|
450
|
-
this.logger.warn(`Memoria tool "${k.name}" has invalid/missing parameters; defaulting to permissive schema`);
|
|
451
|
-
}
|
|
452
|
-
// Register only tools with explicit response templates.
|
|
453
|
-
// Knowledge-only records are treated as non-executable metadata.
|
|
454
|
-
const hasResponseTemplate = typeof k.responseTemplate === "string" && k.responseTemplate.trim().length > 0;
|
|
455
|
-
if (!hasResponseTemplate) {
|
|
456
|
-
this.logger.warn(`Skipping Memoria tool "${k.name}" without executable responseTemplate`);
|
|
457
|
-
continue;
|
|
458
|
-
}
|
|
459
|
-
const declaredRiskLevel = typeof k.riskLevel === "string" && validRiskLevels.has(k.riskLevel)
|
|
460
|
-
? k.riskLevel
|
|
461
|
-
: "moderate";
|
|
462
|
-
const isBashTemplate = typeof k.responseTemplate === "string" && isShellTemplate(k.responseTemplate);
|
|
463
|
-
// Memoria bash templates execute shell commands and must always
|
|
464
|
-
// flow through dangerous-risk approval paths.
|
|
465
|
-
const riskLevel = isBashTemplate ? "dangerous" : declaredRiskLevel;
|
|
466
|
-
const issues = normalizeDiscoveryIssues(k.failures);
|
|
467
|
-
const toolDef = {
|
|
468
|
-
description: k.description,
|
|
469
|
-
category,
|
|
470
|
-
parameters,
|
|
471
|
-
riskLevel,
|
|
472
|
-
};
|
|
473
|
-
if (issues && issues.length > 0)
|
|
474
|
-
toolDef.issues = issues;
|
|
475
|
-
// Pass through executor-relevant fields from the tool definition.
|
|
476
|
-
if (typeof k.responseTemplate === "string")
|
|
477
|
-
toolDef.responseTemplate = k.responseTemplate;
|
|
478
|
-
const tool = {
|
|
479
|
-
name: k.name,
|
|
480
|
-
description: k.description,
|
|
481
|
-
category: category,
|
|
482
|
-
parameters: parameters,
|
|
483
|
-
riskLevel: riskLevel,
|
|
484
|
-
issues,
|
|
485
|
-
loadingTier: "deferred",
|
|
486
|
-
execute: this.createMemoriaToolExecutor(k.name, toolDef),
|
|
487
|
-
};
|
|
488
|
-
if (this.tools.has(tool.name)) {
|
|
489
|
-
// Don't override core tools with Memoria-discovered tools
|
|
490
|
-
continue;
|
|
491
|
-
}
|
|
492
|
-
this.register(tool);
|
|
493
|
-
count++;
|
|
494
|
-
}
|
|
495
|
-
catch {
|
|
496
|
-
// Skip invalid tool definitions
|
|
497
|
-
this.logger.warn(`Invalid tool definition in Memoria: ${k.name}`);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
offset += tools.length;
|
|
501
|
-
if (tools.length < DISCOVERY_PAGE_SIZE)
|
|
502
|
-
break;
|
|
503
|
-
}
|
|
504
|
-
if (pagesLoaded >= MAX_DISCOVERY_PAGES) {
|
|
505
|
-
this.logger.warn(`Stopped Memoria discovery after ${MAX_DISCOVERY_PAGES} pages to avoid unbounded paging`);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
catch (error) {
|
|
509
|
-
this.logger.error("Error discovering tools from Memoria:", error);
|
|
510
|
-
}
|
|
511
|
-
return count;
|
|
512
|
-
}
|
|
513
|
-
/**
|
|
514
|
-
* Save a tool definition to Memoria
|
|
515
|
-
*
|
|
516
|
-
* @param name - Name of the tool to save
|
|
517
|
-
* @param memoria - Memoria instance to save to
|
|
518
|
-
*/
|
|
519
|
-
async saveToMemoria(name, memoria) {
|
|
520
|
-
const tool = this.get(name);
|
|
521
|
-
if (!tool) {
|
|
522
|
-
throw new Error(`Tool "${name}" not found`);
|
|
523
|
-
}
|
|
524
|
-
const issues = Array.isArray(tool.issues) && tool.issues.length > 0
|
|
525
|
-
? tool.issues
|
|
526
|
-
.map((issue) => (typeof issue === "string" ? issue.trim() : ""))
|
|
527
|
-
.filter(Boolean)
|
|
528
|
-
: [];
|
|
529
|
-
const failures = issues.length > 0
|
|
530
|
-
? issues.map((issue) => ({
|
|
531
|
-
timestamp: new Date(),
|
|
532
|
-
error: issue,
|
|
533
|
-
}))
|
|
534
|
-
: undefined;
|
|
535
|
-
const rawResponseTemplate = tool.responseTemplate;
|
|
536
|
-
const responseTemplate = typeof rawResponseTemplate === "string" && rawResponseTemplate.trim().length > 0
|
|
537
|
-
? rawResponseTemplate
|
|
538
|
-
: undefined;
|
|
539
|
-
const memoriaRecord = {
|
|
540
|
-
name: tool.name,
|
|
541
|
-
description: tool.description,
|
|
542
|
-
category: tool.category,
|
|
543
|
-
parameters: tool.parameters,
|
|
544
|
-
riskLevel: tool.riskLevel,
|
|
545
|
-
...(failures ? { failures } : {}),
|
|
546
|
-
};
|
|
547
|
-
if (responseTemplate) {
|
|
548
|
-
memoriaRecord.responseTemplate = responseTemplate;
|
|
549
|
-
}
|
|
550
|
-
await memoria.rememberTool(memoriaRecord);
|
|
551
|
-
}
|
|
552
|
-
/**
|
|
553
|
-
* Create an executor for a tool loaded from Memoria.
|
|
554
|
-
*
|
|
555
|
-
* Supports template execution only (no eval, no arbitrary code):
|
|
556
|
-
*
|
|
557
|
-
* **Response template**: If `toolDef.responseTemplate` is a string,
|
|
558
|
-
* `{{key}}` placeholders are replaced with values from the input object.
|
|
559
|
-
*
|
|
560
|
-
* Input is validated against the full declared JSON Schema before interpolation.
|
|
561
|
-
*/
|
|
562
|
-
createMemoriaToolExecutor(name, toolDef) {
|
|
563
|
-
return async (input, _context) => {
|
|
564
|
-
try {
|
|
565
|
-
const inputObj = (input && typeof input === "object" ? input : {});
|
|
566
|
-
// Validate full input schema if one is present.
|
|
567
|
-
const params = toolDef.parameters;
|
|
568
|
-
if (params && typeof params === "object") {
|
|
569
|
-
const validationError = validateToolInput(input, params);
|
|
570
|
-
if (validationError) {
|
|
571
|
-
return {
|
|
572
|
-
success: false,
|
|
573
|
-
message: `Invalid input for tool "${name}": ${validationError}`,
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
// Template mode with {{key}} interpolation
|
|
578
|
-
if (typeof toolDef.responseTemplate === "string") {
|
|
579
|
-
const template = toolDef.responseTemplate;
|
|
580
|
-
const isBashTemplate = isShellTemplate(template);
|
|
581
|
-
const rendered = renderTemplate(template, inputObj, {
|
|
582
|
-
escapeForShell: isBashTemplate,
|
|
583
|
-
});
|
|
584
|
-
if (isBashTemplate) {
|
|
585
|
-
const bashPrefixIndex = rendered.toLowerCase().indexOf("bash:");
|
|
586
|
-
const command = rendered.slice(bashPrefixIndex + "bash:".length).trim();
|
|
587
|
-
if (!command) {
|
|
588
|
-
return {
|
|
589
|
-
success: false,
|
|
590
|
-
message: `Tool "${name}" has empty bash command template`,
|
|
591
|
-
};
|
|
592
|
-
}
|
|
593
|
-
const bashResult = await (0, shell_js_1.executeBash)({
|
|
594
|
-
command,
|
|
595
|
-
cwd: _context.workingDir,
|
|
596
|
-
env: _context.env,
|
|
597
|
-
timeout: 30_000,
|
|
598
|
-
}, _context);
|
|
599
|
-
if (!bashResult.success) {
|
|
600
|
-
return {
|
|
601
|
-
success: false,
|
|
602
|
-
message: `Tool "${name}" command failed: ${bashResult.message}`,
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
const shellData = bashResult.data && typeof bashResult.data === "object"
|
|
606
|
-
? bashResult.data
|
|
607
|
-
: undefined;
|
|
608
|
-
const output = [shellData?.stdout, shellData?.stderr].filter(Boolean).join("\n").trim();
|
|
609
|
-
return {
|
|
610
|
-
success: true,
|
|
611
|
-
message: `Tool "${name}" executed command template.`,
|
|
612
|
-
data: output,
|
|
613
|
-
};
|
|
614
|
-
}
|
|
615
|
-
return {
|
|
616
|
-
success: true,
|
|
617
|
-
message: `Tool "${name}" executed with template response.`,
|
|
618
|
-
data: rendered,
|
|
619
|
-
};
|
|
620
|
-
}
|
|
621
|
-
// No executable content at all
|
|
622
|
-
return {
|
|
623
|
-
success: false,
|
|
624
|
-
message: `Tool "${name}" was loaded from Memoria but has no executable content. ` +
|
|
625
|
-
`Add a "responseTemplate" field to the tool definition.`,
|
|
626
|
-
};
|
|
627
|
-
}
|
|
628
|
-
catch (error) {
|
|
629
|
-
return {
|
|
630
|
-
success: false,
|
|
631
|
-
message: `Tool "${name}" execution failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
632
|
-
};
|
|
633
|
-
}
|
|
634
|
-
};
|
|
635
|
-
}
|
|
636
|
-
/**
|
|
637
|
-
* Connect to MCP servers and register their tools
|
|
638
|
-
*/
|
|
639
|
-
async connectMCP(configs) {
|
|
640
|
-
if (this.mcpClient) {
|
|
641
|
-
await this.disconnectMCP();
|
|
642
|
-
}
|
|
643
|
-
this.mcpClient = new client_js_1.MCPClient({ logger: this.logger });
|
|
644
|
-
// Connect to all servers
|
|
645
|
-
const results = await Promise.allSettled(configs.map((c) => this.mcpClient.connect(c)));
|
|
646
|
-
const failures = results
|
|
647
|
-
.map((r, i) => (r.status === "rejected" ? configs[i].name : null))
|
|
648
|
-
.filter(Boolean);
|
|
649
|
-
if (failures.length > 0) {
|
|
650
|
-
this.logger.warn(`Failed to connect MCP servers: ${failures.join(", ")}`);
|
|
651
|
-
}
|
|
652
|
-
// Register MCP tools
|
|
653
|
-
const mcpTools = await this.mcpClient.listAllTools();
|
|
654
|
-
for (const tool of mcpTools) {
|
|
655
|
-
const isReadOnly = isMcpToolReadOnly(tool);
|
|
656
|
-
this.register({
|
|
657
|
-
name: `mcp__${tool.server}__${tool.name}`,
|
|
658
|
-
description: tool.description || `MCP tool from ${tool.server}`,
|
|
659
|
-
category: "meta",
|
|
660
|
-
riskLevel: "moderate",
|
|
661
|
-
isReadOnly,
|
|
662
|
-
loadingTier: "always",
|
|
663
|
-
parameters: tool.inputSchema,
|
|
664
|
-
execute: async (args, ctx) => {
|
|
665
|
-
if (ctx.abortSignal?.aborted) {
|
|
666
|
-
return { success: false, message: "Cancelled" };
|
|
667
|
-
}
|
|
668
|
-
return this.mcpClient.callTool(tool.server, tool.name, args, ctx.abortSignal);
|
|
669
|
-
},
|
|
670
|
-
});
|
|
671
|
-
}
|
|
672
|
-
// Listen for tool list changes
|
|
673
|
-
this.mcpClient.on("toolsChanged", async (serverName) => {
|
|
674
|
-
try {
|
|
675
|
-
await this.refreshMCPTools(serverName);
|
|
676
|
-
}
|
|
677
|
-
catch (error) {
|
|
678
|
-
this.logger.error(`Failed to refresh MCP tools for ${serverName}:`, error.message);
|
|
679
|
-
}
|
|
680
|
-
});
|
|
681
|
-
const resources = await this.mcpClient.listAllResources();
|
|
682
|
-
const prompts = await this.mcpClient.listAllPrompts();
|
|
683
|
-
return {
|
|
684
|
-
tools: mcpTools.length,
|
|
685
|
-
resources: resources.length,
|
|
686
|
-
prompts: prompts.length,
|
|
687
|
-
};
|
|
688
|
-
}
|
|
689
|
-
/**
|
|
690
|
-
* Refresh tools from a specific MCP server
|
|
691
|
-
*/
|
|
692
|
-
async refreshMCPTools(serverName) {
|
|
693
|
-
// Remove existing tools from this server
|
|
694
|
-
const prefix = `mcp__${serverName}__`;
|
|
695
|
-
for (const name of this.tools.keys()) {
|
|
696
|
-
if (name.startsWith(prefix)) {
|
|
697
|
-
this.unregister(name);
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
// Re-register tools
|
|
701
|
-
const tools = await this.mcpClient.listAllTools();
|
|
702
|
-
const serverTools = tools.filter((t) => t.server === serverName);
|
|
703
|
-
for (const tool of serverTools) {
|
|
704
|
-
const isReadOnly = isMcpToolReadOnly(tool);
|
|
705
|
-
this.register({
|
|
706
|
-
name: `mcp__${tool.server}__${tool.name}`,
|
|
707
|
-
description: tool.description || `MCP tool from ${tool.server}`,
|
|
708
|
-
category: "meta",
|
|
709
|
-
riskLevel: "moderate",
|
|
710
|
-
isReadOnly,
|
|
711
|
-
loadingTier: "always",
|
|
712
|
-
parameters: tool.inputSchema,
|
|
713
|
-
execute: async (args, ctx) => {
|
|
714
|
-
if (ctx.abortSignal?.aborted) {
|
|
715
|
-
return { success: false, message: "Cancelled" };
|
|
716
|
-
}
|
|
717
|
-
return this.mcpClient.callTool(tool.server, tool.name, args, ctx.abortSignal);
|
|
718
|
-
},
|
|
719
|
-
});
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Disconnect from all MCP servers
|
|
724
|
-
*/
|
|
725
|
-
async disconnectMCP() {
|
|
726
|
-
// Remove all MCP tools
|
|
727
|
-
for (const name of this.tools.keys()) {
|
|
728
|
-
if (name.startsWith("mcp__")) {
|
|
729
|
-
this.unregister(name);
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
await this.mcpClient?.disconnectAll();
|
|
733
|
-
this.mcpClient = undefined;
|
|
734
|
-
}
|
|
735
|
-
/**
|
|
736
|
-
* Get the MCP client for direct resource/prompt access
|
|
737
|
-
*/
|
|
738
|
-
getMCPClient() {
|
|
739
|
-
return this.mcpClient;
|
|
740
|
-
}
|
|
741
|
-
/**
|
|
742
|
-
* Dispose of the registry, cleaning up all MCP connections.
|
|
743
|
-
*
|
|
744
|
-
* Shuts down every MCP server connection and clears all registered tools.
|
|
745
|
-
* Safe to call multiple times (idempotent).
|
|
746
|
-
*/
|
|
747
|
-
async dispose() {
|
|
748
|
-
await this.disconnectMCP();
|
|
749
|
-
this.tools.clear();
|
|
750
|
-
}
|
|
751
|
-
/**
|
|
752
|
-
* Async disposable support for `await using registry = new ToolRegistry()`.
|
|
753
|
-
*
|
|
754
|
-
* Delegates to dispose() so that ToolRegistry works with the Explicit
|
|
755
|
-
* Resource Management proposal (using/await using).
|
|
756
|
-
*/
|
|
757
|
-
async [Symbol.asyncDispose]() {
|
|
758
|
-
await this.dispose();
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
exports.ToolRegistry = ToolRegistry;
|
|
762
|
-
//# sourceMappingURL=registry.js.map
|