nduka 1.0.0
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/README.md +157 -0
- package/config/agent-tools.settings.json +70 -0
- package/config/chatbot.config.json +113 -0
- package/config/chatbot.config.schema.json +54 -0
- package/config/connectors.chatbot.json +5 -0
- package/config/llm.settings.json +416 -0
- package/config/prompts.chatbot.json +13 -0
- package/config/secure-tool-identities.example.json +21 -0
- package/config/secure-tool-identities.json +13 -0
- package/config/secure-tools.chatbot.json +82 -0
- package/config/secure-tools.example.json +200 -0
- package/config/test.env +2 -0
- package/config/tools.chatbot.json +318 -0
- package/dist/acceptance/index.d.ts +3 -0
- package/dist/acceptance/index.d.ts.map +1 -0
- package/dist/acceptance/index.js +2 -0
- package/dist/acceptance/index.js.map +1 -0
- package/dist/acceptance/runner.d.ts +57 -0
- package/dist/acceptance/runner.d.ts.map +1 -0
- package/dist/acceptance/runner.js +222 -0
- package/dist/acceptance/runner.js.map +1 -0
- package/dist/agent-runtime/engine.d.ts +73 -0
- package/dist/agent-runtime/engine.d.ts.map +1 -0
- package/dist/agent-runtime/engine.js +169 -0
- package/dist/agent-runtime/engine.js.map +1 -0
- package/dist/agent-runtime/index.d.ts +3 -0
- package/dist/agent-runtime/index.d.ts.map +1 -0
- package/dist/agent-runtime/index.js +2 -0
- package/dist/agent-runtime/index.js.map +1 -0
- package/dist/agent-tools/agent-tool-router.d.ts +44 -0
- package/dist/agent-tools/agent-tool-router.d.ts.map +1 -0
- package/dist/agent-tools/agent-tool-router.js +196 -0
- package/dist/agent-tools/agent-tool-router.js.map +1 -0
- package/dist/agent-tools/async-tool-bridge.d.ts +31 -0
- package/dist/agent-tools/async-tool-bridge.d.ts.map +1 -0
- package/dist/agent-tools/async-tool-bridge.js +65 -0
- package/dist/agent-tools/async-tool-bridge.js.map +1 -0
- package/dist/agent-tools/async-tool-processor.d.ts +19 -0
- package/dist/agent-tools/async-tool-processor.d.ts.map +1 -0
- package/dist/agent-tools/async-tool-processor.js +81 -0
- package/dist/agent-tools/async-tool-processor.js.map +1 -0
- package/dist/agent-tools/claude-tool-adapter.d.ts +20 -0
- package/dist/agent-tools/claude-tool-adapter.d.ts.map +1 -0
- package/dist/agent-tools/claude-tool-adapter.js +64 -0
- package/dist/agent-tools/claude-tool-adapter.js.map +1 -0
- package/dist/agent-tools/claude-tool-planner.d.ts +35 -0
- package/dist/agent-tools/claude-tool-planner.d.ts.map +1 -0
- package/dist/agent-tools/claude-tool-planner.js +83 -0
- package/dist/agent-tools/claude-tool-planner.js.map +1 -0
- package/dist/agent-tools/connector-tool-adapter.d.ts +16 -0
- package/dist/agent-tools/connector-tool-adapter.d.ts.map +1 -0
- package/dist/agent-tools/connector-tool-adapter.js +62 -0
- package/dist/agent-tools/connector-tool-adapter.js.map +1 -0
- package/dist/agent-tools/context-routing-policy.d.ts +4 -0
- package/dist/agent-tools/context-routing-policy.d.ts.map +1 -0
- package/dist/agent-tools/context-routing-policy.js +20 -0
- package/dist/agent-tools/context-routing-policy.js.map +1 -0
- package/dist/agent-tools/index.d.ts +18 -0
- package/dist/agent-tools/index.d.ts.map +1 -0
- package/dist/agent-tools/index.js +18 -0
- package/dist/agent-tools/index.js.map +1 -0
- package/dist/agent-tools/logging.d.ts +3 -0
- package/dist/agent-tools/logging.d.ts.map +1 -0
- package/dist/agent-tools/logging.js +15 -0
- package/dist/agent-tools/logging.js.map +1 -0
- package/dist/agent-tools/mcp-tool-adapter.d.ts +18 -0
- package/dist/agent-tools/mcp-tool-adapter.d.ts.map +1 -0
- package/dist/agent-tools/mcp-tool-adapter.js +76 -0
- package/dist/agent-tools/mcp-tool-adapter.js.map +1 -0
- package/dist/agent-tools/settings.d.ts +50 -0
- package/dist/agent-tools/settings.d.ts.map +1 -0
- package/dist/agent-tools/settings.js +101 -0
- package/dist/agent-tools/settings.js.map +1 -0
- package/dist/agent-tools/tool-candidate-detector.d.ts +16 -0
- package/dist/agent-tools/tool-candidate-detector.d.ts.map +1 -0
- package/dist/agent-tools/tool-candidate-detector.js +165 -0
- package/dist/agent-tools/tool-candidate-detector.js.map +1 -0
- package/dist/agent-tools/tool-chain-runner.d.ts +24 -0
- package/dist/agent-tools/tool-chain-runner.d.ts.map +1 -0
- package/dist/agent-tools/tool-chain-runner.js +39 -0
- package/dist/agent-tools/tool-chain-runner.js.map +1 -0
- package/dist/agent-tools/tool-context-store.d.ts +28 -0
- package/dist/agent-tools/tool-context-store.d.ts.map +1 -0
- package/dist/agent-tools/tool-context-store.js +127 -0
- package/dist/agent-tools/tool-context-store.js.map +1 -0
- package/dist/agent-tools/tool-followup-resolver.d.ts +18 -0
- package/dist/agent-tools/tool-followup-resolver.d.ts.map +1 -0
- package/dist/agent-tools/tool-followup-resolver.js +98 -0
- package/dist/agent-tools/tool-followup-resolver.js.map +1 -0
- package/dist/agent-tools/tool-plan-validator.d.ts +13 -0
- package/dist/agent-tools/tool-plan-validator.d.ts.map +1 -0
- package/dist/agent-tools/tool-plan-validator.js +119 -0
- package/dist/agent-tools/tool-plan-validator.js.map +1 -0
- package/dist/agent-tools/tool-result-summarizer.d.ts +17 -0
- package/dist/agent-tools/tool-result-summarizer.d.ts.map +1 -0
- package/dist/agent-tools/tool-result-summarizer.js +41 -0
- package/dist/agent-tools/tool-result-summarizer.js.map +1 -0
- package/dist/agent-tools/tool-session-store.d.ts +49 -0
- package/dist/agent-tools/tool-session-store.d.ts.map +1 -0
- package/dist/agent-tools/tool-session-store.js +104 -0
- package/dist/agent-tools/tool-session-store.js.map +1 -0
- package/dist/agent-tools/types.d.ts +97 -0
- package/dist/agent-tools/types.d.ts.map +1 -0
- package/dist/agent-tools/types.js +2 -0
- package/dist/agent-tools/types.js.map +1 -0
- package/dist/ai/execution-controller.d.ts +62 -0
- package/dist/ai/execution-controller.d.ts.map +1 -0
- package/dist/ai/execution-controller.js +117 -0
- package/dist/ai/execution-controller.js.map +1 -0
- package/dist/ai/index.d.ts +3 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai-context/engine.d.ts +85 -0
- package/dist/ai-context/engine.d.ts.map +1 -0
- package/dist/ai-context/engine.js +173 -0
- package/dist/ai-context/engine.js.map +1 -0
- package/dist/ai-context/index.d.ts +3 -0
- package/dist/ai-context/index.d.ts.map +1 -0
- package/dist/ai-context/index.js +2 -0
- package/dist/ai-context/index.js.map +1 -0
- package/dist/ai-router/index.d.ts +3 -0
- package/dist/ai-router/index.d.ts.map +1 -0
- package/dist/ai-router/index.js +2 -0
- package/dist/ai-router/index.js.map +1 -0
- package/dist/ai-router/router.d.ts +68 -0
- package/dist/ai-router/router.d.ts.map +1 -0
- package/dist/ai-router/router.js +260 -0
- package/dist/ai-router/router.js.map +1 -0
- package/dist/async-jobs/context-resolver-planner.d.ts +35 -0
- package/dist/async-jobs/context-resolver-planner.d.ts.map +1 -0
- package/dist/async-jobs/context-resolver-planner.js +324 -0
- package/dist/async-jobs/context-resolver-planner.js.map +1 -0
- package/dist/async-jobs/gateway-worker.d.ts +22 -0
- package/dist/async-jobs/gateway-worker.d.ts.map +1 -0
- package/dist/async-jobs/gateway-worker.js +53 -0
- package/dist/async-jobs/gateway-worker.js.map +1 -0
- package/dist/async-jobs/job-delivery.d.ts +16 -0
- package/dist/async-jobs/job-delivery.d.ts.map +1 -0
- package/dist/async-jobs/job-delivery.js +30 -0
- package/dist/async-jobs/job-delivery.js.map +1 -0
- package/dist/async-jobs/job-runner.d.ts +39 -0
- package/dist/async-jobs/job-runner.d.ts.map +1 -0
- package/dist/async-jobs/job-runner.js +67 -0
- package/dist/async-jobs/job-runner.js.map +1 -0
- package/dist/async-jobs/job-store.d.ts +27 -0
- package/dist/async-jobs/job-store.d.ts.map +1 -0
- package/dist/async-jobs/job-store.js +168 -0
- package/dist/async-jobs/job-store.js.map +1 -0
- package/dist/async-jobs/job-types.d.ts +59 -0
- package/dist/async-jobs/job-types.d.ts.map +1 -0
- package/dist/async-jobs/job-types.js +2 -0
- package/dist/async-jobs/job-types.js.map +1 -0
- package/dist/async-jobs/job-utils.d.ts +16 -0
- package/dist/async-jobs/job-utils.d.ts.map +1 -0
- package/dist/async-jobs/job-utils.js +72 -0
- package/dist/async-jobs/job-utils.js.map +1 -0
- package/dist/async-jobs/job-worker.d.ts +31 -0
- package/dist/async-jobs/job-worker.d.ts.map +1 -0
- package/dist/async-jobs/job-worker.js +60 -0
- package/dist/async-jobs/job-worker.js.map +1 -0
- package/dist/async-jobs/message-triage-planner.d.ts +52 -0
- package/dist/async-jobs/message-triage-planner.d.ts.map +1 -0
- package/dist/async-jobs/message-triage-planner.js +262 -0
- package/dist/async-jobs/message-triage-planner.js.map +1 -0
- package/dist/async-jobs/request-controller.d.ts +65 -0
- package/dist/async-jobs/request-controller.d.ts.map +1 -0
- package/dist/async-jobs/request-controller.js +471 -0
- package/dist/async-jobs/request-controller.js.map +1 -0
- package/dist/async-jobs/routing-context.d.ts +12 -0
- package/dist/async-jobs/routing-context.d.ts.map +1 -0
- package/dist/async-jobs/routing-context.js +15 -0
- package/dist/async-jobs/routing-context.js.map +1 -0
- package/dist/async-jobs/tool-intent-planner.d.ts +51 -0
- package/dist/async-jobs/tool-intent-planner.d.ts.map +1 -0
- package/dist/async-jobs/tool-intent-planner.js +241 -0
- package/dist/async-jobs/tool-intent-planner.js.map +1 -0
- package/dist/async-jobs/tool-processor.d.ts +31 -0
- package/dist/async-jobs/tool-processor.d.ts.map +1 -0
- package/dist/async-jobs/tool-processor.js +263 -0
- package/dist/async-jobs/tool-processor.js.map +1 -0
- package/dist/auth/session-admin.d.ts +19 -0
- package/dist/auth/session-admin.d.ts.map +1 -0
- package/dist/auth/session-admin.js +52 -0
- package/dist/auth/session-admin.js.map +1 -0
- package/dist/chat-registry/aliases.d.ts +55 -0
- package/dist/chat-registry/aliases.d.ts.map +1 -0
- package/dist/chat-registry/aliases.js +170 -0
- package/dist/chat-registry/aliases.js.map +1 -0
- package/dist/chat-registry/index.d.ts +3 -0
- package/dist/chat-registry/index.d.ts.map +1 -0
- package/dist/chat-registry/index.js +2 -0
- package/dist/chat-registry/index.js.map +1 -0
- package/dist/chat-registry/service.d.ts +54 -0
- package/dist/chat-registry/service.d.ts.map +1 -0
- package/dist/chat-registry/service.js +224 -0
- package/dist/chat-registry/service.js.map +1 -0
- package/dist/chat-state/execution-gate.d.ts +66 -0
- package/dist/chat-state/execution-gate.d.ts.map +1 -0
- package/dist/chat-state/execution-gate.js +143 -0
- package/dist/chat-state/execution-gate.js.map +1 -0
- package/dist/chat-state/index.d.ts +7 -0
- package/dist/chat-state/index.d.ts.map +1 -0
- package/dist/chat-state/index.js +4 -0
- package/dist/chat-state/index.js.map +1 -0
- package/dist/chat-state/invariants.d.ts +32 -0
- package/dist/chat-state/invariants.d.ts.map +1 -0
- package/dist/chat-state/invariants.js +95 -0
- package/dist/chat-state/invariants.js.map +1 -0
- package/dist/chat-state/store.d.ts +55 -0
- package/dist/chat-state/store.d.ts.map +1 -0
- package/dist/chat-state/store.js +220 -0
- package/dist/chat-state/store.js.map +1 -0
- package/dist/cli/admin-inspection.d.ts +17 -0
- package/dist/cli/admin-inspection.d.ts.map +1 -0
- package/dist/cli/admin-inspection.js +161 -0
- package/dist/cli/admin-inspection.js.map +1 -0
- package/dist/cli/connector-admin.d.ts +2 -0
- package/dist/cli/connector-admin.d.ts.map +1 -0
- package/dist/cli/connector-admin.js +28 -0
- package/dist/cli/connector-admin.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +709 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/chatbot-config.d.ts +108 -0
- package/dist/config/chatbot-config.d.ts.map +1 -0
- package/dist/config/chatbot-config.js +280 -0
- package/dist/config/chatbot-config.js.map +1 -0
- package/dist/config/config-editor.d.ts +16 -0
- package/dist/config/config-editor.d.ts.map +1 -0
- package/dist/config/config-editor.js +367 -0
- package/dist/config/config-editor.js.map +1 -0
- package/dist/config/local-env-editor.d.ts +22 -0
- package/dist/config/local-env-editor.d.ts.map +1 -0
- package/dist/config/local-env-editor.js +129 -0
- package/dist/config/local-env-editor.js.map +1 -0
- package/dist/config/runtime-feature-flags.d.ts +19 -0
- package/dist/config/runtime-feature-flags.d.ts.map +1 -0
- package/dist/config/runtime-feature-flags.js +39 -0
- package/dist/config/runtime-feature-flags.js.map +1 -0
- package/dist/connectors/audit.d.ts +32 -0
- package/dist/connectors/audit.d.ts.map +1 -0
- package/dist/connectors/audit.js +77 -0
- package/dist/connectors/audit.js.map +1 -0
- package/dist/connectors/config.d.ts +9 -0
- package/dist/connectors/config.d.ts.map +1 -0
- package/dist/connectors/config.js +66 -0
- package/dist/connectors/config.js.map +1 -0
- package/dist/connectors/dns-guard.d.ts +7 -0
- package/dist/connectors/dns-guard.d.ts.map +1 -0
- package/dist/connectors/dns-guard.js +70 -0
- package/dist/connectors/dns-guard.js.map +1 -0
- package/dist/connectors/executor.d.ts +30 -0
- package/dist/connectors/executor.d.ts.map +1 -0
- package/dist/connectors/executor.js +80 -0
- package/dist/connectors/executor.js.map +1 -0
- package/dist/connectors/manifest.d.ts +18 -0
- package/dist/connectors/manifest.d.ts.map +1 -0
- package/dist/connectors/manifest.js +72 -0
- package/dist/connectors/manifest.js.map +1 -0
- package/dist/connectors/runner.d.ts +17 -0
- package/dist/connectors/runner.d.ts.map +1 -0
- package/dist/connectors/runner.js +36 -0
- package/dist/connectors/runner.js.map +1 -0
- package/dist/connectors/url-guard.d.ts +7 -0
- package/dist/connectors/url-guard.d.ts.map +1 -0
- package/dist/connectors/url-guard.js +50 -0
- package/dist/connectors/url-guard.js.map +1 -0
- package/dist/conversation/connector-command-controller.d.ts +31 -0
- package/dist/conversation/connector-command-controller.d.ts.map +1 -0
- package/dist/conversation/connector-command-controller.js +105 -0
- package/dist/conversation/connector-command-controller.js.map +1 -0
- package/dist/conversation/context-command-controller.d.ts +23 -0
- package/dist/conversation/context-command-controller.d.ts.map +1 -0
- package/dist/conversation/context-command-controller.js +184 -0
- package/dist/conversation/context-command-controller.js.map +1 -0
- package/dist/conversation/group-reply-policy.d.ts +3 -0
- package/dist/conversation/group-reply-policy.d.ts.map +1 -0
- package/dist/conversation/group-reply-policy.js +17 -0
- package/dist/conversation/group-reply-policy.js.map +1 -0
- package/dist/conversation/index.d.ts +3 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +2 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/lock-manager.d.ts +47 -0
- package/dist/conversation/lock-manager.d.ts.map +1 -0
- package/dist/conversation/lock-manager.js +144 -0
- package/dist/conversation/lock-manager.js.map +1 -0
- package/dist/conversation/memory-trace.d.ts +16 -0
- package/dist/conversation/memory-trace.d.ts.map +1 -0
- package/dist/conversation/memory-trace.js +13 -0
- package/dist/conversation/memory-trace.js.map +1 -0
- package/dist/conversation/natural-schedule-command-controller.d.ts +21 -0
- package/dist/conversation/natural-schedule-command-controller.d.ts.map +1 -0
- package/dist/conversation/natural-schedule-command-controller.js +180 -0
- package/dist/conversation/natural-schedule-command-controller.js.map +1 -0
- package/dist/conversation/ops.d.ts +75 -0
- package/dist/conversation/ops.d.ts.map +1 -0
- package/dist/conversation/ops.js +169 -0
- package/dist/conversation/ops.js.map +1 -0
- package/dist/conversation/owner-action-command-controller.d.ts +25 -0
- package/dist/conversation/owner-action-command-controller.d.ts.map +1 -0
- package/dist/conversation/owner-action-command-controller.js +90 -0
- package/dist/conversation/owner-action-command-controller.js.map +1 -0
- package/dist/conversation/owner-action-planner.d.ts +28 -0
- package/dist/conversation/owner-action-planner.d.ts.map +1 -0
- package/dist/conversation/owner-action-planner.js +99 -0
- package/dist/conversation/owner-action-planner.js.map +1 -0
- package/dist/conversation/rate-limiter.d.ts +22 -0
- package/dist/conversation/rate-limiter.d.ts.map +1 -0
- package/dist/conversation/rate-limiter.js +66 -0
- package/dist/conversation/rate-limiter.js.map +1 -0
- package/dist/conversation/runtime-admin-media.d.ts +11 -0
- package/dist/conversation/runtime-admin-media.d.ts.map +1 -0
- package/dist/conversation/runtime-admin-media.js +31 -0
- package/dist/conversation/runtime-admin-media.js.map +1 -0
- package/dist/conversation/runtime-group.d.ts +13 -0
- package/dist/conversation/runtime-group.d.ts.map +1 -0
- package/dist/conversation/runtime-group.js +96 -0
- package/dist/conversation/runtime-group.js.map +1 -0
- package/dist/conversation/runtime-impl.d.ts +90 -0
- package/dist/conversation/runtime-impl.d.ts.map +1 -0
- package/dist/conversation/runtime-impl.js +452 -0
- package/dist/conversation/runtime-impl.js.map +1 -0
- package/dist/conversation/runtime-kb.d.ts +36 -0
- package/dist/conversation/runtime-kb.d.ts.map +1 -0
- package/dist/conversation/runtime-kb.js +123 -0
- package/dist/conversation/runtime-kb.js.map +1 -0
- package/dist/conversation/runtime-media.d.ts +28 -0
- package/dist/conversation/runtime-media.d.ts.map +1 -0
- package/dist/conversation/runtime-media.js +93 -0
- package/dist/conversation/runtime-media.js.map +1 -0
- package/dist/conversation/runtime-production.d.ts +36 -0
- package/dist/conversation/runtime-production.d.ts.map +1 -0
- package/dist/conversation/runtime-production.js +274 -0
- package/dist/conversation/runtime-production.js.map +1 -0
- package/dist/conversation/runtime-timing.d.ts +2 -0
- package/dist/conversation/runtime-timing.d.ts.map +1 -0
- package/dist/conversation/runtime-timing.js +2 -0
- package/dist/conversation/runtime-timing.js.map +1 -0
- package/dist/conversation/runtime.d.ts +3 -0
- package/dist/conversation/runtime.d.ts.map +1 -0
- package/dist/conversation/runtime.js +2 -0
- package/dist/conversation/runtime.js.map +1 -0
- package/dist/conversation/secure-tool-natural-language-controller.d.ts +67 -0
- package/dist/conversation/secure-tool-natural-language-controller.d.ts.map +1 -0
- package/dist/conversation/secure-tool-natural-language-controller.js +634 -0
- package/dist/conversation/secure-tool-natural-language-controller.js.map +1 -0
- package/dist/conversation/secure-tool-routing.d.ts +5 -0
- package/dist/conversation/secure-tool-routing.d.ts.map +1 -0
- package/dist/conversation/secure-tool-routing.js +91 -0
- package/dist/conversation/secure-tool-routing.js.map +1 -0
- package/dist/conversation/secure-tool-runtime-utils.d.ts +4 -0
- package/dist/conversation/secure-tool-runtime-utils.d.ts.map +1 -0
- package/dist/conversation/secure-tool-runtime-utils.js +19 -0
- package/dist/conversation/secure-tool-runtime-utils.js.map +1 -0
- package/dist/conversation/slash-command.d.ts +8 -0
- package/dist/conversation/slash-command.d.ts.map +1 -0
- package/dist/conversation/slash-command.js +13 -0
- package/dist/conversation/slash-command.js.map +1 -0
- package/dist/conversation/target-resolver.d.ts +7 -0
- package/dist/conversation/target-resolver.d.ts.map +1 -0
- package/dist/conversation/target-resolver.js +23 -0
- package/dist/conversation/target-resolver.js.map +1 -0
- package/dist/copilot/engine.d.ts +102 -0
- package/dist/copilot/engine.d.ts.map +1 -0
- package/dist/copilot/engine.js +222 -0
- package/dist/copilot/engine.js.map +1 -0
- package/dist/copilot/index.d.ts +3 -0
- package/dist/copilot/index.d.ts.map +1 -0
- package/dist/copilot/index.js +2 -0
- package/dist/copilot/index.js.map +1 -0
- package/dist/database/index.d.ts +135 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +331 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/path.d.ts +2 -0
- package/dist/database/path.d.ts.map +1 -0
- package/dist/database/path.js +5 -0
- package/dist/database/path.js.map +1 -0
- package/dist/event-bus/index.d.ts +153 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +118 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/event-sourcing/index.d.ts +3 -0
- package/dist/event-sourcing/index.d.ts.map +1 -0
- package/dist/event-sourcing/index.js +2 -0
- package/dist/event-sourcing/index.js.map +1 -0
- package/dist/event-sourcing/store.d.ts +54 -0
- package/dist/event-sourcing/store.d.ts.map +1 -0
- package/dist/event-sourcing/store.js +169 -0
- package/dist/event-sourcing/store.js.map +1 -0
- package/dist/gateway/auth/index.d.ts +5 -0
- package/dist/gateway/auth/index.d.ts.map +1 -0
- package/dist/gateway/auth/index.js +5 -0
- package/dist/gateway/auth/index.js.map +1 -0
- package/dist/gateway/auth/store.d.ts +44 -0
- package/dist/gateway/auth/store.d.ts.map +1 -0
- package/dist/gateway/auth/store.js +387 -0
- package/dist/gateway/auth/store.js.map +1 -0
- package/dist/gateway/bootstrap.d.ts +2 -0
- package/dist/gateway/bootstrap.d.ts.map +1 -0
- package/dist/gateway/bootstrap.js +8 -0
- package/dist/gateway/bootstrap.js.map +1 -0
- package/dist/gateway/conn-state-machine.d.ts +25 -0
- package/dist/gateway/conn-state-machine.d.ts.map +1 -0
- package/dist/gateway/conn-state-machine.js +39 -0
- package/dist/gateway/conn-state-machine.js.map +1 -0
- package/dist/gateway/connection-state.d.ts +22 -0
- package/dist/gateway/connection-state.d.ts.map +1 -0
- package/dist/gateway/connection-state.js +60 -0
- package/dist/gateway/connection-state.js.map +1 -0
- package/dist/gateway/events/handler.d.ts +75 -0
- package/dist/gateway/events/handler.d.ts.map +1 -0
- package/dist/gateway/events/handler.js +164 -0
- package/dist/gateway/events/handler.js.map +1 -0
- package/dist/gateway/events/index.d.ts +3 -0
- package/dist/gateway/events/index.d.ts.map +1 -0
- package/dist/gateway/events/index.js +2 -0
- package/dist/gateway/events/index.js.map +1 -0
- package/dist/gateway/exit-shutdown.d.ts +5 -0
- package/dist/gateway/exit-shutdown.d.ts.map +1 -0
- package/dist/gateway/exit-shutdown.js +12 -0
- package/dist/gateway/exit-shutdown.js.map +1 -0
- package/dist/gateway/group-activation.d.ts +25 -0
- package/dist/gateway/group-activation.d.ts.map +1 -0
- package/dist/gateway/group-activation.js +78 -0
- package/dist/gateway/group-activation.js.map +1 -0
- package/dist/gateway/health/index.d.ts +3 -0
- package/dist/gateway/health/index.d.ts.map +1 -0
- package/dist/gateway/health/index.js +2 -0
- package/dist/gateway/health/index.js.map +1 -0
- package/dist/gateway/health/monitor.d.ts +63 -0
- package/dist/gateway/health/monitor.d.ts.map +1 -0
- package/dist/gateway/health/monitor.js +94 -0
- package/dist/gateway/health/monitor.js.map +1 -0
- package/dist/gateway/index.d.ts +12 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +10 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/logger.d.ts +8 -0
- package/dist/gateway/logger.d.ts.map +1 -0
- package/dist/gateway/logger.js +12 -0
- package/dist/gateway/logger.js.map +1 -0
- package/dist/gateway/media-queue-worker-runtime.d.ts +16 -0
- package/dist/gateway/media-queue-worker-runtime.d.ts.map +1 -0
- package/dist/gateway/media-queue-worker-runtime.js +35 -0
- package/dist/gateway/media-queue-worker-runtime.js.map +1 -0
- package/dist/gateway/message-buffer.d.ts +9 -0
- package/dist/gateway/message-buffer.d.ts.map +1 -0
- package/dist/gateway/message-buffer.js +16 -0
- package/dist/gateway/message-buffer.js.map +1 -0
- package/dist/gateway/outgoing-messages.d.ts +4 -0
- package/dist/gateway/outgoing-messages.d.ts.map +1 -0
- package/dist/gateway/outgoing-messages.js +25 -0
- package/dist/gateway/outgoing-messages.js.map +1 -0
- package/dist/gateway/process-lifecycle.d.ts +8 -0
- package/dist/gateway/process-lifecycle.d.ts.map +1 -0
- package/dist/gateway/process-lifecycle.js +14 -0
- package/dist/gateway/process-lifecycle.js.map +1 -0
- package/dist/gateway/process-safety.d.ts +14 -0
- package/dist/gateway/process-safety.d.ts.map +1 -0
- package/dist/gateway/process-safety.js +48 -0
- package/dist/gateway/process-safety.js.map +1 -0
- package/dist/gateway/reconnect/index.d.ts +3 -0
- package/dist/gateway/reconnect/index.d.ts.map +1 -0
- package/dist/gateway/reconnect/index.js +2 -0
- package/dist/gateway/reconnect/index.js.map +1 -0
- package/dist/gateway/reconnect/manager.d.ts +59 -0
- package/dist/gateway/reconnect/manager.d.ts.map +1 -0
- package/dist/gateway/reconnect/manager.js +195 -0
- package/dist/gateway/reconnect/manager.js.map +1 -0
- package/dist/gateway/self-echo-guard.d.ts +2 -0
- package/dist/gateway/self-echo-guard.d.ts.map +1 -0
- package/dist/gateway/self-echo-guard.js +31 -0
- package/dist/gateway/self-echo-guard.js.map +1 -0
- package/dist/gateway/server.d.ts +61 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/gateway/server.js +947 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/shutdown-registry.d.ts +5 -0
- package/dist/gateway/shutdown-registry.d.ts.map +1 -0
- package/dist/gateway/shutdown-registry.js +20 -0
- package/dist/gateway/shutdown-registry.js.map +1 -0
- package/dist/gateway/socket/connection.d.ts +45 -0
- package/dist/gateway/socket/connection.d.ts.map +1 -0
- package/dist/gateway/socket/connection.js +198 -0
- package/dist/gateway/socket/connection.js.map +1 -0
- package/dist/gateway/socket/index.d.ts +3 -0
- package/dist/gateway/socket/index.d.ts.map +1 -0
- package/dist/gateway/socket/index.js +3 -0
- package/dist/gateway/socket/index.js.map +1 -0
- package/dist/gateway/sync-mutex.d.ts +13 -0
- package/dist/gateway/sync-mutex.d.ts.map +1 -0
- package/dist/gateway/sync-mutex.js +26 -0
- package/dist/gateway/sync-mutex.js.map +1 -0
- package/dist/gateway/text-media.d.ts +23 -0
- package/dist/gateway/text-media.d.ts.map +1 -0
- package/dist/gateway/text-media.js +30 -0
- package/dist/gateway/text-media.js.map +1 -0
- package/dist/group-intel/engine.d.ts +77 -0
- package/dist/group-intel/engine.d.ts.map +1 -0
- package/dist/group-intel/engine.js +197 -0
- package/dist/group-intel/engine.js.map +1 -0
- package/dist/group-intel/index.d.ts +3 -0
- package/dist/group-intel/index.d.ts.map +1 -0
- package/dist/group-intel/index.js +2 -0
- package/dist/group-intel/index.js.map +1 -0
- package/dist/intent/classifier.d.ts +17 -0
- package/dist/intent/classifier.d.ts.map +1 -0
- package/dist/intent/classifier.js +89 -0
- package/dist/intent/classifier.js.map +1 -0
- package/dist/kb/store.d.ts +38 -0
- package/dist/kb/store.d.ts.map +1 -0
- package/dist/kb/store.js +114 -0
- package/dist/kb/store.js.map +1 -0
- package/dist/llm/audit.d.ts +70 -0
- package/dist/llm/audit.d.ts.map +1 -0
- package/dist/llm/audit.js +281 -0
- package/dist/llm/audit.js.map +1 -0
- package/dist/llm/base-provider.d.ts +46 -0
- package/dist/llm/base-provider.d.ts.map +1 -0
- package/dist/llm/base-provider.js +158 -0
- package/dist/llm/base-provider.js.map +1 -0
- package/dist/llm/config.d.ts +32 -0
- package/dist/llm/config.d.ts.map +1 -0
- package/dist/llm/config.js +125 -0
- package/dist/llm/config.js.map +1 -0
- package/dist/llm/direct-tool-guard.d.ts +8 -0
- package/dist/llm/direct-tool-guard.d.ts.map +1 -0
- package/dist/llm/direct-tool-guard.js +36 -0
- package/dist/llm/direct-tool-guard.js.map +1 -0
- package/dist/llm/engine.d.ts +44 -0
- package/dist/llm/engine.d.ts.map +1 -0
- package/dist/llm/engine.js +327 -0
- package/dist/llm/engine.js.map +1 -0
- package/dist/llm/index.d.ts +8 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +8 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/model-settings.d.ts +57 -0
- package/dist/llm/model-settings.d.ts.map +1 -0
- package/dist/llm/model-settings.js +184 -0
- package/dist/llm/model-settings.js.map +1 -0
- package/dist/llm/ocr-client.d.ts +19 -0
- package/dist/llm/ocr-client.d.ts.map +1 -0
- package/dist/llm/ocr-client.js +94 -0
- package/dist/llm/ocr-client.js.map +1 -0
- package/dist/llm/ocr-errors.d.ts +15 -0
- package/dist/llm/ocr-errors.d.ts.map +1 -0
- package/dist/llm/ocr-errors.js +42 -0
- package/dist/llm/ocr-errors.js.map +1 -0
- package/dist/llm/ocr-registry.d.ts +33 -0
- package/dist/llm/ocr-registry.d.ts.map +1 -0
- package/dist/llm/ocr-registry.js +129 -0
- package/dist/llm/ocr-registry.js.map +1 -0
- package/dist/llm/ocr-types.d.ts +53 -0
- package/dist/llm/ocr-types.d.ts.map +1 -0
- package/dist/llm/ocr-types.js +11 -0
- package/dist/llm/ocr-types.js.map +1 -0
- package/dist/llm/providers/anthropic-ocr.d.ts +3 -0
- package/dist/llm/providers/anthropic-ocr.d.ts.map +1 -0
- package/dist/llm/providers/anthropic-ocr.js +32 -0
- package/dist/llm/providers/anthropic-ocr.js.map +1 -0
- package/dist/llm/providers/custom-ocr.d.ts +3 -0
- package/dist/llm/providers/custom-ocr.d.ts.map +1 -0
- package/dist/llm/providers/custom-ocr.js +20 -0
- package/dist/llm/providers/custom-ocr.js.map +1 -0
- package/dist/llm/providers/gemini-ocr.d.ts +3 -0
- package/dist/llm/providers/gemini-ocr.d.ts.map +1 -0
- package/dist/llm/providers/gemini-ocr.js +26 -0
- package/dist/llm/providers/gemini-ocr.js.map +1 -0
- package/dist/llm/providers/http-ocr.d.ts +12 -0
- package/dist/llm/providers/http-ocr.d.ts.map +1 -0
- package/dist/llm/providers/http-ocr.js +135 -0
- package/dist/llm/providers/http-ocr.js.map +1 -0
- package/dist/llm/providers/local-ocr.d.ts +3 -0
- package/dist/llm/providers/local-ocr.d.ts.map +1 -0
- package/dist/llm/providers/local-ocr.js +19 -0
- package/dist/llm/providers/local-ocr.js.map +1 -0
- package/dist/llm/providers/ollama-ocr.d.ts +3 -0
- package/dist/llm/providers/ollama-ocr.d.ts.map +1 -0
- package/dist/llm/providers/ollama-ocr.js +18 -0
- package/dist/llm/providers/ollama-ocr.js.map +1 -0
- package/dist/llm/providers/openai-compat.d.ts +26 -0
- package/dist/llm/providers/openai-compat.d.ts.map +1 -0
- package/dist/llm/providers/openai-compat.js +284 -0
- package/dist/llm/providers/openai-compat.js.map +1 -0
- package/dist/llm/providers/openai-compatible-ocr.d.ts +3 -0
- package/dist/llm/providers/openai-compatible-ocr.d.ts.map +1 -0
- package/dist/llm/providers/openai-compatible-ocr.js +21 -0
- package/dist/llm/providers/openai-compatible-ocr.js.map +1 -0
- package/dist/llm/providers/openai-ocr.d.ts +3 -0
- package/dist/llm/providers/openai-ocr.d.ts.map +1 -0
- package/dist/llm/providers/openai-ocr.js +25 -0
- package/dist/llm/providers/openai-ocr.js.map +1 -0
- package/dist/llm/providers/openrouter-ocr.d.ts +3 -0
- package/dist/llm/providers/openrouter-ocr.d.ts.map +1 -0
- package/dist/llm/providers/openrouter-ocr.js +21 -0
- package/dist/llm/providers/openrouter-ocr.js.map +1 -0
- package/dist/llm/response-sanitizer.d.ts +3 -0
- package/dist/llm/response-sanitizer.d.ts.map +1 -0
- package/dist/llm/response-sanitizer.js +122 -0
- package/dist/llm/response-sanitizer.js.map +1 -0
- package/dist/llm/router.d.ts +29 -0
- package/dist/llm/router.d.ts.map +1 -0
- package/dist/llm/router.js +167 -0
- package/dist/llm/router.js.map +1 -0
- package/dist/llm/safety.d.ts +15 -0
- package/dist/llm/safety.d.ts.map +1 -0
- package/dist/llm/safety.js +48 -0
- package/dist/llm/safety.js.map +1 -0
- package/dist/llm/search-planner.d.ts +4 -0
- package/dist/llm/search-planner.d.ts.map +1 -0
- package/dist/llm/search-planner.js +49 -0
- package/dist/llm/search-planner.js.map +1 -0
- package/dist/llm/task-router.d.ts +19 -0
- package/dist/llm/task-router.d.ts.map +1 -0
- package/dist/llm/task-router.js +70 -0
- package/dist/llm/task-router.js.map +1 -0
- package/dist/llm/types.d.ts +161 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +45 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/media/command-controller.d.ts +15 -0
- package/dist/media/command-controller.d.ts.map +1 -0
- package/dist/media/command-controller.js +122 -0
- package/dist/media/command-controller.js.map +1 -0
- package/dist/media/command-parse.d.ts +2 -0
- package/dist/media/command-parse.d.ts.map +1 -0
- package/dist/media/command-parse.js +5 -0
- package/dist/media/command-parse.js.map +1 -0
- package/dist/media/index.d.ts +13 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +7 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/policy.d.ts +23 -0
- package/dist/media/policy.d.ts.map +1 -0
- package/dist/media/policy.js +125 -0
- package/dist/media/policy.js.map +1 -0
- package/dist/media/prep-router.d.ts +24 -0
- package/dist/media/prep-router.d.ts.map +1 -0
- package/dist/media/prep-router.js +79 -0
- package/dist/media/prep-router.js.map +1 -0
- package/dist/media/prep.d.ts +22 -0
- package/dist/media/prep.d.ts.map +1 -0
- package/dist/media/prep.js +74 -0
- package/dist/media/prep.js.map +1 -0
- package/dist/media/queue-admin.d.ts +10 -0
- package/dist/media/queue-admin.d.ts.map +1 -0
- package/dist/media/queue-admin.js +47 -0
- package/dist/media/queue-admin.js.map +1 -0
- package/dist/media/queue-runner.d.ts +28 -0
- package/dist/media/queue-runner.d.ts.map +1 -0
- package/dist/media/queue-runner.js +71 -0
- package/dist/media/queue-runner.js.map +1 -0
- package/dist/media/queue-store.d.ts +27 -0
- package/dist/media/queue-store.d.ts.map +1 -0
- package/dist/media/queue-store.js +147 -0
- package/dist/media/queue-store.js.map +1 -0
- package/dist/media/queue-types.d.ts +71 -0
- package/dist/media/queue-types.d.ts.map +1 -0
- package/dist/media/queue-types.js +2 -0
- package/dist/media/queue-types.js.map +1 -0
- package/dist/media/queue-utils.d.ts +9 -0
- package/dist/media/queue-utils.d.ts.map +1 -0
- package/dist/media/queue-utils.js +52 -0
- package/dist/media/queue-utils.js.map +1 -0
- package/dist/media/queue-worker.d.ts +31 -0
- package/dist/media/queue-worker.d.ts.map +1 -0
- package/dist/media/queue-worker.js +58 -0
- package/dist/media/queue-worker.js.map +1 -0
- package/dist/media/reliability.d.ts +58 -0
- package/dist/media/reliability.d.ts.map +1 -0
- package/dist/media/reliability.js +240 -0
- package/dist/media/reliability.js.map +1 -0
- package/dist/media/service.d.ts +53 -0
- package/dist/media/service.d.ts.map +1 -0
- package/dist/media/service.js +238 -0
- package/dist/media/service.js.map +1 -0
- package/dist/media/text-extractor.d.ts +23 -0
- package/dist/media/text-extractor.d.ts.map +1 -0
- package/dist/media/text-extractor.js +66 -0
- package/dist/media/text-extractor.js.map +1 -0
- package/dist/media/text-format.d.ts +10 -0
- package/dist/media/text-format.d.ts.map +1 -0
- package/dist/media/text-format.js +19 -0
- package/dist/media/text-format.js.map +1 -0
- package/dist/media-orchestration/engine.d.ts +74 -0
- package/dist/media-orchestration/engine.d.ts.map +1 -0
- package/dist/media-orchestration/engine.js +155 -0
- package/dist/media-orchestration/engine.js.map +1 -0
- package/dist/media-orchestration/index.d.ts +3 -0
- package/dist/media-orchestration/index.d.ts.map +1 -0
- package/dist/media-orchestration/index.js +2 -0
- package/dist/media-orchestration/index.js.map +1 -0
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/persistent.d.ts +78 -0
- package/dist/memory/persistent.d.ts.map +1 -0
- package/dist/memory/persistent.js +254 -0
- package/dist/memory/persistent.js.map +1 -0
- package/dist/memory-isolation/engine.d.ts +83 -0
- package/dist/memory-isolation/engine.d.ts.map +1 -0
- package/dist/memory-isolation/engine.js +247 -0
- package/dist/memory-isolation/engine.js.map +1 -0
- package/dist/memory-isolation/index.d.ts +3 -0
- package/dist/memory-isolation/index.d.ts.map +1 -0
- package/dist/memory-isolation/index.js +2 -0
- package/dist/memory-isolation/index.js.map +1 -0
- package/dist/message-dedupe/engine.d.ts +67 -0
- package/dist/message-dedupe/engine.d.ts.map +1 -0
- package/dist/message-dedupe/engine.js +208 -0
- package/dist/message-dedupe/engine.js.map +1 -0
- package/dist/message-dedupe/index.d.ts +3 -0
- package/dist/message-dedupe/index.d.ts.map +1 -0
- package/dist/message-dedupe/index.js +2 -0
- package/dist/message-dedupe/index.js.map +1 -0
- package/dist/monitoring/index.d.ts +3 -0
- package/dist/monitoring/index.d.ts.map +1 -0
- package/dist/monitoring/index.js +2 -0
- package/dist/monitoring/index.js.map +1 -0
- package/dist/monitoring/leak-detector.d.ts +63 -0
- package/dist/monitoring/leak-detector.d.ts.map +1 -0
- package/dist/monitoring/leak-detector.js +169 -0
- package/dist/monitoring/leak-detector.js.map +1 -0
- package/dist/monitoring/runtime-health.d.ts +14 -0
- package/dist/monitoring/runtime-health.d.ts.map +1 -0
- package/dist/monitoring/runtime-health.js +82 -0
- package/dist/monitoring/runtime-health.js.map +1 -0
- package/dist/observability/safe-log.d.ts +3 -0
- package/dist/observability/safe-log.d.ts.map +1 -0
- package/dist/observability/safe-log.js +22 -0
- package/dist/observability/safe-log.js.map +1 -0
- package/dist/outbound/index.d.ts +3 -0
- package/dist/outbound/index.d.ts.map +1 -0
- package/dist/outbound/index.js +2 -0
- package/dist/outbound/index.js.map +1 -0
- package/dist/outbound/ledger.d.ts +78 -0
- package/dist/outbound/ledger.d.ts.map +1 -0
- package/dist/outbound/ledger.js +143 -0
- package/dist/outbound/ledger.js.map +1 -0
- package/dist/owner/config.d.ts +43 -0
- package/dist/owner/config.d.ts.map +1 -0
- package/dist/owner/config.js +110 -0
- package/dist/owner/config.js.map +1 -0
- package/dist/owner/help.d.ts +2 -0
- package/dist/owner/help.d.ts.map +1 -0
- package/dist/owner/help.js +96 -0
- package/dist/owner/help.js.map +1 -0
- package/dist/owner/identity.d.ts +45 -0
- package/dist/owner/identity.d.ts.map +1 -0
- package/dist/owner/identity.js +155 -0
- package/dist/owner/identity.js.map +1 -0
- package/dist/owner/index.d.ts +7 -0
- package/dist/owner/index.d.ts.map +1 -0
- package/dist/owner/index.js +4 -0
- package/dist/owner/index.js.map +1 -0
- package/dist/owner/ocr-help.d.ts +2 -0
- package/dist/owner/ocr-help.d.ts.map +1 -0
- package/dist/owner/ocr-help.js +13 -0
- package/dist/owner/ocr-help.js.map +1 -0
- package/dist/owner/router.d.ts +47 -0
- package/dist/owner/router.d.ts.map +1 -0
- package/dist/owner/router.js +229 -0
- package/dist/owner/router.js.map +1 -0
- package/dist/prompts/registry.d.ts +19 -0
- package/dist/prompts/registry.d.ts.map +1 -0
- package/dist/prompts/registry.js +64 -0
- package/dist/prompts/registry.js.map +1 -0
- package/dist/scheduler/alias-planner.d.ts +9 -0
- package/dist/scheduler/alias-planner.d.ts.map +1 -0
- package/dist/scheduler/alias-planner.js +57 -0
- package/dist/scheduler/alias-planner.js.map +1 -0
- package/dist/scheduler/runner.d.ts +16 -0
- package/dist/scheduler/runner.d.ts.map +1 -0
- package/dist/scheduler/runner.js +40 -0
- package/dist/scheduler/runner.js.map +1 -0
- package/dist/scheduler/store.d.ts +35 -0
- package/dist/scheduler/store.d.ts.map +1 -0
- package/dist/scheduler/store.js +104 -0
- package/dist/scheduler/store.js.map +1 -0
- package/dist/scheduler/time.d.ts +8 -0
- package/dist/scheduler/time.d.ts.map +1 -0
- package/dist/scheduler/time.js +248 -0
- package/dist/scheduler/time.js.map +1 -0
- package/dist/security/backup.d.ts +69 -0
- package/dist/security/backup.d.ts.map +1 -0
- package/dist/security/backup.js +319 -0
- package/dist/security/backup.js.map +1 -0
- package/dist/security/index.d.ts +7 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +4 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/red-team.d.ts +52 -0
- package/dist/security/red-team.d.ts.map +1 -0
- package/dist/security/red-team.js +249 -0
- package/dist/security/red-team.js.map +1 -0
- package/dist/security/tester.d.ts +65 -0
- package/dist/security/tester.d.ts.map +1 -0
- package/dist/security/tester.js +218 -0
- package/dist/security/tester.js.map +1 -0
- package/dist/self-improvement/index.d.ts +2 -0
- package/dist/self-improvement/index.d.ts.map +1 -0
- package/dist/self-improvement/index.js +2 -0
- package/dist/self-improvement/index.js.map +1 -0
- package/dist/self-improvement/trace-store.d.ts +27 -0
- package/dist/self-improvement/trace-store.d.ts.map +1 -0
- package/dist/self-improvement/trace-store.js +88 -0
- package/dist/self-improvement/trace-store.js.map +1 -0
- package/dist/session/index.d.ts +9 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +5 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +65 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +265 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/recovery.d.ts +44 -0
- package/dist/session/recovery.d.ts.map +1 -0
- package/dist/session/recovery.js +196 -0
- package/dist/session/recovery.js.map +1 -0
- package/dist/session/snapshot.d.ts +70 -0
- package/dist/session/snapshot.d.ts.map +1 -0
- package/dist/session/snapshot.js +268 -0
- package/dist/session/snapshot.js.map +1 -0
- package/dist/session/validator.d.ts +56 -0
- package/dist/session/validator.d.ts.map +1 -0
- package/dist/session/validator.js +247 -0
- package/dist/session/validator.js.map +1 -0
- package/dist/support/store.d.ts +91 -0
- package/dist/support/store.d.ts.map +1 -0
- package/dist/support/store.js +352 -0
- package/dist/support/store.js.map +1 -0
- package/dist/test/setup-env.d.ts +2 -0
- package/dist/test/setup-env.d.ts.map +1 -0
- package/dist/test/setup-env.js +34 -0
- package/dist/test/setup-env.js.map +1 -0
- package/dist/tool-runtime/access-policy.d.ts +25 -0
- package/dist/tool-runtime/access-policy.d.ts.map +1 -0
- package/dist/tool-runtime/access-policy.js +42 -0
- package/dist/tool-runtime/access-policy.js.map +1 -0
- package/dist/tool-runtime/audit.d.ts +13 -0
- package/dist/tool-runtime/audit.d.ts.map +1 -0
- package/dist/tool-runtime/audit.js +34 -0
- package/dist/tool-runtime/audit.js.map +1 -0
- package/dist/tool-runtime/engine.d.ts +154 -0
- package/dist/tool-runtime/engine.d.ts.map +1 -0
- package/dist/tool-runtime/engine.js +236 -0
- package/dist/tool-runtime/engine.js.map +1 -0
- package/dist/tool-runtime/http-executor.d.ts +19 -0
- package/dist/tool-runtime/http-executor.d.ts.map +1 -0
- package/dist/tool-runtime/http-executor.js +85 -0
- package/dist/tool-runtime/http-executor.js.map +1 -0
- package/dist/tool-runtime/identity.d.ts +25 -0
- package/dist/tool-runtime/identity.d.ts.map +1 -0
- package/dist/tool-runtime/identity.js +55 -0
- package/dist/tool-runtime/identity.js.map +1 -0
- package/dist/tool-runtime/index.d.ts +3 -0
- package/dist/tool-runtime/index.d.ts.map +1 -0
- package/dist/tool-runtime/index.js +2 -0
- package/dist/tool-runtime/index.js.map +1 -0
- package/dist/tool-runtime/manifest-loader.d.ts +6 -0
- package/dist/tool-runtime/manifest-loader.d.ts.map +1 -0
- package/dist/tool-runtime/manifest-loader.js +23 -0
- package/dist/tool-runtime/manifest-loader.js.map +1 -0
- package/dist/tool-runtime/manifest.d.ts +71 -0
- package/dist/tool-runtime/manifest.d.ts.map +1 -0
- package/dist/tool-runtime/manifest.js +467 -0
- package/dist/tool-runtime/manifest.js.map +1 -0
- package/dist/tool-runtime/mcp-executor.d.ts +12 -0
- package/dist/tool-runtime/mcp-executor.d.ts.map +1 -0
- package/dist/tool-runtime/mcp-executor.js +102 -0
- package/dist/tool-runtime/mcp-executor.js.map +1 -0
- package/dist/tool-runtime/multipart.d.ts +12 -0
- package/dist/tool-runtime/multipart.d.ts.map +1 -0
- package/dist/tool-runtime/multipart.js +47 -0
- package/dist/tool-runtime/multipart.js.map +1 -0
- package/dist/tool-runtime/oauth.d.ts +18 -0
- package/dist/tool-runtime/oauth.d.ts.map +1 -0
- package/dist/tool-runtime/oauth.js +80 -0
- package/dist/tool-runtime/oauth.js.map +1 -0
- package/dist/tool-runtime/orchestrator.d.ts +38 -0
- package/dist/tool-runtime/orchestrator.d.ts.map +1 -0
- package/dist/tool-runtime/orchestrator.js +117 -0
- package/dist/tool-runtime/orchestrator.js.map +1 -0
- package/dist/tool-runtime/planner.d.ts +23 -0
- package/dist/tool-runtime/planner.d.ts.map +1 -0
- package/dist/tool-runtime/planner.js +126 -0
- package/dist/tool-runtime/planner.js.map +1 -0
- package/dist/tool-runtime/policy.d.ts +23 -0
- package/dist/tool-runtime/policy.d.ts.map +1 -0
- package/dist/tool-runtime/policy.js +48 -0
- package/dist/tool-runtime/policy.js.map +1 -0
- package/dist/tool-runtime/response-template.d.ts +20 -0
- package/dist/tool-runtime/response-template.d.ts.map +1 -0
- package/dist/tool-runtime/response-template.js +87 -0
- package/dist/tool-runtime/response-template.js.map +1 -0
- package/dist/tool-runtime/workflow-runner.d.ts +13 -0
- package/dist/tool-runtime/workflow-runner.d.ts.map +1 -0
- package/dist/tool-runtime/workflow-runner.js +61 -0
- package/dist/tool-runtime/workflow-runner.js.map +1 -0
- package/dist/tools/crunchtrova.d.ts +78 -0
- package/dist/tools/crunchtrova.d.ts.map +1 -0
- package/dist/tools/crunchtrova.js +378 -0
- package/dist/tools/crunchtrova.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/input-guard.d.ts +8 -0
- package/dist/tools/input-guard.d.ts.map +1 -0
- package/dist/tools/input-guard.js +41 -0
- package/dist/tools/input-guard.js.map +1 -0
- package/dist/tools/llm-tool-definitions.d.ts +4 -0
- package/dist/tools/llm-tool-definitions.d.ts.map +1 -0
- package/dist/tools/llm-tool-definitions.js +30 -0
- package/dist/tools/llm-tool-definitions.js.map +1 -0
- package/dist/tools/model-manager.d.ts +29 -0
- package/dist/tools/model-manager.d.ts.map +1 -0
- package/dist/tools/model-manager.js +118 -0
- package/dist/tools/model-manager.js.map +1 -0
- package/dist/tools/registry.d.ts +41 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +325 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search-orchestrator.d.ts +74 -0
- package/dist/tools/search-orchestrator.d.ts.map +1 -0
- package/dist/tools/search-orchestrator.js +174 -0
- package/dist/tools/search-orchestrator.js.map +1 -0
- package/dist/tools/tool-catalog-config.d.ts +103 -0
- package/dist/tools/tool-catalog-config.d.ts.map +1 -0
- package/dist/tools/tool-catalog-config.js +185 -0
- package/dist/tools/tool-catalog-config.js.map +1 -0
- package/dist/tools/tool-catalog.d.ts +24 -0
- package/dist/tools/tool-catalog.d.ts.map +1 -0
- package/dist/tools/tool-catalog.js +62 -0
- package/dist/tools/tool-catalog.js.map +1 -0
- package/dist/tools/tool-command-synthesis.d.ts +22 -0
- package/dist/tools/tool-command-synthesis.d.ts.map +1 -0
- package/dist/tools/tool-command-synthesis.js +17 -0
- package/dist/tools/tool-command-synthesis.js.map +1 -0
- package/dist/tools/tool-policy.d.ts +21 -0
- package/dist/tools/tool-policy.d.ts.map +1 -0
- package/dist/tools/tool-policy.js +66 -0
- package/dist/tools/tool-policy.js.map +1 -0
- package/dist/usage/tracker.d.ts +35 -0
- package/dist/usage/tracker.d.ts.map +1 -0
- package/dist/usage/tracker.js +141 -0
- package/dist/usage/tracker.js.map +1 -0
- package/dist/validation/event-matrix.d.ts +41 -0
- package/dist/validation/event-matrix.d.ts.map +1 -0
- package/dist/validation/event-matrix.js +119 -0
- package/dist/validation/event-matrix.js.map +1 -0
- package/dist/validation/failure-simulator.d.ts +40 -0
- package/dist/validation/failure-simulator.d.ts.map +1 -0
- package/dist/validation/failure-simulator.js +216 -0
- package/dist/validation/failure-simulator.js.map +1 -0
- package/dist/validation/function-verifier.d.ts +48 -0
- package/dist/validation/function-verifier.d.ts.map +1 -0
- package/dist/validation/function-verifier.js +128 -0
- package/dist/validation/function-verifier.js.map +1 -0
- package/dist/validation/index.d.ts +14 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +9 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/route-inventory.d.ts +39 -0
- package/dist/validation/route-inventory.d.ts.map +1 -0
- package/dist/validation/route-inventory.js +413 -0
- package/dist/validation/route-inventory.js.map +1 -0
- package/dist/validation/state-machine.d.ts +51 -0
- package/dist/validation/state-machine.d.ts.map +1 -0
- package/dist/validation/state-machine.js +217 -0
- package/dist/validation/state-machine.js.map +1 -0
- package/dist/voice-pipeline/combined.d.ts +145 -0
- package/dist/voice-pipeline/combined.d.ts.map +1 -0
- package/dist/voice-pipeline/combined.js +166 -0
- package/dist/voice-pipeline/combined.js.map +1 -0
- package/dist/voice-pipeline/groq-whisper.d.ts +29 -0
- package/dist/voice-pipeline/groq-whisper.d.ts.map +1 -0
- package/dist/voice-pipeline/groq-whisper.js +138 -0
- package/dist/voice-pipeline/groq-whisper.js.map +1 -0
- package/dist/voice-pipeline/index.d.ts +5 -0
- package/dist/voice-pipeline/index.d.ts.map +1 -0
- package/dist/voice-pipeline/index.js +3 -0
- package/dist/voice-pipeline/index.js.map +1 -0
- package/docs/CLAUDE_STYLE_TOOLING_HANDOVER.md +1188 -0
- package/docs/admin-cli-security.md +71 -0
- package/docs/async-job-implementation-status.md +88 -0
- package/docs/async-job-workflow.md +175 -0
- package/docs/auth-persistence.md +18 -0
- package/docs/baileys-resilience.md +103 -0
- package/docs/chatbot-architecture-research-plan.md +80 -0
- package/docs/config-write-commands.md +78 -0
- package/docs/connector-implementation-playbook.md +182 -0
- package/docs/custom-connectors.md +167 -0
- package/docs/docker.md +76 -0
- package/docs/installation.md +384 -0
- package/docs/media-worker.md +114 -0
- package/docs/npm-install.md +75 -0
- package/docs/production-bot-guide.md +499 -0
- package/docs/production-handover.md +255 -0
- package/docs/production-monitoring.md +117 -0
- package/docs/routing-state-machine.md +47 -0
- package/docs/support-inbox-milestones.md +159 -0
- package/docs/tool-configuration-guide.md +257 -0
- package/docs/tool-plugin-and-packaging-roadmap.md +278 -0
- package/package.json +55 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DatabaseManager } from '../database/index.js';
|
|
2
|
+
export type ConnectorAuditStatus = 'allowed' | 'blocked' | 'failed' | 'succeeded';
|
|
3
|
+
export interface ConnectorAuditInput {
|
|
4
|
+
connectorName: string;
|
|
5
|
+
actorJid?: string | null;
|
|
6
|
+
status: ConnectorAuditStatus;
|
|
7
|
+
host?: string | null;
|
|
8
|
+
path?: string | null;
|
|
9
|
+
httpStatus?: number | null;
|
|
10
|
+
durationMs?: number | null;
|
|
11
|
+
error?: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface ConnectorAuditRow extends Required<Omit<ConnectorAuditInput, 'actorJid' | 'host' | 'path' | 'httpStatus' | 'durationMs' | 'error'>> {
|
|
14
|
+
id: number;
|
|
15
|
+
actorJid: string | null;
|
|
16
|
+
host: string | null;
|
|
17
|
+
path: string | null;
|
|
18
|
+
httpStatus: number | null;
|
|
19
|
+
durationMs: number | null;
|
|
20
|
+
error: string | null;
|
|
21
|
+
createdAt: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class ConnectorAuditStore {
|
|
24
|
+
private db;
|
|
25
|
+
private initialized;
|
|
26
|
+
constructor(db?: DatabaseManager);
|
|
27
|
+
private init;
|
|
28
|
+
record(input: ConnectorAuditInput): void;
|
|
29
|
+
recent(limit?: number): ConnectorAuditRow[];
|
|
30
|
+
formatRecent(limit?: number): string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/connectors/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAElF,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC,CAAC;IAClJ,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,WAAW,CAAS;gBAER,EAAE,kBAAgC;IAItD,OAAO,CAAC,IAAI;IAqBZ,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAkBxC,MAAM,CAAC,KAAK,SAAK,GAAG,iBAAiB,EAAE;IAoBvC,YAAY,CAAC,KAAK,SAAK,GAAG,MAAM;CAUjC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { DatabaseManager } from '../database/index.js';
|
|
2
|
+
function sanitizeText(value, max = 240) {
|
|
3
|
+
if (!value)
|
|
4
|
+
return null;
|
|
5
|
+
const clean = value
|
|
6
|
+
.replace(/[\r\n\t]+/g, ' ')
|
|
7
|
+
.replace(/(bearer|token|secret|password|api[_-]?key)\s*[=:]\s*\S+/gi, '$1=[redacted]')
|
|
8
|
+
.trim();
|
|
9
|
+
return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
|
|
10
|
+
}
|
|
11
|
+
export class ConnectorAuditStore {
|
|
12
|
+
db;
|
|
13
|
+
initialized = false;
|
|
14
|
+
constructor(db = DatabaseManager.getInstance()) {
|
|
15
|
+
this.db = db;
|
|
16
|
+
this.init();
|
|
17
|
+
}
|
|
18
|
+
init() {
|
|
19
|
+
if (this.initialized)
|
|
20
|
+
return;
|
|
21
|
+
this.db.getDb().exec(`
|
|
22
|
+
CREATE TABLE IF NOT EXISTS connector_audit_events (
|
|
23
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
24
|
+
connector_name TEXT NOT NULL,
|
|
25
|
+
actor_jid TEXT,
|
|
26
|
+
status TEXT NOT NULL,
|
|
27
|
+
host TEXT,
|
|
28
|
+
path TEXT,
|
|
29
|
+
http_status INTEGER,
|
|
30
|
+
duration_ms INTEGER,
|
|
31
|
+
error TEXT,
|
|
32
|
+
created_at INTEGER NOT NULL
|
|
33
|
+
);
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_connector_audit_time ON connector_audit_events(created_at);
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_connector_audit_name_time ON connector_audit_events(connector_name, created_at);
|
|
36
|
+
`);
|
|
37
|
+
this.initialized = true;
|
|
38
|
+
}
|
|
39
|
+
record(input) {
|
|
40
|
+
this.db.getDb().prepare(`
|
|
41
|
+
INSERT INTO connector_audit_events (
|
|
42
|
+
connector_name, actor_jid, status, host, path, http_status, duration_ms, error, created_at
|
|
43
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
44
|
+
`).run(input.connectorName, input.actorJid || null, input.status, sanitizeText(input.host, 120), sanitizeText(input.path, 240), input.httpStatus ?? null, input.durationMs ?? null, sanitizeText(input.error, 240), Date.now());
|
|
45
|
+
}
|
|
46
|
+
recent(limit = 20) {
|
|
47
|
+
const rows = this.db.getDb().prepare(`
|
|
48
|
+
SELECT
|
|
49
|
+
id,
|
|
50
|
+
connector_name as connectorName,
|
|
51
|
+
actor_jid as actorJid,
|
|
52
|
+
status,
|
|
53
|
+
host,
|
|
54
|
+
path,
|
|
55
|
+
http_status as httpStatus,
|
|
56
|
+
duration_ms as durationMs,
|
|
57
|
+
error,
|
|
58
|
+
created_at as createdAt
|
|
59
|
+
FROM connector_audit_events
|
|
60
|
+
ORDER BY created_at DESC, id DESC
|
|
61
|
+
LIMIT ?
|
|
62
|
+
`).all(Math.max(1, Math.min(limit, 100)));
|
|
63
|
+
return rows;
|
|
64
|
+
}
|
|
65
|
+
formatRecent(limit = 20) {
|
|
66
|
+
const rows = this.recent(limit);
|
|
67
|
+
if (rows.length === 0)
|
|
68
|
+
return 'No connector audit events recorded yet.';
|
|
69
|
+
return ['🔎 Connector Audit', '', ...rows.map((row) => {
|
|
70
|
+
const status = row.httpStatus ? `${row.status} ${row.httpStatus}` : row.status;
|
|
71
|
+
const host = row.host ? ` ${row.host}` : '';
|
|
72
|
+
const error = row.error ? ` — ${row.error}` : '';
|
|
73
|
+
return `#${row.id} ${row.connectorName}: ${status}${host}${error}`;
|
|
74
|
+
})].join('\n');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/connectors/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ConnectorManifest } from './manifest.js';
|
|
2
|
+
export declare const DEFAULT_CONNECTOR_MANIFEST: ConnectorManifest;
|
|
3
|
+
export declare function connectorManifestPath(): string;
|
|
4
|
+
export declare function loadConnectorManifest(path?: string): ConnectorManifest;
|
|
5
|
+
export declare function ensureConnectorManifest(path?: string, force?: boolean): 'created' | 'updated' | 'skipped';
|
|
6
|
+
export declare function formatConnectorManifestStatus(path?: string): string;
|
|
7
|
+
export declare function formatConnectorList(path?: string): string;
|
|
8
|
+
export declare function previewConnectorUrl(name: string, args: Record<string, unknown>, path?: string): string;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/connectors/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiD,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGtG,eAAO,MAAM,0BAA0B,EAAE,iBAIxC,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,SAA0B,GAAG,iBAAiB,CAKvF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,SAA0B,EAAE,KAAK,UAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAMxH;AAED,wBAAgB,6BAA6B,CAAC,IAAI,SAA0B,GAAG,MAAM,CAUpF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,SAA0B,GAAG,MAAM,CAI1E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,SAA0B,GAAG,MAAM,CAgBvH"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { renderConnectorUrl, validateConnectorManifest } from './manifest.js';
|
|
4
|
+
import { assertSafeConnectorUrl } from './url-guard.js';
|
|
5
|
+
export const DEFAULT_CONNECTOR_MANIFEST = {
|
|
6
|
+
version: 1,
|
|
7
|
+
enabled: false,
|
|
8
|
+
connectors: [],
|
|
9
|
+
};
|
|
10
|
+
export function connectorManifestPath() {
|
|
11
|
+
return resolve(process.cwd(), process.env.CHATBOT_CONNECTORS_PATH || './config/connectors.chatbot.json');
|
|
12
|
+
}
|
|
13
|
+
function parseJsonFile(path) {
|
|
14
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
15
|
+
}
|
|
16
|
+
export function loadConnectorManifest(path = connectorManifestPath()) {
|
|
17
|
+
if (!existsSync(path))
|
|
18
|
+
return DEFAULT_CONNECTOR_MANIFEST;
|
|
19
|
+
const manifest = parseJsonFile(path);
|
|
20
|
+
validateConnectorManifest(manifest);
|
|
21
|
+
return manifest;
|
|
22
|
+
}
|
|
23
|
+
export function ensureConnectorManifest(path = connectorManifestPath(), force = false) {
|
|
24
|
+
const existed = existsSync(path);
|
|
25
|
+
if (existed && !force)
|
|
26
|
+
return 'skipped';
|
|
27
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
28
|
+
writeFileSync(path, `${JSON.stringify(DEFAULT_CONNECTOR_MANIFEST, null, 2)}\n`, 'utf8');
|
|
29
|
+
return existed ? 'updated' : 'created';
|
|
30
|
+
}
|
|
31
|
+
export function formatConnectorManifestStatus(path = connectorManifestPath()) {
|
|
32
|
+
const exists = existsSync(path);
|
|
33
|
+
const manifest = loadConnectorManifest(path);
|
|
34
|
+
return [
|
|
35
|
+
'🔌 Connector Manifest',
|
|
36
|
+
`Path: ${path}`,
|
|
37
|
+
`Exists: ${exists ? 'yes' : 'no'}`,
|
|
38
|
+
`Enabled: ${manifest.enabled ? 'yes' : 'no'}`,
|
|
39
|
+
`Connectors: ${manifest.connectors.length}`,
|
|
40
|
+
].join('\n');
|
|
41
|
+
}
|
|
42
|
+
export function formatConnectorList(path = connectorManifestPath()) {
|
|
43
|
+
const manifest = loadConnectorManifest(path);
|
|
44
|
+
if (manifest.connectors.length === 0)
|
|
45
|
+
return 'No custom connectors configured.';
|
|
46
|
+
return ['🔌 Custom Connectors', '', ...manifest.connectors.map((connector) => `- ${connector.name}: ${connector.method} ${connector.allowedHosts.join(', ')}`)].join('\n');
|
|
47
|
+
}
|
|
48
|
+
export function previewConnectorUrl(name, args, path = connectorManifestPath()) {
|
|
49
|
+
const manifest = loadConnectorManifest(path);
|
|
50
|
+
const connector = manifest.connectors.find((item) => item.name === name.trim().toLowerCase());
|
|
51
|
+
if (!connector)
|
|
52
|
+
throw new Error(`Unknown connector: ${name}`);
|
|
53
|
+
const url = renderConnectorUrl(connector.urlTemplate, args);
|
|
54
|
+
assertSafeConnectorUrl({ url, allowedHosts: connector.allowedHosts });
|
|
55
|
+
return [
|
|
56
|
+
'🔌 Connector Preview',
|
|
57
|
+
`Name: ${connector.name}`,
|
|
58
|
+
`Enabled: ${manifest.enabled ? 'yes' : 'no'}`,
|
|
59
|
+
`Method: ${connector.method}`,
|
|
60
|
+
`Host: ${url.hostname}`,
|
|
61
|
+
`Path: ${url.pathname}${url.search ? '?…' : ''}`,
|
|
62
|
+
'',
|
|
63
|
+
'No network request was made.',
|
|
64
|
+
].join('\n');
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/connectors/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAA0B,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,kCAAkC,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAG,qBAAqB,EAAE;IAClE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,0BAA0B,CAAC;IACzD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAsB,CAAC;IAC1D,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAI,GAAG,qBAAqB,EAAE,EAAE,KAAK,GAAG,KAAK;IACnF,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,OAAO,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IACxC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAI,GAAG,qBAAqB,EAAE;IAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO;QACL,uBAAuB;QACvB,SAAS,IAAI,EAAE;QACf,WAAW,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAClC,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7C,eAAe,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;KAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,qBAAqB,EAAE;IAChE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,kCAAkC,CAAC;IAChF,OAAO,CAAC,sBAAsB,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7K,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAA6B,EAAE,IAAI,GAAG,qBAAqB,EAAE;IAC7G,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC5D,sBAAsB,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IACtE,OAAO;QACL,sBAAsB;QACtB,SAAS,SAAS,CAAC,IAAI,EAAE;QACzB,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7C,WAAW,SAAS,CAAC,MAAM,EAAE;QAC7B,SAAS,GAAG,CAAC,QAAQ,EAAE;QACvB,SAAS,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAChD,EAAE;QACF,8BAA8B;KAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ConnectorDnsAddress {
|
|
2
|
+
address: string;
|
|
3
|
+
family: 4 | 6;
|
|
4
|
+
}
|
|
5
|
+
export type ConnectorDnsLookup = (host: string) => Promise<ConnectorDnsAddress[]>;
|
|
6
|
+
export declare function assertSafeResolvedHost(host: string, lookupImpl?: ConnectorDnsLookup): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=dns-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns-guard.d.ts","sourceRoot":"","sources":["../../src/connectors/dns-guard.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;CACf;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;AA+ClF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,kBAAkC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxH"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { lookup } from 'node:dns/promises';
|
|
2
|
+
import { isIP } from 'node:net';
|
|
3
|
+
function cleanHost(host) {
|
|
4
|
+
return host.trim().toLowerCase().replace(/^\[|\]$/g, '').replace(/\.$/, '');
|
|
5
|
+
}
|
|
6
|
+
function defaultLookup(host) {
|
|
7
|
+
return lookup(host, { all: true, verbatim: false });
|
|
8
|
+
}
|
|
9
|
+
function ipv4Parts(address) {
|
|
10
|
+
const parts = address.split('.').map((part) => Number(part));
|
|
11
|
+
if (parts.length !== 4 || parts.some((part) => !Number.isInteger(part) || part < 0 || part > 255))
|
|
12
|
+
return null;
|
|
13
|
+
return parts;
|
|
14
|
+
}
|
|
15
|
+
function isUnsafeIpv4(address) {
|
|
16
|
+
const parts = ipv4Parts(address);
|
|
17
|
+
if (!parts)
|
|
18
|
+
return true;
|
|
19
|
+
const [a, b, c] = parts;
|
|
20
|
+
return a === 0 || a === 10 || a === 127 ||
|
|
21
|
+
(a === 100 && b >= 64 && b <= 127) ||
|
|
22
|
+
(a === 169 && b === 254) ||
|
|
23
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
24
|
+
(a === 192 && (b === 0 || b === 168)) ||
|
|
25
|
+
(a === 198 && (b === 18 || b === 19 || (b === 51 && c === 100))) ||
|
|
26
|
+
(a === 203 && b === 0 && c === 113) ||
|
|
27
|
+
a >= 224;
|
|
28
|
+
}
|
|
29
|
+
function mappedIpv4(address) {
|
|
30
|
+
const lower = address.toLowerCase();
|
|
31
|
+
const prefix = '::ffff:';
|
|
32
|
+
if (!lower.startsWith(prefix))
|
|
33
|
+
return null;
|
|
34
|
+
const candidate = lower.slice(prefix.length);
|
|
35
|
+
return ipv4Parts(candidate) ? candidate : null;
|
|
36
|
+
}
|
|
37
|
+
function isUnsafeIpv6(address) {
|
|
38
|
+
const lower = address.toLowerCase();
|
|
39
|
+
const mapped = mappedIpv4(lower);
|
|
40
|
+
if (mapped)
|
|
41
|
+
return isUnsafeIpv4(mapped);
|
|
42
|
+
return lower === '::' || lower === '::1' ||
|
|
43
|
+
lower.startsWith('fc') || lower.startsWith('fd') ||
|
|
44
|
+
lower.startsWith('fe80:') || lower.startsWith('ff');
|
|
45
|
+
}
|
|
46
|
+
export async function assertSafeResolvedHost(host, lookupImpl = defaultLookup) {
|
|
47
|
+
const clean = cleanHost(host);
|
|
48
|
+
if (isIP(clean))
|
|
49
|
+
throw new Error('Connector DNS host must not be an IP literal.');
|
|
50
|
+
const addresses = await lookupImpl(clean);
|
|
51
|
+
if (!Array.isArray(addresses) || addresses.length === 0) {
|
|
52
|
+
throw new Error(`Connector DNS lookup returned no addresses for ${clean}.`);
|
|
53
|
+
}
|
|
54
|
+
for (const item of addresses) {
|
|
55
|
+
if (!item || typeof item.address !== 'string') {
|
|
56
|
+
throw new Error(`Connector DNS lookup returned an invalid address for ${clean}.`);
|
|
57
|
+
}
|
|
58
|
+
const version = isIP(item.address);
|
|
59
|
+
if (version === 4 && isUnsafeIpv4(item.address)) {
|
|
60
|
+
throw new Error(`Connector DNS resolved to an unsafe IPv4 address for ${clean}.`);
|
|
61
|
+
}
|
|
62
|
+
if (version === 6 && isUnsafeIpv6(item.address)) {
|
|
63
|
+
throw new Error(`Connector DNS resolved to an unsafe IPv6 address for ${clean}.`);
|
|
64
|
+
}
|
|
65
|
+
if (!version) {
|
|
66
|
+
throw new Error(`Connector DNS returned an invalid IP address for ${clean}.`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=dns-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns-guard.js","sourceRoot":"","sources":["../../src/connectors/dns-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ConnectorAuditStore } from './audit.js';
|
|
2
|
+
import { type ConnectorDnsLookup } from './dns-guard.js';
|
|
3
|
+
import { type ConnectorManifestItem } from './manifest.js';
|
|
4
|
+
export interface ConnectorExecutionResult {
|
|
5
|
+
ok: boolean;
|
|
6
|
+
status: number;
|
|
7
|
+
url: string;
|
|
8
|
+
contentType: string;
|
|
9
|
+
body: string;
|
|
10
|
+
truncated: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ConnectorExecutionContext {
|
|
13
|
+
actorJid?: string | null;
|
|
14
|
+
audit?: ConnectorAuditStore | null;
|
|
15
|
+
dnsLookup?: ConnectorDnsLookup | null;
|
|
16
|
+
}
|
|
17
|
+
export interface ConnectorFetchResponse {
|
|
18
|
+
status: number;
|
|
19
|
+
headers: {
|
|
20
|
+
get(name: string): string | null;
|
|
21
|
+
};
|
|
22
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
23
|
+
}
|
|
24
|
+
export type ConnectorFetch = (url: string, init: {
|
|
25
|
+
method: 'GET';
|
|
26
|
+
redirect: 'manual';
|
|
27
|
+
signal?: AbortSignal;
|
|
28
|
+
}) => Promise<ConnectorFetchResponse>;
|
|
29
|
+
export declare function executeConnectorGet(item: ConnectorManifestItem, args: Record<string, unknown>, fetchImpl?: ConnectorFetch, context?: ConnectorExecutionContext): Promise<ConnectorExecutionResult>;
|
|
30
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/connectors/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAA6C,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtG,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAuCjJ,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,GAAE,cAA+B,EAC1C,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,wBAAwB,CAAC,CAkCnC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { assertSafeConnectorUrl } from './url-guard.js';
|
|
2
|
+
import { assertSafeResolvedHost } from './dns-guard.js';
|
|
3
|
+
import { renderConnectorUrl, validateConnectorItem } from './manifest.js';
|
|
4
|
+
function defaultFetch() {
|
|
5
|
+
const fn = globalThis.fetch;
|
|
6
|
+
if (!fn)
|
|
7
|
+
throw new Error('No fetch implementation is available.');
|
|
8
|
+
return fn;
|
|
9
|
+
}
|
|
10
|
+
function assertContentType(contentType) {
|
|
11
|
+
const type = contentType.split(';')[0].trim().toLowerCase();
|
|
12
|
+
if (!type)
|
|
13
|
+
return;
|
|
14
|
+
if (type === 'application/json' || type === 'text/plain' || type === 'text/markdown' || type === 'text/csv')
|
|
15
|
+
return;
|
|
16
|
+
if (type.endsWith('+json'))
|
|
17
|
+
return;
|
|
18
|
+
throw new Error(`Unsupported connector response content type: ${contentType}`);
|
|
19
|
+
}
|
|
20
|
+
function decodeLimited(buffer, maxBytes) {
|
|
21
|
+
const bytes = new Uint8Array(buffer);
|
|
22
|
+
const limited = bytes.slice(0, maxBytes);
|
|
23
|
+
return { body: new TextDecoder('utf-8', { fatal: false }).decode(limited), truncated: bytes.length > maxBytes };
|
|
24
|
+
}
|
|
25
|
+
function auditPath(url) {
|
|
26
|
+
return `${url.pathname}${url.search ? '?…' : ''}`;
|
|
27
|
+
}
|
|
28
|
+
function recordAudit(context, item, status, url, extra = {}) {
|
|
29
|
+
context?.audit?.record({
|
|
30
|
+
connectorName: item.name,
|
|
31
|
+
actorJid: context.actorJid || null,
|
|
32
|
+
status,
|
|
33
|
+
host: url?.hostname || null,
|
|
34
|
+
path: url ? auditPath(url) : null,
|
|
35
|
+
httpStatus: extra.httpStatus ?? null,
|
|
36
|
+
durationMs: extra.durationMs ?? null,
|
|
37
|
+
error: extra.error ?? null,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export async function executeConnectorGet(item, args, fetchImpl = defaultFetch(), context) {
|
|
41
|
+
const started = Date.now();
|
|
42
|
+
let url = null;
|
|
43
|
+
let guardPassed = false;
|
|
44
|
+
try {
|
|
45
|
+
validateConnectorItem(item);
|
|
46
|
+
url = renderConnectorUrl(item.urlTemplate, args);
|
|
47
|
+
assertSafeConnectorUrl({ url, allowedHosts: item.allowedHosts });
|
|
48
|
+
await assertSafeResolvedHost(url.hostname, context?.dnsLookup || undefined);
|
|
49
|
+
guardPassed = true;
|
|
50
|
+
recordAudit(context, item, 'allowed', url);
|
|
51
|
+
const timeoutMs = item.timeoutMs ?? 10000;
|
|
52
|
+
const maxBytes = item.maxBytes ?? 50000;
|
|
53
|
+
const controller = new AbortController();
|
|
54
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetchImpl(url.toString(), { method: 'GET', redirect: 'manual', signal: controller.signal });
|
|
57
|
+
if (response.status >= 300 && response.status < 400)
|
|
58
|
+
throw new Error('Connector redirects are not followed.');
|
|
59
|
+
if (response.status < 200 || response.status >= 300)
|
|
60
|
+
throw new Error(`Connector request failed with status ${response.status}.`);
|
|
61
|
+
const contentType = response.headers.get('content-type') || '';
|
|
62
|
+
assertContentType(contentType);
|
|
63
|
+
const declaredLength = Number(response.headers.get('content-length') || 0);
|
|
64
|
+
if (declaredLength > maxBytes)
|
|
65
|
+
throw new Error(`Connector response too large: ${declaredLength} bytes.`);
|
|
66
|
+
const decoded = decodeLimited(await response.arrayBuffer(), maxBytes);
|
|
67
|
+
recordAudit(context, item, 'succeeded', url, { httpStatus: response.status, durationMs: Date.now() - started });
|
|
68
|
+
return { ok: true, status: response.status, url: url.toString(), contentType, body: decoded.body, truncated: decoded.truncated };
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
const message = err.message;
|
|
76
|
+
recordAudit(context, item, url && guardPassed ? 'failed' : 'blocked', url, { durationMs: Date.now() - started, error: message });
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/connectors/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ConnectorManifestItem {
|
|
2
|
+
name: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
method: 'GET';
|
|
5
|
+
urlTemplate: string;
|
|
6
|
+
allowedHosts: string[];
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
maxBytes?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ConnectorManifest {
|
|
11
|
+
version: 1;
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
connectors: ConnectorManifestItem[];
|
|
14
|
+
}
|
|
15
|
+
export declare function renderConnectorUrl(template: string, args: Record<string, unknown>): URL;
|
|
16
|
+
export declare function validateConnectorItem(item: ConnectorManifestItem): void;
|
|
17
|
+
export declare function validateConnectorManifest(manifest: ConnectorManifest): void;
|
|
18
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/connectors/manifest.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,qBAAqB,EAAE,CAAC;CACrC;AAcD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAUvF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAoBvE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAW3E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const NAME_RE = /^[a-z][a-z0-9_-]{0,40}$/;
|
|
2
|
+
const HOST_RE = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/i;
|
|
3
|
+
const TEMPLATE_RE = /\{([a-zA-Z][a-zA-Z0-9_]{0,40})\}/g;
|
|
4
|
+
function cleanHost(host) {
|
|
5
|
+
return host.trim().toLowerCase().replace(/\.$/, '');
|
|
6
|
+
}
|
|
7
|
+
function assertPlainObject(value, label) {
|
|
8
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
9
|
+
throw new Error(`${label} must be an object.`);
|
|
10
|
+
}
|
|
11
|
+
export function renderConnectorUrl(template, args) {
|
|
12
|
+
const rendered = template.replace(TEMPLATE_RE, (_, key) => {
|
|
13
|
+
const value = args[key];
|
|
14
|
+
if (value === undefined || value === null)
|
|
15
|
+
throw new Error(`Missing parameter: ${key}`);
|
|
16
|
+
if (!['string', 'number', 'boolean'].includes(typeof value))
|
|
17
|
+
throw new Error(`Parameter must be primitive: ${key}`);
|
|
18
|
+
const text = String(value);
|
|
19
|
+
if (text.length > 500)
|
|
20
|
+
throw new Error(`Parameter too long: ${key}`);
|
|
21
|
+
return encodeURIComponent(text);
|
|
22
|
+
});
|
|
23
|
+
return new URL(rendered);
|
|
24
|
+
}
|
|
25
|
+
export function validateConnectorItem(item) {
|
|
26
|
+
assertPlainObject(item, 'Connector');
|
|
27
|
+
if (!NAME_RE.test(item.name || ''))
|
|
28
|
+
throw new Error(`Invalid connector name: ${item.name}`);
|
|
29
|
+
if (item.method !== 'GET')
|
|
30
|
+
throw new Error(`Connector ${item.name} may only use GET.`);
|
|
31
|
+
if (typeof item.urlTemplate !== 'string' || item.urlTemplate.length < 1)
|
|
32
|
+
throw new Error(`Connector ${item.name} needs urlTemplate.`);
|
|
33
|
+
const previewUrl = renderConnectorUrl(item.urlTemplate, Object.fromEntries([...item.urlTemplate.matchAll(TEMPLATE_RE)].map((m) => [m[1], 'value'])));
|
|
34
|
+
if (previewUrl.protocol !== 'https:')
|
|
35
|
+
throw new Error(`Connector ${item.name} must use https.`);
|
|
36
|
+
if (previewUrl.username || previewUrl.password)
|
|
37
|
+
throw new Error(`Connector ${item.name} must not include URL credentials.`);
|
|
38
|
+
if (previewUrl.hash)
|
|
39
|
+
throw new Error(`Connector ${item.name} must not include fragments.`);
|
|
40
|
+
const host = cleanHost(previewUrl.hostname);
|
|
41
|
+
if (!HOST_RE.test(host))
|
|
42
|
+
throw new Error(`Connector ${item.name} must use a DNS host.`);
|
|
43
|
+
const allowed = (item.allowedHosts || []).map(cleanHost);
|
|
44
|
+
if (!allowed.includes(host))
|
|
45
|
+
throw new Error(`Connector ${item.name} host must be allowed: ${host}`);
|
|
46
|
+
for (const allowedHost of allowed)
|
|
47
|
+
if (!HOST_RE.test(allowedHost))
|
|
48
|
+
throw new Error(`Invalid allowed host: ${allowedHost}`);
|
|
49
|
+
const timeout = item.timeoutMs ?? 10000;
|
|
50
|
+
if (!Number.isInteger(timeout) || timeout < 500 || timeout > 30000)
|
|
51
|
+
throw new Error(`Connector ${item.name} timeout must be 500-30000ms.`);
|
|
52
|
+
const maxBytes = item.maxBytes ?? 50000;
|
|
53
|
+
if (!Number.isInteger(maxBytes) || maxBytes < 100 || maxBytes > 200000)
|
|
54
|
+
throw new Error(`Connector ${item.name} maxBytes must be 100-200000.`);
|
|
55
|
+
}
|
|
56
|
+
export function validateConnectorManifest(manifest) {
|
|
57
|
+
assertPlainObject(manifest, 'Connector manifest');
|
|
58
|
+
if (manifest.version !== 1)
|
|
59
|
+
throw new Error('Connector manifest version must be 1.');
|
|
60
|
+
if (typeof manifest.enabled !== 'boolean')
|
|
61
|
+
throw new Error('Connector manifest enabled must be boolean.');
|
|
62
|
+
if (!Array.isArray(manifest.connectors))
|
|
63
|
+
throw new Error('Connector manifest connectors must be an array.');
|
|
64
|
+
const names = new Set();
|
|
65
|
+
for (const item of manifest.connectors) {
|
|
66
|
+
validateConnectorItem(item);
|
|
67
|
+
if (names.has(item.name))
|
|
68
|
+
throw new Error(`Duplicate connector name: ${item.name}`);
|
|
69
|
+
names.add(item.name);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/connectors/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ConnectorAuditStore } from './audit.js';
|
|
2
|
+
import { type ConnectorExecutionResult, type ConnectorFetch } from './executor.js';
|
|
3
|
+
import { type ConnectorManifest, type ConnectorManifestItem } from './manifest.js';
|
|
4
|
+
import type { ConnectorDnsLookup } from './dns-guard.js';
|
|
5
|
+
export declare class ConnectorRunner {
|
|
6
|
+
private manifest;
|
|
7
|
+
private fetchImpl?;
|
|
8
|
+
private audit?;
|
|
9
|
+
private dnsLookup?;
|
|
10
|
+
private byName;
|
|
11
|
+
constructor(manifest: ConnectorManifest, fetchImpl?: ConnectorFetch | undefined, audit?: ConnectorAuditStore | undefined, dnsLookup?: ConnectorDnsLookup | undefined);
|
|
12
|
+
enabled(): boolean;
|
|
13
|
+
list(): ConnectorManifestItem[];
|
|
14
|
+
get(name: string): ConnectorManifestItem | null;
|
|
15
|
+
execute(name: string, args: Record<string, unknown>, actorJid?: string | null): Promise<ConnectorExecutionResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/connectors/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAuB,KAAK,wBAAwB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAA6B,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC9G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ;IAAqB,OAAO,CAAC,SAAS,CAAC;IAAkB,OAAO,CAAC,KAAK,CAAC;IAAuB,OAAO,CAAC,SAAS,CAAC;IAF5I,OAAO,CAAC,MAAM,CAA4C;gBAEtC,QAAQ,EAAE,iBAAiB,EAAU,SAAS,CAAC,EAAE,cAAc,YAAA,EAAU,KAAK,CAAC,EAAE,mBAAmB,YAAA,EAAU,SAAS,CAAC,EAAE,kBAAkB,YAAA;IAKhK,OAAO,IAAI,OAAO;IAIlB,IAAI,IAAI,qBAAqB,EAAE;IAI/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI;IAIzC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAMxH"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { executeConnectorGet } from './executor.js';
|
|
2
|
+
import { validateConnectorManifest } from './manifest.js';
|
|
3
|
+
export class ConnectorRunner {
|
|
4
|
+
manifest;
|
|
5
|
+
fetchImpl;
|
|
6
|
+
audit;
|
|
7
|
+
dnsLookup;
|
|
8
|
+
byName = new Map();
|
|
9
|
+
constructor(manifest, fetchImpl, audit, dnsLookup) {
|
|
10
|
+
this.manifest = manifest;
|
|
11
|
+
this.fetchImpl = fetchImpl;
|
|
12
|
+
this.audit = audit;
|
|
13
|
+
this.dnsLookup = dnsLookup;
|
|
14
|
+
validateConnectorManifest(manifest);
|
|
15
|
+
for (const connector of manifest.connectors)
|
|
16
|
+
this.byName.set(connector.name, connector);
|
|
17
|
+
}
|
|
18
|
+
enabled() {
|
|
19
|
+
return this.manifest.enabled;
|
|
20
|
+
}
|
|
21
|
+
list() {
|
|
22
|
+
return Array.from(this.byName.values()).map((item) => ({ ...item, allowedHosts: [...item.allowedHosts] }));
|
|
23
|
+
}
|
|
24
|
+
get(name) {
|
|
25
|
+
return this.byName.get(name.trim().toLowerCase()) || null;
|
|
26
|
+
}
|
|
27
|
+
async execute(name, args, actorJid) {
|
|
28
|
+
if (!this.manifest.enabled)
|
|
29
|
+
throw new Error('Connector manifest is disabled.');
|
|
30
|
+
const item = this.get(name);
|
|
31
|
+
if (!item)
|
|
32
|
+
throw new Error(`Unknown connector: ${name}`);
|
|
33
|
+
return executeConnectorGet(item, args, this.fetchImpl, { actorJid, audit: this.audit, dnsLookup: this.dnsLookup });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/connectors/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAsD,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,yBAAyB,EAAsD,MAAM,eAAe,CAAC;AAG9G,MAAM,OAAO,eAAe;IAGN;IAAqC;IAAoC;IAAqC;IAF1H,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IAE1D,YAAoB,QAA2B,EAAU,SAA0B,EAAU,KAA2B,EAAU,SAA8B;QAA5I,aAAQ,GAAR,QAAQ,CAAmB;QAAU,cAAS,GAAT,SAAS,CAAiB;QAAU,UAAK,GAAL,KAAK,CAAsB;QAAU,cAAS,GAAT,SAAS,CAAqB;QAC9J,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7G,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,IAA6B,EAAE,QAAwB;QACjF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACrH,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ConnectorUrlGuardInput {
|
|
2
|
+
url: URL;
|
|
3
|
+
allowedHosts: string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function assertSafeConnectorUrl(input: ConnectorUrlGuardInput): void;
|
|
6
|
+
export declare function assertSafeRedirectUrl(previous: URL, next: URL, allowedHosts: string[]): void;
|
|
7
|
+
//# sourceMappingURL=url-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-guard.d.ts","sourceRoot":"","sources":["../../src/connectors/url-guard.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAuBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAgB1E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAG5F"}
|