@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,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebAssembly Plugin Runner
|
|
3
|
+
*
|
|
4
|
+
* Executes plugins compiled to WebAssembly using WASI (WebAssembly System Interface).
|
|
5
|
+
* Provides near-native performance with configurable linear memory limits,
|
|
6
|
+
* filesystem preopening, and environment variable injection.
|
|
7
|
+
*
|
|
8
|
+
* Specification: Plugin Runtime Isolation Specification (plugin-runtime-isolation)
|
|
9
|
+
*
|
|
10
|
+
* @module plugins/runtime/wasm-plugin-runner
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
* @date 2026-03-01
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
import { WASI } from 'node:wasi';
|
|
16
|
+
import { readFile } from 'node:fs/promises';
|
|
17
|
+
import { performance } from 'node:perf_hooks';
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Memory limit parsing
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
const MEMORY_REGEX = /^(\d+(?:\.\d+)?)\s*(kb?|mb?|gb?)/i;
|
|
22
|
+
/**
|
|
23
|
+
* Convert memory string to WASM linear memory pages (64KB per page)
|
|
24
|
+
* Examples: "16MB" → 256 pages, "64MB" → 1024 pages
|
|
25
|
+
*/
|
|
26
|
+
function memoryToPages(memoryStr) {
|
|
27
|
+
const match = MEMORY_REGEX.exec(memoryStr.trim());
|
|
28
|
+
if (!match) {
|
|
29
|
+
throw new Error(`Invalid memory value: "${memoryStr}". Expected format: "16MB", "64MB"`);
|
|
30
|
+
}
|
|
31
|
+
const amount = Number.parseFloat(match[1] ?? '16');
|
|
32
|
+
const unit = (match[2] ?? 'mb')[0].toLowerCase();
|
|
33
|
+
let bytes = 0;
|
|
34
|
+
switch (unit) {
|
|
35
|
+
case 'k':
|
|
36
|
+
bytes = amount * 1024;
|
|
37
|
+
break;
|
|
38
|
+
case 'm':
|
|
39
|
+
bytes = amount * 1024 * 1024;
|
|
40
|
+
break;
|
|
41
|
+
case 'g':
|
|
42
|
+
bytes = amount * 1024 * 1024 * 1024;
|
|
43
|
+
break;
|
|
44
|
+
default: bytes = amount * 1024 * 1024; // default MB
|
|
45
|
+
}
|
|
46
|
+
// WASM pages are 64KB (65536 bytes)
|
|
47
|
+
const pages = Math.ceil(bytes / 65536);
|
|
48
|
+
return pages;
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Duration parsing
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
const DURATION_REGEX = /^(\d+(?:\.\d+)?)(ms|s|m|h)$/i;
|
|
54
|
+
/**
|
|
55
|
+
* Parse a human-readable duration string to milliseconds.
|
|
56
|
+
* Supports: "30s", "5m", "1h", "500ms"
|
|
57
|
+
*/
|
|
58
|
+
function parseDurationMs(value) {
|
|
59
|
+
const match = DURATION_REGEX.exec(value.trim());
|
|
60
|
+
if (!match) {
|
|
61
|
+
throw new Error(`Invalid duration: "${value}". Expected format: "5m", "30s", "1h", "500ms"`);
|
|
62
|
+
}
|
|
63
|
+
const amount = Number.parseFloat(match[1] ?? '0');
|
|
64
|
+
const unit = (match[2] ?? 's').toLowerCase();
|
|
65
|
+
switch (unit) {
|
|
66
|
+
case 'ms': return Math.ceil(amount);
|
|
67
|
+
case 's': return Math.ceil(amount * 1_000);
|
|
68
|
+
case 'm': return Math.ceil(amount * 60_000);
|
|
69
|
+
case 'h': return Math.ceil(amount * 3_600_000);
|
|
70
|
+
default: return Math.ceil(amount * 1_000);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function isWasiArgumentCompatibilityError(err) {
|
|
74
|
+
if (!(err instanceof Error))
|
|
75
|
+
return false;
|
|
76
|
+
const message = err.message.toLowerCase();
|
|
77
|
+
return ('code' in err &&
|
|
78
|
+
err.code === 'ERR_INVALID_ARG_TYPE' &&
|
|
79
|
+
(message.includes('memory') || message.includes('instance')));
|
|
80
|
+
}
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// WebAssembly Plugin Runner
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
/**
|
|
85
|
+
* WebAssembly Plugin Runner
|
|
86
|
+
*
|
|
87
|
+
* Executes plugins compiled to WebAssembly with WASI support.
|
|
88
|
+
* Provides:
|
|
89
|
+
* - Linear memory limits (configurable initial/max pages)
|
|
90
|
+
* - Filesystem access control via preopens
|
|
91
|
+
* - Environment variable injection
|
|
92
|
+
* - Execution time limits with timeout
|
|
93
|
+
* - Isolated execution (no network access by default)
|
|
94
|
+
*
|
|
95
|
+
* Performance Target: <5% overhead vs native execution
|
|
96
|
+
*/
|
|
97
|
+
export class WasmPluginRunner {
|
|
98
|
+
/** Check if WebAssembly support is available in the current Node.js version */
|
|
99
|
+
static async probe() {
|
|
100
|
+
try {
|
|
101
|
+
// Check if WASI is available
|
|
102
|
+
if (typeof WASI === 'undefined') {
|
|
103
|
+
return {
|
|
104
|
+
available: false,
|
|
105
|
+
error: 'WASI not available. Node.js 18+ required.',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Check if WebAssembly is available
|
|
109
|
+
if (typeof WebAssembly === 'undefined') {
|
|
110
|
+
return {
|
|
111
|
+
available: false,
|
|
112
|
+
error: 'WebAssembly not available in this environment.',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Verify we can create a WASI instance
|
|
116
|
+
const testWasi = new WASI({
|
|
117
|
+
version: 'preview1',
|
|
118
|
+
args: [],
|
|
119
|
+
env: {},
|
|
120
|
+
});
|
|
121
|
+
if (!testWasi) {
|
|
122
|
+
throw new Error('WASI initialization failed');
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
available: true,
|
|
126
|
+
version: `Node.js ${process.version} with WASI preview1`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
return {
|
|
131
|
+
available: false,
|
|
132
|
+
error: err instanceof Error ? err.message : String(err),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Load and compile a WebAssembly module from disk
|
|
138
|
+
*
|
|
139
|
+
* @param config - WASM execution configuration
|
|
140
|
+
* @returns Compiled module instance with WASI
|
|
141
|
+
*/
|
|
142
|
+
static async loadModule(config) {
|
|
143
|
+
// Read WASM file
|
|
144
|
+
const wasmBuffer = await readFile(config.wasmPath);
|
|
145
|
+
// Configure WASI with preopens and env
|
|
146
|
+
const wasi = new WASI({
|
|
147
|
+
version: 'preview1',
|
|
148
|
+
args: config.args ?? [],
|
|
149
|
+
env: config.env ?? {},
|
|
150
|
+
preopens: config.preopens ?? {},
|
|
151
|
+
returnOnExit: true, // Return instead of process.exit()
|
|
152
|
+
});
|
|
153
|
+
// Compile the module
|
|
154
|
+
const module = await WebAssembly.compile(wasmBuffer);
|
|
155
|
+
// Calculate memory limits
|
|
156
|
+
const initialPages = config.initialMemoryPages ??
|
|
157
|
+
memoryToPages(config.resourceLimits?.maxMemory ?? '16MB');
|
|
158
|
+
const maxPages = config.maxMemoryPages ??
|
|
159
|
+
memoryToPages(config.resourceLimits?.maxMemory ?? '64MB');
|
|
160
|
+
// Create linear memory with limits
|
|
161
|
+
const memory = new WebAssembly.Memory({
|
|
162
|
+
initial: initialPages,
|
|
163
|
+
maximum: maxPages,
|
|
164
|
+
shared: false,
|
|
165
|
+
});
|
|
166
|
+
// Instantiate with WASI imports and memory
|
|
167
|
+
const instance = await WebAssembly.instantiate(module, {
|
|
168
|
+
wasi_snapshot_preview1: wasi.wasiImport,
|
|
169
|
+
env: { memory },
|
|
170
|
+
});
|
|
171
|
+
return { module, instance, wasi };
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Execute a WebAssembly plugin with resource limits and timeout
|
|
175
|
+
*
|
|
176
|
+
* @param config - WASM execution configuration
|
|
177
|
+
* @returns Execution result with stdout, stderr, exit code, and timing
|
|
178
|
+
*/
|
|
179
|
+
static async run(config) {
|
|
180
|
+
const startTime = performance.now();
|
|
181
|
+
let timedOut = false;
|
|
182
|
+
let exitCode = null;
|
|
183
|
+
const stdoutChunks = [];
|
|
184
|
+
const stderrChunks = [];
|
|
185
|
+
try {
|
|
186
|
+
// Load and compile module
|
|
187
|
+
const { instance, wasi } = await this.loadModule(config);
|
|
188
|
+
// Parse execution time limit
|
|
189
|
+
const timeoutMs = parseDurationMs(config.resourceLimits?.maxExecutionTime ?? '5m');
|
|
190
|
+
// Create timeout promise
|
|
191
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
192
|
+
setTimeout(() => {
|
|
193
|
+
timedOut = true;
|
|
194
|
+
reject(new Error('Execution time limit exceeded'));
|
|
195
|
+
}, timeoutMs);
|
|
196
|
+
});
|
|
197
|
+
// Capture WASI stdout/stderr
|
|
198
|
+
// Note: WASI writes to process.stdout/stderr by default
|
|
199
|
+
// For full capture, we'd need to override fd_write in imports
|
|
200
|
+
// For now, we'll use the return code from WASI.start()
|
|
201
|
+
// Execute the WASM module with timeout
|
|
202
|
+
const executionPromise = new Promise((resolve, reject) => {
|
|
203
|
+
try {
|
|
204
|
+
// Prefer WASI command execution path (supports proc_exit and
|
|
205
|
+
// full command-module semantics).
|
|
206
|
+
const result = wasi.start(instance);
|
|
207
|
+
exitCode = typeof result === 'number' ? result : 0;
|
|
208
|
+
resolve(exitCode);
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
// Handle WASI exit errors only when numeric exit code is present.
|
|
212
|
+
if (err &&
|
|
213
|
+
typeof err === 'object' &&
|
|
214
|
+
'code' in err &&
|
|
215
|
+
typeof err.code === 'number') {
|
|
216
|
+
exitCode = err.code;
|
|
217
|
+
resolve(exitCode);
|
|
218
|
+
}
|
|
219
|
+
else if (isWasiArgumentCompatibilityError(err)) {
|
|
220
|
+
// Some Node.js versions throw when wasi.start() is used with
|
|
221
|
+
// modules that don't expose linear memory. Fallback to direct
|
|
222
|
+
// _start invocation for those compatibility cases.
|
|
223
|
+
try {
|
|
224
|
+
const startExport = instance.exports._start;
|
|
225
|
+
if (typeof startExport !== 'function') {
|
|
226
|
+
reject(new Error('WASM module does not export a callable _start function'));
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const fallbackResult = startExport();
|
|
230
|
+
exitCode = typeof fallbackResult === 'number' ? fallbackResult : 0;
|
|
231
|
+
resolve(exitCode);
|
|
232
|
+
}
|
|
233
|
+
catch (fallbackErr) {
|
|
234
|
+
if (fallbackErr &&
|
|
235
|
+
typeof fallbackErr === 'object' &&
|
|
236
|
+
'code' in fallbackErr &&
|
|
237
|
+
typeof fallbackErr.code === 'number') {
|
|
238
|
+
exitCode = fallbackErr.code;
|
|
239
|
+
resolve(exitCode);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
reject(fallbackErr);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// Real runtime error (not a clean WASI exit)
|
|
248
|
+
reject(err);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
// Race between execution and timeout
|
|
253
|
+
exitCode = await Promise.race([executionPromise, timeoutPromise]);
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
// Execution failed or timed out
|
|
257
|
+
if (timedOut) {
|
|
258
|
+
exitCode = null; // Killed by timeout
|
|
259
|
+
stderrChunks.push('Error: Execution time limit exceeded\n');
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
exitCode = 1;
|
|
263
|
+
stderrChunks.push(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const endTime = performance.now();
|
|
267
|
+
const executionTimeMs = Math.ceil(endTime - startTime);
|
|
268
|
+
return {
|
|
269
|
+
exitCode,
|
|
270
|
+
stdout: stdoutChunks.join(''),
|
|
271
|
+
stderr: stderrChunks.join(''),
|
|
272
|
+
timedOut,
|
|
273
|
+
containerName: `wasm-${Date.now()}`, // Not a real container, but kept for API consistency
|
|
274
|
+
executionTimeMs,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Create a WASM execution config from a standard SandboxConfig
|
|
279
|
+
*
|
|
280
|
+
* This adapter allows using WasmPluginRunner with the same config
|
|
281
|
+
* interface as DockerPluginRunner.
|
|
282
|
+
*
|
|
283
|
+
* @param config - Standard sandbox config
|
|
284
|
+
* @param wasmPath - Path to the compiled .wasm file
|
|
285
|
+
* @returns WASM-specific execution config
|
|
286
|
+
*/
|
|
287
|
+
static fromSandboxConfig(config, wasmPath) {
|
|
288
|
+
return {
|
|
289
|
+
wasmPath,
|
|
290
|
+
env: config.env,
|
|
291
|
+
resourceLimits: config.resourceLimits,
|
|
292
|
+
preopens: config.writableMounts?.reduce((acc, mount) => {
|
|
293
|
+
// Parse "host:container" format into preopens
|
|
294
|
+
const [host, container] = mount.split(':');
|
|
295
|
+
if (host && container) {
|
|
296
|
+
acc[container] = host;
|
|
297
|
+
}
|
|
298
|
+
return acc;
|
|
299
|
+
}, {}) ?? {},
|
|
300
|
+
args: config.command, // Use command array as WASM args
|
|
301
|
+
// WASM-specific settings
|
|
302
|
+
initialMemoryPages: undefined, // Will use maxMemory from resourceLimits
|
|
303
|
+
maxMemoryPages: undefined, // Will use maxMemory from resourceLimits
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=wasm-plugin-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-plugin-runner.js","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/runtime/wasm-plugin-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Security Module
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade multi-layer security scanning pipeline for the DCYFR
|
|
5
|
+
* plugin marketplace.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/security
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
* @date 2026-02-28
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
export { scanPlugin } from './plugin-security-scanner.js';
|
|
13
|
+
export type { ScanContext } from './plugin-security-scanner.js';
|
|
14
|
+
export { generateSBOM } from './sbom-generator.js';
|
|
15
|
+
export { scanVulnerabilities } from './vulnerability-scanner.js';
|
|
16
|
+
export { detectSecrets } from './secret-detector.js';
|
|
17
|
+
export { fetchCodeQuality } from './sonarcloud-client.js';
|
|
18
|
+
export { scanMalware } from './malware-scanner.js';
|
|
19
|
+
export { verifySignature } from './signature-verifier.js';
|
|
20
|
+
export { checkLicenses, APPROVED_LICENSES, INCOMPATIBLE_LICENSES } from './license-checker.js';
|
|
21
|
+
export { calculateTrustScore } from './trust-score.js';
|
|
22
|
+
export type { TrustScoreInput, MaintenanceInput, CommunityInput } from './trust-score.js';
|
|
23
|
+
export type { SBOMComponent, SBOMResult, Severity, VulnerabilityFinding, VulnerabilityCounts, VulnerabilityScanResult, SecretLocation, SecretDetectionResult, CodeQualityMetrics, CodeQualityResult, MalwareSignature, MalwareScanResult, SignatureVerificationResult, LicenseComplianceResult, TrustScoreDimensions, TrustScore, PluginScanInput, PluginSecurityReport, } from './types.js';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/security/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG1F,YAAY,EAEV,aAAa,EACb,UAAU,EAEV,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EAEvB,cAAc,EACd,qBAAqB,EAErB,kBAAkB,EAClB,iBAAiB,EAEjB,gBAAgB,EAChB,iBAAiB,EAEjB,2BAA2B,EAE3B,uBAAuB,EAEvB,oBAAoB,EACpB,UAAU,EAEV,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Security Module
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade multi-layer security scanning pipeline for the DCYFR
|
|
5
|
+
* plugin marketplace.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/security
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
* @date 2026-02-28
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
// Core orchestrator
|
|
13
|
+
export { scanPlugin } from './plugin-security-scanner.js';
|
|
14
|
+
// Individual scanners (for direct use or testing)
|
|
15
|
+
export { generateSBOM } from './sbom-generator.js';
|
|
16
|
+
export { scanVulnerabilities } from './vulnerability-scanner.js';
|
|
17
|
+
export { detectSecrets } from './secret-detector.js';
|
|
18
|
+
export { fetchCodeQuality } from './sonarcloud-client.js';
|
|
19
|
+
export { scanMalware } from './malware-scanner.js';
|
|
20
|
+
export { verifySignature } from './signature-verifier.js';
|
|
21
|
+
export { checkLicenses, APPROVED_LICENSES, INCOMPATIBLE_LICENSES } from './license-checker.js';
|
|
22
|
+
export { calculateTrustScore } from './trust-score.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/security/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1D,kDAAkD;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License Compliance Checker
|
|
3
|
+
*
|
|
4
|
+
* Validates plugin licenses against DCYFR-approved SPDX identifiers using
|
|
5
|
+
* npm-license-checker or by parsing package.json directly.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/security/license-checker
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
* @date 2026-02-28
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import type { LicenseComplianceResult } from './types.js';
|
|
13
|
+
/** SPDX identifiers unconditionally approved for use in DCYFR plugins */
|
|
14
|
+
export declare const APPROVED_LICENSES: Set<string>;
|
|
15
|
+
/** SPDX identifiers that are incompatible with Apache-2.0 workspace */
|
|
16
|
+
export declare const INCOMPATIBLE_LICENSES: Set<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Check license compliance for a plugin directory.
|
|
19
|
+
*
|
|
20
|
+
* Tries `npx license-checker --json` first; falls back to reading
|
|
21
|
+
* `package.json` directly when license-checker is unavailable.
|
|
22
|
+
*
|
|
23
|
+
* @param pluginPath Absolute path to the extracted plugin directory
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkLicenses(pluginPath: string): Promise<LicenseComplianceResult>;
|
|
26
|
+
//# sourceMappingURL=license-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license-checker.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/security/license-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAQ1D,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,aAU5B,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,aAYhC,CAAC;AA2EH;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,CAAC,CAmClC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License Compliance Checker
|
|
3
|
+
*
|
|
4
|
+
* Validates plugin licenses against DCYFR-approved SPDX identifiers using
|
|
5
|
+
* npm-license-checker or by parsing package.json directly.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/security/license-checker
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
* @date 2026-02-28
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import { execFile } from 'node:child_process';
|
|
13
|
+
import { promisify } from 'node:util';
|
|
14
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
const execFileAsync = promisify(execFile);
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Approved & incompatible license lists
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/** SPDX identifiers unconditionally approved for use in DCYFR plugins */
|
|
21
|
+
export const APPROVED_LICENSES = new Set([
|
|
22
|
+
'MIT',
|
|
23
|
+
'ISC',
|
|
24
|
+
'Apache-2.0',
|
|
25
|
+
'BSD-2-Clause',
|
|
26
|
+
'BSD-3-Clause',
|
|
27
|
+
'CC0-1.0',
|
|
28
|
+
'Unlicense',
|
|
29
|
+
'0BSD',
|
|
30
|
+
'BlueOak-1.0.0',
|
|
31
|
+
]);
|
|
32
|
+
/** SPDX identifiers that are incompatible with Apache-2.0 workspace */
|
|
33
|
+
export const INCOMPATIBLE_LICENSES = new Set([
|
|
34
|
+
'GPL-2.0',
|
|
35
|
+
'GPL-2.0-only',
|
|
36
|
+
'GPL-2.0-or-later',
|
|
37
|
+
'GPL-3.0',
|
|
38
|
+
'GPL-3.0-only',
|
|
39
|
+
'GPL-3.0-or-later',
|
|
40
|
+
'AGPL-3.0',
|
|
41
|
+
'AGPL-3.0-only',
|
|
42
|
+
'AGPL-3.0-or-later',
|
|
43
|
+
'SSPL-1.0',
|
|
44
|
+
'BUSL-1.1',
|
|
45
|
+
]);
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Helpers
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
function normaliseSpdx(raw) {
|
|
50
|
+
// Handle compound: "MIT AND Apache-2.0" or "(MIT OR Apache-2.0)"
|
|
51
|
+
return raw
|
|
52
|
+
.replaceAll(/[()]/g, '')
|
|
53
|
+
.split(/\s+(?:AND|OR)\s+/)
|
|
54
|
+
.map((s) => s.trim())
|
|
55
|
+
.filter(Boolean);
|
|
56
|
+
}
|
|
57
|
+
function analyseDetected(detected) {
|
|
58
|
+
const incompatible = [];
|
|
59
|
+
const unknown = [];
|
|
60
|
+
for (const lic of detected) {
|
|
61
|
+
if (INCOMPATIBLE_LICENSES.has(lic)) {
|
|
62
|
+
incompatible.push(lic);
|
|
63
|
+
}
|
|
64
|
+
else if (!APPROVED_LICENSES.has(lic)) {
|
|
65
|
+
unknown.push(lic);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const compliant = incompatible.length === 0 && detected.length > 0;
|
|
69
|
+
return { incompatible, unknown, compliant };
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Public API
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
async function collectFromLicenseChecker(pluginPath, acc) {
|
|
75
|
+
const { stdout } = await execFileAsync('npx', ['license-checker', '--json', '--production'], { cwd: pluginPath });
|
|
76
|
+
const entries = JSON.parse(stdout);
|
|
77
|
+
for (const entry of Object.values(entries)) {
|
|
78
|
+
if (entry.licenses) {
|
|
79
|
+
for (const lic of normaliseSpdx(entry.licenses))
|
|
80
|
+
acc.add(lic);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function collectFromPackageJson(pluginPath, acc) {
|
|
85
|
+
const pkgPath = join(pluginPath, 'package.json');
|
|
86
|
+
if (!existsSync(pkgPath))
|
|
87
|
+
return undefined;
|
|
88
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
89
|
+
if (pkg.license) {
|
|
90
|
+
for (const lic of normaliseSpdx(pkg.license))
|
|
91
|
+
acc.add(lic);
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check license compliance for a plugin directory.
|
|
97
|
+
*
|
|
98
|
+
* Tries `npx license-checker --json` first; falls back to reading
|
|
99
|
+
* `package.json` directly when license-checker is unavailable.
|
|
100
|
+
*
|
|
101
|
+
* @param pluginPath Absolute path to the extracted plugin directory
|
|
102
|
+
*/
|
|
103
|
+
export async function checkLicenses(pluginPath) {
|
|
104
|
+
const allDetected = new Set();
|
|
105
|
+
try {
|
|
106
|
+
await collectFromLicenseChecker(pluginPath, allDetected);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
try {
|
|
110
|
+
collectFromPackageJson(pluginPath, allDetected);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return {
|
|
114
|
+
success: false,
|
|
115
|
+
compliant: false,
|
|
116
|
+
detected: [],
|
|
117
|
+
incompatible: [],
|
|
118
|
+
unknown: [],
|
|
119
|
+
error: 'Could not parse package.json',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (allDetected.size === 0) {
|
|
124
|
+
return {
|
|
125
|
+
success: true,
|
|
126
|
+
compliant: false,
|
|
127
|
+
detected: [],
|
|
128
|
+
incompatible: [],
|
|
129
|
+
unknown: ['UNLICENSED'],
|
|
130
|
+
error: 'No license declared — required for official marketplace submission',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const detected = [...allDetected];
|
|
134
|
+
const { incompatible, unknown, compliant } = analyseDetected(detected);
|
|
135
|
+
return { success: true, compliant, detected, incompatible, unknown };
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=license-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license-checker.js","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/security/license-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Malware Scanner
|
|
3
|
+
*
|
|
4
|
+
* Scans plugin files for known malware signatures using ClamAV (clamscan).
|
|
5
|
+
* Also performs a lightweight pattern check for dangerous shell script patterns.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/security/malware-scanner
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
* @date 2026-02-28
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import type { MalwareScanResult } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Scan a plugin directory for malware using ClamAV.
|
|
15
|
+
*
|
|
16
|
+
* @param pluginPath Absolute path to the extracted plugin directory
|
|
17
|
+
*/
|
|
18
|
+
export declare function scanMalware(pluginPath: string): Promise<MalwareScanResult>;
|
|
19
|
+
//# sourceMappingURL=malware-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"malware-scanner.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/security/malware-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AA4EtE;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,CAAC,CA+B5B"}
|