@decibelsystems/tools 2.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/LICENSE +21 -0
- package/README.md +342 -0
- package/dist/agentic/compiler.d.ts +21 -0
- package/dist/agentic/compiler.d.ts.map +1 -0
- package/dist/agentic/compiler.js +267 -0
- package/dist/agentic/compiler.js.map +1 -0
- package/dist/agentic/golden.d.ts +25 -0
- package/dist/agentic/golden.d.ts.map +1 -0
- package/dist/agentic/golden.js +255 -0
- package/dist/agentic/golden.js.map +1 -0
- package/dist/agentic/index.d.ts +17 -0
- package/dist/agentic/index.d.ts.map +1 -0
- package/dist/agentic/index.js +153 -0
- package/dist/agentic/index.js.map +1 -0
- package/dist/agentic/linter.d.ts +20 -0
- package/dist/agentic/linter.d.ts.map +1 -0
- package/dist/agentic/linter.js +340 -0
- package/dist/agentic/linter.js.map +1 -0
- package/dist/agentic/renderer.d.ts +17 -0
- package/dist/agentic/renderer.d.ts.map +1 -0
- package/dist/agentic/renderer.js +277 -0
- package/dist/agentic/renderer.js.map +1 -0
- package/dist/agentic/types.d.ts +199 -0
- package/dist/agentic/types.d.ts.map +1 -0
- package/dist/agentic/types.js +8 -0
- package/dist/agentic/types.js.map +1 -0
- package/dist/architectAdrs.d.ts +32 -0
- package/dist/architectAdrs.d.ts.map +1 -0
- package/dist/architectAdrs.js +162 -0
- package/dist/architectAdrs.js.map +1 -0
- package/dist/client/facade-client.d.ts +41 -0
- package/dist/client/facade-client.d.ts.map +1 -0
- package/dist/client/facade-client.js +243 -0
- package/dist/client/facade-client.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +18 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/transports.d.ts +78 -0
- package/dist/client/transports.d.ts.map +1 -0
- package/dist/client/transports.js +258 -0
- package/dist/client/transports.js.map +1 -0
- package/dist/client/types.d.ts +49 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +8 -0
- package/dist/client/types.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon.d.ts +77 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +374 -0
- package/dist/daemon.js.map +1 -0
- package/dist/daemonConfig.d.ts +43 -0
- package/dist/daemonConfig.d.ts.map +1 -0
- package/dist/daemonConfig.js +113 -0
- package/dist/daemonConfig.js.map +1 -0
- package/dist/dataRoot.d.ts +5 -0
- package/dist/dataRoot.d.ts.map +1 -0
- package/dist/dataRoot.js +23 -0
- package/dist/dataRoot.js.map +1 -0
- package/dist/decibelPaths.d.ts +42 -0
- package/dist/decibelPaths.d.ts.map +1 -0
- package/dist/decibelPaths.js +150 -0
- package/dist/decibelPaths.js.map +1 -0
- package/dist/facades/definitions.d.ts +6 -0
- package/dist/facades/definitions.d.ts.map +1 -0
- package/dist/facades/definitions.js +450 -0
- package/dist/facades/definitions.js.map +1 -0
- package/dist/facades/index.d.ts +27 -0
- package/dist/facades/index.d.ts.map +1 -0
- package/dist/facades/index.js +124 -0
- package/dist/facades/index.js.map +1 -0
- package/dist/facades/types.d.ts +38 -0
- package/dist/facades/types.d.ts.map +1 -0
- package/dist/facades/types.js +8 -0
- package/dist/facades/types.js.map +1 -0
- package/dist/httpServer.d.ts +66 -0
- package/dist/httpServer.d.ts.map +1 -0
- package/dist/httpServer.js +1723 -0
- package/dist/httpServer.js.map +1 -0
- package/dist/kernel.d.ts +87 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +256 -0
- package/dist/kernel.js.map +1 -0
- package/dist/lib/agent-services/assumptions.d.ts +16 -0
- package/dist/lib/agent-services/assumptions.d.ts.map +1 -0
- package/dist/lib/agent-services/assumptions.js +284 -0
- package/dist/lib/agent-services/assumptions.js.map +1 -0
- package/dist/lib/agent-services/context-pack.d.ts +6 -0
- package/dist/lib/agent-services/context-pack.d.ts.map +1 -0
- package/dist/lib/agent-services/context-pack.js +354 -0
- package/dist/lib/agent-services/context-pack.js.map +1 -0
- package/dist/lib/agent-services/drift-guard.d.ts +14 -0
- package/dist/lib/agent-services/drift-guard.d.ts.map +1 -0
- package/dist/lib/agent-services/drift-guard.js +355 -0
- package/dist/lib/agent-services/drift-guard.js.map +1 -0
- package/dist/lib/agent-services/index.d.ts +5 -0
- package/dist/lib/agent-services/index.d.ts.map +1 -0
- package/dist/lib/agent-services/index.js +10 -0
- package/dist/lib/agent-services/index.js.map +1 -0
- package/dist/lib/benchmark.d.ts +110 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +338 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/supabase.d.ts +123 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.js +91 -0
- package/dist/lib/supabase.js.map +1 -0
- package/dist/license.d.ts +30 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +131 -0
- package/dist/license.js.map +1 -0
- package/dist/projectPaths.d.ts +27 -0
- package/dist/projectPaths.d.ts.map +1 -0
- package/dist/projectPaths.js +86 -0
- package/dist/projectPaths.js.map +1 -0
- package/dist/projectRegistry.d.ts +97 -0
- package/dist/projectRegistry.d.ts.map +1 -0
- package/dist/projectRegistry.js +374 -0
- package/dist/projectRegistry.js.map +1 -0
- package/dist/sentinelIssues.d.ts +65 -0
- package/dist/sentinelIssues.d.ts.map +1 -0
- package/dist/sentinelIssues.js +297 -0
- package/dist/sentinelIssues.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +195 -0
- package/dist/server.js.map +1 -0
- package/dist/test.d.ts +7 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +77 -0
- package/dist/test.js.map +1 -0
- package/dist/tools/agentic/index.d.ts +7 -0
- package/dist/tools/agentic/index.d.ts.map +1 -0
- package/dist/tools/agentic/index.js +203 -0
- package/dist/tools/agentic/index.js.map +1 -0
- package/dist/tools/architect/index.d.ts +11 -0
- package/dist/tools/architect/index.d.ts.map +1 -0
- package/dist/tools/architect/index.js +506 -0
- package/dist/tools/architect/index.js.map +1 -0
- package/dist/tools/architect.d.ts +19 -0
- package/dist/tools/architect.d.ts.map +1 -0
- package/dist/tools/architect.js +88 -0
- package/dist/tools/architect.js.map +1 -0
- package/dist/tools/auditor/index.d.ts +10 -0
- package/dist/tools/auditor/index.d.ts.map +1 -0
- package/dist/tools/auditor/index.js +310 -0
- package/dist/tools/auditor/index.js.map +1 -0
- package/dist/tools/auditor.d.ts +149 -0
- package/dist/tools/auditor.d.ts.map +1 -0
- package/dist/tools/auditor.js +775 -0
- package/dist/tools/auditor.js.map +1 -0
- package/dist/tools/bench/index.d.ts +3 -0
- package/dist/tools/bench/index.d.ts.map +1 -0
- package/dist/tools/bench/index.js +220 -0
- package/dist/tools/bench/index.js.map +1 -0
- package/dist/tools/bench.d.ts +89 -0
- package/dist/tools/bench.d.ts.map +1 -0
- package/dist/tools/bench.js +826 -0
- package/dist/tools/bench.js.map +1 -0
- package/dist/tools/context/index.d.ts +11 -0
- package/dist/tools/context/index.d.ts.map +1 -0
- package/dist/tools/context/index.js +482 -0
- package/dist/tools/context/index.js.map +1 -0
- package/dist/tools/context.d.ts +146 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +481 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/coordinator/coordinator.d.ts +168 -0
- package/dist/tools/coordinator/coordinator.d.ts.map +1 -0
- package/dist/tools/coordinator/coordinator.js +535 -0
- package/dist/tools/coordinator/coordinator.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +12 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -0
- package/dist/tools/coordinator/index.js +381 -0
- package/dist/tools/coordinator/index.js.map +1 -0
- package/dist/tools/corpus/index.d.ts +5 -0
- package/dist/tools/corpus/index.d.ts.map +1 -0
- package/dist/tools/corpus/index.js +105 -0
- package/dist/tools/corpus/index.js.map +1 -0
- package/dist/tools/corpus.d.ts +33 -0
- package/dist/tools/corpus.d.ts.map +1 -0
- package/dist/tools/corpus.js +180 -0
- package/dist/tools/corpus.js.map +1 -0
- package/dist/tools/crit.d.ts +63 -0
- package/dist/tools/crit.d.ts.map +1 -0
- package/dist/tools/crit.js +159 -0
- package/dist/tools/crit.js.map +1 -0
- package/dist/tools/data-inspector.d.ts +189 -0
- package/dist/tools/data-inspector.d.ts.map +1 -0
- package/dist/tools/data-inspector.js +669 -0
- package/dist/tools/data-inspector.js.map +1 -0
- package/dist/tools/deck.d.ts +11 -0
- package/dist/tools/deck.d.ts.map +1 -0
- package/dist/tools/deck.js +188 -0
- package/dist/tools/deck.js.map +1 -0
- package/dist/tools/designer/index.d.ts +11 -0
- package/dist/tools/designer/index.d.ts.map +1 -0
- package/dist/tools/designer/index.js +442 -0
- package/dist/tools/designer/index.js.map +1 -0
- package/dist/tools/designer/lateral-tools.d.ts +6 -0
- package/dist/tools/designer/lateral-tools.d.ts.map +1 -0
- package/dist/tools/designer/lateral-tools.js +190 -0
- package/dist/tools/designer/lateral-tools.js.map +1 -0
- package/dist/tools/designer.d.ts +122 -0
- package/dist/tools/designer.d.ts.map +1 -0
- package/dist/tools/designer.js +495 -0
- package/dist/tools/designer.js.map +1 -0
- package/dist/tools/dojo/index.d.ts +13 -0
- package/dist/tools/dojo/index.d.ts.map +1 -0
- package/dist/tools/dojo/index.js +613 -0
- package/dist/tools/dojo/index.js.map +1 -0
- package/dist/tools/dojo.d.ts +254 -0
- package/dist/tools/dojo.d.ts.map +1 -0
- package/dist/tools/dojo.js +933 -0
- package/dist/tools/dojo.js.map +1 -0
- package/dist/tools/dojoBench.d.ts +49 -0
- package/dist/tools/dojoBench.d.ts.map +1 -0
- package/dist/tools/dojoBench.js +205 -0
- package/dist/tools/dojoBench.js.map +1 -0
- package/dist/tools/dojoGraduated.d.ts +50 -0
- package/dist/tools/dojoGraduated.d.ts.map +1 -0
- package/dist/tools/dojoGraduated.js +174 -0
- package/dist/tools/dojoGraduated.js.map +1 -0
- package/dist/tools/dojoPolicy.d.ts +65 -0
- package/dist/tools/dojoPolicy.d.ts.map +1 -0
- package/dist/tools/dojoPolicy.js +263 -0
- package/dist/tools/dojoPolicy.js.map +1 -0
- package/dist/tools/feedback/index.d.ts +5 -0
- package/dist/tools/feedback/index.d.ts.map +1 -0
- package/dist/tools/feedback/index.js +153 -0
- package/dist/tools/feedback/index.js.map +1 -0
- package/dist/tools/feedback.d.ts +61 -0
- package/dist/tools/feedback.d.ts.map +1 -0
- package/dist/tools/feedback.js +209 -0
- package/dist/tools/feedback.js.map +1 -0
- package/dist/tools/forecast/index.d.ts +8 -0
- package/dist/tools/forecast/index.d.ts.map +1 -0
- package/dist/tools/forecast/index.js +283 -0
- package/dist/tools/forecast/index.js.map +1 -0
- package/dist/tools/forecast.d.ts +147 -0
- package/dist/tools/forecast.d.ts.map +1 -0
- package/dist/tools/forecast.js +417 -0
- package/dist/tools/forecast.js.map +1 -0
- package/dist/tools/friction/index.d.ts +7 -0
- package/dist/tools/friction/index.d.ts.map +1 -0
- package/dist/tools/friction/index.js +265 -0
- package/dist/tools/friction/index.js.map +1 -0
- package/dist/tools/friction.d.ts +82 -0
- package/dist/tools/friction.d.ts.map +1 -0
- package/dist/tools/friction.js +331 -0
- package/dist/tools/friction.js.map +1 -0
- package/dist/tools/git/index.d.ts +9 -0
- package/dist/tools/git/index.d.ts.map +1 -0
- package/dist/tools/git/index.js +237 -0
- package/dist/tools/git/index.js.map +1 -0
- package/dist/tools/git-sentinel/index.d.ts +7 -0
- package/dist/tools/git-sentinel/index.d.ts.map +1 -0
- package/dist/tools/git-sentinel/index.js +178 -0
- package/dist/tools/git-sentinel/index.js.map +1 -0
- package/dist/tools/git-sentinel.d.ts +78 -0
- package/dist/tools/git-sentinel.d.ts.map +1 -0
- package/dist/tools/git-sentinel.js +391 -0
- package/dist/tools/git-sentinel.js.map +1 -0
- package/dist/tools/git.d.ts +134 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +374 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/guardian/index.d.ts +8 -0
- package/dist/tools/guardian/index.d.ts.map +1 -0
- package/dist/tools/guardian/index.js +171 -0
- package/dist/tools/guardian/index.js.map +1 -0
- package/dist/tools/guardian.d.ts +62 -0
- package/dist/tools/guardian.d.ts.map +1 -0
- package/dist/tools/guardian.js +332 -0
- package/dist/tools/guardian.js.map +1 -0
- package/dist/tools/hygiene/codebase-scanner.d.ts +38 -0
- package/dist/tools/hygiene/codebase-scanner.d.ts.map +1 -0
- package/dist/tools/hygiene/codebase-scanner.js +411 -0
- package/dist/tools/hygiene/codebase-scanner.js.map +1 -0
- package/dist/tools/hygiene/config-scanner.d.ts +33 -0
- package/dist/tools/hygiene/config-scanner.d.ts.map +1 -0
- package/dist/tools/hygiene/config-scanner.js +482 -0
- package/dist/tools/hygiene/config-scanner.js.map +1 -0
- package/dist/tools/hygiene/coverage-scanner.d.ts +41 -0
- package/dist/tools/hygiene/coverage-scanner.d.ts.map +1 -0
- package/dist/tools/hygiene/coverage-scanner.js +331 -0
- package/dist/tools/hygiene/coverage-scanner.js.map +1 -0
- package/dist/tools/hygiene/index.d.ts +7 -0
- package/dist/tools/hygiene/index.d.ts.map +1 -0
- package/dist/tools/hygiene/index.js +291 -0
- package/dist/tools/hygiene/index.js.map +1 -0
- package/dist/tools/hygiene/oracle-hygiene.d.ts +68 -0
- package/dist/tools/hygiene/oracle-hygiene.d.ts.map +1 -0
- package/dist/tools/hygiene/oracle-hygiene.js +324 -0
- package/dist/tools/hygiene/oracle-hygiene.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +130 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lateral.d.ts +114 -0
- package/dist/tools/lateral.d.ts.map +1 -0
- package/dist/tools/lateral.js +536 -0
- package/dist/tools/lateral.js.map +1 -0
- package/dist/tools/learnings/index.d.ts +5 -0
- package/dist/tools/learnings/index.d.ts.map +1 -0
- package/dist/tools/learnings/index.js +138 -0
- package/dist/tools/learnings/index.js.map +1 -0
- package/dist/tools/learnings.d.ts +41 -0
- package/dist/tools/learnings.d.ts.map +1 -0
- package/dist/tools/learnings.js +149 -0
- package/dist/tools/learnings.js.map +1 -0
- package/dist/tools/oracle/index.d.ts +6 -0
- package/dist/tools/oracle/index.d.ts.map +1 -0
- package/dist/tools/oracle/index.js +217 -0
- package/dist/tools/oracle/index.js.map +1 -0
- package/dist/tools/oracle.d.ts +90 -0
- package/dist/tools/oracle.d.ts.map +1 -0
- package/dist/tools/oracle.js +529 -0
- package/dist/tools/oracle.js.map +1 -0
- package/dist/tools/policy.d.ts +119 -0
- package/dist/tools/policy.d.ts.map +1 -0
- package/dist/tools/policy.js +406 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/provenance/index.d.ts +4 -0
- package/dist/tools/provenance/index.d.ts.map +1 -0
- package/dist/tools/provenance/index.js +63 -0
- package/dist/tools/provenance/index.js.map +1 -0
- package/dist/tools/provenance.d.ts +75 -0
- package/dist/tools/provenance.d.ts.map +1 -0
- package/dist/tools/provenance.js +224 -0
- package/dist/tools/provenance.js.map +1 -0
- package/dist/tools/rateLimiter.d.ts +45 -0
- package/dist/tools/rateLimiter.d.ts.map +1 -0
- package/dist/tools/rateLimiter.js +91 -0
- package/dist/tools/rateLimiter.js.map +1 -0
- package/dist/tools/registry/index.d.ts +10 -0
- package/dist/tools/registry/index.d.ts.map +1 -0
- package/dist/tools/registry/index.js +506 -0
- package/dist/tools/registry/index.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +189 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/roadmap/index.d.ts +11 -0
- package/dist/tools/roadmap/index.d.ts.map +1 -0
- package/dist/tools/roadmap/index.js +364 -0
- package/dist/tools/roadmap/index.js.map +1 -0
- package/dist/tools/roadmap.d.ts +103 -0
- package/dist/tools/roadmap.d.ts.map +1 -0
- package/dist/tools/roadmap.js +407 -0
- package/dist/tools/roadmap.js.map +1 -0
- package/dist/tools/senken.d.ts +11 -0
- package/dist/tools/senken.d.ts.map +1 -0
- package/dist/tools/senken.js +482 -0
- package/dist/tools/senken.js.map +1 -0
- package/dist/tools/sentinel/index.d.ts +21 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -0
- package/dist/tools/sentinel/index.js +1067 -0
- package/dist/tools/sentinel/index.js.map +1 -0
- package/dist/tools/sentinel-scan-data.d.ts +90 -0
- package/dist/tools/sentinel-scan-data.d.ts.map +1 -0
- package/dist/tools/sentinel-scan-data.js +122 -0
- package/dist/tools/sentinel-scan-data.js.map +1 -0
- package/dist/tools/sentinel.d.ts +156 -0
- package/dist/tools/sentinel.d.ts.map +1 -0
- package/dist/tools/sentinel.js +603 -0
- package/dist/tools/sentinel.js.map +1 -0
- package/dist/tools/shared/index.d.ts +5 -0
- package/dist/tools/shared/index.d.ts.map +1 -0
- package/dist/tools/shared/index.js +8 -0
- package/dist/tools/shared/index.js.map +1 -0
- package/dist/tools/shared/project.d.ts +17 -0
- package/dist/tools/shared/project.d.ts.map +1 -0
- package/dist/tools/shared/project.js +36 -0
- package/dist/tools/shared/project.js.map +1 -0
- package/dist/tools/shared/response.d.ts +15 -0
- package/dist/tools/shared/response.d.ts.map +1 -0
- package/dist/tools/shared/response.js +77 -0
- package/dist/tools/shared/response.js.map +1 -0
- package/dist/tools/shared/runTracker.d.ts +87 -0
- package/dist/tools/shared/runTracker.d.ts.map +1 -0
- package/dist/tools/shared/runTracker.js +225 -0
- package/dist/tools/shared/runTracker.js.map +1 -0
- package/dist/tools/shared/validation.d.ts +10 -0
- package/dist/tools/shared/validation.d.ts.map +1 -0
- package/dist/tools/shared/validation.js +26 -0
- package/dist/tools/shared/validation.js.map +1 -0
- package/dist/tools/studio/cloud-spine.d.ts +27 -0
- package/dist/tools/studio/cloud-spine.d.ts.map +1 -0
- package/dist/tools/studio/cloud-spine.js +845 -0
- package/dist/tools/studio/cloud-spine.js.map +1 -0
- package/dist/tools/studio/index.d.ts +154 -0
- package/dist/tools/studio/index.d.ts.map +1 -0
- package/dist/tools/studio/index.js +541 -0
- package/dist/tools/studio/index.js.map +1 -0
- package/dist/tools/testSpec.d.ts +122 -0
- package/dist/tools/testSpec.d.ts.map +1 -0
- package/dist/tools/testSpec.js +525 -0
- package/dist/tools/testSpec.js.map +1 -0
- package/dist/tools/toolsIndex.d.ts +5 -0
- package/dist/tools/toolsIndex.d.ts.map +1 -0
- package/dist/tools/toolsIndex.js +37 -0
- package/dist/tools/toolsIndex.js.map +1 -0
- package/dist/tools/types.d.ts +47 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +7 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/vector/index.d.ts +13 -0
- package/dist/tools/vector/index.d.ts.map +1 -0
- package/dist/tools/vector/index.js +592 -0
- package/dist/tools/vector/index.js.map +1 -0
- package/dist/tools/vector.d.ts +189 -0
- package/dist/tools/vector.d.ts.map +1 -0
- package/dist/tools/vector.js +570 -0
- package/dist/tools/vector.js.map +1 -0
- package/dist/tools/velocity/index.d.ts +9 -0
- package/dist/tools/velocity/index.d.ts.map +1 -0
- package/dist/tools/velocity/index.js +306 -0
- package/dist/tools/velocity/index.js.map +1 -0
- package/dist/tools/velocity.d.ts +143 -0
- package/dist/tools/velocity.d.ts.map +1 -0
- package/dist/tools/velocity.js +628 -0
- package/dist/tools/velocity.js.map +1 -0
- package/dist/tools/voice/index.d.ts +8 -0
- package/dist/tools/voice/index.d.ts.map +1 -0
- package/dist/tools/voice/index.js +203 -0
- package/dist/tools/voice/index.js.map +1 -0
- package/dist/tools/voice.d.ts +291 -0
- package/dist/tools/voice.d.ts.map +1 -0
- package/dist/tools/voice.js +734 -0
- package/dist/tools/voice.js.map +1 -0
- package/dist/tools/workflow/index.d.ts +8 -0
- package/dist/tools/workflow/index.d.ts.map +1 -0
- package/dist/tools/workflow/index.js +199 -0
- package/dist/tools/workflow/index.js.map +1 -0
- package/dist/tools/workflow.d.ts +123 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +647 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/transports/bridge.d.ts +22 -0
- package/dist/transports/bridge.d.ts.map +1 -0
- package/dist/transports/bridge.js +177 -0
- package/dist/transports/bridge.js.map +1 -0
- package/dist/transports/http.d.ts +9 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +35 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +6 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/mcp.d.ts +9 -0
- package/dist/transports/mcp.d.ts.map +1 -0
- package/dist/transports/mcp.js +51 -0
- package/dist/transports/mcp.js.map +1 -0
- package/dist/transports/stdio.d.ts +9 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +26 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/transports/types.d.ts +27 -0
- package/dist/transports/types.d.ts.map +1 -0
- package/dist/transports/types.js +8 -0
- package/dist/transports/types.js.map +1 -0
- package/dist/types/agent-services.d.ts +193 -0
- package/dist/types/agent-services.d.ts.map +1 -0
- package/dist/types/agent-services.js +8 -0
- package/dist/types/agent-services.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +72 -0
- package/templates/AGENT.md +87 -0
- package/templates/com.decibel.daemon.plist +47 -0
- package/templates/sentinel/ISSUE_TEMPLATE.md +20 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// FacadeClient — agent-facing SDK for Decibel Tools
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Replaces raw MCP tool calls with facade-aware dispatch.
|
|
5
|
+
// Used by decibel-agent's McpToolRouter and any headless agent.
|
|
6
|
+
//
|
|
7
|
+
// Usage:
|
|
8
|
+
// const client = new FacadeClient({
|
|
9
|
+
// command: 'node', args: ['dist/server.js'],
|
|
10
|
+
// agentId: 'cymoril', projectId: 'my-project',
|
|
11
|
+
// allowedFacades: ['sentinel', 'architect', 'git'],
|
|
12
|
+
// });
|
|
13
|
+
// await client.connect();
|
|
14
|
+
// const epics = await client.call('sentinel', 'list_epics');
|
|
15
|
+
// await client.disconnect();
|
|
16
|
+
// ============================================================================
|
|
17
|
+
import { EventEmitter } from 'events';
|
|
18
|
+
import { StdioTransport, HttpTransport, BridgeTransport, } from './transports.js';
|
|
19
|
+
const MAX_BATCH_SIZE = 20;
|
|
20
|
+
export class FacadeClient {
|
|
21
|
+
transport = null;
|
|
22
|
+
config;
|
|
23
|
+
connecting = null;
|
|
24
|
+
log;
|
|
25
|
+
events = new EventEmitter();
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.log = config.logger ?? (() => { });
|
|
29
|
+
// Validate config: need at least one transport option
|
|
30
|
+
if (!config.command && !config.daemonUrl) {
|
|
31
|
+
throw new Error('FacadeClient requires either `command` (stdio) or `daemonUrl` (HTTP) in config');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Connect to the MCP server. Also called lazily on first call().
|
|
36
|
+
*/
|
|
37
|
+
async connect() {
|
|
38
|
+
if (this.transport?.isConnected())
|
|
39
|
+
return;
|
|
40
|
+
// Prevent concurrent connect races
|
|
41
|
+
if (this.connecting)
|
|
42
|
+
return this.connecting;
|
|
43
|
+
this.connecting = this.doConnect();
|
|
44
|
+
try {
|
|
45
|
+
await this.connecting;
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
this.connecting = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Disconnect and clean up the child process / connection.
|
|
53
|
+
*/
|
|
54
|
+
async disconnect() {
|
|
55
|
+
if (this.transport) {
|
|
56
|
+
await this.transport.disconnect();
|
|
57
|
+
this.transport = null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Call a facade action.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* const epics = await client.call('sentinel', 'list_epics');
|
|
65
|
+
* const issue = await client.call('sentinel', 'create_issue', { title: 'Fix login' });
|
|
66
|
+
*/
|
|
67
|
+
async call(facade, action, params) {
|
|
68
|
+
// Enforce allowlist
|
|
69
|
+
if (this.config.allowedFacades && !this.config.allowedFacades.includes(facade)) {
|
|
70
|
+
throw new Error(`Facade "${facade}" not in allowed scope. Allowed: [${this.config.allowedFacades.join(', ')}]`);
|
|
71
|
+
}
|
|
72
|
+
// Lazy connect
|
|
73
|
+
await this.connect();
|
|
74
|
+
// Build args: facade dispatch expects { action, ...params }
|
|
75
|
+
const args = { action, ...params };
|
|
76
|
+
// Auto-inject project_id from config if not already provided
|
|
77
|
+
if (this.config.projectId && !args.project_id) {
|
|
78
|
+
args.project_id = this.config.projectId;
|
|
79
|
+
}
|
|
80
|
+
// Thread DispatchContext via _meta (MCP convention)
|
|
81
|
+
if (this.config.agentId || this.config.projectId) {
|
|
82
|
+
args._meta = {
|
|
83
|
+
agentId: this.config.agentId,
|
|
84
|
+
scope: this.config.projectId,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
this.log(`call ${facade}.${action}`);
|
|
88
|
+
const startTime = Date.now();
|
|
89
|
+
try {
|
|
90
|
+
const result = await this.transport.call(facade, args);
|
|
91
|
+
const duration = Date.now() - startTime;
|
|
92
|
+
this.events.emit('result', { facade, action, duration_ms: duration, success: true });
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
const duration = Date.now() - startTime;
|
|
97
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
98
|
+
this.events.emit('error', { facade, action, duration_ms: duration, error: message });
|
|
99
|
+
// Try to parse structured error from the server
|
|
100
|
+
if (err.isCallError && err.raw) {
|
|
101
|
+
try {
|
|
102
|
+
const parsed = JSON.parse(err.raw);
|
|
103
|
+
throw new Error(parsed.error || parsed.message || message);
|
|
104
|
+
}
|
|
105
|
+
catch (parseErr) {
|
|
106
|
+
if (parseErr instanceof SyntaxError)
|
|
107
|
+
throw new Error(message);
|
|
108
|
+
throw parseErr;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
throw new Error(message);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Batch multiple facade calls (max 20, parallel execution).
|
|
116
|
+
*
|
|
117
|
+
* For HTTP transport, uses the daemon's /batch endpoint directly.
|
|
118
|
+
* For stdio transport, runs calls in parallel via Promise.all.
|
|
119
|
+
*/
|
|
120
|
+
async batch(calls) {
|
|
121
|
+
if (calls.length === 0)
|
|
122
|
+
return [];
|
|
123
|
+
if (calls.length > MAX_BATCH_SIZE) {
|
|
124
|
+
throw new Error(`Batch size ${calls.length} exceeds maximum of ${MAX_BATCH_SIZE}`);
|
|
125
|
+
}
|
|
126
|
+
// Enforce allowlist on all calls before dispatching
|
|
127
|
+
if (this.config.allowedFacades) {
|
|
128
|
+
for (const c of calls) {
|
|
129
|
+
if (!this.config.allowedFacades.includes(c.facade)) {
|
|
130
|
+
throw new Error(`Facade "${c.facade}" not in allowed scope. Allowed: [${this.config.allowedFacades.join(', ')}]`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
await this.connect();
|
|
135
|
+
// Try native /batch endpoint for HTTP transport
|
|
136
|
+
const httpTransport = this.getHttpTransport();
|
|
137
|
+
if (httpTransport) {
|
|
138
|
+
this.log(`batch (HTTP) — ${calls.length} calls`);
|
|
139
|
+
const context = {
|
|
140
|
+
agentId: this.config.agentId,
|
|
141
|
+
scope: this.config.projectId,
|
|
142
|
+
};
|
|
143
|
+
// Inject project_id into each call's params
|
|
144
|
+
const enrichedCalls = calls.map(c => ({
|
|
145
|
+
...c,
|
|
146
|
+
params: {
|
|
147
|
+
...c.params,
|
|
148
|
+
...(this.config.projectId && !c.params?.project_id
|
|
149
|
+
? { project_id: this.config.projectId }
|
|
150
|
+
: {}),
|
|
151
|
+
},
|
|
152
|
+
}));
|
|
153
|
+
const result = await httpTransport.batch(enrichedCalls, context);
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
// Stdio fallback: parallel Promise.all
|
|
157
|
+
this.log(`batch (stdio) — ${calls.length} calls`);
|
|
158
|
+
const results = await Promise.all(calls.map(async (c) => {
|
|
159
|
+
const start = Date.now();
|
|
160
|
+
try {
|
|
161
|
+
const data = await this.call(c.facade, c.action, c.params);
|
|
162
|
+
return {
|
|
163
|
+
facade: c.facade,
|
|
164
|
+
action: c.action,
|
|
165
|
+
data,
|
|
166
|
+
duration_ms: Date.now() - start,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
return {
|
|
171
|
+
facade: c.facade,
|
|
172
|
+
action: c.action,
|
|
173
|
+
error: err instanceof Error ? err.message : String(err),
|
|
174
|
+
duration_ms: Date.now() - start,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}));
|
|
178
|
+
return results;
|
|
179
|
+
}
|
|
180
|
+
/** Whether the client is currently connected */
|
|
181
|
+
get isConnected() {
|
|
182
|
+
return this.transport?.isConnected() ?? false;
|
|
183
|
+
}
|
|
184
|
+
/** Current transport mode for diagnostics */
|
|
185
|
+
get mode() {
|
|
186
|
+
if (!this.transport)
|
|
187
|
+
return 'disconnected';
|
|
188
|
+
if (this.transport instanceof BridgeTransport) {
|
|
189
|
+
return `bridge:${this.transport.mode}`;
|
|
190
|
+
}
|
|
191
|
+
if (this.transport instanceof HttpTransport)
|
|
192
|
+
return 'http';
|
|
193
|
+
return 'stdio';
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Private
|
|
197
|
+
// ============================================================================
|
|
198
|
+
async doConnect() {
|
|
199
|
+
const { command, args, env, cwd, daemonUrl, timeoutMs } = this.config;
|
|
200
|
+
if (command && daemonUrl) {
|
|
201
|
+
// Both provided → bridge mode
|
|
202
|
+
this.transport = new BridgeTransport({
|
|
203
|
+
daemonUrl,
|
|
204
|
+
command,
|
|
205
|
+
args,
|
|
206
|
+
env,
|
|
207
|
+
cwd,
|
|
208
|
+
timeoutMs,
|
|
209
|
+
logger: this.log,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
else if (daemonUrl) {
|
|
213
|
+
// HTTP only
|
|
214
|
+
this.transport = new HttpTransport({
|
|
215
|
+
daemonUrl,
|
|
216
|
+
timeoutMs,
|
|
217
|
+
logger: this.log,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
else if (command) {
|
|
221
|
+
// Stdio only
|
|
222
|
+
this.transport = new StdioTransport({
|
|
223
|
+
command,
|
|
224
|
+
args,
|
|
225
|
+
env,
|
|
226
|
+
cwd,
|
|
227
|
+
logger: this.log,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
await this.transport.connect();
|
|
231
|
+
}
|
|
232
|
+
/** Get the HTTP transport if we're using one (for native /batch) */
|
|
233
|
+
getHttpTransport() {
|
|
234
|
+
if (this.transport instanceof HttpTransport) {
|
|
235
|
+
return this.transport;
|
|
236
|
+
}
|
|
237
|
+
if (this.transport instanceof BridgeTransport) {
|
|
238
|
+
return this.transport.httpTransport;
|
|
239
|
+
}
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=facade-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade-client.js","sourceRoot":"","sources":["../../src/client/facade-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// @decibel/tools/client — Agent Client SDK
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Public API for headless agents to call Decibel facades.
|
|
5
|
+
//
|
|
6
|
+
// import { FacadeClient } from '@decibel/tools/client';
|
|
7
|
+
//
|
|
8
|
+
// const client = new FacadeClient({
|
|
9
|
+
// command: 'node', args: ['dist/server.js'],
|
|
10
|
+
// agentId: 'cymoril',
|
|
11
|
+
// projectId: 'my-project',
|
|
12
|
+
// });
|
|
13
|
+
// await client.connect();
|
|
14
|
+
// const epics = await client.call('sentinel', 'list_epics');
|
|
15
|
+
// await client.disconnect();
|
|
16
|
+
// ============================================================================
|
|
17
|
+
export { FacadeClient } from './facade-client.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2CAA2C;AAC3C,+EAA+E;AAC/E,0DAA0D;AAC1D,EAAE;AACF,wDAAwD;AACxD,EAAE;AACF,oCAAoC;AACpC,+CAA+C;AAC/C,wBAAwB;AACxB,6BAA6B;AAC7B,MAAM;AACN,0BAA0B;AAC1B,6DAA6D;AAC7D,6BAA6B;AAC7B,+EAA+E;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export interface ClientTransport {
|
|
2
|
+
connect(): Promise<void>;
|
|
3
|
+
disconnect(): Promise<void>;
|
|
4
|
+
call(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
isConnected(): boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface StdioTransportConfig {
|
|
8
|
+
command: string;
|
|
9
|
+
args?: string[];
|
|
10
|
+
env?: Record<string, string>;
|
|
11
|
+
cwd?: string;
|
|
12
|
+
logger?: (msg: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare class StdioTransport implements ClientTransport {
|
|
15
|
+
private client;
|
|
16
|
+
private transport;
|
|
17
|
+
private readonly config;
|
|
18
|
+
private connected;
|
|
19
|
+
constructor(config: StdioTransportConfig);
|
|
20
|
+
connect(): Promise<void>;
|
|
21
|
+
disconnect(): Promise<void>;
|
|
22
|
+
call(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
23
|
+
isConnected(): boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface HttpTransportConfig {
|
|
26
|
+
daemonUrl: string;
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
logger?: (msg: string) => void;
|
|
29
|
+
}
|
|
30
|
+
export declare class HttpTransport implements ClientTransport {
|
|
31
|
+
private readonly url;
|
|
32
|
+
private readonly timeoutMs;
|
|
33
|
+
private readonly logger?;
|
|
34
|
+
private alive;
|
|
35
|
+
constructor(config: HttpTransportConfig);
|
|
36
|
+
connect(): Promise<void>;
|
|
37
|
+
disconnect(): Promise<void>;
|
|
38
|
+
call(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
39
|
+
isConnected(): boolean;
|
|
40
|
+
/** Batch call via daemon's /batch endpoint */
|
|
41
|
+
batch(calls: Array<{
|
|
42
|
+
facade: string;
|
|
43
|
+
action: string;
|
|
44
|
+
params?: Record<string, unknown>;
|
|
45
|
+
}>, context?: {
|
|
46
|
+
agentId?: string;
|
|
47
|
+
runId?: string;
|
|
48
|
+
scope?: string;
|
|
49
|
+
}): Promise<unknown>;
|
|
50
|
+
private probe;
|
|
51
|
+
}
|
|
52
|
+
export interface BridgeTransportConfig {
|
|
53
|
+
/** Daemon URL to try first */
|
|
54
|
+
daemonUrl: string;
|
|
55
|
+
/** Stdio fallback config */
|
|
56
|
+
command: string;
|
|
57
|
+
args?: string[];
|
|
58
|
+
env?: Record<string, string>;
|
|
59
|
+
cwd?: string;
|
|
60
|
+
timeoutMs?: number;
|
|
61
|
+
logger?: (msg: string) => void;
|
|
62
|
+
}
|
|
63
|
+
export declare class BridgeTransport implements ClientTransport {
|
|
64
|
+
private http;
|
|
65
|
+
private stdio;
|
|
66
|
+
private activeTransport;
|
|
67
|
+
private readonly logger?;
|
|
68
|
+
constructor(config: BridgeTransportConfig);
|
|
69
|
+
connect(): Promise<void>;
|
|
70
|
+
disconnect(): Promise<void>;
|
|
71
|
+
call(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
72
|
+
isConnected(): boolean;
|
|
73
|
+
/** Expose active mode for diagnostics */
|
|
74
|
+
get mode(): 'http' | 'stdio' | null;
|
|
75
|
+
/** Access underlying HTTP transport for batch calls */
|
|
76
|
+
get httpTransport(): HttpTransport | null;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=transports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../../src/client/transports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Client Transports
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Transport abstraction for FacadeClient. Two modes:
|
|
5
|
+
// - StdioClientTransport: spawns MCP server as child process (like the VS Code ext)
|
|
6
|
+
// - HttpClientTransport: calls daemon directly via fetch
|
|
7
|
+
// - BridgeClientTransport: tries HTTP first, falls back to stdio
|
|
8
|
+
// ============================================================================
|
|
9
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
10
|
+
import { StdioClientTransport as McpStdioTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
11
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
12
|
+
const DAEMON_PROBE_TIMEOUT_MS = 3_000;
|
|
13
|
+
export class StdioTransport {
|
|
14
|
+
client = null;
|
|
15
|
+
transport = null;
|
|
16
|
+
config;
|
|
17
|
+
connected = false;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = config;
|
|
20
|
+
}
|
|
21
|
+
async connect() {
|
|
22
|
+
if (this.connected)
|
|
23
|
+
return;
|
|
24
|
+
this.transport = new McpStdioTransport({
|
|
25
|
+
command: this.config.command,
|
|
26
|
+
args: this.config.args,
|
|
27
|
+
cwd: this.config.cwd,
|
|
28
|
+
env: {
|
|
29
|
+
...process.env,
|
|
30
|
+
...this.config.env,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
this.client = new Client({
|
|
34
|
+
name: 'decibel-facade-client',
|
|
35
|
+
version: '1.0.0',
|
|
36
|
+
});
|
|
37
|
+
this.transport.onerror = (err) => {
|
|
38
|
+
this.config.logger?.(`Stdio transport error: ${err.message}`);
|
|
39
|
+
};
|
|
40
|
+
await this.client.connect(this.transport);
|
|
41
|
+
this.connected = true;
|
|
42
|
+
this.config.logger?.('Stdio transport connected');
|
|
43
|
+
}
|
|
44
|
+
async disconnect() {
|
|
45
|
+
this.connected = false;
|
|
46
|
+
if (this.transport) {
|
|
47
|
+
await this.transport.close();
|
|
48
|
+
this.transport = null;
|
|
49
|
+
}
|
|
50
|
+
this.client = null;
|
|
51
|
+
}
|
|
52
|
+
async call(name, args) {
|
|
53
|
+
if (!this.client) {
|
|
54
|
+
throw new Error('Stdio transport not connected');
|
|
55
|
+
}
|
|
56
|
+
const result = await this.client.callTool({ name, arguments: args });
|
|
57
|
+
if (result.isError) {
|
|
58
|
+
const text = result.content[0]?.text ?? '{}';
|
|
59
|
+
throw Object.assign(new Error(text), { isCallError: true, raw: text });
|
|
60
|
+
}
|
|
61
|
+
const text = result.content[0]?.text;
|
|
62
|
+
if (!text) {
|
|
63
|
+
throw new Error(`Empty response from ${name}`);
|
|
64
|
+
}
|
|
65
|
+
return JSON.parse(text);
|
|
66
|
+
}
|
|
67
|
+
isConnected() {
|
|
68
|
+
return this.connected;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export class HttpTransport {
|
|
72
|
+
url;
|
|
73
|
+
timeoutMs;
|
|
74
|
+
logger;
|
|
75
|
+
alive = false;
|
|
76
|
+
constructor(config) {
|
|
77
|
+
this.url = config.daemonUrl.replace(/\/$/, '');
|
|
78
|
+
this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
79
|
+
this.logger = config.logger;
|
|
80
|
+
}
|
|
81
|
+
async connect() {
|
|
82
|
+
this.alive = await this.probe();
|
|
83
|
+
if (!this.alive) {
|
|
84
|
+
throw new Error(`Daemon not reachable at ${this.url}`);
|
|
85
|
+
}
|
|
86
|
+
this.logger?.(`HTTP transport connected to ${this.url}`);
|
|
87
|
+
}
|
|
88
|
+
async disconnect() {
|
|
89
|
+
this.alive = false;
|
|
90
|
+
}
|
|
91
|
+
async call(name, args) {
|
|
92
|
+
if (!this.alive) {
|
|
93
|
+
throw new Error('HTTP transport not connected');
|
|
94
|
+
}
|
|
95
|
+
const headers = {
|
|
96
|
+
'Content-Type': 'application/json',
|
|
97
|
+
};
|
|
98
|
+
// Thread context via headers (matches bridge.ts pattern)
|
|
99
|
+
const meta = args._meta;
|
|
100
|
+
if (meta?.agentId)
|
|
101
|
+
headers['X-Agent-Id'] = meta.agentId;
|
|
102
|
+
if (meta?.runId)
|
|
103
|
+
headers['X-Run-Id'] = meta.runId;
|
|
104
|
+
if (meta?.scope)
|
|
105
|
+
headers['X-Scope'] = meta.scope;
|
|
106
|
+
// Strip _meta from the args sent to daemon (it uses headers)
|
|
107
|
+
const { _meta: _stripped, ...callArgs } = args;
|
|
108
|
+
const controller = new AbortController();
|
|
109
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
110
|
+
try {
|
|
111
|
+
const res = await fetch(`${this.url}/call`, {
|
|
112
|
+
method: 'POST',
|
|
113
|
+
headers,
|
|
114
|
+
body: JSON.stringify({ tool: name, arguments: callArgs }),
|
|
115
|
+
signal: controller.signal,
|
|
116
|
+
});
|
|
117
|
+
clearTimeout(timeout);
|
|
118
|
+
const data = await res.json();
|
|
119
|
+
if (data.status === 'error') {
|
|
120
|
+
throw Object.assign(new Error(data.error || 'Daemon returned error'), { isCallError: true, code: data.code, raw: JSON.stringify(data) });
|
|
121
|
+
}
|
|
122
|
+
// Strip status envelope, return the payload
|
|
123
|
+
const { status: _status, ...result } = data;
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
clearTimeout(timeout);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
isConnected() {
|
|
131
|
+
return this.alive;
|
|
132
|
+
}
|
|
133
|
+
/** Batch call via daemon's /batch endpoint */
|
|
134
|
+
async batch(calls, context) {
|
|
135
|
+
const headers = {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
};
|
|
138
|
+
if (context?.agentId)
|
|
139
|
+
headers['X-Agent-Id'] = context.agentId;
|
|
140
|
+
if (context?.runId)
|
|
141
|
+
headers['X-Run-Id'] = context.runId;
|
|
142
|
+
if (context?.scope)
|
|
143
|
+
headers['X-Scope'] = context.scope;
|
|
144
|
+
const controller = new AbortController();
|
|
145
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
146
|
+
try {
|
|
147
|
+
const res = await fetch(`${this.url}/batch`, {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers,
|
|
150
|
+
body: JSON.stringify({ calls, context }),
|
|
151
|
+
signal: controller.signal,
|
|
152
|
+
});
|
|
153
|
+
clearTimeout(timeout);
|
|
154
|
+
return await res.json();
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
clearTimeout(timeout);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async probe() {
|
|
161
|
+
try {
|
|
162
|
+
const controller = new AbortController();
|
|
163
|
+
const timeout = setTimeout(() => controller.abort(), DAEMON_PROBE_TIMEOUT_MS);
|
|
164
|
+
const res = await fetch(`${this.url}/health`, { signal: controller.signal });
|
|
165
|
+
clearTimeout(timeout);
|
|
166
|
+
return res.ok;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
export class BridgeTransport {
|
|
174
|
+
http;
|
|
175
|
+
stdio;
|
|
176
|
+
activeTransport = null;
|
|
177
|
+
logger;
|
|
178
|
+
constructor(config) {
|
|
179
|
+
this.logger = config.logger;
|
|
180
|
+
this.http = new HttpTransport({
|
|
181
|
+
daemonUrl: config.daemonUrl,
|
|
182
|
+
timeoutMs: config.timeoutMs,
|
|
183
|
+
logger: config.logger,
|
|
184
|
+
});
|
|
185
|
+
this.stdio = new StdioTransport({
|
|
186
|
+
command: config.command,
|
|
187
|
+
args: config.args,
|
|
188
|
+
env: config.env,
|
|
189
|
+
cwd: config.cwd,
|
|
190
|
+
logger: config.logger,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
async connect() {
|
|
194
|
+
// Try HTTP (daemon) first
|
|
195
|
+
try {
|
|
196
|
+
await this.http.connect();
|
|
197
|
+
this.activeTransport = 'http';
|
|
198
|
+
this.logger?.('Bridge: connected via HTTP (daemon)');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
this.logger?.('Bridge: daemon not available, falling back to stdio');
|
|
203
|
+
}
|
|
204
|
+
// Fall back to stdio
|
|
205
|
+
await this.stdio.connect();
|
|
206
|
+
this.activeTransport = 'stdio';
|
|
207
|
+
this.logger?.('Bridge: connected via stdio (local)');
|
|
208
|
+
}
|
|
209
|
+
async disconnect() {
|
|
210
|
+
if (this.activeTransport === 'http') {
|
|
211
|
+
await this.http.disconnect();
|
|
212
|
+
}
|
|
213
|
+
else if (this.activeTransport === 'stdio') {
|
|
214
|
+
await this.stdio.disconnect();
|
|
215
|
+
}
|
|
216
|
+
this.activeTransport = null;
|
|
217
|
+
}
|
|
218
|
+
async call(name, args) {
|
|
219
|
+
if (this.activeTransport === 'http') {
|
|
220
|
+
try {
|
|
221
|
+
return await this.http.call(name, args);
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
// If the daemon went down mid-session, fail over to stdio
|
|
225
|
+
if (!err.isCallError) {
|
|
226
|
+
this.logger?.(`Bridge: HTTP call failed (${err instanceof Error ? err.message : err}), switching to stdio`);
|
|
227
|
+
try {
|
|
228
|
+
if (!this.stdio.isConnected()) {
|
|
229
|
+
await this.stdio.connect();
|
|
230
|
+
}
|
|
231
|
+
this.activeTransport = 'stdio';
|
|
232
|
+
return await this.stdio.call(name, args);
|
|
233
|
+
}
|
|
234
|
+
catch (stdioErr) {
|
|
235
|
+
throw stdioErr;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
throw err;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (!this.activeTransport) {
|
|
242
|
+
throw new Error('Bridge transport not connected');
|
|
243
|
+
}
|
|
244
|
+
return this.stdio.call(name, args);
|
|
245
|
+
}
|
|
246
|
+
isConnected() {
|
|
247
|
+
return this.activeTransport !== null;
|
|
248
|
+
}
|
|
249
|
+
/** Expose active mode for diagnostics */
|
|
250
|
+
get mode() {
|
|
251
|
+
return this.activeTransport;
|
|
252
|
+
}
|
|
253
|
+
/** Access underlying HTTP transport for batch calls */
|
|
254
|
+
get httpTransport() {
|
|
255
|
+
return this.activeTransport === 'http' ? this.http : null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=transports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transports.js","sourceRoot":"","sources":["../../src/client/transports.ts"],"names":[],"mappings":"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"}
|