agent-nuvira 3.3.1 → 3.3.4
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 +18 -13
- package/dist/agent-sdk/src/agent.d.ts +2 -0
- package/dist/agent-sdk/src/agent.d.ts.map +1 -1
- package/dist/agent-sdk/src/define.d.ts +64 -0
- package/dist/agent-sdk/src/define.d.ts.map +1 -0
- package/dist/agent-sdk/src/define.js +76 -0
- package/dist/agent-sdk/src/define.js.map +1 -0
- package/dist/agent-sdk/src/index.d.ts +9 -0
- package/dist/agent-sdk/src/index.d.ts.map +1 -1
- package/dist/agent-sdk/src/index.js +9 -0
- package/dist/agent-sdk/src/index.js.map +1 -1
- package/dist/agent-sdk/src/scaffold.d.ts +11 -0
- package/dist/agent-sdk/src/scaffold.d.ts.map +1 -1
- package/dist/agent-sdk/src/scaffold.js +16 -6
- package/dist/agent-sdk/src/scaffold.js.map +1 -1
- package/dist/agents/agents/runner.d.ts +9 -0
- package/dist/agents/agents/runner.d.ts.map +1 -1
- package/dist/agents/agents/runner.js +34 -12
- package/dist/agents/agents/runner.js.map +1 -1
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +7 -2
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +7 -1
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/artifact-verification.d.ts +102 -0
- package/dist/agents/artifact-verification.d.ts.map +1 -0
- package/dist/agents/artifact-verification.js +216 -0
- package/dist/agents/artifact-verification.js.map +1 -0
- package/dist/agents/checkpoint-store.d.ts +73 -0
- package/dist/agents/checkpoint-store.d.ts.map +1 -1
- package/dist/agents/checkpoint-store.js +161 -0
- package/dist/agents/checkpoint-store.js.map +1 -1
- package/dist/agents/credential-store.d.ts +120 -0
- package/dist/agents/credential-store.d.ts.map +1 -1
- package/dist/agents/credential-store.js +358 -19
- package/dist/agents/credential-store.js.map +1 -1
- package/dist/agents/long-form-plan.d.ts.map +1 -1
- package/dist/agents/long-form-plan.js +2 -1
- package/dist/agents/long-form-plan.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +10 -1
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +239 -79
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/phase-engine.d.ts +61 -0
- package/dist/agents/phase-engine.d.ts.map +1 -1
- package/dist/agents/phase-engine.js +68 -2
- package/dist/agents/phase-engine.js.map +1 -1
- package/dist/agents/prompt-assembly.d.ts +11 -0
- package/dist/agents/prompt-assembly.d.ts.map +1 -1
- package/dist/agents/prompt-assembly.js +17 -0
- package/dist/agents/prompt-assembly.js.map +1 -1
- package/dist/agents/release-preflight.d.ts +121 -0
- package/dist/agents/release-preflight.d.ts.map +1 -0
- package/dist/agents/release-preflight.js +259 -0
- package/dist/agents/release-preflight.js.map +1 -0
- package/dist/agents/release-runner.d.ts +157 -0
- package/dist/agents/release-runner.d.ts.map +1 -0
- package/dist/agents/release-runner.js +719 -0
- package/dist/agents/release-runner.js.map +1 -0
- package/dist/agents/step-handoff.d.ts +190 -0
- package/dist/agents/step-handoff.d.ts.map +1 -0
- package/dist/agents/step-handoff.js +443 -0
- package/dist/agents/step-handoff.js.map +1 -0
- package/dist/cli/agent.d.ts +2 -2
- package/dist/cli/agent.js +10 -10
- package/dist/cli/benchmark.d.ts.map +1 -1
- package/dist/cli/benchmark.js +11 -4
- package/dist/cli/benchmark.js.map +1 -1
- package/dist/cli/chat.d.ts +94 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +379 -24
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +8 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +9 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/credentials.d.ts +28 -0
- package/dist/cli/credentials.d.ts.map +1 -0
- package/dist/cli/credentials.js +213 -0
- package/dist/cli/credentials.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +3 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/edit.js +2 -2
- package/dist/cli/eval.d.ts +17 -0
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +105 -2
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/execute.d.ts +16 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +192 -22
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/failover-runner.d.ts.map +1 -1
- package/dist/cli/failover-runner.js +9 -3
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +55 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +285 -19
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +9 -8
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/models.d.ts +1 -1
- package/dist/cli/models.js +4 -4
- package/dist/cli/nlu.d.ts.map +1 -1
- package/dist/cli/nlu.js +8 -2
- package/dist/cli/nlu.js.map +1 -1
- package/dist/cli/parity.d.ts +85 -0
- package/dist/cli/parity.d.ts.map +1 -0
- package/dist/cli/parity.js +506 -0
- package/dist/cli/parity.js.map +1 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +2 -1
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/publish.d.ts +22 -0
- package/dist/cli/publish.d.ts.map +1 -1
- package/dist/cli/publish.js +109 -13
- package/dist/cli/publish.js.map +1 -1
- package/dist/cli/retrieval.d.ts.map +1 -1
- package/dist/cli/retrieval.js +5 -4
- package/dist/cli/retrieval.js.map +1 -1
- package/dist/cli/sdk.js +4 -4
- package/dist/cli/sdk.js.map +1 -1
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +2 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/cli/workflow.js +2 -2
- package/dist/cli/workflow.js.map +1 -1
- package/dist/config/live-credentials.d.ts +57 -0
- package/dist/config/live-credentials.d.ts.map +1 -0
- package/dist/config/live-credentials.js +126 -0
- package/dist/config/live-credentials.js.map +1 -0
- package/dist/config/paths.d.ts +18 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +25 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +44 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/federation/a2a-types.js +1 -1
- package/dist/federation/a2a-types.js.map +1 -1
- package/dist/findings/verdicts.d.ts +241 -0
- package/dist/findings/verdicts.d.ts.map +1 -0
- package/dist/findings/verdicts.js +284 -0
- package/dist/findings/verdicts.js.map +1 -0
- package/dist/gateway/adapters.d.ts +65 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +216 -10
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/channel-directory.d.ts +31 -0
- package/dist/gateway/channel-directory.d.ts.map +1 -1
- package/dist/gateway/channel-directory.js +40 -0
- package/dist/gateway/channel-directory.js.map +1 -1
- package/dist/gateway/gateway-log.d.ts +1 -1
- package/dist/gateway/gateway-log.d.ts.map +1 -1
- package/dist/gateway/gateway-log.js.map +1 -1
- package/dist/gateway/hooks.d.ts +87 -19
- package/dist/gateway/hooks.d.ts.map +1 -1
- package/dist/gateway/hooks.js +62 -23
- package/dist/gateway/hooks.js.map +1 -1
- package/dist/gateway/inbound-media.d.ts +147 -0
- package/dist/gateway/inbound-media.d.ts.map +1 -0
- package/dist/gateway/inbound-media.js +317 -0
- package/dist/gateway/inbound-media.js.map +1 -0
- package/dist/gateway/inbox.d.ts +8 -1
- package/dist/gateway/inbox.d.ts.map +1 -1
- package/dist/gateway/inbox.js.map +1 -1
- package/dist/gateway/platform-config.d.ts +14 -0
- package/dist/gateway/platform-config.d.ts.map +1 -1
- package/dist/gateway/platform-config.js +26 -8
- package/dist/gateway/platform-config.js.map +1 -1
- package/dist/gateway/realtime.d.ts +114 -0
- package/dist/gateway/realtime.d.ts.map +1 -0
- package/dist/gateway/realtime.js +402 -0
- package/dist/gateway/realtime.js.map +1 -0
- package/dist/gateway/registry.d.ts +31 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +224 -4
- package/dist/gateway/registry.js.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.js +123 -4
- package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
- package/dist/gateway/whatsapp/bridge.d.ts +6 -2
- package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/bridge.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/inference/factory.d.ts +14 -0
- package/dist/inference/factory.d.ts.map +1 -1
- package/dist/inference/factory.js +17 -0
- package/dist/inference/factory.js.map +1 -1
- package/dist/inference/groq-adapter.d.ts +2 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -1
- package/dist/inference/groq-adapter.js +16 -6
- package/dist/inference/groq-adapter.js.map +1 -1
- package/dist/inference/model-validator.d.ts +6 -1
- package/dist/inference/model-validator.d.ts.map +1 -1
- package/dist/inference/model-validator.js +7 -2
- package/dist/inference/model-validator.js.map +1 -1
- package/dist/inference/route-resolver.d.ts +116 -0
- package/dist/inference/route-resolver.d.ts.map +1 -0
- package/dist/inference/route-resolver.js +159 -0
- package/dist/inference/route-resolver.js.map +1 -0
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +29 -0
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/autonomy-policy.d.ts +18 -0
- package/dist/learning/autonomy-policy.d.ts.map +1 -1
- package/dist/learning/autonomy-policy.js +35 -0
- package/dist/learning/autonomy-policy.js.map +1 -1
- package/dist/learning/benchmark.d.ts.map +1 -1
- package/dist/learning/benchmark.js +3 -2
- package/dist/learning/benchmark.js.map +1 -1
- package/dist/learning/continuation.d.ts.map +1 -1
- package/dist/learning/continuation.js +2 -1
- package/dist/learning/continuation.js.map +1 -1
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +2 -1
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/deferred-task.d.ts.map +1 -1
- package/dist/learning/deferred-task.js +13 -4
- package/dist/learning/deferred-task.js.map +1 -1
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +2 -1
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/long-form.d.ts.map +1 -1
- package/dist/learning/long-form.js +2 -1
- package/dist/learning/long-form.js.map +1 -1
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +2 -1
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/reasoning-cache.d.ts.map +1 -1
- package/dist/learning/reasoning-cache.js +2 -1
- package/dist/learning/reasoning-cache.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +38 -2
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +91 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +31 -18
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/retrieval.d.ts.map +1 -1
- package/dist/learning/retrieval.js +2 -1
- package/dist/learning/retrieval.js.map +1 -1
- package/dist/learning/seeded-benchmark.d.ts +160 -0
- package/dist/learning/seeded-benchmark.d.ts.map +1 -0
- package/dist/learning/seeded-benchmark.js +321 -0
- package/dist/learning/seeded-benchmark.js.map +1 -0
- package/dist/learning/seeded-bugs.d.ts +142 -0
- package/dist/learning/seeded-bugs.d.ts.map +1 -0
- package/dist/learning/seeded-bugs.js +535 -0
- package/dist/learning/seeded-bugs.js.map +1 -0
- package/dist/learning/skill-store.d.ts.map +1 -1
- package/dist/learning/skill-store.js +30 -9
- package/dist/learning/skill-store.js.map +1 -1
- package/dist/learning/step-checkpoint.d.ts +127 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -0
- package/dist/learning/step-checkpoint.js +244 -0
- package/dist/learning/step-checkpoint.js.map +1 -0
- package/dist/mcp/catalog.js +2 -3
- package/dist/mcp/catalog.js.map +1 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +5 -3
- package/dist/mcp/manager.js.map +1 -1
- package/dist/nlu/intent-confirm.d.ts +23 -1
- package/dist/nlu/intent-confirm.d.ts.map +1 -1
- package/dist/nlu/intent-confirm.js +85 -2
- package/dist/nlu/intent-confirm.js.map +1 -1
- package/dist/nlu/learnings.d.ts +7 -0
- package/dist/nlu/learnings.d.ts.map +1 -1
- package/dist/nlu/learnings.js +7 -0
- package/dist/nlu/learnings.js.map +1 -1
- package/dist/observability/debug-log.d.ts +250 -0
- package/dist/observability/debug-log.d.ts.map +1 -0
- package/dist/observability/debug-log.js +500 -0
- package/dist/observability/debug-log.js.map +1 -0
- package/dist/observability/event-bus.d.ts.map +1 -1
- package/dist/observability/event-bus.js +4 -1
- package/dist/observability/event-bus.js.map +1 -1
- package/dist/observability/otel.d.ts +278 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +590 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/parity/drivers.d.ts +99 -0
- package/dist/parity/drivers.d.ts.map +1 -0
- package/dist/parity/drivers.js +1362 -0
- package/dist/parity/drivers.js.map +1 -0
- package/dist/parity/graph.d.ts +73 -0
- package/dist/parity/graph.d.ts.map +1 -0
- package/dist/parity/graph.js +162 -0
- package/dist/parity/graph.js.map +1 -0
- package/dist/parity/matrix.d.ts +105 -0
- package/dist/parity/matrix.d.ts.map +1 -0
- package/dist/parity/matrix.js +352 -0
- package/dist/parity/matrix.js.map +1 -0
- package/dist/parity/observation.d.ts +444 -0
- package/dist/parity/observation.d.ts.map +1 -0
- package/dist/parity/observation.js +333 -0
- package/dist/parity/observation.js.map +1 -0
- package/dist/parity/scenarios.d.ts +229 -0
- package/dist/parity/scenarios.d.ts.map +1 -0
- package/dist/parity/scenarios.js +175 -0
- package/dist/parity/scenarios.js.map +1 -0
- package/dist/parity/surfaces.d.ts +122 -0
- package/dist/parity/surfaces.d.ts.map +1 -0
- package/dist/parity/surfaces.js +190 -0
- package/dist/parity/surfaces.js.map +1 -0
- package/dist/runtime/fault-injection.d.ts +173 -0
- package/dist/runtime/fault-injection.d.ts.map +1 -0
- package/dist/runtime/fault-injection.js +281 -0
- package/dist/runtime/fault-injection.js.map +1 -0
- package/dist/skills/secret-capture.d.ts.map +1 -1
- package/dist/skills/secret-capture.js +9 -4
- package/dist/skills/secret-capture.js.map +1 -1
- package/dist/tools/child-agent-entry.d.ts +23 -0
- package/dist/tools/child-agent-entry.d.ts.map +1 -0
- package/dist/tools/child-agent-entry.js +129 -0
- package/dist/tools/child-agent-entry.js.map +1 -0
- package/dist/tools/child-agent-runtime.d.ts +124 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -0
- package/dist/tools/child-agent-runtime.js +704 -0
- package/dist/tools/child-agent-runtime.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +82 -10
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/credentials-tool.d.ts +24 -0
- package/dist/tools/credentials-tool.d.ts.map +1 -0
- package/dist/tools/credentials-tool.js +125 -0
- package/dist/tools/credentials-tool.js.map +1 -0
- package/dist/tools/delegation-system.d.ts +31 -0
- package/dist/tools/delegation-system.d.ts.map +1 -1
- package/dist/tools/delegation-system.js +70 -9
- package/dist/tools/delegation-system.js.map +1 -1
- package/dist/tools/extract/docx.d.ts +27 -0
- package/dist/tools/extract/docx.d.ts.map +1 -0
- package/dist/tools/extract/docx.js +48 -0
- package/dist/tools/extract/docx.js.map +1 -0
- package/dist/tools/extract/html-text.d.ts +27 -0
- package/dist/tools/extract/html-text.d.ts.map +1 -0
- package/dist/tools/extract/html-text.js +86 -0
- package/dist/tools/extract/html-text.js.map +1 -0
- package/dist/tools/extract/pdf-ocr.d.ts +58 -0
- package/dist/tools/extract/pdf-ocr.d.ts.map +1 -0
- package/dist/tools/extract/pdf-ocr.js +116 -0
- package/dist/tools/extract/pdf-ocr.js.map +1 -0
- package/dist/tools/extract/pdf.d.ts +65 -0
- package/dist/tools/extract/pdf.d.ts.map +1 -0
- package/dist/tools/extract/pdf.js +197 -0
- package/dist/tools/extract/pdf.js.map +1 -0
- package/dist/tools/extract/pptx.d.ts +32 -0
- package/dist/tools/extract/pptx.d.ts.map +1 -0
- package/dist/tools/extract/pptx.js +77 -0
- package/dist/tools/extract/pptx.js.map +1 -0
- package/dist/tools/extract/xlsx.d.ts +47 -0
- package/dist/tools/extract/xlsx.d.ts.map +1 -0
- package/dist/tools/extract/xlsx.js +111 -0
- package/dist/tools/extract/xlsx.js.map +1 -0
- package/dist/tools/finding-tool.d.ts +76 -0
- package/dist/tools/finding-tool.d.ts.map +1 -0
- package/dist/tools/finding-tool.js +125 -0
- package/dist/tools/finding-tool.js.map +1 -0
- package/dist/tools/git-tool.d.ts +25 -7
- package/dist/tools/git-tool.d.ts.map +1 -1
- package/dist/tools/git-tool.js +155 -15
- package/dist/tools/git-tool.js.map +1 -1
- package/dist/tools/loop-project-context.d.ts.map +1 -1
- package/dist/tools/loop-project-context.js +16 -0
- package/dist/tools/loop-project-context.js.map +1 -1
- package/dist/tools/loop-route-feed.d.ts +57 -0
- package/dist/tools/loop-route-feed.d.ts.map +1 -0
- package/dist/tools/loop-route-feed.js +101 -0
- package/dist/tools/loop-route-feed.js.map +1 -0
- package/dist/tools/messaging-tools.d.ts +41 -11
- package/dist/tools/messaging-tools.d.ts.map +1 -1
- package/dist/tools/messaging-tools.js +104 -55
- package/dist/tools/messaging-tools.js.map +1 -1
- package/dist/tools/neutts-synth.d.ts +27 -3
- package/dist/tools/neutts-synth.d.ts.map +1 -1
- package/dist/tools/neutts-synth.js +57 -13
- package/dist/tools/neutts-synth.js.map +1 -1
- package/dist/tools/pipeline-tool.d.ts +43 -1
- package/dist/tools/pipeline-tool.d.ts.map +1 -1
- package/dist/tools/pipeline-tool.js +21 -4
- package/dist/tools/pipeline-tool.js.map +1 -1
- package/dist/tools/publish-tool.d.ts.map +1 -1
- package/dist/tools/publish-tool.js +76 -10
- package/dist/tools/publish-tool.js.map +1 -1
- package/dist/tools/read-extract.d.ts +116 -45
- package/dist/tools/read-extract.d.ts.map +1 -1
- package/dist/tools/read-extract.js +494 -158
- package/dist/tools/read-extract.js.map +1 -1
- package/dist/tools/registry.d.ts +23 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +196 -29
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-terminal.d.ts +9 -0
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +80 -2
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/subagent-refusal.d.ts +15 -0
- package/dist/tools/subagent-refusal.d.ts.map +1 -0
- package/dist/tools/subagent-refusal.js +18 -0
- package/dist/tools/subagent-refusal.js.map +1 -0
- package/dist/tools/subagent-spawner.d.ts +122 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +249 -28
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-hooks.d.ts +177 -0
- package/dist/tools/tool-hooks.d.ts.map +1 -0
- package/dist/tools/tool-hooks.js +427 -0
- package/dist/tools/tool-hooks.js.map +1 -0
- package/dist/tools/tool-loop.d.ts +94 -5
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +315 -9
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/tool-refusal.d.ts +68 -0
- package/dist/tools/tool-refusal.d.ts.map +1 -0
- package/dist/tools/tool-refusal.js +78 -0
- package/dist/tools/tool-refusal.js.map +1 -0
- package/dist/tools/toolsets.d.ts +8 -0
- package/dist/tools/toolsets.d.ts.map +1 -1
- package/dist/tools/toolsets.js +14 -4
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/vision-tools.d.ts +88 -83
- package/dist/tools/vision-tools.d.ts.map +1 -1
- package/dist/tools/vision-tools.js +134 -103
- package/dist/tools/vision-tools.js.map +1 -1
- package/dist/tools/worktree.d.ts +210 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +374 -0
- package/dist/tools/worktree.js.map +1 -0
- package/dist/utils/format.d.ts +3 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +32 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/web-dashboard/attachment-extract.d.ts +64 -0
- package/dist/web-dashboard/attachment-extract.d.ts.map +1 -0
- package/dist/web-dashboard/attachment-extract.js +154 -0
- package/dist/web-dashboard/attachment-extract.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +108 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +36 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +37 -0
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +61 -1
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +14 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +247 -13
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +196 -48
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/workflow/registry.js +1 -1
- package/dist/workflow/registry.js.map +1 -1
- package/package.json +22 -6
- package/src/web-dashboard/public/assets/{index-Cyd6tIew.css → index-XJjj2cBX.css} +1 -1
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js +207 -0
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/dist/tools/child-agent-worker.js +0 -212
- package/src/web-dashboard/public/assets/index-CjvoBhlz.js +0 -207
- package/src/web-dashboard/public/assets/index-CjvoBhlz.js.map +0 -1
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbound document hydration for the gateway (`src/gateway/inbound-media.ts`).
|
|
3
|
+
*
|
|
4
|
+
* A messaging transport delivers a DOCUMENT (a PDF report, a DOCX contract, a
|
|
5
|
+
* spreadsheet) as bytes + a filename — never as text. The bridge only extracted
|
|
6
|
+
* `conversation` / `extendedTextMessage`, so a document message arrived with an
|
|
7
|
+
* empty `text` and was dropped at `if (!text) continue`: the sender's own file
|
|
8
|
+
* vanished with no reply and no record.
|
|
9
|
+
*
|
|
10
|
+
* This module is the fix for the inbound half of that gap. The bridge DOWNLOADS
|
|
11
|
+
* the bytes, they ride on `InboundMessage.media`, and `handleInbound` calls
|
|
12
|
+
* `hydrateInboundMedia` — which writes them to the artifact sandbox and runs the
|
|
13
|
+
* SAME `read_extract` the agent uses for a file in the project folder. The
|
|
14
|
+
* returned section is prepended to the turn's text, so a caption + a document
|
|
15
|
+
* becomes one request the model can act on.
|
|
16
|
+
*
|
|
17
|
+
* Extraction (not the download) is what makes the file usable: a document whose
|
|
18
|
+
* bytes never become text is still a message the agent cannot answer. When the
|
|
19
|
+
* file cannot be extracted the section says so, with the typed code and the
|
|
20
|
+
* concrete alternatives `read_extract` produces — never a silent empty result.
|
|
21
|
+
*
|
|
22
|
+
* Never throws: a media failure must not break the text turn it arrived with.
|
|
23
|
+
*/
|
|
24
|
+
import { readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
25
|
+
import { extname, join } from 'node:path';
|
|
26
|
+
import { artifactsDir } from '../tools/modality/shared.js';
|
|
27
|
+
/** What we are willing to write + extract in one inbound turn. */
|
|
28
|
+
export const MAX_INBOUND_MEDIA_BYTES = 20 * 1024 * 1024;
|
|
29
|
+
/** How long an extracted inbound attachment is kept before the sweep (ms). */
|
|
30
|
+
export const INBOUND_MEDIA_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
31
|
+
/**
|
|
32
|
+
* Sandbox size cap (bytes). Past this, the OLDEST remaining files are swept
|
|
33
|
+
* even if they are still inside the TTL — a long-running gateway fed scanned
|
|
34
|
+
* reports should not grow without bound.
|
|
35
|
+
*/
|
|
36
|
+
export const INBOUND_MEDIA_MAX_BYTES = 200 * 1024 * 1024;
|
|
37
|
+
/** MIME type → extension, for transports that omit a filename. */
|
|
38
|
+
const MIME_EXT = {
|
|
39
|
+
'application/pdf': '.pdf',
|
|
40
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '.docx',
|
|
41
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': '.xlsx',
|
|
42
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation': '.pptx',
|
|
43
|
+
'text/csv': '.csv',
|
|
44
|
+
'application/json': '.json',
|
|
45
|
+
'text/plain': '.txt',
|
|
46
|
+
'text/markdown': '.md',
|
|
47
|
+
'text/html': '.html',
|
|
48
|
+
'application/xml': '.xml',
|
|
49
|
+
'text/xml': '.xml',
|
|
50
|
+
'image/jpeg': '.jpg',
|
|
51
|
+
'image/png': '.png',
|
|
52
|
+
'image/webp': '.webp',
|
|
53
|
+
'image/gif': '.gif',
|
|
54
|
+
};
|
|
55
|
+
/** Image extensions — extraction cannot read them; a vision call can. */
|
|
56
|
+
const IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.tiff']);
|
|
57
|
+
/** A human label for the media kind (used in the section heading). */
|
|
58
|
+
function labelFor(media) {
|
|
59
|
+
switch (media.type) {
|
|
60
|
+
case 'image': return 'Image';
|
|
61
|
+
case 'video': return 'Video';
|
|
62
|
+
case 'audio': return 'Audio';
|
|
63
|
+
default: return 'Document';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Reduce a sender-supplied name to a safe basename that keeps its extension —
|
|
68
|
+
* the name is untrusted and must never escape the artifact dir.
|
|
69
|
+
*/
|
|
70
|
+
export function safeInboundName(media) {
|
|
71
|
+
const base = (media.filename ?? '').split(/[\\/]/).pop() ?? '';
|
|
72
|
+
const cleaned = base.replace(/[\u0000-\u001f\u007f"]/g, '').trim();
|
|
73
|
+
if (cleaned)
|
|
74
|
+
return cleaned.slice(0, 120);
|
|
75
|
+
const mime = (media.mimetype ?? '').split(';')[0].trim().toLowerCase();
|
|
76
|
+
const ext = MIME_EXT[mime] ?? (media.type === 'document' ? '.bin' : `.${media.type}`);
|
|
77
|
+
return `inbound-${media.type}${ext}`;
|
|
78
|
+
}
|
|
79
|
+
/** Human byte size for an error line ("512 B" / "512 KB" / "20 MB"). */
|
|
80
|
+
function formatBytes(n) {
|
|
81
|
+
if (n >= 1024 * 1024)
|
|
82
|
+
return `${Math.round(n / (1024 * 1024))} MB`;
|
|
83
|
+
if (n >= 1024)
|
|
84
|
+
return `${Math.round(n / 1024)} KB`;
|
|
85
|
+
return `${n} B`;
|
|
86
|
+
}
|
|
87
|
+
/** Write the bytes into the artifact sandbox, or explain why we could not. */
|
|
88
|
+
function persist(media, maxBytes) {
|
|
89
|
+
if (!media.data || media.data.byteLength === 0) {
|
|
90
|
+
return { error: 'the file was empty (zero bytes)' };
|
|
91
|
+
}
|
|
92
|
+
if (media.data.byteLength > maxBytes) {
|
|
93
|
+
return { error: `the file is larger than the ${formatBytes(maxBytes)} limit` };
|
|
94
|
+
}
|
|
95
|
+
// A unique name per delivery: the same document sent twice must not clobber
|
|
96
|
+
// the first copy (its extracted text is already in the conversation).
|
|
97
|
+
const path = join(artifactsDir('inbound'), `${Date.now().toString(36)}-${safeInboundName(media)}`);
|
|
98
|
+
writeFileSync(path, Buffer.from(media.data));
|
|
99
|
+
return { path };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Render the sender-facing reply for a document that could not be extracted.
|
|
103
|
+
*
|
|
104
|
+
* Built from `reason` alone on purpose: the model-facing section carries the
|
|
105
|
+
* saved artifact path and agent-jargon alternatives (`call read_extract again
|
|
106
|
+
* with ocr:true`), neither of which belongs in a chat with the person who sent
|
|
107
|
+
* the file.
|
|
108
|
+
*/
|
|
109
|
+
export function formatMediaFailureReply(failure) {
|
|
110
|
+
const kind = failure.type === 'document' ? 'document' : failure.type === 'audio' ? 'voice note' : failure.type;
|
|
111
|
+
const advice = failure.type === 'document'
|
|
112
|
+
? 'If you can, re-send it as PDF, DOCX, XLSX, PPTX, CSV or plain text.'
|
|
113
|
+
: 'Send it as a text message instead.';
|
|
114
|
+
return `I couldn't read your ${kind} "${failure.name}" — ${failure.reason} ${advice}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Extract an inbound media attachment into a labelled context section. Never
|
|
118
|
+
* throws — a failure is reported as `failure` (plus a refusal section) instead.
|
|
119
|
+
*
|
|
120
|
+
* The saved path is always included so the model can follow up on the ORIGINAL
|
|
121
|
+
* file (e.g. `read_extract` with `ocr:true` for a scanned PDF, or
|
|
122
|
+
* `describe_image` for an image) instead of only seeing the extracted text.
|
|
123
|
+
*/
|
|
124
|
+
export async function hydrateInboundMedia(media, opts = {}) {
|
|
125
|
+
const maxBytes = typeof opts.maxBytes === 'number' && opts.maxBytes > 0 ? opts.maxBytes : MAX_INBOUND_MEDIA_BYTES;
|
|
126
|
+
const name = media.filename?.trim() || safeInboundName(media);
|
|
127
|
+
// A DOCUMENT is the only kind that must become text: an image is expected to
|
|
128
|
+
// need the vision tool, and audio/video are not extraction jobs — replying
|
|
129
|
+
// "could not be extracted" to a voice note would be true but useless.
|
|
130
|
+
const documentFailure = (reason) => media.type === 'document' ? { failure: { name, type: media.type, reason } } : {};
|
|
131
|
+
try {
|
|
132
|
+
const stored = persist(media, maxBytes);
|
|
133
|
+
if ('error' in stored) {
|
|
134
|
+
return {
|
|
135
|
+
section: `[${labelFor(media)}: ${name} could not be read — ${stored.error}]`,
|
|
136
|
+
...documentFailure(stored.error),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const { path } = stored;
|
|
140
|
+
const ext = extname(path).toLowerCase();
|
|
141
|
+
if (IMAGE_EXTS.has(ext)) {
|
|
142
|
+
return { section: `[Image: ${name} — saved at ${path}. Call describe_image on that path to read it.]` };
|
|
143
|
+
}
|
|
144
|
+
// A VOICE NOTE is audio, not a document: read_extract has no audio reader,
|
|
145
|
+
// so route it through the SAME transcription path the `transcribe` tool
|
|
146
|
+
// uses (whisper.cpp / faster-whisper). A voice note that produces no text
|
|
147
|
+
// and no reply is the same silent drop as an unreadable document.
|
|
148
|
+
if (media.type === 'audio') {
|
|
149
|
+
const voice = await import('../tools/modality/voice.js');
|
|
150
|
+
if (!voice.isTranscribeAvailable()) {
|
|
151
|
+
const reason = 'transcription is not set up on this machine';
|
|
152
|
+
return {
|
|
153
|
+
section: `[Voice note: ${name} — saved at ${path}, but could not be transcribed: ${reason}.]`,
|
|
154
|
+
failure: { name, type: media.type, reason },
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const result = await voice.transcribe(path);
|
|
158
|
+
if (!result.ok || !result.text) {
|
|
159
|
+
const reason = 'the audio could not be transcribed';
|
|
160
|
+
return {
|
|
161
|
+
section: `[Voice note: ${name} — saved at ${path}, but could not be transcribed: ${result.error ?? reason}.]`,
|
|
162
|
+
failure: { name, type: media.type, reason },
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return { section: `[Voice note: ${name} — transcript]\n${result.text}` };
|
|
166
|
+
}
|
|
167
|
+
// Lazy import: the gateway should not pay to load the extractor stack
|
|
168
|
+
// (pdf.js / SheetJS) until a document actually arrives.
|
|
169
|
+
const { getReadExtractManager } = await import('../tools/read-extract.js');
|
|
170
|
+
const result = await getReadExtractManager().extract(path);
|
|
171
|
+
if (!result.success) {
|
|
172
|
+
const reason = result.error ?? 'unknown error';
|
|
173
|
+
const alt = result.alternatives && result.alternatives.length > 0
|
|
174
|
+
? ` Instead: ${result.alternatives.join(' | ')}`
|
|
175
|
+
: '';
|
|
176
|
+
return {
|
|
177
|
+
section: `[${labelFor(media)}: ${name} — saved at ${path}, but could not be extracted (${result.code ?? 'error'}): ${reason}${alt}]`,
|
|
178
|
+
...documentFailure(reason),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const meta = result.metadata ?? {};
|
|
182
|
+
const notes = [];
|
|
183
|
+
if (meta.pages)
|
|
184
|
+
notes.push(`${meta.pages} page(s)`);
|
|
185
|
+
if (meta.sheets && meta.sheets.length > 0)
|
|
186
|
+
notes.push(`sheets: ${meta.sheets.join(', ')}`);
|
|
187
|
+
if (meta.slides)
|
|
188
|
+
notes.push(`${meta.slides} slide(s)`);
|
|
189
|
+
if (meta.truncated)
|
|
190
|
+
notes.push('truncated');
|
|
191
|
+
const suffix = notes.length > 0 ? ` (${notes.join(', ')})` : '';
|
|
192
|
+
return { section: `[${labelFor(media)}: ${name}${suffix} — saved at ${path}]\n${result.text}` };
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
196
|
+
return {
|
|
197
|
+
section: `[${labelFor(media)}: ${name} could not be read — ${reason}]`,
|
|
198
|
+
...documentFailure(reason),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Read the effective inbound-attachment policy from config. Never throws — an
|
|
204
|
+
* absent config (or a throwing ConfigManager) means the safe default: enabled,
|
|
205
|
+
* with the module's own cap.
|
|
206
|
+
*/
|
|
207
|
+
export function inboundAttachmentPolicy(cm) {
|
|
208
|
+
try {
|
|
209
|
+
const cfg = cm?.getAll?.()?.gateway?.inboundAttachments;
|
|
210
|
+
const maxBytes = typeof cfg?.maxBytes === 'number' && Number.isFinite(cfg.maxBytes) && cfg.maxBytes > 0
|
|
211
|
+
? cfg.maxBytes
|
|
212
|
+
: MAX_INBOUND_MEDIA_BYTES;
|
|
213
|
+
return { enabled: cfg?.enabled !== false, maxBytes };
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return { enabled: true, maxBytes: MAX_INBOUND_MEDIA_BYTES };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Download a remote attachment's bytes (never throws — null on any failure or
|
|
221
|
+
* an over-cap size). Shared by the webhook receiver and the real-time Discord
|
|
222
|
+
* gateway / Slack Socket Mode transports, so one code path fetches every
|
|
223
|
+
* inbound attachment.
|
|
224
|
+
*/
|
|
225
|
+
export async function downloadInboundAttachment(att) {
|
|
226
|
+
if (att.size !== undefined && att.size > MAX_INBOUND_MEDIA_BYTES)
|
|
227
|
+
return null;
|
|
228
|
+
try {
|
|
229
|
+
const headers = {};
|
|
230
|
+
if (att.authenticated) {
|
|
231
|
+
if (!att.token)
|
|
232
|
+
return null;
|
|
233
|
+
headers.authorization = `Bearer ${att.token}`;
|
|
234
|
+
}
|
|
235
|
+
const res = await fetch(att.url, { headers });
|
|
236
|
+
if (!res.ok)
|
|
237
|
+
return null;
|
|
238
|
+
const buf = new Uint8Array(await res.arrayBuffer());
|
|
239
|
+
if (buf.byteLength === 0 || buf.byteLength > MAX_INBOUND_MEDIA_BYTES)
|
|
240
|
+
return null;
|
|
241
|
+
return { type: att.type, data: buf, filename: att.filename, mimetype: att.mimetype };
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/** Best-effort delete (never throws). */
|
|
248
|
+
function removeFile(path) {
|
|
249
|
+
try {
|
|
250
|
+
rmSync(path, { force: true });
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Sweep the inbound artifact sandbox: remove files older than `maxAgeMs`, then
|
|
259
|
+
* (if still over `maxBytes`) the OLDEST of what remains until it fits. Safe to
|
|
260
|
+
* call on a schedule — never throws, and a file that cannot be removed is
|
|
261
|
+
* skipped rather than aborting the sweep.
|
|
262
|
+
*/
|
|
263
|
+
export function pruneInboundMedia(opts = {}) {
|
|
264
|
+
const maxAgeMs = opts.maxAgeMs ?? INBOUND_MEDIA_TTL_MS;
|
|
265
|
+
const maxBytes = opts.maxBytes ?? INBOUND_MEDIA_MAX_BYTES;
|
|
266
|
+
const now = opts.now ?? Date.now();
|
|
267
|
+
const result = { removed: 0, bytesFreed: 0, kept: 0 };
|
|
268
|
+
let dir;
|
|
269
|
+
try {
|
|
270
|
+
dir = artifactsDir('inbound');
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return result;
|
|
274
|
+
}
|
|
275
|
+
let entries;
|
|
276
|
+
try {
|
|
277
|
+
entries = readdirSync(dir)
|
|
278
|
+
.map((entry) => {
|
|
279
|
+
const full = join(dir, entry);
|
|
280
|
+
const stat = statSync(full);
|
|
281
|
+
return stat.isFile() ? { path: full, mtimeMs: stat.mtimeMs, size: stat.size } : null;
|
|
282
|
+
})
|
|
283
|
+
.filter((e) => e !== null);
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
// 1. Age: anything past the TTL goes.
|
|
289
|
+
const survivors = [];
|
|
290
|
+
for (const entry of entries) {
|
|
291
|
+
if (now - entry.mtimeMs > maxAgeMs) {
|
|
292
|
+
if (removeFile(entry.path)) {
|
|
293
|
+
result.removed += 1;
|
|
294
|
+
result.bytesFreed += entry.size;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
survivors.push(entry);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// 2. Size: oldest-first until under the cap.
|
|
302
|
+
survivors.sort((a, b) => a.mtimeMs - b.mtimeMs);
|
|
303
|
+
let total = survivors.reduce((n, e) => n + e.size, 0);
|
|
304
|
+
let swept = 0;
|
|
305
|
+
while (total > maxBytes && swept < survivors.length) {
|
|
306
|
+
const entry = survivors[swept];
|
|
307
|
+
if (removeFile(entry.path)) {
|
|
308
|
+
result.removed += 1;
|
|
309
|
+
result.bytesFreed += entry.size;
|
|
310
|
+
total -= entry.size;
|
|
311
|
+
}
|
|
312
|
+
swept += 1;
|
|
313
|
+
}
|
|
314
|
+
result.kept = survivors.length - swept;
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=inbound-media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-media.js","sourceRoot":"","sources":["../../src/gateway/inbound-media.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/inbox.d.ts
CHANGED
|
@@ -22,7 +22,14 @@ export type InboundDisposition = 'pipeline' | 'chat' | 'help' | 'refused' | 'err
|
|
|
22
22
|
* starting a turn. Recorded so the reply is visible in the ledger instead of
|
|
23
23
|
* looking like a message that vanished.
|
|
24
24
|
*/
|
|
25
|
-
| 'clarified'
|
|
25
|
+
| 'clarified'
|
|
26
|
+
/**
|
|
27
|
+
* A document attachment arrived but could not be turned into text (unsupported
|
|
28
|
+
* format, a scanned PDF with no text layer, the reader package missing). The
|
|
29
|
+
* sender was answered directly with the reason instead of the message being
|
|
30
|
+
* routed to a model that never saw the file.
|
|
31
|
+
*/
|
|
32
|
+
| 'attachment_failed';
|
|
26
33
|
/** One inbound message recorded by the gateway. */
|
|
27
34
|
export interface InboxEntry {
|
|
28
35
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/gateway/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO;AACT;;;;GAIG;GACD,WAAW;AACb;;;;;GAKG;GACD,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/gateway/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO;AACT;;;;GAIG;GACD,WAAW;AACb;;;;;GAKG;GACD,WAAW;AACb;;;;;GAKG;GACD,mBAAmB,CAAC;AAExB,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB,QAA0B,CAAC;AAE1D,oCAAoC;AACpC,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,SAAS,CAAC,EAAE,MAAM;IAI9B,wCAAwC;IACxC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,qDAAqD;IACrD,IAAI,IAAI,UAAU,EAAE;IAUpB,OAAO,CAAC,KAAK;IASb,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,UAAU;CAQzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/gateway/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/gateway/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAyD1D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,oCAAoC;AACpC,MAAM,OAAO,WAAW;IACd,IAAI,CAAS;IAErB,YAAY,SAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7E,CAAC;IAED,wCAAwC;IACxC,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,qDAAqD;IACrD,IAAI;QACF,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAA+B,CAAC;YAC1F,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAqB;QACjC,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,KAAoC;QACzC,MAAM,KAAK,GAAe,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACzE,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,uEAAuE;QACvE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -20,6 +20,12 @@ export interface PlatformEnvVarMeta {
|
|
|
20
20
|
prompt: string;
|
|
21
21
|
/** Secrets (tokens, passwords, keys) are prompted masked + displayed redacted. */
|
|
22
22
|
secret: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* True for an ADDITIONAL transport mode (see PLATFORM_TRANSPORT_ENV_VARS) —
|
|
25
|
+
* not needed to use the platform, so the prompt says so and `--set` mode does
|
|
26
|
+
* not demand it.
|
|
27
|
+
*/
|
|
28
|
+
optional: boolean;
|
|
23
29
|
}
|
|
24
30
|
export declare function platformEnvVarMeta(platform: Platform): PlatformEnvVarMeta[];
|
|
25
31
|
/** Platforms manageable through the config surface (excludes whatsapp/mock). */
|
|
@@ -43,8 +49,16 @@ export declare function envVarState(varName: string): EnvVarState;
|
|
|
43
49
|
export interface PlatformConfigStatus {
|
|
44
50
|
platform: Platform;
|
|
45
51
|
label: string;
|
|
52
|
+
/** Every REQUIRED var is set — the platform is usable (see platformConfigVars). */
|
|
46
53
|
configured: boolean;
|
|
47
54
|
envVars: EnvVarState[];
|
|
55
|
+
/**
|
|
56
|
+
* Vars in {@link envVars} that are additional transport modes rather than
|
|
57
|
+
* requirements — an unset one here means "that way of talking to the platform
|
|
58
|
+
* is off", NOT "the platform is unusable". Surfaced so the CLI/dashboard can
|
|
59
|
+
* say which is which instead of leaving the operator to guess.
|
|
60
|
+
*/
|
|
61
|
+
extraVars: string[];
|
|
48
62
|
}
|
|
49
63
|
export declare function platformConfigStatus(platform: Platform): PlatformConfigStatus;
|
|
50
64
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-config.d.ts","sourceRoot":"","sources":["../../src/gateway/platform-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,
|
|
1
|
+
{"version":3,"file":"platform-config.d.ts","sourceRoot":"","sources":["../../src/gateway/platform-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,wBAAwB,CAAC;AAEhC,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAsCD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAe3E;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAIlD;AAID;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,GAAG,EAAE,OAAO,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAIxD;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,oBAAoB,CAgB7E;AAkCD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,GAAE,MAAM,EAAO,GACrB;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAmCxC;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,IAAI,CAO/F;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
|
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
16
16
|
import { resolveNuviraEnvFile } from '../config/paths.js';
|
|
17
|
-
import { PLATFORM_ENV_VARS, PLATFORM_LABELS } from './channel-directory.js';
|
|
17
|
+
import { PLATFORM_ENV_VARS, PLATFORM_LABELS, PLATFORM_TRANSPORT_ENV_VARS, platformConfigVars, } from './channel-directory.js';
|
|
18
18
|
const SECRET_HINT = /TOKEN|PASSWORD|PASS|SECRET|KEY|AUTH|CRED/i;
|
|
19
19
|
const PROMPTS = {
|
|
20
20
|
NUVIRA_TELEGRAM_TOKEN: 'Telegram bot token (from @BotFather)',
|
|
21
21
|
NUVIRA_DISCORD_BOT_TOKEN: 'Discord bot token',
|
|
22
22
|
NUVIRA_SLACK_BOT_TOKEN: 'Slack bot token',
|
|
23
|
+
NUVIRA_SLACK_APP_TOKEN: 'Slack app-level token (xapp-…, Socket Mode inbound)',
|
|
24
|
+
NUVIRA_SLACK_WEBHOOK_URL: 'Slack incoming-webhook URL (outbound without a bot token)',
|
|
25
|
+
NUVIRA_SLACK_SIGNING_SECRET: 'Slack signing secret (Events API signature verification)',
|
|
26
|
+
NUVIRA_DISCORD_WEBHOOK_URL: 'Discord incoming-webhook URL (instead of / alongside a bot token)',
|
|
23
27
|
NUVIRA_WHATSAPP_SESSION_DIR: 'WhatsApp session dir (leave default unless moved)',
|
|
24
28
|
NUVIRA_WHATSAPP_TOKEN: 'Meta Cloud API token',
|
|
25
29
|
NUVIRA_DINGTALK_WEBHOOK_URL: 'DingTalk robot webhook URL',
|
|
@@ -46,11 +50,20 @@ const PROMPTS = {
|
|
|
46
50
|
NUVIRA_SIGNAL_ACCOUNT: 'Signal account number (registered with signal-cli-rest-api)',
|
|
47
51
|
};
|
|
48
52
|
export function platformEnvVarMeta(platform) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
const required = new Set(PLATFORM_ENV_VARS[platform]);
|
|
54
|
+
return platformConfigVars(platform).map((varName) => {
|
|
55
|
+
const optional = !required.has(varName);
|
|
56
|
+
return {
|
|
57
|
+
varName,
|
|
58
|
+
// The marker lives in the prompt rather than in each renderer: this string
|
|
59
|
+
// is what the CLI wizard, `config gateway list` and the dashboard form all
|
|
60
|
+
// label the field with, so one place keeps them from disagreeing about
|
|
61
|
+
// which keys are required.
|
|
62
|
+
prompt: `${PROMPTS[varName] ?? varName}${optional ? ' (optional)' : ''}`,
|
|
63
|
+
secret: SECRET_HINT.test(varName),
|
|
64
|
+
optional,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
54
67
|
}
|
|
55
68
|
/** Platforms manageable through the config surface (excludes whatsapp/mock). */
|
|
56
69
|
export function configurablePlatforms() {
|
|
@@ -72,15 +85,20 @@ export function envVarState(varName) {
|
|
|
72
85
|
return { varName, set: value.length > 0, value };
|
|
73
86
|
}
|
|
74
87
|
export function platformConfigStatus(platform) {
|
|
75
|
-
|
|
88
|
+
// Every managed var is LISTED (so the key Socket Mode needs is visible and
|
|
89
|
+
// writable), but `configured` is judged on the required ones only — an
|
|
90
|
+
// outbound-only Slack app is configured, it just cannot receive yet.
|
|
91
|
+
const required = new Set(PLATFORM_ENV_VARS[platform]);
|
|
92
|
+
const envVars = platformConfigVars(platform).map(envVarState);
|
|
76
93
|
return {
|
|
77
94
|
platform,
|
|
78
95
|
label: PLATFORM_LABELS[platform],
|
|
79
96
|
// The env FILE counts as effective too (loadEnv() merges it at startup) —
|
|
80
97
|
// so a token written to ~/.nuvira/.env shows as configured even before the
|
|
81
98
|
// next process restart.
|
|
82
|
-
configured: envVars.every((v) => v.set),
|
|
99
|
+
configured: envVars.filter((v) => required.has(v.varName)).every((v) => v.set),
|
|
83
100
|
envVars,
|
|
101
|
+
extraVars: PLATFORM_TRANSPORT_ENV_VARS[platform] ?? [],
|
|
84
102
|
};
|
|
85
103
|
}
|
|
86
104
|
function readEnvFileValue(varName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-config.js","sourceRoot":"","sources":["../../src/gateway/platform-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,
|
|
1
|
+
{"version":3,"file":"platform-config.js","sourceRoot":"","sources":["../../src/gateway/platform-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real-time inbound transports for the gateway (`src/gateway/realtime.ts`).
|
|
3
|
+
*
|
|
4
|
+
* The webhook receiver covers platforms that PUSH to us — but a bot cannot
|
|
5
|
+
* receive Discord `MESSAGE_CREATE` events or Slack Events API deliveries over a
|
|
6
|
+
* webhook it does not own. Discord bots get messages over the Discord Gateway
|
|
7
|
+
* (a WebSocket we dial out to); Slack apps that cannot expose a public HTTPS
|
|
8
|
+
* endpoint use Socket Mode (a WebSocket that carries the very same
|
|
9
|
+
* `event_callback` envelopes the Events API would POST). Without these, an
|
|
10
|
+
* inbound document on either platform never reaches the hydration path, so the
|
|
11
|
+
* attachment handling added for webhooks was unreachable in practice.
|
|
12
|
+
*
|
|
13
|
+
* Both sources end at the same place: build an `InboundMessage`, download the
|
|
14
|
+
* attachment's bytes with the shared `downloadInboundAttachment` helper, and
|
|
15
|
+
* hand it to the registry's `handleInbound` — exactly like the webhook
|
|
16
|
+
* receiver. Extraction, auto-reply, and the sandbox prune are therefore shared,
|
|
17
|
+
* not reimplemented.
|
|
18
|
+
*
|
|
19
|
+
* The socket and `fetch` are injectable so tests drive a scripted gateway
|
|
20
|
+
* without network or a real Discord/Slack connection.
|
|
21
|
+
*/
|
|
22
|
+
import { type MessageHandler } from './adapters.js';
|
|
23
|
+
/** The slice of a WebSocket this module needs (real or scripted). */
|
|
24
|
+
export interface RealtimeSocket {
|
|
25
|
+
send(data: string): void;
|
|
26
|
+
close(): void;
|
|
27
|
+
onopen: (() => void) | null;
|
|
28
|
+
onmessage: ((ev: {
|
|
29
|
+
data: unknown;
|
|
30
|
+
}) => void) | null;
|
|
31
|
+
onclose: (() => void) | null;
|
|
32
|
+
onerror: ((err: unknown) => void) | null;
|
|
33
|
+
}
|
|
34
|
+
export type SocketFactory = (url: string) => RealtimeSocket;
|
|
35
|
+
/**
|
|
36
|
+
* Default socket. Prefers the platform's built-in `WebSocket` (Node 22+, Bun,
|
|
37
|
+
* Deno) and falls back to `ws` — neither is a dependency of the gateway core,
|
|
38
|
+
* so this stays a lazy, best-effort import.
|
|
39
|
+
*/
|
|
40
|
+
export declare function defaultSocketFactory(url: string): Promise<RealtimeSocket>;
|
|
41
|
+
/** Base backoff/reconnect plumbing shared by both transports. */
|
|
42
|
+
declare abstract class ReconnectingSource {
|
|
43
|
+
protected readonly backoffMs: number;
|
|
44
|
+
protected readonly maxBackoffMs: number;
|
|
45
|
+
protected stopped: boolean;
|
|
46
|
+
private attempt;
|
|
47
|
+
private retryTimer;
|
|
48
|
+
protected socket: RealtimeSocket | null;
|
|
49
|
+
constructor(backoffMs?: number, maxBackoffMs?: number);
|
|
50
|
+
protected abstract open(onMessage: MessageHandler): Promise<void>;
|
|
51
|
+
start(onMessage: MessageHandler): Promise<void>;
|
|
52
|
+
private connect;
|
|
53
|
+
/** Called by the transport when its socket drops. */
|
|
54
|
+
protected scheduleReconnect(onMessage: MessageHandler): void;
|
|
55
|
+
protected teardownSocket(): void;
|
|
56
|
+
stop(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
export interface DiscordGatewayOptions {
|
|
59
|
+
token: string;
|
|
60
|
+
fetchImpl?: typeof fetch;
|
|
61
|
+
socketFactory?: SocketFactory;
|
|
62
|
+
backoffMs?: number;
|
|
63
|
+
maxBackoffMs?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Inbound Discord messages over the Gateway (op 10 HELLO → op 2 IDENTIFY,
|
|
67
|
+
* heartbeat on the advertised interval, op 0 MESSAGE_CREATE). An attachment is
|
|
68
|
+
* downloaded before dispatch so it hydrates exactly like a webhook one.
|
|
69
|
+
*/
|
|
70
|
+
export declare class DiscordGatewaySource extends ReconnectingSource {
|
|
71
|
+
private readonly opts;
|
|
72
|
+
private heartbeat;
|
|
73
|
+
private firstBeat;
|
|
74
|
+
private readonly fetcher;
|
|
75
|
+
constructor(opts: DiscordGatewayOptions);
|
|
76
|
+
/** Ask Discord for the socket URL; fall back to the public base. */
|
|
77
|
+
private gatewayUrl;
|
|
78
|
+
protected open(onMessage: MessageHandler): Promise<void>;
|
|
79
|
+
private onFrame;
|
|
80
|
+
private startHeartbeat;
|
|
81
|
+
private clearHeartbeat;
|
|
82
|
+
private send;
|
|
83
|
+
private onMessageCreate;
|
|
84
|
+
stop(): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
export interface SlackSocketModeOptions {
|
|
87
|
+
/** The app-level token (`xapp-…`) used to open the socket. */
|
|
88
|
+
appToken: string;
|
|
89
|
+
/** The bot token (`xoxb-…`) used to download `url_private*` files. */
|
|
90
|
+
botToken?: string;
|
|
91
|
+
fetchImpl?: typeof fetch;
|
|
92
|
+
socketFactory?: SocketFactory;
|
|
93
|
+
backoffMs?: number;
|
|
94
|
+
maxBackoffMs?: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Inbound Slack messages over Socket Mode. Slack delivers the same
|
|
98
|
+
* `event_callback` envelopes as the Events API, so the webhook parser is reused
|
|
99
|
+
* verbatim — the only new work is the socket, the ack, and the token-auth file
|
|
100
|
+
* download.
|
|
101
|
+
*/
|
|
102
|
+
export declare class SlackSocketModeSource extends ReconnectingSource {
|
|
103
|
+
private readonly opts;
|
|
104
|
+
private readonly fetcher;
|
|
105
|
+
constructor(opts: SlackSocketModeOptions);
|
|
106
|
+
/** `apps.connections.open` mints a single-use socket URL. */
|
|
107
|
+
private openSocketUrl;
|
|
108
|
+
protected open(onMessage: MessageHandler): Promise<void>;
|
|
109
|
+
private send;
|
|
110
|
+
private onFrame;
|
|
111
|
+
private onEvent;
|
|
112
|
+
}
|
|
113
|
+
export {};
|
|
114
|
+
//# sourceMappingURL=realtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/gateway/realtime.ts"],"names":[],"mappings":"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"}
|