@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,83 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
LoopbackTlsIdentitySchema,
|
|
4
|
-
NodeIdSchema,
|
|
5
|
-
OwnerGenerationSchema,
|
|
6
|
-
PeerTransportIdSchema,
|
|
7
|
-
PrincipalFingerprintSchema,
|
|
8
|
-
RuntimeIdSchema,
|
|
9
|
-
SigningPublicKeySchema,
|
|
10
|
-
TlsCaFingerprintSchema,
|
|
11
|
-
TransportEndpointAdvertisementSchema,
|
|
12
|
-
} from "./address-types.js";
|
|
13
|
-
import { NetworkRuntimeProtocolVersionSchema } from "./protocol-schemas.js";
|
|
14
|
-
|
|
15
|
-
const NonEmptyTrimmedStringSchema = z.string().trim().min(1);
|
|
16
|
-
const NonBlankVerbatimStringSchema = z
|
|
17
|
-
.string()
|
|
18
|
-
.min(1)
|
|
19
|
-
.refine((value) => value.trim().length > 0);
|
|
20
|
-
|
|
21
|
-
export const RuntimeBootstrapRevisionSchema = z.number().int().nonnegative();
|
|
22
|
-
export type RuntimeBootstrapRevision = z.infer<typeof RuntimeBootstrapRevisionSchema>;
|
|
23
|
-
|
|
24
|
-
export const RuntimeBootstrapPhaseSchema = z.enum([
|
|
25
|
-
"starting",
|
|
26
|
-
"tls_bound",
|
|
27
|
-
"control_ready",
|
|
28
|
-
"network_ready",
|
|
29
|
-
"mesh_ready",
|
|
30
|
-
"degraded",
|
|
31
|
-
"stopped",
|
|
32
|
-
]);
|
|
33
|
-
export type RuntimeBootstrapPhase = z.infer<typeof RuntimeBootstrapPhaseSchema>;
|
|
34
|
-
|
|
35
|
-
export const RuntimeBootstrapControlEndpointSchema = z
|
|
36
|
-
.object({
|
|
37
|
-
host: NonEmptyTrimmedStringSchema,
|
|
38
|
-
port: z.number().int().min(1).max(65535),
|
|
39
|
-
})
|
|
40
|
-
.strict();
|
|
41
|
-
export type RuntimeBootstrapControlEndpoint = z.infer<typeof RuntimeBootstrapControlEndpointSchema>;
|
|
42
|
-
|
|
43
|
-
export const RuntimeBootstrapTlsSchema = z
|
|
44
|
-
.object({
|
|
45
|
-
caFingerprint: TlsCaFingerprintSchema,
|
|
46
|
-
caCertPem: NonBlankVerbatimStringSchema,
|
|
47
|
-
principalIdentity: PrincipalFingerprintSchema,
|
|
48
|
-
loopbackIdentity: LoopbackTlsIdentitySchema,
|
|
49
|
-
})
|
|
50
|
-
.strict();
|
|
51
|
-
export type RuntimeBootstrapTls = z.infer<typeof RuntimeBootstrapTlsSchema>;
|
|
52
|
-
|
|
53
|
-
export const RuntimeBootstrapIdentitySchema = z
|
|
54
|
-
.object({
|
|
55
|
-
signingPublicKey: SigningPublicKeySchema,
|
|
56
|
-
transportPublicKey: PeerTransportIdSchema,
|
|
57
|
-
transportEndpoint: TransportEndpointAdvertisementSchema,
|
|
58
|
-
displayNameSnapshot: NonEmptyTrimmedStringSchema.optional(),
|
|
59
|
-
})
|
|
60
|
-
.strict();
|
|
61
|
-
export type RuntimeBootstrapIdentity = z.infer<typeof RuntimeBootstrapIdentitySchema>;
|
|
62
|
-
|
|
63
|
-
export const RuntimeBootstrapRecordSchema = z
|
|
64
|
-
.object({
|
|
65
|
-
nodeId: NodeIdSchema,
|
|
66
|
-
runtimeId: RuntimeIdSchema,
|
|
67
|
-
arionName: NonEmptyTrimmedStringSchema.optional(),
|
|
68
|
-
ownerGeneration: OwnerGenerationSchema,
|
|
69
|
-
bootstrapRevision: RuntimeBootstrapRevisionSchema,
|
|
70
|
-
phase: RuntimeBootstrapPhaseSchema,
|
|
71
|
-
protocolVersion: NetworkRuntimeProtocolVersionSchema,
|
|
72
|
-
controlEndpoint: RuntimeBootstrapControlEndpointSchema,
|
|
73
|
-
displayNameSnapshot: NonEmptyTrimmedStringSchema.optional(),
|
|
74
|
-
signingPublicKey: SigningPublicKeySchema,
|
|
75
|
-
transportPublicKey: PeerTransportIdSchema,
|
|
76
|
-
transportEndpoint: TransportEndpointAdvertisementSchema,
|
|
77
|
-
tls: RuntimeBootstrapTlsSchema,
|
|
78
|
-
publishedAt: NonEmptyTrimmedStringSchema,
|
|
79
|
-
degradedReason: NonEmptyTrimmedStringSchema.optional(),
|
|
80
|
-
failedPhase: RuntimeBootstrapPhaseSchema.optional(),
|
|
81
|
-
})
|
|
82
|
-
.strict();
|
|
83
|
-
export type RuntimeBootstrapRecord = z.infer<typeof RuntimeBootstrapRecordSchema>;
|
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
import os from "node:os";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { promises as fs } from "node:fs";
|
|
4
|
-
|
|
5
|
-
const OUTLOOK_SESSION_DIR = path.join(os.homedir(), ".aria", "outlook-session");
|
|
6
|
-
const OUTLOOK_TOKEN_CACHE = path.join(os.homedir(), ".aria", "cache", "outlook-token.json");
|
|
7
|
-
const OUTLOOK_WEB_URL = "https://outlook.office.com/mail/";
|
|
8
|
-
// Outlook web uses outlook.office.com-scoped tokens, not graph.microsoft.com.
|
|
9
|
-
// The Outlook REST v2 API at outlook.office.com/api/v2.0 accepts these tokens.
|
|
10
|
-
const OUTLOOK_REST_API_BASE = "https://outlook.office.com/api/v2.0";
|
|
11
|
-
const DEFAULT_BOOTSTRAP_TIMEOUT_MS = 60_000;
|
|
12
|
-
|
|
13
|
-
interface CachedToken {
|
|
14
|
-
bearerToken: string;
|
|
15
|
-
accountEmail: string;
|
|
16
|
-
expiresAt: number; // epoch ms
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function loadCachedToken(): Promise<CachedToken | null> {
|
|
20
|
-
try {
|
|
21
|
-
const raw = await fs.readFile(OUTLOOK_TOKEN_CACHE, "utf-8");
|
|
22
|
-
const cached = JSON.parse(raw) as CachedToken;
|
|
23
|
-
// Token valid if >5 min remaining
|
|
24
|
-
if (cached.bearerToken && cached.expiresAt > Date.now() + 5 * 60_000) {
|
|
25
|
-
return cached;
|
|
26
|
-
}
|
|
27
|
-
} catch {
|
|
28
|
-
// no cache or invalid
|
|
29
|
-
}
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async function saveCachedToken(token: string, email: string): Promise<void> {
|
|
34
|
-
// Decode JWT to get expiry
|
|
35
|
-
let exp = Date.now() + 60 * 60_000; // default 1h
|
|
36
|
-
try {
|
|
37
|
-
const part = token.split(".")[1];
|
|
38
|
-
if (!part) throw new Error("no payload");
|
|
39
|
-
const payload = JSON.parse(Buffer.from(part, "base64").toString());
|
|
40
|
-
if (payload.exp) exp = payload.exp * 1000;
|
|
41
|
-
} catch {
|
|
42
|
-
/* best-effort */
|
|
43
|
-
}
|
|
44
|
-
const cached: CachedToken = { bearerToken: token, accountEmail: email, expiresAt: exp };
|
|
45
|
-
await fs.mkdir(path.dirname(OUTLOOK_TOKEN_CACHE), { recursive: true });
|
|
46
|
-
await fs.writeFile(OUTLOOK_TOKEN_CACHE, JSON.stringify(cached, null, 2));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface OutlookMessageView {
|
|
50
|
-
id: string;
|
|
51
|
-
subject: string;
|
|
52
|
-
from: { name: string; email: string };
|
|
53
|
-
toRecipients: { name: string; email: string }[];
|
|
54
|
-
receivedDateTime: string;
|
|
55
|
-
isRead: boolean;
|
|
56
|
-
hasAttachments: boolean;
|
|
57
|
-
bodyPreview: string;
|
|
58
|
-
conversationId: string;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export interface OutlookMessageDetail extends OutlookMessageView {
|
|
62
|
-
body: { contentType: string; content: string };
|
|
63
|
-
ccRecipients: { name: string; email: string }[];
|
|
64
|
-
importance: string;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export interface OutlookListMessagesResult {
|
|
68
|
-
accountEmail: string;
|
|
69
|
-
folder: string;
|
|
70
|
-
messages: OutlookMessageView[];
|
|
71
|
-
totalCount: number;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export interface OutlookSendResult {
|
|
75
|
-
accountEmail: string;
|
|
76
|
-
status: "sent";
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export interface OutlookDesktopClient {
|
|
80
|
-
getAccountEmail(): string;
|
|
81
|
-
listMessages(input: {
|
|
82
|
-
folder?: string;
|
|
83
|
-
limit?: number;
|
|
84
|
-
filter?: string;
|
|
85
|
-
search?: string;
|
|
86
|
-
}): Promise<OutlookListMessagesResult>;
|
|
87
|
-
getMessage(input: { messageId: string }): Promise<OutlookMessageDetail>;
|
|
88
|
-
sendMessage(input: {
|
|
89
|
-
to: string[];
|
|
90
|
-
cc?: string[];
|
|
91
|
-
subject: string;
|
|
92
|
-
body: string;
|
|
93
|
-
bodyType?: "text" | "html";
|
|
94
|
-
}): Promise<OutlookSendResult>;
|
|
95
|
-
replyMessage(input: {
|
|
96
|
-
messageId: string;
|
|
97
|
-
body: string;
|
|
98
|
-
bodyType?: "text" | "html";
|
|
99
|
-
replyAll?: boolean;
|
|
100
|
-
}): Promise<OutlookSendResult>;
|
|
101
|
-
close(): Promise<void>;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Outlook REST v2 returns PascalCase keys (Subject, From, EmailAddress)
|
|
105
|
-
// while Graph API uses camelCase (subject, from, emailAddress).
|
|
106
|
-
// Helper to read a field with either casing.
|
|
107
|
-
function field(obj: Record<string, unknown>, camelKey: string): unknown {
|
|
108
|
-
if (camelKey in obj) return obj[camelKey];
|
|
109
|
-
const pascalKey = camelKey.charAt(0).toUpperCase() + camelKey.slice(1);
|
|
110
|
-
return obj[pascalKey];
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function fieldStr(obj: Record<string, unknown>, camelKey: string): string {
|
|
114
|
-
const v = field(obj, camelKey);
|
|
115
|
-
return typeof v === "string" ? v : "";
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function parseRecipient(
|
|
119
|
-
recipient: Record<string, unknown>,
|
|
120
|
-
): { name: string; email: string } | null {
|
|
121
|
-
const emailAddress = (field(recipient, "emailAddress") as Record<string, unknown>) ?? null;
|
|
122
|
-
if (!emailAddress || typeof emailAddress !== "object") return null;
|
|
123
|
-
return {
|
|
124
|
-
name: fieldStr(emailAddress, "name"),
|
|
125
|
-
email: fieldStr(emailAddress, "address"),
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function parseRecipients(raw: unknown): { name: string; email: string }[] {
|
|
130
|
-
if (!Array.isArray(raw)) return [];
|
|
131
|
-
return raw
|
|
132
|
-
.filter((r): r is Record<string, unknown> => !!r && typeof r === "object")
|
|
133
|
-
.map(parseRecipient)
|
|
134
|
-
.filter((r): r is { name: string; email: string } => r !== null);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function toMessageView(msg: Record<string, unknown>): OutlookMessageView {
|
|
138
|
-
const fromRaw = field(msg, "from");
|
|
139
|
-
const from =
|
|
140
|
-
fromRaw && typeof fromRaw === "object"
|
|
141
|
-
? parseRecipient(fromRaw as Record<string, unknown>)
|
|
142
|
-
: null;
|
|
143
|
-
return {
|
|
144
|
-
id: fieldStr(msg, "id") || fieldStr(msg, "Id"),
|
|
145
|
-
subject: fieldStr(msg, "subject"),
|
|
146
|
-
from: from ?? { name: "", email: "" },
|
|
147
|
-
toRecipients: parseRecipients(field(msg, "toRecipients")),
|
|
148
|
-
receivedDateTime: fieldStr(msg, "receivedDateTime"),
|
|
149
|
-
isRead: field(msg, "isRead") === true,
|
|
150
|
-
hasAttachments: field(msg, "hasAttachments") === true,
|
|
151
|
-
bodyPreview: fieldStr(msg, "bodyPreview"),
|
|
152
|
-
conversationId: fieldStr(msg, "conversationId"),
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function toMessageDetail(msg: Record<string, unknown>): OutlookMessageDetail {
|
|
157
|
-
const view = toMessageView(msg);
|
|
158
|
-
const bodyRaw = field(msg, "body");
|
|
159
|
-
const body = bodyRaw && typeof bodyRaw === "object" ? (bodyRaw as Record<string, unknown>) : {};
|
|
160
|
-
return {
|
|
161
|
-
...view,
|
|
162
|
-
body: {
|
|
163
|
-
contentType: fieldStr(body, "contentType") || "text",
|
|
164
|
-
content: fieldStr(body, "content"),
|
|
165
|
-
},
|
|
166
|
-
ccRecipients: parseRecipients(field(msg, "ccRecipients")),
|
|
167
|
-
importance: fieldStr(msg, "importance") || "normal",
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
async function waitForMailBearerToken(
|
|
172
|
-
page: {
|
|
173
|
-
on(
|
|
174
|
-
event: "request",
|
|
175
|
-
listener: (request: { url(): string; headers(): Record<string, string> }) => void,
|
|
176
|
-
): void;
|
|
177
|
-
off(
|
|
178
|
-
event: "request",
|
|
179
|
-
listener: (request: { url(): string; headers(): Record<string, string> }) => void,
|
|
180
|
-
): void;
|
|
181
|
-
},
|
|
182
|
-
timeoutMs: number,
|
|
183
|
-
): Promise<{ bearerToken: string; accountEmail: string }> {
|
|
184
|
-
return new Promise((resolve, reject) => {
|
|
185
|
-
const timer = setTimeout(() => {
|
|
186
|
-
page.off("request", handleRequest);
|
|
187
|
-
reject(
|
|
188
|
-
new Error(
|
|
189
|
-
"Timed out waiting for a Mail-scoped bearer token. " +
|
|
190
|
-
"Ensure you are logged in to outlook.office.com.",
|
|
191
|
-
),
|
|
192
|
-
);
|
|
193
|
-
}, timeoutMs);
|
|
194
|
-
|
|
195
|
-
const seen = new Set<string>();
|
|
196
|
-
|
|
197
|
-
const handleRequest = (request: { url(): string; headers(): Record<string, string> }) => {
|
|
198
|
-
const authHeader = request.headers()["authorization"];
|
|
199
|
-
if (!authHeader || !authHeader.startsWith("Bearer ")) return;
|
|
200
|
-
|
|
201
|
-
const bearerToken = authHeader.slice(7);
|
|
202
|
-
|
|
203
|
-
const dedup = bearerToken.substring(0, 30);
|
|
204
|
-
if (seen.has(dedup)) return;
|
|
205
|
-
seen.add(dedup);
|
|
206
|
-
|
|
207
|
-
// Decode JWT payload to extract email and scopes
|
|
208
|
-
let accountEmail = "";
|
|
209
|
-
let scp = "";
|
|
210
|
-
try {
|
|
211
|
-
const payloadB64 = bearerToken.split(".")[1];
|
|
212
|
-
if (payloadB64) {
|
|
213
|
-
const payload = JSON.parse(
|
|
214
|
-
Buffer.from(payloadB64, "base64url").toString("utf8"),
|
|
215
|
-
) as Record<string, unknown>;
|
|
216
|
-
scp = typeof payload.scp === "string" ? payload.scp : "";
|
|
217
|
-
accountEmail =
|
|
218
|
-
typeof payload.upn === "string"
|
|
219
|
-
? payload.upn
|
|
220
|
-
: typeof payload.preferred_username === "string"
|
|
221
|
-
? payload.preferred_username
|
|
222
|
-
: typeof payload.unique_name === "string"
|
|
223
|
-
? payload.unique_name
|
|
224
|
-
: "";
|
|
225
|
-
}
|
|
226
|
-
} catch {
|
|
227
|
-
// JWT decode is best-effort
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Only accept tokens with Mail.Read scope (from outlook.cloud.microsoft)
|
|
231
|
-
if (!scp.includes("Mail.Read")) return;
|
|
232
|
-
|
|
233
|
-
clearTimeout(timer);
|
|
234
|
-
page.off("request", handleRequest);
|
|
235
|
-
resolve({ bearerToken, accountEmail });
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
page.on("request", handleRequest);
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Stateless client using a cached bearer token (no Playwright needed)
|
|
243
|
-
function createStatelessClient(bearerToken: string, accountEmail: string): OutlookDesktopClient {
|
|
244
|
-
const invokeApi = async (
|
|
245
|
-
method: "GET" | "POST",
|
|
246
|
-
endpoint: string,
|
|
247
|
-
body?: Record<string, unknown>,
|
|
248
|
-
): Promise<Record<string, unknown>> => {
|
|
249
|
-
const url = `${OUTLOOK_REST_API_BASE}${endpoint}`;
|
|
250
|
-
const headers: Record<string, string> = {
|
|
251
|
-
Authorization: `Bearer ${bearerToken}`,
|
|
252
|
-
"Content-Type": "application/json",
|
|
253
|
-
};
|
|
254
|
-
const resp = await fetch(url, {
|
|
255
|
-
method,
|
|
256
|
-
headers,
|
|
257
|
-
body: body ? JSON.stringify(body) : undefined,
|
|
258
|
-
});
|
|
259
|
-
if (resp.status === 204) return { status: 204 };
|
|
260
|
-
const text = await resp.text();
|
|
261
|
-
let json: Record<string, unknown>;
|
|
262
|
-
try {
|
|
263
|
-
json = JSON.parse(text);
|
|
264
|
-
} catch {
|
|
265
|
-
throw new Error(`Outlook API ${method} ${endpoint} returned non-JSON (HTTP ${resp.status}).`);
|
|
266
|
-
}
|
|
267
|
-
if (resp.status >= 400) {
|
|
268
|
-
const error =
|
|
269
|
-
json.error && typeof json.error === "object" ? (json.error as Record<string, unknown>) : {};
|
|
270
|
-
const code = typeof error.code === "string" ? error.code : `http_${resp.status}`;
|
|
271
|
-
const message = typeof error.message === "string" ? error.message : "Unknown error";
|
|
272
|
-
throw new Error(`Outlook API ${method} ${endpoint} failed: ${code} — ${message}`);
|
|
273
|
-
}
|
|
274
|
-
return json;
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
return buildClientMethods(invokeApi, accountEmail, async () => {
|
|
278
|
-
/* no-op close */
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
export async function createOutlookDesktopClient(opts?: {
|
|
283
|
-
accountHint?: string;
|
|
284
|
-
bootstrapTimeoutMs?: number;
|
|
285
|
-
}): Promise<OutlookDesktopClient> {
|
|
286
|
-
const timeoutMs = opts?.bootstrapTimeoutMs ?? DEFAULT_BOOTSTRAP_TIMEOUT_MS;
|
|
287
|
-
|
|
288
|
-
// Strategy 1: Use cached token if still valid (no Playwright needed)
|
|
289
|
-
const cached = await loadCachedToken();
|
|
290
|
-
if (cached) {
|
|
291
|
-
return createStatelessClient(cached.bearerToken, cached.accountEmail);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Strategy 2: Launch Playwright headful to get a fresh token via SSO
|
|
295
|
-
// Must be headful — Microsoft SSO blocks headless Chromium
|
|
296
|
-
await fs.mkdir(OUTLOOK_SESSION_DIR, { recursive: true });
|
|
297
|
-
const playwright = await import("playwright");
|
|
298
|
-
const context = await playwright.chromium.launchPersistentContext(OUTLOOK_SESSION_DIR, {
|
|
299
|
-
headless: false,
|
|
300
|
-
args: ["--start-maximized"],
|
|
301
|
-
viewport: null,
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
const page = context.pages()[0] ?? (await context.newPage());
|
|
305
|
-
|
|
306
|
-
const bootstrapPromise = waitForMailBearerToken(page, timeoutMs);
|
|
307
|
-
await page.goto(OUTLOOK_WEB_URL, {
|
|
308
|
-
waitUntil: "domcontentloaded",
|
|
309
|
-
timeout: timeoutMs,
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
const { bearerToken, accountEmail } = await bootstrapPromise;
|
|
313
|
-
|
|
314
|
-
// Cache the token for subsequent calls (avoids launching Playwright)
|
|
315
|
-
await saveCachedToken(bearerToken, accountEmail);
|
|
316
|
-
|
|
317
|
-
// Close browser immediately — we have the token, use stateless client
|
|
318
|
-
await page.close().catch(() => undefined);
|
|
319
|
-
await context.close().catch(() => undefined);
|
|
320
|
-
|
|
321
|
-
return createStatelessClient(bearerToken, accountEmail);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
type ApiInvoker = (
|
|
325
|
-
method: "GET" | "POST",
|
|
326
|
-
endpoint: string,
|
|
327
|
-
body?: Record<string, unknown>,
|
|
328
|
-
) => Promise<Record<string, unknown>>;
|
|
329
|
-
|
|
330
|
-
function buildClientMethods(
|
|
331
|
-
invokeApi: ApiInvoker,
|
|
332
|
-
accountEmail: string,
|
|
333
|
-
closeFn: () => Promise<void>,
|
|
334
|
-
): OutlookDesktopClient {
|
|
335
|
-
return {
|
|
336
|
-
getAccountEmail: () => accountEmail,
|
|
337
|
-
|
|
338
|
-
listMessages: async ({ folder = "inbox", limit = 20, filter, search }) => {
|
|
339
|
-
const params = new URLSearchParams();
|
|
340
|
-
params.set("$top", String(Math.max(1, Math.min(limit, 50))));
|
|
341
|
-
params.set(
|
|
342
|
-
"$select",
|
|
343
|
-
"Id,Subject,From,ToRecipients,ReceivedDateTime,IsRead,HasAttachments,BodyPreview,ConversationId",
|
|
344
|
-
);
|
|
345
|
-
params.set("$orderby", "ReceivedDateTime desc");
|
|
346
|
-
if (filter) params.set("$filter", filter);
|
|
347
|
-
if (search) params.set("$search", `"${search}"`);
|
|
348
|
-
|
|
349
|
-
const endpoint = `/me/mailFolders/${encodeURIComponent(folder)}/messages?${params.toString()}`;
|
|
350
|
-
const json = await invokeApi("GET", endpoint);
|
|
351
|
-
|
|
352
|
-
const rawMessages = Array.isArray(json.value) ? json.value : [];
|
|
353
|
-
const messages = rawMessages
|
|
354
|
-
.filter((m): m is Record<string, unknown> => !!m && typeof m === "object")
|
|
355
|
-
.map(toMessageView);
|
|
356
|
-
|
|
357
|
-
return {
|
|
358
|
-
accountEmail,
|
|
359
|
-
folder,
|
|
360
|
-
messages,
|
|
361
|
-
totalCount:
|
|
362
|
-
typeof json["@odata.count"] === "number" ? json["@odata.count"] : messages.length,
|
|
363
|
-
};
|
|
364
|
-
},
|
|
365
|
-
|
|
366
|
-
getMessage: async ({ messageId }) => {
|
|
367
|
-
const json = await invokeApi("GET", `/me/messages/${encodeURIComponent(messageId)}`);
|
|
368
|
-
return toMessageDetail(json);
|
|
369
|
-
},
|
|
370
|
-
|
|
371
|
-
sendMessage: async ({ to, cc, subject, body, bodyType = "text" }) => {
|
|
372
|
-
const toRecipients = to.map((email) => ({
|
|
373
|
-
EmailAddress: { Address: email },
|
|
374
|
-
}));
|
|
375
|
-
const ccRecipients = (cc ?? []).map((email) => ({
|
|
376
|
-
EmailAddress: { Address: email },
|
|
377
|
-
}));
|
|
378
|
-
|
|
379
|
-
await invokeApi("POST", "/me/sendMail", {
|
|
380
|
-
Message: {
|
|
381
|
-
Subject: subject,
|
|
382
|
-
Body: { ContentType: bodyType === "html" ? "HTML" : "Text", Content: body },
|
|
383
|
-
ToRecipients: toRecipients,
|
|
384
|
-
...(ccRecipients.length > 0 ? { CcRecipients: ccRecipients } : {}),
|
|
385
|
-
},
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
return { accountEmail, status: "sent" as const };
|
|
389
|
-
},
|
|
390
|
-
|
|
391
|
-
replyMessage: async ({ messageId, body, bodyType = "text", replyAll = false }) => {
|
|
392
|
-
const replyMethod = replyAll ? "ReplyAll" : "Reply";
|
|
393
|
-
await invokeApi("POST", `/me/messages/${encodeURIComponent(messageId)}/${replyMethod}`, {
|
|
394
|
-
Comment: body,
|
|
395
|
-
...(bodyType === "html"
|
|
396
|
-
? {
|
|
397
|
-
Message: {
|
|
398
|
-
Body: { ContentType: "HTML", Content: body },
|
|
399
|
-
},
|
|
400
|
-
}
|
|
401
|
-
: {}),
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
return { accountEmail, status: "sent" as const };
|
|
405
|
-
},
|
|
406
|
-
|
|
407
|
-
close: closeFn,
|
|
408
|
-
};
|
|
409
|
-
}
|
package/src/policy.ts
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Policy Engine
|
|
3
|
-
*
|
|
4
|
-
* Evaluates whether a tool is allowed based on allow/deny lists with group expansion.
|
|
5
|
-
* Supports layered policy merging (intersection semantics) for arion + RunOptions policies.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export interface ToolPolicy {
|
|
9
|
-
/** Tool names or group names to allow. Empty array or undefined = allow all */
|
|
10
|
-
allow?: string[];
|
|
11
|
-
/** Tool names or group names to deny. Applied after allow. Deny wins. */
|
|
12
|
-
deny?: string[];
|
|
13
|
-
/**
|
|
14
|
-
* Internal marker used by policy merging:
|
|
15
|
-
* when true, treat allow (even empty) as an explicit restriction.
|
|
16
|
-
* This preserves deny-all semantics for empty intersections.
|
|
17
|
-
*/
|
|
18
|
-
restrictAllow?: boolean;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Built-in tool groups */
|
|
22
|
-
export const TOOL_GROUPS: Record<string, string[]> = {
|
|
23
|
-
"group:memory": [
|
|
24
|
-
"remember",
|
|
25
|
-
"recall",
|
|
26
|
-
"forget",
|
|
27
|
-
"recall_knowledge",
|
|
28
|
-
"reflect",
|
|
29
|
-
"search",
|
|
30
|
-
"learn",
|
|
31
|
-
"session_history",
|
|
32
|
-
],
|
|
33
|
-
"group:web": ["web_search", "web_fetch", "browse", "browser"],
|
|
34
|
-
"group:filesystem": ["read_file", "write_file", "edit_file", "glob", "grep", "ls", "apply_patch"],
|
|
35
|
-
"group:shell": [
|
|
36
|
-
"bash",
|
|
37
|
-
"exec",
|
|
38
|
-
"spawn",
|
|
39
|
-
"kill",
|
|
40
|
-
"list_processes",
|
|
41
|
-
"wait_process",
|
|
42
|
-
"write_stdin",
|
|
43
|
-
"process",
|
|
44
|
-
],
|
|
45
|
-
"group:arion": [
|
|
46
|
-
"hatch_arion",
|
|
47
|
-
"wake_arion",
|
|
48
|
-
"rest_arion",
|
|
49
|
-
"retire_arion",
|
|
50
|
-
"delegate_arion",
|
|
51
|
-
"manage_network",
|
|
52
|
-
"list_clients",
|
|
53
|
-
"deploy",
|
|
54
|
-
],
|
|
55
|
-
"group:meta": [
|
|
56
|
-
"ask_user",
|
|
57
|
-
"quest_update",
|
|
58
|
-
"quest_list",
|
|
59
|
-
"search",
|
|
60
|
-
"learn",
|
|
61
|
-
"learn_tool",
|
|
62
|
-
"learn_skill",
|
|
63
|
-
"create_tool",
|
|
64
|
-
"create_skill",
|
|
65
|
-
"use_skill",
|
|
66
|
-
"restart",
|
|
67
|
-
"spawn_worker",
|
|
68
|
-
"check_delegation",
|
|
69
|
-
"pause_delegation",
|
|
70
|
-
"resume_delegation",
|
|
71
|
-
"quest_report",
|
|
72
|
-
"self_diagnose",
|
|
73
|
-
],
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Expand group references in a policy list.
|
|
78
|
-
* "group:memory" → ["remember", "recall", "forget", "reflect"]
|
|
79
|
-
* Individual tool names pass through unchanged.
|
|
80
|
-
* Unknown group names are ignored (treated as empty).
|
|
81
|
-
*/
|
|
82
|
-
export function expandGroups(names: string[]): Set<string> {
|
|
83
|
-
const result = new Set<string>();
|
|
84
|
-
for (const name of names) {
|
|
85
|
-
const lower = name.toLowerCase();
|
|
86
|
-
if (lower.startsWith("group:")) {
|
|
87
|
-
const members = TOOL_GROUPS[lower];
|
|
88
|
-
if (members) {
|
|
89
|
-
for (const member of members) {
|
|
90
|
-
result.add(member.toLowerCase());
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Unknown group names are silently ignored
|
|
94
|
-
} else {
|
|
95
|
-
result.add(lower);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return result;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Evaluate whether a tool is allowed by a policy.
|
|
103
|
-
* Rules:
|
|
104
|
-
* 1. If allow is empty/undefined and restrictAllow is false/undefined
|
|
105
|
-
* → all tools allowed (then check deny)
|
|
106
|
-
* 2. If allow is non-empty OR restrictAllow=true
|
|
107
|
-
* → only listed tools/groups allowed (empty allow + restrictAllow=true denies all)
|
|
108
|
-
* 3. Deny always wins over allow
|
|
109
|
-
*/
|
|
110
|
-
export function isToolAllowed(toolName: string, policy: ToolPolicy): boolean {
|
|
111
|
-
const normalized = toolName.toLowerCase();
|
|
112
|
-
|
|
113
|
-
// Check allow list: when restricted, tool must be in allowed set.
|
|
114
|
-
const isAllowRestricted =
|
|
115
|
-
policy.restrictAllow === true || (policy.allow !== undefined && policy.allow.length > 0);
|
|
116
|
-
if (isAllowRestricted) {
|
|
117
|
-
const allowed = expandGroups(policy.allow ?? []);
|
|
118
|
-
if (!allowed.has(normalized)) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Check deny list: deny always wins
|
|
124
|
-
if (policy.deny && policy.deny.length > 0) {
|
|
125
|
-
const denied = expandGroups(policy.deny);
|
|
126
|
-
if (denied.has(normalized)) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Merge two policies (intersection). Used for layered evaluation:
|
|
136
|
-
* arion policy ∩ RunOptions policy = effective policy.
|
|
137
|
-
* A tool must be allowed by BOTH layers.
|
|
138
|
-
*/
|
|
139
|
-
export function mergePolicies(a: ToolPolicy, b: ToolPolicy): ToolPolicy {
|
|
140
|
-
// Merge deny: union of both deny lists
|
|
141
|
-
const mergedDeny = [...(a.deny ?? []), ...(b.deny ?? [])];
|
|
142
|
-
|
|
143
|
-
// Merge allow with restriction semantics:
|
|
144
|
-
// - both restricted: intersection (possibly empty = deny all)
|
|
145
|
-
// - one restricted: inherit that restriction
|
|
146
|
-
// - neither restricted: unrestricted
|
|
147
|
-
const aRestricts = a.restrictAllow === true || (a.allow?.length ?? 0) > 0;
|
|
148
|
-
const bRestricts = b.restrictAllow === true || (b.allow?.length ?? 0) > 0;
|
|
149
|
-
|
|
150
|
-
let mergedAllow: string[] | undefined;
|
|
151
|
-
let mergedRestrictAllow = false;
|
|
152
|
-
|
|
153
|
-
if (aRestricts && bRestricts) {
|
|
154
|
-
const expandedA = expandGroups(a.allow ?? []);
|
|
155
|
-
const expandedB = expandGroups(b.allow ?? []);
|
|
156
|
-
mergedAllow = [...expandedA].filter((name) => expandedB.has(name));
|
|
157
|
-
mergedRestrictAllow = true;
|
|
158
|
-
} else if (aRestricts) {
|
|
159
|
-
mergedAllow = [...(a.allow ?? [])];
|
|
160
|
-
mergedRestrictAllow = true;
|
|
161
|
-
} else if (bRestricts) {
|
|
162
|
-
mergedAllow = [...(b.allow ?? [])];
|
|
163
|
-
mergedRestrictAllow = true;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return {
|
|
167
|
-
...(mergedAllow !== undefined ? { allow: mergedAllow } : {}),
|
|
168
|
-
...(mergedRestrictAllow ? { restrictAllow: true } : {}),
|
|
169
|
-
...(mergedDeny.length ? { deny: mergedDeny } : {}),
|
|
170
|
-
};
|
|
171
|
-
}
|