@dcyfr/ai 2.1.3 → 3.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/CHANGELOG.md +81 -0
- package/README.md +75 -10
- package/config/default.json +11 -5
- package/config/default.yaml +13 -5
- package/dist/.tsbuildinfo +1 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -1
- package/dist/ai/agents/agent-loader.js +1 -0
- package/dist/ai/agents/agent-loader.js.map +1 -1
- package/dist/ai/agents/agent-registry.d.ts.map +1 -1
- package/dist/ai/agents/agent-registry.js.map +1 -1
- package/dist/ai/agents/agent-router.d.ts +3 -3
- package/dist/ai/agents/agent-router.d.ts.map +1 -1
- package/dist/ai/agents/agent-router.js +6 -7
- package/dist/ai/agents/agent-router.js.map +1 -1
- package/dist/ai/config/schema.js +3 -3
- package/dist/ai/config/schema.js.map +1 -1
- package/dist/ai/core/provider-registry.d.ts.map +1 -1
- package/dist/ai/core/provider-registry.js +47 -16
- package/dist/ai/core/provider-registry.js.map +1 -1
- package/dist/ai/core/telemetry-engine.d.ts.map +1 -1
- package/dist/ai/core/telemetry-engine.js +5 -3
- package/dist/ai/core/telemetry-engine.js.map +1 -1
- package/dist/ai/delegation/capability-bootstrap.js +1 -1
- package/dist/ai/delegation/capability-bootstrap.js.map +1 -1
- package/dist/ai/delegation/contract-manager.d.ts +54 -5
- package/dist/ai/delegation/contract-manager.d.ts.map +1 -1
- package/dist/ai/delegation/contract-manager.js +122 -7
- package/dist/ai/delegation/contract-manager.js.map +1 -1
- package/dist/ai/delegation/feature-flags.d.ts +1 -1
- package/dist/ai/delegation/feature-flags.d.ts.map +1 -1
- package/dist/ai/delegation/feature-flags.js +3 -1
- package/dist/ai/delegation/feature-flags.js.map +1 -1
- package/dist/ai/delegation/index.d.ts +1 -0
- package/dist/ai/delegation/index.d.ts.map +1 -1
- package/dist/ai/delegation/index.js +2 -0
- package/dist/ai/delegation/index.js.map +1 -1
- package/dist/ai/delegation/monitoring.d.ts.map +1 -1
- package/dist/ai/delegation/monitoring.js +1 -0
- package/dist/ai/delegation/monitoring.js.map +1 -1
- package/dist/ai/delegation/session-manager.d.ts +16 -1
- package/dist/ai/delegation/session-manager.d.ts.map +1 -1
- package/dist/ai/delegation/session-manager.js +10 -1
- package/dist/ai/delegation/session-manager.js.map +1 -1
- package/dist/ai/delegation/session-queue.d.ts.map +1 -1
- package/dist/ai/delegation/session-queue.js.map +1 -1
- package/dist/ai/examples/integration-demo.d.ts.map +1 -1
- package/dist/ai/examples/integration-demo.js +1 -0
- package/dist/ai/examples/integration-demo.js.map +1 -1
- package/dist/ai/index.d.ts +7 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/mcp-registry.d.ts.map +1 -1
- package/dist/ai/mcp/mcp-registry.js +1 -1
- package/dist/ai/mcp/mcp-registry.js.map +1 -1
- package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -1
- package/dist/ai/mcp/servers/analytics/index.js +1 -0
- package/dist/ai/mcp/servers/analytics/index.js.map +1 -1
- package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -1
- package/dist/ai/mcp/servers/delegation-monitor/index.js +27 -27
- package/dist/ai/mcp/servers/delegation-monitor/index.js.map +1 -1
- package/dist/ai/mcp/servers/design-tokens/index.js +1 -1
- package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -1
- package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -1
- package/dist/ai/mcp/servers/promptintel/index.js +2 -1
- package/dist/ai/mcp/servers/promptintel/index.js.map +1 -1
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -1
- package/dist/ai/mcp/servers/shared/rate-limiter.js +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -1
- package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -1
- package/dist/ai/mcp/servers/shared/redis-client.js +2 -0
- package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -1
- package/dist/ai/mcp/servers/shared/utils.js +12 -18
- package/dist/ai/mcp/servers/shared/utils.js.map +1 -1
- package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -1
- package/dist/ai/memory/dcyfr-memory.js +11 -1
- package/dist/ai/memory/dcyfr-memory.js.map +1 -1
- package/dist/ai/memory/file-memory-adapter.d.ts +103 -0
- package/dist/ai/memory/file-memory-adapter.d.ts.map +1 -0
- package/dist/ai/memory/file-memory-adapter.js +532 -0
- package/dist/ai/memory/file-memory-adapter.js.map +1 -0
- package/dist/ai/memory/index.d.ts +6 -0
- package/dist/ai/memory/index.d.ts.map +1 -1
- package/dist/ai/memory/index.js +6 -0
- package/dist/ai/memory/index.js.map +1 -1
- package/dist/ai/memory/mem0-client.d.ts.map +1 -1
- package/dist/ai/memory/mem0-client.js +5 -2
- package/dist/ai/memory/mem0-client.js.map +1 -1
- package/dist/ai/memory/sqlite-index.d.ts +89 -0
- package/dist/ai/memory/sqlite-index.d.ts.map +1 -0
- package/dist/ai/memory/sqlite-index.js +295 -0
- package/dist/ai/memory/sqlite-index.js.map +1 -0
- package/dist/ai/memory/types.d.ts.map +1 -1
- package/dist/ai/memory/types.js +1 -0
- package/dist/ai/memory/types.js.map +1 -1
- package/dist/ai/memory/working-memory-persistence.d.ts +79 -0
- package/dist/ai/memory/working-memory-persistence.d.ts.map +1 -0
- package/dist/ai/memory/working-memory-persistence.js +220 -0
- package/dist/ai/memory/working-memory-persistence.js.map +1 -0
- package/dist/ai/permissions/attenuation-engine.d.ts.map +1 -1
- package/dist/ai/permissions/attenuation-engine.js.map +1 -1
- package/dist/ai/reputation/reputation-engine.d.ts +4 -0
- package/dist/ai/reputation/reputation-engine.d.ts.map +1 -1
- package/dist/ai/reputation/reputation-engine.js +1 -0
- package/dist/ai/reputation/reputation-engine.js.map +1 -1
- package/dist/ai/runtime/agent-runtime.d.ts.map +1 -1
- package/dist/ai/runtime/agent-runtime.js +9 -5
- package/dist/ai/runtime/agent-runtime.js.map +1 -1
- package/dist/ai/src/batch-processor.d.ts +6 -6
- package/dist/ai/src/batch-processor.d.ts.map +1 -1
- package/dist/ai/src/batch-processor.js +11 -4
- package/dist/ai/src/batch-processor.js.map +1 -1
- package/dist/ai/src/capability-bootstrap.d.ts.map +1 -1
- package/dist/ai/src/capability-bootstrap.js +1 -0
- package/dist/ai/src/capability-bootstrap.js.map +1 -1
- package/dist/ai/src/capability-registry.js +1 -1
- package/dist/ai/src/capability-registry.js.map +1 -1
- package/dist/ai/src/cli/telemetry-dashboard.d.ts +0 -11
- package/dist/ai/src/cli/telemetry-dashboard.d.ts.map +1 -1
- package/dist/ai/src/cli/telemetry-dashboard.js +12 -6
- package/dist/ai/src/cli/telemetry-dashboard.js.map +1 -1
- package/dist/ai/src/compaction/context-compactor.d.ts +149 -0
- package/dist/ai/src/compaction/context-compactor.d.ts.map +1 -0
- package/dist/ai/src/compaction/context-compactor.js +302 -0
- package/dist/ai/src/compaction/context-compactor.js.map +1 -0
- package/dist/ai/src/compaction/index.d.ts +11 -0
- package/dist/ai/src/compaction/index.d.ts.map +1 -0
- package/dist/ai/src/compaction/index.js +11 -0
- package/dist/ai/src/compaction/index.js.map +1 -0
- package/dist/ai/src/compaction/memory-compaction.d.ts +138 -0
- package/dist/ai/src/compaction/memory-compaction.d.ts.map +1 -0
- package/dist/ai/src/compaction/memory-compaction.js +630 -0
- package/dist/ai/src/compaction/memory-compaction.js.map +1 -0
- package/dist/ai/src/container/agent-container-dispatcher.d.ts +154 -0
- package/dist/ai/src/container/agent-container-dispatcher.d.ts.map +1 -0
- package/dist/ai/src/container/agent-container-dispatcher.js +329 -0
- package/dist/ai/src/container/agent-container-dispatcher.js.map +1 -0
- package/dist/ai/src/container/backend-factory.d.ts +89 -0
- package/dist/ai/src/container/backend-factory.d.ts.map +1 -0
- package/dist/ai/src/container/backend-factory.js +169 -0
- package/dist/ai/src/container/backend-factory.js.map +1 -0
- package/dist/ai/src/container/index.d.ts +13 -0
- package/dist/ai/src/container/index.d.ts.map +1 -0
- package/dist/ai/src/container/index.js +13 -0
- package/dist/ai/src/container/index.js.map +1 -0
- package/dist/ai/src/container/kubernetes-backend.d.ts +23 -0
- package/dist/ai/src/container/kubernetes-backend.d.ts.map +1 -0
- package/dist/ai/src/container/kubernetes-backend.js +39 -0
- package/dist/ai/src/container/kubernetes-backend.js.map +1 -0
- package/dist/ai/src/container/local-docker-backend.d.ts +77 -0
- package/dist/ai/src/container/local-docker-backend.d.ts.map +1 -0
- package/dist/ai/src/container/local-docker-backend.js +362 -0
- package/dist/ai/src/container/local-docker-backend.js.map +1 -0
- package/dist/ai/src/container/remote-docker-backend.d.ts +35 -0
- package/dist/ai/src/container/remote-docker-backend.d.ts.map +1 -0
- package/dist/ai/src/container/remote-docker-backend.js +189 -0
- package/dist/ai/src/container/remote-docker-backend.js.map +1 -0
- package/dist/ai/src/container/types.d.ts +270 -0
- package/dist/ai/src/container/types.d.ts.map +1 -0
- package/dist/ai/src/container/types.js +86 -0
- package/dist/ai/src/container/types.js.map +1 -0
- package/dist/ai/src/delegation/feature-flags.d.ts.map +1 -1
- package/dist/ai/src/delegation/feature-flags.js +1 -0
- package/dist/ai/src/delegation/feature-flags.js.map +1 -1
- package/dist/ai/src/delegation/liability-firebreak.d.ts.map +1 -1
- package/dist/ai/src/delegation/liability-firebreak.js +1 -0
- package/dist/ai/src/delegation/liability-firebreak.js.map +1 -1
- package/dist/ai/src/delegation/security-threat-model.d.ts.map +1 -1
- package/dist/ai/src/delegation/security-threat-model.js +1 -1
- package/dist/ai/src/delegation/security-threat-model.js.map +1 -1
- package/dist/ai/src/delegation-capability-integration.d.ts +1 -1
- package/dist/ai/src/delegation-capability-integration.d.ts.map +1 -1
- package/dist/ai/src/delegation-capability-integration.js +2 -7
- package/dist/ai/src/delegation-capability-integration.js.map +1 -1
- package/dist/ai/src/end-to-end-workflow-orchestrator.d.ts.map +1 -1
- package/dist/ai/src/end-to-end-workflow-orchestrator.js +2 -1
- package/dist/ai/src/end-to-end-workflow-orchestrator.js.map +1 -1
- package/dist/ai/src/enhanced-capability-detection.d.ts +1 -1
- package/dist/ai/src/enhanced-capability-detection.d.ts.map +1 -1
- package/dist/ai/src/enhanced-capability-detection.js +1 -1
- package/dist/ai/src/enhanced-capability-detection.js.map +1 -1
- package/dist/ai/src/gateway/index.d.ts +6 -0
- package/dist/ai/src/gateway/index.d.ts.map +1 -0
- package/dist/ai/src/gateway/index.js +6 -0
- package/dist/ai/src/gateway/index.js.map +1 -0
- package/dist/ai/src/gateway/message-gateway.d.ts +296 -0
- package/dist/ai/src/gateway/message-gateway.d.ts.map +1 -0
- package/dist/ai/src/gateway/message-gateway.js +415 -0
- package/dist/ai/src/gateway/message-gateway.js.map +1 -0
- package/dist/ai/src/intelligent-cache-manager.d.ts.map +1 -1
- package/dist/ai/src/intelligent-cache-manager.js +2 -1
- package/dist/ai/src/intelligent-cache-manager.js.map +1 -1
- package/dist/ai/src/mcp/index.d.ts +10 -0
- package/dist/ai/src/mcp/index.d.ts.map +1 -0
- package/dist/ai/src/mcp/index.js +10 -0
- package/dist/ai/src/mcp/index.js.map +1 -0
- package/dist/ai/src/mcp/mcp-tool-bridge.d.ts +186 -0
- package/dist/ai/src/mcp/mcp-tool-bridge.d.ts.map +1 -0
- package/dist/ai/src/mcp/mcp-tool-bridge.js +292 -0
- package/dist/ai/src/mcp/mcp-tool-bridge.js.map +1 -0
- package/dist/ai/src/mcp-auto-configuration.d.ts.map +1 -1
- package/dist/ai/src/mcp-auto-configuration.js +2 -1
- package/dist/ai/src/mcp-auto-configuration.js.map +1 -1
- package/dist/ai/src/performance-profiler.d.ts.map +1 -1
- package/dist/ai/src/performance-profiler.js +1 -0
- package/dist/ai/src/performance-profiler.js.map +1 -1
- package/dist/ai/src/plugins/anomaly/anomaly-detector.d.ts +58 -0
- package/dist/ai/src/plugins/anomaly/anomaly-detector.d.ts.map +1 -0
- package/dist/ai/src/plugins/anomaly/anomaly-detector.js +101 -0
- package/dist/ai/src/plugins/anomaly/anomaly-detector.js.map +1 -0
- package/dist/ai/src/plugins/anomaly/anomaly-monitor.d.ts +145 -0
- package/dist/ai/src/plugins/anomaly/anomaly-monitor.d.ts.map +1 -0
- package/dist/ai/src/plugins/anomaly/anomaly-monitor.js +245 -0
- package/dist/ai/src/plugins/anomaly/anomaly-monitor.js.map +1 -0
- package/dist/ai/src/plugins/anomaly/behavior-baseline.d.ts +79 -0
- package/dist/ai/src/plugins/anomaly/behavior-baseline.d.ts.map +1 -0
- package/dist/ai/src/plugins/anomaly/behavior-baseline.js +161 -0
- package/dist/ai/src/plugins/anomaly/behavior-baseline.js.map +1 -0
- package/dist/ai/src/plugins/anomaly/index.d.ts +15 -0
- package/dist/ai/src/plugins/anomaly/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/anomaly/index.js +12 -0
- package/dist/ai/src/plugins/anomaly/index.js.map +1 -0
- package/dist/ai/src/plugins/anomaly/types.d.ts +150 -0
- package/dist/ai/src/plugins/anomaly/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/anomaly/types.js +68 -0
- package/dist/ai/src/plugins/anomaly/types.js.map +1 -0
- package/dist/ai/src/plugins/certification/certification-manager.d.ts +102 -0
- package/dist/ai/src/plugins/certification/certification-manager.d.ts.map +1 -0
- package/dist/ai/src/plugins/certification/certification-manager.js +321 -0
- package/dist/ai/src/plugins/certification/certification-manager.js.map +1 -0
- package/dist/ai/src/plugins/certification/index.d.ts +12 -0
- package/dist/ai/src/plugins/certification/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/certification/index.js +10 -0
- package/dist/ai/src/plugins/certification/index.js.map +1 -0
- package/dist/ai/src/plugins/certification/types.d.ts +128 -0
- package/dist/ai/src/plugins/certification/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/certification/types.js +201 -0
- package/dist/ai/src/plugins/certification/types.js.map +1 -0
- package/dist/ai/src/plugins/escalation/escalation-trigger.d.ts +155 -0
- package/dist/ai/src/plugins/escalation/escalation-trigger.d.ts.map +1 -0
- package/dist/ai/src/plugins/escalation/escalation-trigger.js +183 -0
- package/dist/ai/src/plugins/escalation/escalation-trigger.js.map +1 -0
- package/dist/ai/src/plugins/escalation/index.d.ts +11 -0
- package/dist/ai/src/plugins/escalation/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/escalation/index.js +10 -0
- package/dist/ai/src/plugins/escalation/index.js.map +1 -0
- package/dist/ai/src/plugins/incidents/incident-response-manager.d.ts +165 -0
- package/dist/ai/src/plugins/incidents/incident-response-manager.d.ts.map +1 -0
- package/dist/ai/src/plugins/incidents/incident-response-manager.js +462 -0
- package/dist/ai/src/plugins/incidents/incident-response-manager.js.map +1 -0
- package/dist/ai/src/plugins/incidents/index.d.ts +8 -0
- package/dist/ai/src/plugins/incidents/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/incidents/index.js +7 -0
- package/dist/ai/src/plugins/incidents/index.js.map +1 -0
- package/dist/ai/src/plugins/incidents/types.d.ts +183 -0
- package/dist/ai/src/plugins/incidents/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/incidents/types.js +55 -0
- package/dist/ai/src/plugins/incidents/types.js.map +1 -0
- package/dist/ai/src/plugins/permissions/index.d.ts +17 -0
- package/dist/ai/src/plugins/permissions/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/permissions/index.js +14 -0
- package/dist/ai/src/plugins/permissions/index.js.map +1 -0
- package/dist/ai/src/plugins/permissions/permission-attenuator.d.ts +29 -0
- package/dist/ai/src/plugins/permissions/permission-attenuator.d.ts.map +1 -0
- package/dist/ai/src/plugins/permissions/permission-attenuator.js +190 -0
- package/dist/ai/src/plugins/permissions/permission-attenuator.js.map +1 -0
- package/dist/ai/src/plugins/permissions/permission-audit-logger.d.ts +72 -0
- package/dist/ai/src/plugins/permissions/permission-audit-logger.d.ts.map +1 -0
- package/dist/ai/src/plugins/permissions/permission-audit-logger.js +176 -0
- package/dist/ai/src/plugins/permissions/permission-audit-logger.js.map +1 -0
- package/dist/ai/src/plugins/permissions/permission-enforcer.d.ts +99 -0
- package/dist/ai/src/plugins/permissions/permission-enforcer.d.ts.map +1 -0
- package/dist/ai/src/plugins/permissions/permission-enforcer.js +151 -0
- package/dist/ai/src/plugins/permissions/permission-enforcer.js.map +1 -0
- package/dist/ai/src/plugins/permissions/plugin-permission-validator.d.ts +39 -0
- package/dist/ai/src/plugins/permissions/plugin-permission-validator.d.ts.map +1 -0
- package/dist/ai/src/plugins/permissions/plugin-permission-validator.js +296 -0
- package/dist/ai/src/plugins/permissions/plugin-permission-validator.js.map +1 -0
- package/dist/ai/src/plugins/permissions/types.d.ts +116 -0
- package/dist/ai/src/plugins/permissions/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/permissions/types.js +36 -0
- package/dist/ai/src/plugins/permissions/types.js.map +1 -0
- package/dist/ai/src/plugins/reputation/index.d.ts +9 -0
- package/dist/ai/src/plugins/reputation/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/reputation/index.js +8 -0
- package/dist/ai/src/plugins/reputation/index.js.map +1 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-db.d.ts +29 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-db.d.ts.map +1 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-db.js +120 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-db.js.map +1 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-engine.d.ts +115 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-engine.d.ts.map +1 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-engine.js +528 -0
- package/dist/ai/src/plugins/reputation/plugin-reputation-engine.js.map +1 -0
- package/dist/ai/src/plugins/reputation/types.d.ts +149 -0
- package/dist/ai/src/plugins/reputation/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/reputation/types.js +14 -0
- package/dist/ai/src/plugins/reputation/types.js.map +1 -0
- package/dist/ai/src/plugins/reviews/index.d.ts +11 -0
- package/dist/ai/src/plugins/reviews/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/reviews/index.js +10 -0
- package/dist/ai/src/plugins/reviews/index.js.map +1 -0
- package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.d.ts +116 -0
- package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.d.ts.map +1 -0
- package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.js +282 -0
- package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.js.map +1 -0
- package/dist/ai/src/plugins/reviews/types.d.ts +113 -0
- package/dist/ai/src/plugins/reviews/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/reviews/types.js +55 -0
- package/dist/ai/src/plugins/reviews/types.js.map +1 -0
- package/dist/ai/src/plugins/runtime/docker-plugin-runner.d.ts +77 -0
- package/dist/ai/src/plugins/runtime/docker-plugin-runner.d.ts.map +1 -0
- package/dist/ai/src/plugins/runtime/docker-plugin-runner.js +248 -0
- package/dist/ai/src/plugins/runtime/docker-plugin-runner.js.map +1 -0
- package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.d.ts +99 -0
- package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.d.ts.map +1 -0
- package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.js +158 -0
- package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.js.map +1 -0
- package/dist/ai/src/plugins/runtime/index.d.ts +13 -0
- package/dist/ai/src/plugins/runtime/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/runtime/index.js +11 -0
- package/dist/ai/src/plugins/runtime/index.js.map +1 -0
- package/dist/ai/src/plugins/runtime/types.d.ts +143 -0
- package/dist/ai/src/plugins/runtime/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/runtime/types.js +19 -0
- package/dist/ai/src/plugins/runtime/types.js.map +1 -0
- package/dist/ai/src/plugins/runtime/wasm-plugin-runner.d.ts +104 -0
- package/dist/ai/src/plugins/runtime/wasm-plugin-runner.d.ts.map +1 -0
- package/dist/ai/src/plugins/runtime/wasm-plugin-runner.js +307 -0
- package/dist/ai/src/plugins/runtime/wasm-plugin-runner.js.map +1 -0
- package/dist/ai/src/plugins/security/index.d.ts +24 -0
- package/dist/ai/src/plugins/security/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/index.js +23 -0
- package/dist/ai/src/plugins/security/index.js.map +1 -0
- package/dist/ai/src/plugins/security/license-checker.d.ts +26 -0
- package/dist/ai/src/plugins/security/license-checker.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/license-checker.js +137 -0
- package/dist/ai/src/plugins/security/license-checker.js.map +1 -0
- package/dist/ai/src/plugins/security/malware-scanner.d.ts +19 -0
- package/dist/ai/src/plugins/security/malware-scanner.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/malware-scanner.js +121 -0
- package/dist/ai/src/plugins/security/malware-scanner.js.map +1 -0
- package/dist/ai/src/plugins/security/plugin-security-scanner.d.ts +36 -0
- package/dist/ai/src/plugins/security/plugin-security-scanner.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/plugin-security-scanner.js +160 -0
- package/dist/ai/src/plugins/security/plugin-security-scanner.js.map +1 -0
- package/dist/ai/src/plugins/security/sbom-generator.d.ts +23 -0
- package/dist/ai/src/plugins/security/sbom-generator.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/sbom-generator.js +115 -0
- package/dist/ai/src/plugins/security/sbom-generator.js.map +1 -0
- package/dist/ai/src/plugins/security/secret-detector.d.ts +19 -0
- package/dist/ai/src/plugins/security/secret-detector.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/secret-detector.js +204 -0
- package/dist/ai/src/plugins/security/secret-detector.js.map +1 -0
- package/dist/ai/src/plugins/security/signature-verifier.d.ts +21 -0
- package/dist/ai/src/plugins/security/signature-verifier.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/signature-verifier.js +75 -0
- package/dist/ai/src/plugins/security/signature-verifier.js.map +1 -0
- package/dist/ai/src/plugins/security/sonarcloud-client.d.ts +20 -0
- package/dist/ai/src/plugins/security/sonarcloud-client.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/sonarcloud-client.js +106 -0
- package/dist/ai/src/plugins/security/sonarcloud-client.js.map +1 -0
- package/dist/ai/src/plugins/security/trust-score.d.ts +58 -0
- package/dist/ai/src/plugins/security/trust-score.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/trust-score.js +173 -0
- package/dist/ai/src/plugins/security/trust-score.js.map +1 -0
- package/dist/ai/src/plugins/security/types.d.ts +220 -0
- package/dist/ai/src/plugins/security/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/types.js +12 -0
- package/dist/ai/src/plugins/security/types.js.map +1 -0
- package/dist/ai/src/plugins/security/vulnerability-scanner.d.ts +22 -0
- package/dist/ai/src/plugins/security/vulnerability-scanner.d.ts.map +1 -0
- package/dist/ai/src/plugins/security/vulnerability-scanner.js +109 -0
- package/dist/ai/src/plugins/security/vulnerability-scanner.js.map +1 -0
- package/dist/ai/src/plugins/tlp/index.d.ts +17 -0
- package/dist/ai/src/plugins/tlp/index.d.ts.map +1 -0
- package/dist/ai/src/plugins/tlp/index.js +17 -0
- package/dist/ai/src/plugins/tlp/index.js.map +1 -0
- package/dist/ai/src/plugins/tlp/tlp-classifier.d.ts +55 -0
- package/dist/ai/src/plugins/tlp/tlp-classifier.d.ts.map +1 -0
- package/dist/ai/src/plugins/tlp/tlp-classifier.js +232 -0
- package/dist/ai/src/plugins/tlp/tlp-classifier.js.map +1 -0
- package/dist/ai/src/plugins/tlp/tlp-validator.d.ts +97 -0
- package/dist/ai/src/plugins/tlp/tlp-validator.d.ts.map +1 -0
- package/dist/ai/src/plugins/tlp/tlp-validator.js +120 -0
- package/dist/ai/src/plugins/tlp/tlp-validator.js.map +1 -0
- package/dist/ai/src/plugins/tlp/types.d.ts +84 -0
- package/dist/ai/src/plugins/tlp/types.d.ts.map +1 -0
- package/dist/ai/src/plugins/tlp/types.js +20 -0
- package/dist/ai/src/plugins/tlp/types.js.map +1 -0
- package/dist/ai/src/resource-monitor.d.ts +1 -1
- package/dist/ai/src/resource-monitor.d.ts.map +1 -1
- package/dist/ai/src/resource-monitor.js +4 -3
- package/dist/ai/src/resource-monitor.js.map +1 -1
- package/dist/ai/src/runtime/agent-runtime.d.ts +77 -0
- package/dist/ai/src/runtime/agent-runtime.d.ts.map +1 -1
- package/dist/ai/src/runtime/agent-runtime.js +138 -2
- package/dist/ai/src/runtime/agent-runtime.js.map +1 -1
- package/dist/ai/src/scheduler/agent-scheduler.d.ts +365 -0
- package/dist/ai/src/scheduler/agent-scheduler.d.ts.map +1 -0
- package/dist/ai/src/scheduler/agent-scheduler.js +610 -0
- package/dist/ai/src/scheduler/agent-scheduler.js.map +1 -0
- package/dist/ai/src/scheduler/index.d.ts +6 -0
- package/dist/ai/src/scheduler/index.d.ts.map +1 -0
- package/dist/ai/src/scheduler/index.js +6 -0
- package/dist/ai/src/scheduler/index.js.map +1 -0
- package/dist/ai/src/session/index.d.ts +6 -0
- package/dist/ai/src/session/index.d.ts.map +1 -0
- package/dist/ai/src/session/index.js +6 -0
- package/dist/ai/src/session/index.js.map +1 -0
- package/dist/ai/src/session/session-manager.d.ts +380 -0
- package/dist/ai/src/session/session-manager.d.ts.map +1 -0
- package/dist/ai/src/session/session-manager.js +625 -0
- package/dist/ai/src/session/session-manager.js.map +1 -0
- package/dist/ai/src/skills/index.d.ts +10 -0
- package/dist/ai/src/skills/index.d.ts.map +1 -0
- package/dist/ai/src/skills/index.js +10 -0
- package/dist/ai/src/skills/index.js.map +1 -0
- package/dist/ai/src/skills/skill-registry.d.ts +181 -0
- package/dist/ai/src/skills/skill-registry.d.ts.map +1 -0
- package/dist/ai/src/skills/skill-registry.js +465 -0
- package/dist/ai/src/skills/skill-registry.js.map +1 -0
- package/dist/ai/src/telemetry/delegation-telemetry.d.ts.map +1 -1
- package/dist/ai/src/telemetry/delegation-telemetry.js +1 -0
- package/dist/ai/src/telemetry/delegation-telemetry.js.map +1 -1
- package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts +1 -1
- package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts.map +1 -1
- package/dist/ai/src/telemetry/runtime-telemetry-integration.js +3 -2
- package/dist/ai/src/telemetry/runtime-telemetry-integration.js.map +1 -1
- package/dist/ai/src/telemetry/telemetry-utils.d.ts.map +1 -1
- package/dist/ai/src/telemetry/telemetry-utils.js +1 -0
- package/dist/ai/src/telemetry/telemetry-utils.js.map +1 -1
- package/dist/ai/src/types/agent-capabilities.d.ts.map +1 -1
- package/dist/ai/src/types/agent-capabilities.js +1 -0
- package/dist/ai/src/types/agent-capabilities.js.map +1 -1
- package/dist/ai/src/types/delegation-contracts.d.ts +92 -0
- package/dist/ai/src/types/delegation-contracts.d.ts.map +1 -1
- package/dist/ai/src/types/delegation-contracts.js.map +1 -1
- package/dist/ai/src/validation-pipeline-integration.d.ts.map +1 -1
- package/dist/ai/src/validation-pipeline-integration.js +1 -2
- package/dist/ai/src/validation-pipeline-integration.js.map +1 -1
- package/dist/ai/src/verification/multi-modal-formatters.d.ts +1 -1
- package/dist/ai/src/verification/multi-modal-formatters.d.ts.map +1 -1
- package/dist/ai/src/verification/multi-modal-formatters.js +3 -2
- package/dist/ai/src/verification/multi-modal-formatters.js.map +1 -1
- package/dist/ai/src/verification/output-formatter.d.ts +1 -1
- package/dist/ai/src/verification/output-formatter.d.ts.map +1 -1
- package/dist/ai/src/verification/output-formatter.js +2 -1
- package/dist/ai/src/verification/output-formatter.js.map +1 -1
- package/dist/ai/src/verification/parser-integration.d.ts.map +1 -1
- package/dist/ai/src/verification/parser-integration.js.map +1 -1
- package/dist/ai/types/agent-capabilities.d.ts +7 -0
- package/dist/ai/types/agent-capabilities.d.ts.map +1 -1
- package/dist/ai/types/delegation-contracts.d.ts +75 -0
- package/dist/ai/types/delegation-contracts.d.ts.map +1 -1
- package/dist/ai/types/index.d.ts +3 -3
- package/dist/ai/types/index.d.ts.map +1 -1
- package/dist/ai/types/index.js.map +1 -1
- package/dist/ai/types/permission-tokens.d.ts +23 -0
- package/dist/ai/types/permission-tokens.d.ts.map +1 -1
- package/dist/ai/types/permission-tokens.js +65 -1
- package/dist/ai/types/permission-tokens.js.map +1 -1
- package/dist/ai/validation/validation-framework.d.ts.map +1 -1
- package/dist/ai/verification/policy-framework.d.ts +1 -1
- package/dist/ai/verification/policy-framework.d.ts.map +1 -1
- package/dist/ai/verification/policy-framework.js +4 -4
- package/dist/ai/verification/policy-framework.js.map +1 -1
- package/package.json +33 -4
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentContainerDispatcher
|
|
3
|
+
* TLP:CLEAR
|
|
4
|
+
*
|
|
5
|
+
* High-level coordinator that bridges GitHub issues / freeform tasks with the
|
|
6
|
+
* container execution backend and the delegation framework.
|
|
7
|
+
*
|
|
8
|
+
* Responsibilities:
|
|
9
|
+
* - Parse issue metadata → detect affected scope, capabilities, resource tier
|
|
10
|
+
* - Select the best delegatee agent via CapabilityRegistry
|
|
11
|
+
* - Create a DelegationContract and provision an agent container
|
|
12
|
+
* - Track active dispatches in-memory; surface them via getActiveDispatches()
|
|
13
|
+
* - Cancel running dispatches (tears down container, marks contract failed)
|
|
14
|
+
*
|
|
15
|
+
* @module container/agent-container-dispatcher
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
* @date 2026-03-12
|
|
18
|
+
*/
|
|
19
|
+
import { EventEmitter } from 'node:events';
|
|
20
|
+
import type { DelegationContractManager } from '../../delegation/contract-manager.js';
|
|
21
|
+
import type { CapabilityRegistry } from '../capability-registry.js';
|
|
22
|
+
import type { ContainerExecutionBackend, ContainerHandle, ContainerBackendType } from './types.js';
|
|
23
|
+
import type { DelegationAgent } from '../../types/delegation-contracts.js';
|
|
24
|
+
/** Lightweight description of a GitHub issue for dispatch purposes. */
|
|
25
|
+
export interface IssueDispatchInput {
|
|
26
|
+
/** The GitHub issue number (used for PR linking). */
|
|
27
|
+
issueNumber: number;
|
|
28
|
+
/** Issue title. */
|
|
29
|
+
title: string;
|
|
30
|
+
/** Issue body (markdown). May be empty. */
|
|
31
|
+
body?: string;
|
|
32
|
+
/** Labels applied to the issue (lowercase, hyphenated). */
|
|
33
|
+
labels?: string[];
|
|
34
|
+
/** GitHub repository in "owner/repo" format. */
|
|
35
|
+
repo: string;
|
|
36
|
+
/** Optional runtime backend override (e.g. 'remote-docker'). */
|
|
37
|
+
backendType?: ContainerBackendType;
|
|
38
|
+
}
|
|
39
|
+
/** Freeform task dispatch (no issue linked). */
|
|
40
|
+
export interface TaskDispatchInput {
|
|
41
|
+
/** Short task identifier (slug). */
|
|
42
|
+
taskId: string;
|
|
43
|
+
/** Human-readable description of what the agent should do. */
|
|
44
|
+
description: string;
|
|
45
|
+
/** Constrain which capabilities the agent must have. */
|
|
46
|
+
requiredCapabilities?: string[];
|
|
47
|
+
/** GitHub repository the agent should operate on. */
|
|
48
|
+
repo: string;
|
|
49
|
+
/** Optional runtime backend override (e.g. 'remote-docker'). */
|
|
50
|
+
backendType?: ContainerBackendType;
|
|
51
|
+
}
|
|
52
|
+
/** Options shared by both dispatch methods. */
|
|
53
|
+
export interface DispatchOptions {
|
|
54
|
+
/**
|
|
55
|
+
* Override image for this dispatch.
|
|
56
|
+
* Defaults to `AgentContainerDispatcherOptions.defaultImage`.
|
|
57
|
+
*/
|
|
58
|
+
image?: string;
|
|
59
|
+
/** Execution time limit in milliseconds. Defaults to 1800000 (30 min). */
|
|
60
|
+
maxExecutionTimeMs?: number;
|
|
61
|
+
/** When true, skip push / PR creation (dry-run mode). */
|
|
62
|
+
dryRun?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Base64-encoded script to run inside the container.
|
|
65
|
+
* Takes priority over task description auto-generation.
|
|
66
|
+
*/
|
|
67
|
+
taskScriptB64?: string;
|
|
68
|
+
/** Runtime backend override for this dispatch (e.g. 'remote-docker'). */
|
|
69
|
+
backendType?: ContainerBackendType;
|
|
70
|
+
}
|
|
71
|
+
/** Record of a live dispatch. */
|
|
72
|
+
export interface DispatchRecord {
|
|
73
|
+
/** Contract ID (also used as primary key in the delegation DB). */
|
|
74
|
+
contractId: string;
|
|
75
|
+
/** Human-readable task slug. */
|
|
76
|
+
taskId: string;
|
|
77
|
+
/** Container handle returned by the backend. */
|
|
78
|
+
containerHandle: ContainerHandle;
|
|
79
|
+
/** ISO timestamp when the dispatch was started. */
|
|
80
|
+
dispatchedAt: string;
|
|
81
|
+
/** GitHub issue number, if this dispatch originated from an issue. */
|
|
82
|
+
issueNumber?: number;
|
|
83
|
+
/** Target repository. */
|
|
84
|
+
repo: string;
|
|
85
|
+
}
|
|
86
|
+
export interface AgentContainerDispatcherOptions {
|
|
87
|
+
/** Agent container backend (e.g., LocalDockerBackend). */
|
|
88
|
+
backend: ContainerExecutionBackend;
|
|
89
|
+
/** Delegation contract manager for contract lifecycle. */
|
|
90
|
+
contractManager: DelegationContractManager;
|
|
91
|
+
/** Capability registry for delegatee agent selection. */
|
|
92
|
+
capabilityRegistry?: CapabilityRegistry;
|
|
93
|
+
/**
|
|
94
|
+
* Agent to use as delegator (who is "assigning" the container work).
|
|
95
|
+
* Defaults to a system dispatcher agent.
|
|
96
|
+
*/
|
|
97
|
+
delegatorAgent?: DelegationAgent;
|
|
98
|
+
/** GitHub token for container secret injection. */
|
|
99
|
+
githubToken: string;
|
|
100
|
+
/** Default container image tag. */
|
|
101
|
+
defaultImage?: string;
|
|
102
|
+
/** Optional backend map for runtime per-dispatch backend override. */
|
|
103
|
+
backendsByType?: Partial<Record<ContainerBackendType, ContainerExecutionBackend>>;
|
|
104
|
+
}
|
|
105
|
+
export declare class AgentContainerDispatcher extends EventEmitter {
|
|
106
|
+
private readonly backend;
|
|
107
|
+
private readonly contractManager;
|
|
108
|
+
private readonly capabilityRegistry?;
|
|
109
|
+
private readonly delegatorAgent;
|
|
110
|
+
private readonly githubToken;
|
|
111
|
+
private readonly defaultImage;
|
|
112
|
+
private readonly backendsByType;
|
|
113
|
+
/** In-memory active dispatch registry. */
|
|
114
|
+
private readonly _dispatches;
|
|
115
|
+
constructor(options: AgentContainerDispatcherOptions);
|
|
116
|
+
/**
|
|
117
|
+
* Dispatch an agent container from a GitHub issue.
|
|
118
|
+
*
|
|
119
|
+
* Detects scope (affected packages/capabilities) from issue labels and
|
|
120
|
+
* body keywords, selects the best available delegatee agent via the
|
|
121
|
+
* capability registry, creates a delegation contract, and provisions
|
|
122
|
+
* an agent container.
|
|
123
|
+
*/
|
|
124
|
+
dispatchFromIssue(issue: IssueDispatchInput, options?: DispatchOptions): Promise<DispatchRecord>;
|
|
125
|
+
/**
|
|
126
|
+
* Dispatch an agent container from a freeform task description.
|
|
127
|
+
*/
|
|
128
|
+
dispatchFromTask(task: TaskDispatchInput, options?: DispatchOptions): Promise<DispatchRecord>;
|
|
129
|
+
/**
|
|
130
|
+
* Cancel a running dispatch by contract ID.
|
|
131
|
+
* Tears down the container and marks the contract as failed.
|
|
132
|
+
*/
|
|
133
|
+
cancel(contractId: string): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* List all currently active dispatches.
|
|
136
|
+
*/
|
|
137
|
+
getActiveDispatches(): Promise<DispatchRecord[]>;
|
|
138
|
+
private createDispatch;
|
|
139
|
+
/** Watch container exit and reconcile contract state. */
|
|
140
|
+
private watchContainer;
|
|
141
|
+
/** Resolve per-dispatch backend override, falling back to constructor backend. */
|
|
142
|
+
private resolveBackend;
|
|
143
|
+
/** Select the best delegatee for a given capability. */
|
|
144
|
+
private selectDelegatee;
|
|
145
|
+
/** Detect the best capability from issue labels, then fall back to keywords. */
|
|
146
|
+
private detectCapability;
|
|
147
|
+
/** Keyword-based capability detection from free text. */
|
|
148
|
+
private detectCapabilityFromText;
|
|
149
|
+
/** Estimate a resource tier based on keywords in the task text. */
|
|
150
|
+
private estimateResourceTier;
|
|
151
|
+
/** Format a task description for the agent entrypoint. */
|
|
152
|
+
private buildTaskDescription;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=agent-container-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-container-dispatcher.d.ts","sourceRoot":"","sources":["../../../../packages/ai/src/container/agent-container-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentContainerDispatcher
|
|
3
|
+
* TLP:CLEAR
|
|
4
|
+
*
|
|
5
|
+
* High-level coordinator that bridges GitHub issues / freeform tasks with the
|
|
6
|
+
* container execution backend and the delegation framework.
|
|
7
|
+
*
|
|
8
|
+
* Responsibilities:
|
|
9
|
+
* - Parse issue metadata → detect affected scope, capabilities, resource tier
|
|
10
|
+
* - Select the best delegatee agent via CapabilityRegistry
|
|
11
|
+
* - Create a DelegationContract and provision an agent container
|
|
12
|
+
* - Track active dispatches in-memory; surface them via getActiveDispatches()
|
|
13
|
+
* - Cancel running dispatches (tears down container, marks contract failed)
|
|
14
|
+
*
|
|
15
|
+
* @module container/agent-container-dispatcher
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
* @date 2026-03-12
|
|
18
|
+
*/
|
|
19
|
+
import { EventEmitter } from 'node:events';
|
|
20
|
+
import { randomUUID } from 'node:crypto';
|
|
21
|
+
const RESOURCE_PRESETS = {
|
|
22
|
+
small: { maxMemory: '512m', maxCpus: 1, maxExecutionTimeMs: 900_000 }, // 15 min
|
|
23
|
+
medium: { maxMemory: '2g', maxCpus: 2, maxExecutionTimeMs: 1_800_000 }, // 30 min
|
|
24
|
+
large: { maxMemory: '4g', maxCpus: 4, maxExecutionTimeMs: 3_600_000 }, // 60 min
|
|
25
|
+
};
|
|
26
|
+
// Scope / label → capability category mapping ----------------------------
|
|
27
|
+
const LABEL_TO_CAPABILITY = {
|
|
28
|
+
'type:bug': 'code_review',
|
|
29
|
+
'type:feature': 'code_generation',
|
|
30
|
+
'type:refactor': 'code_generation',
|
|
31
|
+
'type:test': 'test_generation',
|
|
32
|
+
'type:docs': 'documentation',
|
|
33
|
+
'type:security': 'security_analysis',
|
|
34
|
+
'type:performance': 'performance_analysis',
|
|
35
|
+
'type:api': 'api_development',
|
|
36
|
+
'type:ui': 'ui_development',
|
|
37
|
+
};
|
|
38
|
+
// Keywords in issue title/body that suggest specific capabilities ----------
|
|
39
|
+
const KEYWORD_TO_CAPABILITY = [
|
|
40
|
+
[/\btest(s|ing)?\b/i, 'test_generation'],
|
|
41
|
+
[/\bsecurity|vuln|CVE\b/i, 'security_analysis'],
|
|
42
|
+
[/\bperformance|slow|latency\b/i, 'performance_analysis'],
|
|
43
|
+
[/\bdocument(ation)?\b/i, 'documentation'],
|
|
44
|
+
[/\brefactor\b/i, 'code_generation'],
|
|
45
|
+
[/\bbug|fix|error|crash\b/i, 'code_review'],
|
|
46
|
+
];
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Implementation
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
export class AgentContainerDispatcher extends EventEmitter {
|
|
51
|
+
backend;
|
|
52
|
+
contractManager;
|
|
53
|
+
capabilityRegistry;
|
|
54
|
+
delegatorAgent;
|
|
55
|
+
githubToken;
|
|
56
|
+
defaultImage;
|
|
57
|
+
backendsByType;
|
|
58
|
+
/** In-memory active dispatch registry. */
|
|
59
|
+
_dispatches = new Map();
|
|
60
|
+
constructor(options) {
|
|
61
|
+
super();
|
|
62
|
+
this.backend = options.backend;
|
|
63
|
+
this.contractManager = options.contractManager;
|
|
64
|
+
this.capabilityRegistry = options.capabilityRegistry;
|
|
65
|
+
this.githubToken = options.githubToken;
|
|
66
|
+
this.defaultImage = options.defaultImage ?? 'dcyfr/agent:latest';
|
|
67
|
+
this.backendsByType = {
|
|
68
|
+
[this.backend.backendType]: this.backend,
|
|
69
|
+
...(options.backendsByType ?? {}),
|
|
70
|
+
};
|
|
71
|
+
this.delegatorAgent = options.delegatorAgent ?? {
|
|
72
|
+
agent_id: 'agent-container-dispatcher',
|
|
73
|
+
agent_name: 'AgentContainerDispatcher',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// ── Public API ─────────────────────────────────────────────────────────────
|
|
77
|
+
/**
|
|
78
|
+
* Dispatch an agent container from a GitHub issue.
|
|
79
|
+
*
|
|
80
|
+
* Detects scope (affected packages/capabilities) from issue labels and
|
|
81
|
+
* body keywords, selects the best available delegatee agent via the
|
|
82
|
+
* capability registry, creates a delegation contract, and provisions
|
|
83
|
+
* an agent container.
|
|
84
|
+
*/
|
|
85
|
+
async dispatchFromIssue(issue, options = {}) {
|
|
86
|
+
const capability = this.detectCapability(issue.labels ?? [], issue.title + ' ' + (issue.body ?? ''));
|
|
87
|
+
const tier = this.estimateResourceTier(issue.title + ' ' + (issue.body ?? ''));
|
|
88
|
+
const taskId = `issue-${issue.issueNumber}-${randomUUID().slice(0, 8)}`;
|
|
89
|
+
const taskDescription = this.buildTaskDescription(issue);
|
|
90
|
+
return this.createDispatch({
|
|
91
|
+
taskId,
|
|
92
|
+
taskDescription,
|
|
93
|
+
capability,
|
|
94
|
+
tier,
|
|
95
|
+
repo: issue.repo,
|
|
96
|
+
issueNumber: issue.issueNumber,
|
|
97
|
+
options: {
|
|
98
|
+
...options,
|
|
99
|
+
backendType: options.backendType ?? issue.backendType,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Dispatch an agent container from a freeform task description.
|
|
105
|
+
*/
|
|
106
|
+
async dispatchFromTask(task, options = {}) {
|
|
107
|
+
const capability = (task.requiredCapabilities?.[0]) ??
|
|
108
|
+
this.detectCapabilityFromText(task.description);
|
|
109
|
+
const tier = this.estimateResourceTier(task.description);
|
|
110
|
+
return this.createDispatch({
|
|
111
|
+
taskId: task.taskId,
|
|
112
|
+
taskDescription: task.description,
|
|
113
|
+
capability,
|
|
114
|
+
tier,
|
|
115
|
+
repo: task.repo,
|
|
116
|
+
options: {
|
|
117
|
+
...options,
|
|
118
|
+
backendType: options.backendType ?? task.backendType,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Cancel a running dispatch by contract ID.
|
|
124
|
+
* Tears down the container and marks the contract as failed.
|
|
125
|
+
*/
|
|
126
|
+
async cancel(contractId) {
|
|
127
|
+
const record = this._dispatches.get(contractId);
|
|
128
|
+
if (!record) {
|
|
129
|
+
return; // Already gone
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const selectedBackend = this.resolveBackend(record.containerHandle.backendType);
|
|
133
|
+
await selectedBackend.teardown(record.containerHandle);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Best-effort teardown
|
|
137
|
+
}
|
|
138
|
+
this._dispatches.delete(contractId);
|
|
139
|
+
try {
|
|
140
|
+
await this.contractManager.updateContract({
|
|
141
|
+
contract_id: contractId,
|
|
142
|
+
status: 'failed',
|
|
143
|
+
metadata: { cancellation_reason: 'Cancelled by AgentContainerDispatcher.cancel()' },
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Best-effort contract update
|
|
148
|
+
}
|
|
149
|
+
this.emit('dispatch_cancelled', { contractId });
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* List all currently active dispatches.
|
|
153
|
+
*/
|
|
154
|
+
async getActiveDispatches() {
|
|
155
|
+
return Array.from(this._dispatches.values());
|
|
156
|
+
}
|
|
157
|
+
// ── Private helpers ────────────────────────────────────────────────────────
|
|
158
|
+
async createDispatch(params) {
|
|
159
|
+
const { taskId, taskDescription, capability, tier, repo, issueNumber, options } = params;
|
|
160
|
+
const contractId = randomUUID();
|
|
161
|
+
const resources = RESOURCE_PRESETS[tier];
|
|
162
|
+
const selectedBackend = this.resolveBackend(options.backendType);
|
|
163
|
+
// Select best available delegatee agent for the capability
|
|
164
|
+
const delegateeAgent = await this.selectDelegatee(capability);
|
|
165
|
+
// Create delegation contract
|
|
166
|
+
const contract = await this.contractManager.createContract({
|
|
167
|
+
contract_id: contractId,
|
|
168
|
+
delegator: this.delegatorAgent,
|
|
169
|
+
delegatee: delegateeAgent,
|
|
170
|
+
task_id: taskId,
|
|
171
|
+
task_description: taskDescription,
|
|
172
|
+
verification_policy: 'automated_test',
|
|
173
|
+
success_criteria: {
|
|
174
|
+
quality_threshold: 0.85,
|
|
175
|
+
required_checks: ['typecheck', 'lint', 'test'],
|
|
176
|
+
},
|
|
177
|
+
timeout_ms: options.maxExecutionTimeMs ?? resources.maxExecutionTimeMs,
|
|
178
|
+
});
|
|
179
|
+
// Build container config
|
|
180
|
+
const containerConfig = {
|
|
181
|
+
image: options.image ?? this.defaultImage,
|
|
182
|
+
repo,
|
|
183
|
+
taskId,
|
|
184
|
+
taskDescription,
|
|
185
|
+
contractId: contract.contract_id,
|
|
186
|
+
githubToken: this.githubToken,
|
|
187
|
+
issueNumber: issueNumber,
|
|
188
|
+
dryRun: options.dryRun,
|
|
189
|
+
taskScriptB64: options.taskScriptB64,
|
|
190
|
+
resourceLimits: {
|
|
191
|
+
maxMemory: resources.maxMemory,
|
|
192
|
+
maxCpus: resources.maxCpus,
|
|
193
|
+
maxExecutionTimeMs: options.maxExecutionTimeMs ?? resources.maxExecutionTimeMs,
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
// Provision container
|
|
197
|
+
const handle = await selectedBackend.provision(containerConfig);
|
|
198
|
+
// Link contract to container
|
|
199
|
+
this.contractManager.dispatchToContainer(contract.contract_id, {
|
|
200
|
+
containerId: handle.containerId,
|
|
201
|
+
containerName: handle.containerName,
|
|
202
|
+
startedAt: handle.startedAt.toISOString(),
|
|
203
|
+
backendType: handle.backendType,
|
|
204
|
+
});
|
|
205
|
+
const record = {
|
|
206
|
+
contractId: contract.contract_id,
|
|
207
|
+
taskId,
|
|
208
|
+
containerHandle: handle,
|
|
209
|
+
dispatchedAt: new Date().toISOString(),
|
|
210
|
+
issueNumber,
|
|
211
|
+
repo,
|
|
212
|
+
};
|
|
213
|
+
this._dispatches.set(contract.contract_id, record);
|
|
214
|
+
// Auto-cleanup when container exits
|
|
215
|
+
this.watchContainer(contract, handle, selectedBackend);
|
|
216
|
+
this.emit('dispatched', record);
|
|
217
|
+
return record;
|
|
218
|
+
}
|
|
219
|
+
/** Watch container exit and reconcile contract state. */
|
|
220
|
+
watchContainer(contract, handle, backend) {
|
|
221
|
+
backend.waitForExit(handle).then((result) => {
|
|
222
|
+
this._dispatches.delete(contract.contract_id);
|
|
223
|
+
const newStatus = result.success ? 'completed' : 'failed';
|
|
224
|
+
const existing = this.contractManager.getContractById(contract.contract_id);
|
|
225
|
+
const existingMetadata = existing?.metadata ?? {};
|
|
226
|
+
this.contractManager.updateContract({
|
|
227
|
+
contract_id: contract.contract_id,
|
|
228
|
+
status: newStatus,
|
|
229
|
+
metadata: {
|
|
230
|
+
...existingMetadata,
|
|
231
|
+
container_exit_code: result.exitCode,
|
|
232
|
+
container_execution_time_ms: result.executionTimeMs,
|
|
233
|
+
pull_request_url: result.pullRequestUrl,
|
|
234
|
+
timed_out: result.timedOut,
|
|
235
|
+
},
|
|
236
|
+
}).catch(() => { });
|
|
237
|
+
this.emit(result.success ? 'dispatch_completed' : 'dispatch_failed', {
|
|
238
|
+
contractId: contract.contract_id,
|
|
239
|
+
result,
|
|
240
|
+
});
|
|
241
|
+
}).catch(() => {
|
|
242
|
+
// Container watch failed — mark as failed
|
|
243
|
+
this._dispatches.delete(contract.contract_id);
|
|
244
|
+
const existing = this.contractManager.getContractById(contract.contract_id);
|
|
245
|
+
const existingMetadata = existing?.metadata ?? {};
|
|
246
|
+
this.contractManager.updateContract({
|
|
247
|
+
contract_id: contract.contract_id,
|
|
248
|
+
status: 'failed',
|
|
249
|
+
metadata: {
|
|
250
|
+
...existingMetadata,
|
|
251
|
+
container_watch_error: true,
|
|
252
|
+
},
|
|
253
|
+
}).catch(() => { });
|
|
254
|
+
this.emit('dispatch_failed', {
|
|
255
|
+
contractId: contract.contract_id,
|
|
256
|
+
result: { success: false, exitCode: -1 },
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
/** Resolve per-dispatch backend override, falling back to constructor backend. */
|
|
261
|
+
resolveBackend(overrideType) {
|
|
262
|
+
if (!overrideType)
|
|
263
|
+
return this.backend;
|
|
264
|
+
return this.backendsByType[overrideType] ?? this.backend;
|
|
265
|
+
}
|
|
266
|
+
/** Select the best delegatee for a given capability. */
|
|
267
|
+
async selectDelegatee(capability) {
|
|
268
|
+
if (this.capabilityRegistry) {
|
|
269
|
+
try {
|
|
270
|
+
const agents = await this.capabilityRegistry
|
|
271
|
+
.getAgentsForCapability?.(capability);
|
|
272
|
+
if (agents && agents.length > 0) {
|
|
273
|
+
return {
|
|
274
|
+
agent_id: agents[0].agentName,
|
|
275
|
+
agent_name: agents[0].agentName,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
// Fall through to default
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Default: map capability to a known workspace agent
|
|
284
|
+
const capabilityToAgent = {
|
|
285
|
+
code_review: 'security-engineer',
|
|
286
|
+
code_generation: 'fullstack-developer',
|
|
287
|
+
test_generation: 'test-engineer',
|
|
288
|
+
security_analysis: 'security-engineer',
|
|
289
|
+
performance_analysis: 'performance-profiler',
|
|
290
|
+
documentation: 'documentation-expert',
|
|
291
|
+
api_development: 'fullstack-developer',
|
|
292
|
+
ui_development: 'frontend-developer',
|
|
293
|
+
};
|
|
294
|
+
const agentName = capabilityToAgent[capability] ?? 'fullstack-developer';
|
|
295
|
+
return { agent_id: agentName, agent_name: agentName };
|
|
296
|
+
}
|
|
297
|
+
/** Detect the best capability from issue labels, then fall back to keywords. */
|
|
298
|
+
detectCapability(labels, text) {
|
|
299
|
+
for (const label of labels) {
|
|
300
|
+
const cap = LABEL_TO_CAPABILITY[label.toLowerCase()];
|
|
301
|
+
if (cap)
|
|
302
|
+
return cap;
|
|
303
|
+
}
|
|
304
|
+
return this.detectCapabilityFromText(text);
|
|
305
|
+
}
|
|
306
|
+
/** Keyword-based capability detection from free text. */
|
|
307
|
+
detectCapabilityFromText(text) {
|
|
308
|
+
for (const [pattern, cap] of KEYWORD_TO_CAPABILITY) {
|
|
309
|
+
if (pattern.test(text))
|
|
310
|
+
return cap;
|
|
311
|
+
}
|
|
312
|
+
return 'code_generation'; // safe default
|
|
313
|
+
}
|
|
314
|
+
/** Estimate a resource tier based on keywords in the task text. */
|
|
315
|
+
estimateResourceTier(text) {
|
|
316
|
+
const lower = text.toLowerCase();
|
|
317
|
+
if (/\brefactor all\b|\bmigrat\b|\blarge\b|\bcomp(lex|rehensive)\b/.test(lower))
|
|
318
|
+
return 'large';
|
|
319
|
+
if (/\bmultiple\b|\bseveral\b|\bcross.pack(age)?\b|\bmedium\b/.test(lower))
|
|
320
|
+
return 'medium';
|
|
321
|
+
return 'small';
|
|
322
|
+
}
|
|
323
|
+
/** Format a task description for the agent entrypoint. */
|
|
324
|
+
buildTaskDescription(issue) {
|
|
325
|
+
const labels = issue.labels?.length ? `Labels: ${issue.labels.join(', ')}\n` : '';
|
|
326
|
+
return `Issue #${issue.issueNumber}: ${issue.title}\n${labels}\n${issue.body ?? ''}`.trim();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=agent-container-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-container-dispatcher.js","sourceRoot":"","sources":["../../../../packages/ai/src/container/agent-container-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend factory — create ContainerExecutionBackend instances by type.
|
|
3
|
+
* TLP:CLEAR
|
|
4
|
+
*
|
|
5
|
+
* Provides a unified entry-point so callers don't need to import individual
|
|
6
|
+
* backend classes directly. Also exports a failover wrapper that automatically
|
|
7
|
+
* falls back to a secondary backend when the primary is unhealthy.
|
|
8
|
+
*
|
|
9
|
+
* @module container/backend-factory
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
import { type LocalDockerBackendOptions } from './local-docker-backend.js';
|
|
13
|
+
import { type RemoteDockerBackendOptions } from './remote-docker-backend.js';
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { type ContainerBackendType, type ContainerExecutionBackend } from './types.js';
|
|
16
|
+
export type BackendOptions = LocalDockerBackendOptions | RemoteDockerBackendOptions | Record<string, never>;
|
|
17
|
+
export declare const AgentContainersConfigSchema: z.ZodObject<{
|
|
18
|
+
backend: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
type: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
kubernetes: "kubernetes";
|
|
21
|
+
"local-docker": "local-docker";
|
|
22
|
+
"remote-docker": "remote-docker";
|
|
23
|
+
codespaces: "codespaces";
|
|
24
|
+
}>>>;
|
|
25
|
+
defaultBackend: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
kubernetes: "kubernetes";
|
|
27
|
+
"local-docker": "local-docker";
|
|
28
|
+
"remote-docker": "remote-docker";
|
|
29
|
+
codespaces: "codespaces";
|
|
30
|
+
}>>>;
|
|
31
|
+
localDocker: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
32
|
+
maxConcurrent: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
defaultImage: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$loose>>>;
|
|
35
|
+
remoteDocker: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
36
|
+
host: z.ZodOptional<z.ZodString>;
|
|
37
|
+
tlsCertPath: z.ZodOptional<z.ZodString>;
|
|
38
|
+
maxConcurrent: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
defaultImage: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$loose>>>;
|
|
41
|
+
kubernetes: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
42
|
+
namespace: z.ZodOptional<z.ZodString>;
|
|
43
|
+
kubeConfigPath: z.ZodOptional<z.ZodString>;
|
|
44
|
+
maxConcurrent: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
}, z.core.$loose>>>;
|
|
46
|
+
}, z.core.$strip>>;
|
|
47
|
+
defaults: z.ZodOptional<z.ZodObject<{
|
|
48
|
+
agentImage: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
49
|
+
baseBranch: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
50
|
+
resourceLimits: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
51
|
+
maxMemory: z.ZodString;
|
|
52
|
+
maxCpus: z.ZodNumber;
|
|
53
|
+
maxExecutionTimeMs: z.ZodNumber;
|
|
54
|
+
maxDiskSpace: z.ZodOptional<z.ZodString>;
|
|
55
|
+
}, z.core.$strict>>>;
|
|
56
|
+
}, z.core.$strip>>;
|
|
57
|
+
telemetry: z.ZodOptional<z.ZodObject<{
|
|
58
|
+
enabled: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
59
|
+
logDir: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
}, z.core.$loose>;
|
|
62
|
+
export type AgentContainersConfigLike = z.infer<typeof AgentContainersConfigSchema>;
|
|
63
|
+
/**
|
|
64
|
+
* Create a ContainerExecutionBackend of the given type.
|
|
65
|
+
*
|
|
66
|
+
* @param type - The backend variant to instantiate.
|
|
67
|
+
* @param options - Backend-specific constructor options.
|
|
68
|
+
*/
|
|
69
|
+
export declare function createBackend(type: ContainerBackendType, options?: BackendOptions): ContainerExecutionBackend;
|
|
70
|
+
/**
|
|
71
|
+
* Create backend from parsed agent-containers config object.
|
|
72
|
+
* Supports both `backend.type` and legacy `backend.defaultBackend`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function createBackendFromConfig(config: AgentContainersConfigLike): ContainerExecutionBackend;
|
|
75
|
+
/**
|
|
76
|
+
* Load backend from config JSON file path.
|
|
77
|
+
*/
|
|
78
|
+
export declare function loadBackendFromConfigFile(filePath: string): ContainerExecutionBackend;
|
|
79
|
+
/**
|
|
80
|
+
* Wrap a primary backend with an automatic failover to a secondary backend.
|
|
81
|
+
*
|
|
82
|
+
* On each operation, the wrapper first checks the primary backend's health.
|
|
83
|
+
* If unavailable, the operation is transparently delegated to the fallback.
|
|
84
|
+
*
|
|
85
|
+
* @param primary - The preferred backend.
|
|
86
|
+
* @param fallback - Used when primary healthCheck returns `available: false`.
|
|
87
|
+
*/
|
|
88
|
+
export declare function createBackendWithFailover(primary: ContainerExecutionBackend, fallback: ContainerExecutionBackend): ContainerExecutionBackend;
|
|
89
|
+
//# sourceMappingURL=backend-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-factory.d.ts","sourceRoot":"","sources":["../../../../packages/ai/src/container/backend-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAGlG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAO/B,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,yBAAyB,GAAG,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5G,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmDxB,CAAC;AAEjB,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEpF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,yBAAyB,CAe3B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,GAAG,yBAAyB,CA0BpG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,yBAAyB,CAIrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,yBAAyB,EAClC,QAAQ,EAAE,yBAAyB,GAClC,yBAAyB,CAE3B"}
|