@dcyfr/ai 1.0.4 ā 2.1.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 +106 -0
- package/README.md +381 -9
- package/dist/ai/agents/agent-loader.d.ts +12 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -1
- package/dist/ai/agents/agent-loader.js +74 -65
- package/dist/ai/agents/agent-loader.js.map +1 -1
- package/dist/ai/agents/agent-registry.d.ts +2 -0
- package/dist/ai/agents/agent-registry.d.ts.map +1 -1
- package/dist/ai/agents/agent-registry.js +15 -14
- package/dist/ai/agents/agent-registry.js.map +1 -1
- package/dist/ai/agents/agent-router.d.ts +20 -5
- package/dist/ai/agents/agent-router.d.ts.map +1 -1
- package/dist/ai/agents/agent-router.js +89 -43
- package/dist/ai/agents/agent-router.js.map +1 -1
- package/dist/ai/agents/index.d.ts +6 -1
- package/dist/ai/agents/index.d.ts.map +1 -1
- package/dist/ai/agents/index.js +9 -3
- package/dist/ai/agents/index.js.map +1 -1
- package/dist/ai/agents/instruction-template.d.ts +45 -0
- package/dist/ai/agents/instruction-template.d.ts.map +1 -0
- package/dist/ai/agents/instruction-template.js +197 -0
- package/dist/ai/agents/instruction-template.js.map +1 -0
- package/dist/ai/agents/persona-resolver.d.ts +90 -0
- package/dist/ai/agents/persona-resolver.d.ts.map +1 -0
- package/dist/ai/agents/persona-resolver.js +121 -0
- package/dist/ai/agents/persona-resolver.js.map +1 -0
- package/dist/ai/agents/schema.d.ts +166 -0
- package/dist/ai/agents/schema.d.ts.map +1 -0
- package/dist/ai/agents/schema.js +94 -0
- package/dist/ai/agents/schema.js.map +1 -0
- package/dist/ai/agents/types.d.ts +102 -0
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/agents-builtin/architecture/index.js +3 -3
- package/dist/ai/agents-builtin/content/index.js +1 -1
- package/dist/ai/agents-builtin/data/index.js +1 -1
- package/dist/ai/agents-builtin/development/index.js +4 -4
- package/dist/ai/agents-builtin/devops/index.js +1 -1
- package/dist/ai/agents-builtin/index.js +33 -33
- package/dist/ai/agents-builtin/performance/index.js +1 -1
- package/dist/ai/agents-builtin/research/index.js +1 -1
- package/dist/ai/agents-builtin/security/index.js +1 -1
- package/dist/ai/agents-builtin/testing/index.js +2 -2
- package/dist/ai/config/loader.d.ts.map +1 -1
- package/dist/ai/config/loader.js +6 -3
- package/dist/ai/config/loader.js.map +1 -1
- package/dist/ai/config/schema.d.ts +242 -1156
- package/dist/ai/config/schema.d.ts.map +1 -1
- package/dist/ai/config/schema.js +69 -20
- package/dist/ai/config/schema.js.map +1 -1
- package/dist/ai/core/provider-registry.d.ts +32 -0
- package/dist/ai/core/provider-registry.d.ts.map +1 -1
- package/dist/ai/core/provider-registry.js +189 -14
- package/dist/ai/core/provider-registry.js.map +1 -1
- package/dist/ai/core/telemetry-engine.d.ts +26 -0
- package/dist/ai/core/telemetry-engine.d.ts.map +1 -1
- package/dist/ai/core/telemetry-engine.js +81 -1
- package/dist/ai/core/telemetry-engine.js.map +1 -1
- package/dist/ai/delegation/agent-registry.d.ts +143 -0
- package/dist/ai/delegation/agent-registry.d.ts.map +1 -0
- package/dist/ai/delegation/agent-registry.js +231 -0
- package/dist/ai/delegation/agent-registry.js.map +1 -0
- package/dist/ai/delegation/blast-radius-tracker.d.ts +65 -0
- package/dist/ai/delegation/blast-radius-tracker.d.ts.map +1 -0
- package/dist/ai/delegation/blast-radius-tracker.js +81 -0
- package/dist/ai/delegation/blast-radius-tracker.js.map +1 -0
- package/dist/ai/delegation/capability-bootstrap.d.ts +40 -0
- package/dist/ai/delegation/capability-bootstrap.d.ts.map +1 -0
- package/dist/ai/delegation/capability-bootstrap.js +431 -0
- package/dist/ai/delegation/capability-bootstrap.js.map +1 -0
- package/dist/ai/delegation/capability-registry.d.ts +81 -0
- package/dist/ai/delegation/capability-registry.d.ts.map +1 -0
- package/dist/ai/delegation/capability-registry.js +339 -0
- package/dist/ai/delegation/capability-registry.js.map +1 -0
- package/dist/ai/delegation/chain-tracker.d.ts +152 -0
- package/dist/ai/delegation/chain-tracker.d.ts.map +1 -0
- package/dist/ai/delegation/chain-tracker.js +336 -0
- package/dist/ai/delegation/chain-tracker.js.map +1 -0
- package/dist/ai/delegation/circuit-breaker.d.ts +59 -0
- package/dist/ai/delegation/circuit-breaker.d.ts.map +1 -0
- package/dist/ai/delegation/circuit-breaker.js +153 -0
- package/dist/ai/delegation/circuit-breaker.js.map +1 -0
- package/dist/ai/delegation/contract-manager.d.ts +415 -0
- package/dist/ai/delegation/contract-manager.d.ts.map +1 -0
- package/dist/ai/delegation/contract-manager.js +1258 -0
- package/dist/ai/delegation/contract-manager.js.map +1 -0
- package/dist/ai/delegation/delegation-manager.d.ts +505 -0
- package/dist/ai/delegation/delegation-manager.d.ts.map +1 -0
- package/dist/ai/delegation/delegation-manager.js +773 -0
- package/dist/ai/delegation/delegation-manager.js.map +1 -0
- package/dist/ai/delegation/event-schemas.d.ts +101 -0
- package/dist/ai/delegation/event-schemas.d.ts.map +1 -0
- package/dist/ai/delegation/event-schemas.js +59 -0
- package/dist/ai/delegation/event-schemas.js.map +1 -0
- package/dist/ai/delegation/execution-mode-dashboard.d.ts +109 -0
- package/dist/ai/delegation/execution-mode-dashboard.d.ts.map +1 -0
- package/dist/ai/delegation/execution-mode-dashboard.js +167 -0
- package/dist/ai/delegation/execution-mode-dashboard.js.map +1 -0
- package/dist/ai/delegation/feature-flags.d.ts +191 -0
- package/dist/ai/delegation/feature-flags.d.ts.map +1 -0
- package/dist/ai/delegation/feature-flags.js +332 -0
- package/dist/ai/delegation/feature-flags.js.map +1 -0
- package/dist/ai/delegation/index.d.ts +51 -0
- package/dist/ai/delegation/index.d.ts.map +1 -0
- package/dist/ai/delegation/index.js +39 -0
- package/dist/ai/delegation/index.js.map +1 -0
- package/dist/ai/delegation/middleware/chain-depth-middleware.d.ts +39 -0
- package/dist/ai/delegation/middleware/chain-depth-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/chain-depth-middleware.js +77 -0
- package/dist/ai/delegation/middleware/chain-depth-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/chain-tracker-middleware.d.ts +46 -0
- package/dist/ai/delegation/middleware/chain-tracker-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/chain-tracker-middleware.js +89 -0
- package/dist/ai/delegation/middleware/chain-tracker-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/content-policy-middleware.d.ts +31 -0
- package/dist/ai/delegation/middleware/content-policy-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/content-policy-middleware.js +82 -0
- package/dist/ai/delegation/middleware/content-policy-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/feature-flag-middleware.d.ts +46 -0
- package/dist/ai/delegation/middleware/feature-flag-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/feature-flag-middleware.js +59 -0
- package/dist/ai/delegation/middleware/feature-flag-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/identity-middleware.d.ts +23 -0
- package/dist/ai/delegation/middleware/identity-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/identity-middleware.js +64 -0
- package/dist/ai/delegation/middleware/identity-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/permissions-middleware.d.ts +48 -0
- package/dist/ai/delegation/middleware/permissions-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/permissions-middleware.js +107 -0
- package/dist/ai/delegation/middleware/permissions-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/rate-limiter-middleware.d.ts +38 -0
- package/dist/ai/delegation/middleware/rate-limiter-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/rate-limiter-middleware.js +65 -0
- package/dist/ai/delegation/middleware/rate-limiter-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/reputation-middleware.d.ts +39 -0
- package/dist/ai/delegation/middleware/reputation-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/reputation-middleware.js +75 -0
- package/dist/ai/delegation/middleware/reputation-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/resource-limiter-middleware.d.ts +52 -0
- package/dist/ai/delegation/middleware/resource-limiter-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/resource-limiter-middleware.js +112 -0
- package/dist/ai/delegation/middleware/resource-limiter-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/threat-validator-middleware.d.ts +23 -0
- package/dist/ai/delegation/middleware/threat-validator-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/threat-validator-middleware.js +83 -0
- package/dist/ai/delegation/middleware/threat-validator-middleware.js.map +1 -0
- package/dist/ai/delegation/middleware/tlp-middleware.d.ts +23 -0
- package/dist/ai/delegation/middleware/tlp-middleware.d.ts.map +1 -0
- package/dist/ai/delegation/middleware/tlp-middleware.js +59 -0
- package/dist/ai/delegation/middleware/tlp-middleware.js.map +1 -0
- package/dist/ai/delegation/monitoring.d.ts +298 -0
- package/dist/ai/delegation/monitoring.d.ts.map +1 -0
- package/dist/ai/delegation/monitoring.js +584 -0
- package/dist/ai/delegation/monitoring.js.map +1 -0
- package/dist/ai/delegation/security-middleware-chain.d.ts +71 -0
- package/dist/ai/delegation/security-middleware-chain.d.ts.map +1 -0
- package/dist/ai/delegation/security-middleware-chain.js +163 -0
- package/dist/ai/delegation/security-middleware-chain.js.map +1 -0
- package/dist/ai/delegation/session-checkpoint.d.ts +77 -0
- package/dist/ai/delegation/session-checkpoint.d.ts.map +1 -0
- package/dist/ai/delegation/session-checkpoint.js +131 -0
- package/dist/ai/delegation/session-checkpoint.js.map +1 -0
- package/dist/ai/delegation/session-manager.d.ts +131 -0
- package/dist/ai/delegation/session-manager.d.ts.map +1 -0
- package/dist/ai/delegation/session-manager.js +243 -0
- package/dist/ai/delegation/session-manager.js.map +1 -0
- package/dist/ai/delegation/session-queue.d.ts +95 -0
- package/dist/ai/delegation/session-queue.d.ts.map +1 -0
- package/dist/ai/delegation/session-queue.js +136 -0
- package/dist/ai/delegation/session-queue.js.map +1 -0
- package/dist/ai/delegation/timeout-watchdog.d.ts +60 -0
- package/dist/ai/delegation/timeout-watchdog.d.ts.map +1 -0
- package/dist/ai/delegation/timeout-watchdog.js +100 -0
- package/dist/ai/delegation/timeout-watchdog.js.map +1 -0
- package/dist/ai/examples/integration-demo.d.ts +27 -0
- package/dist/ai/examples/integration-demo.d.ts.map +1 -0
- package/dist/ai/examples/integration-demo.js +536 -0
- package/dist/ai/examples/integration-demo.js.map +1 -0
- package/dist/ai/index.d.ts +25 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +31 -11
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/servers/analytics/index.js +67 -11
- 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/content-manager/index.js +50 -4
- package/dist/ai/mcp/servers/content-manager/index.js.map +1 -1
- package/dist/ai/mcp/servers/delegation-monitor/index.d.ts +36 -0
- package/dist/ai/mcp/servers/delegation-monitor/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/delegation-monitor/index.js +757 -0
- package/dist/ai/mcp/servers/delegation-monitor/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -1
- package/dist/ai/mcp/servers/design-tokens/index.js +62 -39
- package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -1
- package/dist/ai/mcp/servers/promptintel/index.js +15 -3
- 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 +3 -1
- 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 +54 -47
- package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -1
- package/dist/ai/mcp/servers/shared/types.d.ts +9 -0
- package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -1
- package/dist/ai/mcp/servers/shared/utils.d.ts +9 -1
- package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -1
- package/dist/ai/mcp/servers/shared/utils.js +52 -2
- package/dist/ai/mcp/servers/shared/utils.js.map +1 -1
- package/dist/ai/memory/config.d.ts +18 -3
- package/dist/ai/memory/config.d.ts.map +1 -1
- package/dist/ai/memory/config.js +61 -15
- package/dist/ai/memory/config.js.map +1 -1
- package/dist/ai/memory/dcyfr-memory.d.ts +4 -0
- package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -1
- package/dist/ai/memory/dcyfr-memory.js +44 -6
- package/dist/ai/memory/dcyfr-memory.js.map +1 -1
- package/dist/ai/memory/mem0-client.d.ts.map +1 -1
- package/dist/ai/memory/mem0-client.js +53 -14
- package/dist/ai/memory/mem0-client.js.map +1 -1
- package/dist/ai/permissions/attenuation-engine.d.ts +159 -0
- package/dist/ai/permissions/attenuation-engine.d.ts.map +1 -0
- package/dist/ai/permissions/attenuation-engine.js +511 -0
- package/dist/ai/permissions/attenuation-engine.js.map +1 -0
- package/dist/ai/plugins/plugin-loader.d.ts +4 -0
- package/dist/ai/plugins/plugin-loader.d.ts.map +1 -1
- package/dist/ai/plugins/plugin-loader.js +28 -28
- package/dist/ai/plugins/plugin-loader.js.map +1 -1
- package/dist/ai/reputation/execution-mode-reputation.d.ts +104 -0
- package/dist/ai/reputation/execution-mode-reputation.d.ts.map +1 -0
- package/dist/ai/reputation/execution-mode-reputation.js +142 -0
- package/dist/ai/reputation/execution-mode-reputation.js.map +1 -0
- package/dist/ai/reputation/reputation-engine.d.ts +204 -0
- package/dist/ai/reputation/reputation-engine.d.ts.map +1 -0
- package/dist/ai/reputation/reputation-engine.js +426 -0
- package/dist/ai/reputation/reputation-engine.js.map +1 -0
- package/dist/ai/runtime/agent-runtime.d.ts +193 -0
- package/dist/ai/runtime/agent-runtime.d.ts.map +1 -0
- package/dist/ai/runtime/agent-runtime.js +1009 -0
- package/dist/ai/runtime/agent-runtime.js.map +1 -0
- package/dist/ai/runtime/index.d.ts +11 -0
- package/dist/ai/runtime/index.d.ts.map +1 -0
- package/dist/ai/runtime/index.js +9 -0
- package/dist/ai/runtime/index.js.map +1 -0
- package/dist/ai/runtime/telemetry-schema.d.ts +192 -0
- package/dist/ai/runtime/telemetry-schema.d.ts.map +1 -0
- package/dist/ai/runtime/telemetry-schema.js +200 -0
- package/dist/ai/runtime/telemetry-schema.js.map +1 -0
- package/dist/ai/runtime/types.d.ts +236 -0
- package/dist/ai/runtime/types.d.ts.map +1 -0
- package/dist/ai/runtime/types.js +10 -0
- package/dist/ai/runtime/types.js.map +1 -0
- package/dist/ai/src/batch-processor.d.ts +298 -0
- package/dist/ai/src/batch-processor.d.ts.map +1 -0
- package/dist/ai/src/batch-processor.js +520 -0
- package/dist/ai/src/batch-processor.js.map +1 -0
- package/dist/ai/src/capability-bootstrap.d.ts +222 -0
- package/dist/ai/src/capability-bootstrap.d.ts.map +1 -0
- package/dist/ai/src/capability-bootstrap.js +421 -0
- package/dist/ai/src/capability-bootstrap.js.map +1 -0
- package/dist/ai/src/capability-manifest-generator.d.ts +52 -0
- package/dist/ai/src/capability-manifest-generator.d.ts.map +1 -0
- package/dist/ai/src/capability-manifest-generator.js +691 -0
- package/dist/ai/src/capability-manifest-generator.js.map +1 -0
- package/dist/ai/src/capability-registry.d.ts +157 -0
- package/dist/ai/src/capability-registry.d.ts.map +1 -0
- package/dist/ai/src/capability-registry.js +577 -0
- package/dist/ai/src/capability-registry.js.map +1 -0
- package/dist/ai/src/cli/telemetry-dashboard.d.ts +132 -0
- package/dist/ai/src/cli/telemetry-dashboard.d.ts.map +1 -0
- package/dist/ai/src/cli/telemetry-dashboard.js +565 -0
- package/dist/ai/src/cli/telemetry-dashboard.js.map +1 -0
- package/dist/ai/src/delegation/feature-flags.d.ts +213 -0
- package/dist/ai/src/delegation/feature-flags.d.ts.map +1 -0
- package/dist/ai/src/delegation/feature-flags.js +395 -0
- package/dist/ai/src/delegation/feature-flags.js.map +1 -0
- package/dist/ai/src/delegation/liability-firebreak.d.ts +303 -0
- package/dist/ai/src/delegation/liability-firebreak.d.ts.map +1 -0
- package/dist/ai/src/delegation/liability-firebreak.js +643 -0
- package/dist/ai/src/delegation/liability-firebreak.js.map +1 -0
- package/dist/ai/src/delegation/security-threat-model.d.ts +171 -0
- package/dist/ai/src/delegation/security-threat-model.d.ts.map +1 -0
- package/dist/ai/src/delegation/security-threat-model.js +723 -0
- package/dist/ai/src/delegation/security-threat-model.js.map +1 -0
- package/dist/ai/src/delegation/tlp-enforcement.d.ts +146 -0
- package/dist/ai/src/delegation/tlp-enforcement.d.ts.map +1 -0
- package/dist/ai/src/delegation/tlp-enforcement.js +382 -0
- package/dist/ai/src/delegation/tlp-enforcement.js.map +1 -0
- package/dist/ai/src/delegation-capability-integration.d.ts +154 -0
- package/dist/ai/src/delegation-capability-integration.d.ts.map +1 -0
- package/dist/ai/src/delegation-capability-integration.js +351 -0
- package/dist/ai/src/delegation-capability-integration.js.map +1 -0
- package/dist/ai/src/end-to-end-workflow-orchestrator.d.ts +325 -0
- package/dist/ai/src/end-to-end-workflow-orchestrator.d.ts.map +1 -0
- package/dist/ai/src/end-to-end-workflow-orchestrator.js +801 -0
- package/dist/ai/src/end-to-end-workflow-orchestrator.js.map +1 -0
- package/dist/ai/src/enhanced-capability-detection.d.ts +237 -0
- package/dist/ai/src/enhanced-capability-detection.d.ts.map +1 -0
- package/dist/ai/src/enhanced-capability-detection.js +448 -0
- package/dist/ai/src/enhanced-capability-detection.js.map +1 -0
- package/dist/ai/src/intelligent-cache-manager.d.ts +327 -0
- package/dist/ai/src/intelligent-cache-manager.d.ts.map +1 -0
- package/dist/ai/src/intelligent-cache-manager.js +634 -0
- package/dist/ai/src/intelligent-cache-manager.js.map +1 -0
- package/dist/ai/src/mcp-auto-configuration.d.ts +232 -0
- package/dist/ai/src/mcp-auto-configuration.d.ts.map +1 -0
- package/dist/ai/src/mcp-auto-configuration.js +445 -0
- package/dist/ai/src/mcp-auto-configuration.js.map +1 -0
- package/dist/ai/src/performance-profiler.d.ts +351 -0
- package/dist/ai/src/performance-profiler.d.ts.map +1 -0
- package/dist/ai/src/performance-profiler.js +475 -0
- package/dist/ai/src/performance-profiler.js.map +1 -0
- package/dist/ai/src/personas/hooks/before-llm-call.d.ts +96 -0
- package/dist/ai/src/personas/hooks/before-llm-call.d.ts.map +1 -0
- package/dist/ai/src/personas/hooks/before-llm-call.js +83 -0
- package/dist/ai/src/personas/hooks/before-llm-call.js.map +1 -0
- package/dist/ai/src/personas/index.d.ts +10 -0
- package/dist/ai/src/personas/index.d.ts.map +1 -0
- package/dist/ai/src/personas/index.js +10 -0
- package/dist/ai/src/personas/index.js.map +1 -0
- package/dist/ai/src/personas/persona-loader.d.ts +42 -0
- package/dist/ai/src/personas/persona-loader.d.ts.map +1 -0
- package/dist/ai/src/personas/persona-loader.js +162 -0
- package/dist/ai/src/personas/persona-loader.js.map +1 -0
- package/dist/ai/src/personas/types.d.ts +199 -0
- package/dist/ai/src/personas/types.d.ts.map +1 -0
- package/dist/ai/src/personas/types.js +7 -0
- package/dist/ai/src/personas/types.js.map +1 -0
- package/dist/ai/src/personas/voice-resolver.d.ts +40 -0
- package/dist/ai/src/personas/voice-resolver.d.ts.map +1 -0
- package/dist/ai/src/personas/voice-resolver.js +201 -0
- package/dist/ai/src/personas/voice-resolver.js.map +1 -0
- package/dist/ai/src/resource-monitor.d.ts +311 -0
- package/dist/ai/src/resource-monitor.d.ts.map +1 -0
- package/dist/ai/src/resource-monitor.js +475 -0
- package/dist/ai/src/resource-monitor.js.map +1 -0
- package/dist/ai/src/runtime/agent-runtime.d.ts +340 -0
- package/dist/ai/src/runtime/agent-runtime.d.ts.map +1 -0
- package/dist/ai/src/runtime/agent-runtime.js +1084 -0
- package/dist/ai/src/runtime/agent-runtime.js.map +1 -0
- package/dist/ai/src/telemetry/delegation-telemetry.d.ts +287 -0
- package/dist/ai/src/telemetry/delegation-telemetry.d.ts.map +1 -0
- package/dist/ai/src/telemetry/delegation-telemetry.js +389 -0
- package/dist/ai/src/telemetry/delegation-telemetry.js.map +1 -0
- package/dist/ai/src/telemetry/index.d.ts +48 -0
- package/dist/ai/src/telemetry/index.d.ts.map +1 -0
- package/dist/ai/src/telemetry/index.js +48 -0
- package/dist/ai/src/telemetry/index.js.map +1 -0
- package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts +67 -0
- package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts.map +1 -0
- package/dist/ai/src/telemetry/runtime-telemetry-integration.js +415 -0
- package/dist/ai/src/telemetry/runtime-telemetry-integration.js.map +1 -0
- package/dist/ai/src/telemetry/telemetry-utils.d.ts +119 -0
- package/dist/ai/src/telemetry/telemetry-utils.d.ts.map +1 -0
- package/dist/ai/src/telemetry/telemetry-utils.js +250 -0
- package/dist/ai/src/telemetry/telemetry-utils.js.map +1 -0
- package/dist/ai/src/types/agent-capabilities.d.ts +227 -0
- package/dist/ai/src/types/agent-capabilities.d.ts.map +1 -0
- package/dist/ai/src/types/agent-capabilities.js +11 -0
- package/dist/ai/src/types/agent-capabilities.js.map +1 -0
- package/dist/ai/src/types/context-verification.d.ts +158 -0
- package/dist/ai/src/types/context-verification.d.ts.map +1 -0
- package/dist/ai/src/types/context-verification.js +73 -0
- package/dist/ai/src/types/context-verification.js.map +1 -0
- package/dist/ai/src/types/delegation-contracts.d.ts +296 -0
- package/dist/ai/src/types/delegation-contracts.d.ts.map +1 -0
- package/dist/ai/src/types/delegation-contracts.js +17 -0
- package/dist/ai/src/types/delegation-contracts.js.map +1 -0
- package/dist/ai/src/validation-pipeline-integration.d.ts +266 -0
- package/dist/ai/src/validation-pipeline-integration.d.ts.map +1 -0
- package/dist/ai/src/validation-pipeline-integration.js +695 -0
- package/dist/ai/src/validation-pipeline-integration.js.map +1 -0
- package/dist/ai/src/verification/multi-modal-formatters.d.ts +57 -0
- package/dist/ai/src/verification/multi-modal-formatters.d.ts.map +1 -0
- package/dist/ai/src/verification/multi-modal-formatters.js +655 -0
- package/dist/ai/src/verification/multi-modal-formatters.js.map +1 -0
- package/dist/ai/src/verification/output-formatter.d.ts +186 -0
- package/dist/ai/src/verification/output-formatter.d.ts.map +1 -0
- package/dist/ai/src/verification/output-formatter.js +296 -0
- package/dist/ai/src/verification/output-formatter.js.map +1 -0
- package/dist/ai/src/verification/parser-integration.d.ts +137 -0
- package/dist/ai/src/verification/parser-integration.d.ts.map +1 -0
- package/dist/ai/src/verification/parser-integration.js +273 -0
- package/dist/ai/src/verification/parser-integration.js.map +1 -0
- package/dist/ai/types/agent-capabilities.d.ts +387 -0
- package/dist/ai/types/agent-capabilities.d.ts.map +1 -0
- package/dist/ai/types/agent-capabilities.js +32 -0
- package/dist/ai/types/agent-capabilities.js.map +1 -0
- package/dist/ai/types/delegation-contracts.d.ts +291 -0
- package/dist/ai/types/delegation-contracts.d.ts.map +1 -0
- package/dist/ai/types/delegation-contracts.js +14 -0
- package/dist/ai/types/delegation-contracts.js.map +1 -0
- package/dist/ai/types/index.d.ts +4 -1
- package/dist/ai/types/index.d.ts.map +1 -1
- package/dist/ai/types/index.js +4 -1
- package/dist/ai/types/index.js.map +1 -1
- package/dist/ai/types/permission-tokens.d.ts +365 -0
- package/dist/ai/types/permission-tokens.d.ts.map +1 -0
- package/dist/ai/types/permission-tokens.js +13 -0
- package/dist/ai/types/permission-tokens.js.map +1 -0
- package/dist/ai/types/security-middleware.d.ts +130 -0
- package/dist/ai/types/security-middleware.d.ts.map +1 -0
- package/dist/ai/types/security-middleware.js +13 -0
- package/dist/ai/types/security-middleware.js.map +1 -0
- package/dist/ai/utils/storage.d.ts.map +1 -1
- package/dist/ai/utils/storage.js +6 -3
- package/dist/ai/utils/storage.js.map +1 -1
- package/dist/ai/validation/validation-framework.js +1 -1
- package/dist/ai/verification/policy-framework.d.ts +161 -0
- package/dist/ai/verification/policy-framework.d.ts.map +1 -0
- package/dist/ai/verification/policy-framework.js +436 -0
- package/dist/ai/verification/policy-framework.js.map +1 -0
- package/package.json +35 -7
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* DCYFR Telemetry Dashboard CLI
|
|
4
|
+
*
|
|
5
|
+
* Provides command-line interface for viewing telemetry data,
|
|
6
|
+
* cost summaries, and model usage breakdowns.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx dcyfr telemetry --agent <name> --period today
|
|
10
|
+
* npx dcyfr telemetry --breakdown models
|
|
11
|
+
* npx dcyfr telemetry --export data.csv
|
|
12
|
+
*/
|
|
13
|
+
interface TelemetryRecord {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
agentType: string;
|
|
16
|
+
taskType: string;
|
|
17
|
+
description: string;
|
|
18
|
+
startTime: string;
|
|
19
|
+
endTime: string;
|
|
20
|
+
status: 'success' | 'failed' | 'timeout';
|
|
21
|
+
modelUsed?: string;
|
|
22
|
+
inputTokens: number;
|
|
23
|
+
outputTokens: number;
|
|
24
|
+
totalCost: number;
|
|
25
|
+
duration: number;
|
|
26
|
+
}
|
|
27
|
+
interface CostSummary {
|
|
28
|
+
taskCount: number;
|
|
29
|
+
totalCost: number;
|
|
30
|
+
avgLatency: number;
|
|
31
|
+
successRate: number;
|
|
32
|
+
}
|
|
33
|
+
interface ModelBreakdown {
|
|
34
|
+
model: string;
|
|
35
|
+
totalTokens: number;
|
|
36
|
+
totalCost: number;
|
|
37
|
+
callCount: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Runtime validation tool
|
|
41
|
+
*/
|
|
42
|
+
export declare class RuntimeValidator {
|
|
43
|
+
private displayProviderStatus;
|
|
44
|
+
private displayProviderErrors;
|
|
45
|
+
private validateProviders;
|
|
46
|
+
private validateMemoryProviders;
|
|
47
|
+
private validateTelemetryDatabase;
|
|
48
|
+
private displayValidationSummary;
|
|
49
|
+
/**
|
|
50
|
+
* Validate the complete runtime environment
|
|
51
|
+
*/
|
|
52
|
+
validateRuntime(): Promise<{
|
|
53
|
+
valid: boolean;
|
|
54
|
+
providers: {
|
|
55
|
+
configured: number;
|
|
56
|
+
available: number;
|
|
57
|
+
total: number;
|
|
58
|
+
};
|
|
59
|
+
memory: {
|
|
60
|
+
configured: boolean;
|
|
61
|
+
};
|
|
62
|
+
telemetry: {
|
|
63
|
+
configured: boolean;
|
|
64
|
+
};
|
|
65
|
+
issues: string[];
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Display provider setup help
|
|
69
|
+
*/
|
|
70
|
+
displayProviderSetup(): void;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Telemetry Dashboard CLI
|
|
74
|
+
*/
|
|
75
|
+
export declare class TelemetryDashboard {
|
|
76
|
+
private dbPath;
|
|
77
|
+
constructor();
|
|
78
|
+
/**
|
|
79
|
+
* Load sqlite3.Database constructor lazily so sqlite3 remains optional
|
|
80
|
+
*/
|
|
81
|
+
private loadDatabaseConstructor;
|
|
82
|
+
/**
|
|
83
|
+
* Set custom database path
|
|
84
|
+
*/
|
|
85
|
+
setDatabasePath(path: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* Connect to SQLite telemetry database
|
|
88
|
+
*/
|
|
89
|
+
private connectDatabase;
|
|
90
|
+
/**
|
|
91
|
+
* Close database connection
|
|
92
|
+
*/
|
|
93
|
+
private closeDatabase;
|
|
94
|
+
/**
|
|
95
|
+
* Convert period string to SQL date filter
|
|
96
|
+
*/
|
|
97
|
+
private getDateFilter;
|
|
98
|
+
/**
|
|
99
|
+
* Get telemetry records for specific agent and period
|
|
100
|
+
*/
|
|
101
|
+
getAgentTelemetry(agentName?: string, period?: string): Promise<TelemetryRecord[]>;
|
|
102
|
+
/**
|
|
103
|
+
* Calculate cost summary from telemetry records
|
|
104
|
+
*/
|
|
105
|
+
calculateCostSummary(records: TelemetryRecord[]): CostSummary;
|
|
106
|
+
/**
|
|
107
|
+
* Get model usage breakdown
|
|
108
|
+
*/
|
|
109
|
+
getModelBreakdown(): Promise<ModelBreakdown[]>;
|
|
110
|
+
/**
|
|
111
|
+
* Display cost summary table
|
|
112
|
+
*/
|
|
113
|
+
displayCostSummary(summary: CostSummary): void;
|
|
114
|
+
/**
|
|
115
|
+
* Display model breakdown table
|
|
116
|
+
*/
|
|
117
|
+
displayModelBreakdown(breakdowns: ModelBreakdown[]): void;
|
|
118
|
+
/**
|
|
119
|
+
* Export telemetry data to CSV file
|
|
120
|
+
*/
|
|
121
|
+
exportToCsv(filename: string, agentName?: string, period?: string): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Escape CSV field (handle commas, quotes, newlines)
|
|
124
|
+
*/
|
|
125
|
+
private escapeCsvField;
|
|
126
|
+
/**
|
|
127
|
+
* Display agent telemetry data
|
|
128
|
+
*/
|
|
129
|
+
displayAgentTelemetry(agentName?: string, period?: string): Promise<void>;
|
|
130
|
+
}
|
|
131
|
+
export {};
|
|
132
|
+
//# sourceMappingURL=telemetry-dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-dashboard.d.ts","sourceRoot":"","sources":["../../../../packages/ai/src/cli/telemetry-dashboard.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAoBH,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,qBAAqB;YASf,iBAAiB;IAoC/B,OAAO,CAAC,uBAAuB;YA4BjB,yBAAyB;IAevC,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC;QACtC,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACpE,MAAM,EAAE;YAAE,UAAU,EAAE,OAAO,CAAA;SAAE,CAAC;QAChC,SAAS,EAAE;YAAE,UAAU,EAAE,OAAO,CAAA;SAAE,CAAC;QACnC,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IA2BF;;OAEG;IACI,oBAAoB,IAAI,IAAI;CAoBpC;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;;IAOvB;;OAEG;YACW,uBAAuB;IAkBrC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,aAAa;IAY3B;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACG,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAoDxF;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,WAAW;IAuB7D;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA8BpD;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAU9C;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI;IAiBzD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDvF;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACG,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsChF"}
|
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* DCYFR Telemetry Dashboard CLI
|
|
4
|
+
*
|
|
5
|
+
* Provides command-line interface for viewing telemetry data,
|
|
6
|
+
* cost summaries, and model usage breakdowns.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx dcyfr telemetry --agent <name> --period today
|
|
10
|
+
* npx dcyfr telemetry --breakdown models
|
|
11
|
+
* npx dcyfr telemetry --export data.csv
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
import { promises as fs } from 'fs';
|
|
15
|
+
import { join } from 'path';
|
|
16
|
+
import { homedir } from 'os';
|
|
17
|
+
import { ProviderRegistry } from '../../core/provider-registry.js';
|
|
18
|
+
/**
|
|
19
|
+
* Runtime validation tool
|
|
20
|
+
*/
|
|
21
|
+
export class RuntimeValidator {
|
|
22
|
+
displayProviderStatus(envVars, providerValidation) {
|
|
23
|
+
console.log('\nš Provider Status:');
|
|
24
|
+
const setupInstructions = ProviderRegistry.getProviderSetupInstructions();
|
|
25
|
+
for (const provider of Object.keys(envVars)) {
|
|
26
|
+
const available = providerValidation.available.includes(provider);
|
|
27
|
+
const configured = providerValidation.configured.includes(provider);
|
|
28
|
+
const status = available ? 'š¢' : configured ? 'š”' : 'š“';
|
|
29
|
+
const statusText = available ? 'Available' : configured ? 'Configured' : 'Not configured';
|
|
30
|
+
console.log(` ${status} ${provider}: ${statusText}`);
|
|
31
|
+
if (!configured && setupInstructions[provider]) {
|
|
32
|
+
console.log(` Missing: ${setupInstructions[provider].environmentVariables.join(', ')}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
displayProviderErrors(errors) {
|
|
37
|
+
if (errors.length === 0)
|
|
38
|
+
return;
|
|
39
|
+
console.log('\nā ļø Provider Errors:');
|
|
40
|
+
for (const error of errors) {
|
|
41
|
+
console.log(` ⢠${error.provider}: ${error.error}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async validateProviders(issues) {
|
|
45
|
+
console.log('š” Checking Provider Configuration...');
|
|
46
|
+
const providerRegistry = new ProviderRegistry({
|
|
47
|
+
primaryProvider: 'openai',
|
|
48
|
+
fallbackChain: ['anthropic', 'ollama'],
|
|
49
|
+
autoReturn: false,
|
|
50
|
+
healthCheckInterval: 60000
|
|
51
|
+
});
|
|
52
|
+
const providerValidation = await providerRegistry.validate();
|
|
53
|
+
const envVars = ProviderRegistry.discoverEnvironmentVariables();
|
|
54
|
+
console.log(` ā Found ${providerValidation.configured.length} configured providers`);
|
|
55
|
+
console.log(` ā ${providerValidation.available.length} providers available`);
|
|
56
|
+
if (providerValidation.configured.length === 0) {
|
|
57
|
+
issues.push('No providers configured - set API keys for OpenAI, Anthropic, or setup Ollama');
|
|
58
|
+
}
|
|
59
|
+
if (providerValidation.available.length === 0) {
|
|
60
|
+
issues.push('No providers available - check API keys and network connectivity');
|
|
61
|
+
}
|
|
62
|
+
this.displayProviderStatus(envVars, providerValidation);
|
|
63
|
+
this.displayProviderErrors(providerValidation.errors);
|
|
64
|
+
return {
|
|
65
|
+
configured: providerValidation.configured.length,
|
|
66
|
+
available: providerValidation.available.length,
|
|
67
|
+
total: Object.keys(envVars).length,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
validateMemoryProviders(issues) {
|
|
71
|
+
console.log('\nš§ Checking Memory Configuration...');
|
|
72
|
+
let memoryConfigured = false;
|
|
73
|
+
try {
|
|
74
|
+
const hasUpstash = process.env.UPSTASH_REDIS_REST_URL && process.env.UPSTASH_REDIS_REST_TOKEN;
|
|
75
|
+
const hasMem0 = process.env.MEM0_API_KEY;
|
|
76
|
+
if (hasUpstash) {
|
|
77
|
+
console.log(' ā Upstash Redis configured');
|
|
78
|
+
memoryConfigured = true;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(' š“ Upstash Redis not configured');
|
|
82
|
+
}
|
|
83
|
+
if (hasMem0) {
|
|
84
|
+
console.log(' ā Mem0 AI configured');
|
|
85
|
+
memoryConfigured = true;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(' š“ Mem0 AI not configured');
|
|
89
|
+
}
|
|
90
|
+
if (!memoryConfigured) {
|
|
91
|
+
issues.push('Memory system not configured - set up Upstash Redis or Mem0 AI');
|
|
92
|
+
console.log(' ā ļø No memory providers configured');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
issues.push(`Memory validation failed: ${error instanceof Error ? error.message : error}`);
|
|
97
|
+
}
|
|
98
|
+
return memoryConfigured;
|
|
99
|
+
}
|
|
100
|
+
async validateTelemetryDatabase() {
|
|
101
|
+
console.log('\nš Checking Telemetry Configuration...');
|
|
102
|
+
const telemetryPath = join(homedir(), '.dcyfr', 'telemetry.db');
|
|
103
|
+
try {
|
|
104
|
+
await fs.access(telemetryPath);
|
|
105
|
+
console.log(` ā Telemetry database found: ${telemetryPath}`);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
console.log(` š” Telemetry database not found: ${telemetryPath}`);
|
|
110
|
+
console.log(` ā¹ļø Database will be created on first use`);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
displayValidationSummary(valid, issues) {
|
|
115
|
+
console.log('\nš Validation Summary:');
|
|
116
|
+
if (valid) {
|
|
117
|
+
console.log(' š Runtime environment is properly configured!');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(' ā ļø Issues found:');
|
|
121
|
+
for (const issue of issues) {
|
|
122
|
+
console.log(` ⢠${issue}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validate the complete runtime environment
|
|
128
|
+
*/
|
|
129
|
+
async validateRuntime() {
|
|
130
|
+
const issues = [];
|
|
131
|
+
console.log('š Validating DCYFR Runtime Environment...\n');
|
|
132
|
+
// 1. Validate Provider Configuration
|
|
133
|
+
const providerSummary = await this.validateProviders(issues);
|
|
134
|
+
// 2. Validate Memory Configuration
|
|
135
|
+
const memoryConfigured = this.validateMemoryProviders(issues);
|
|
136
|
+
// 3. Validate Telemetry Configuration
|
|
137
|
+
const telemetryConfigured = await this.validateTelemetryDatabase();
|
|
138
|
+
// 4. Display Summary
|
|
139
|
+
const valid = issues.length === 0;
|
|
140
|
+
this.displayValidationSummary(valid, issues);
|
|
141
|
+
return {
|
|
142
|
+
valid,
|
|
143
|
+
providers: providerSummary,
|
|
144
|
+
memory: { configured: memoryConfigured },
|
|
145
|
+
telemetry: { configured: telemetryConfigured },
|
|
146
|
+
issues
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Display provider setup help
|
|
151
|
+
*/
|
|
152
|
+
displayProviderSetup() {
|
|
153
|
+
console.log('š§ Provider Setup Instructions\n');
|
|
154
|
+
const instructions = ProviderRegistry.getProviderSetupInstructions();
|
|
155
|
+
for (const [provider, info] of Object.entries(instructions)) {
|
|
156
|
+
console.log(`š” ${provider.toUpperCase()}`);
|
|
157
|
+
console.log(` ${info.description}`);
|
|
158
|
+
if (info.environmentVariables.length > 0) {
|
|
159
|
+
console.log(` Environment Variables: ${info.environmentVariables.join(', ')}`);
|
|
160
|
+
}
|
|
161
|
+
console.log(' Setup Steps:');
|
|
162
|
+
for (const step of info.instructions) {
|
|
163
|
+
console.log(` ${step}`);
|
|
164
|
+
}
|
|
165
|
+
console.log('');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Telemetry Dashboard CLI
|
|
171
|
+
*/
|
|
172
|
+
export class TelemetryDashboard {
|
|
173
|
+
dbPath;
|
|
174
|
+
constructor() {
|
|
175
|
+
// Default telemetry database location
|
|
176
|
+
this.dbPath = join(homedir(), '.dcyfr', 'telemetry.db');
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Load sqlite3.Database constructor lazily so sqlite3 remains optional
|
|
180
|
+
*/
|
|
181
|
+
async loadDatabaseConstructor() {
|
|
182
|
+
try {
|
|
183
|
+
const sqlite3Module = await import('sqlite3');
|
|
184
|
+
const sqlite3 = sqlite3Module.default ?? sqlite3Module;
|
|
185
|
+
if (!sqlite3?.Database) {
|
|
186
|
+
throw new Error('sqlite3 module does not export Database');
|
|
187
|
+
}
|
|
188
|
+
return sqlite3.Database;
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
throw new Error('sqlite3 package not installed. Run: npm install sqlite3\n' +
|
|
192
|
+
`Original error: ${error instanceof Error ? error.message : String(error)}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Set custom database path
|
|
197
|
+
*/
|
|
198
|
+
setDatabasePath(path) {
|
|
199
|
+
this.dbPath = path;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Connect to SQLite telemetry database
|
|
203
|
+
*/
|
|
204
|
+
async connectDatabase() {
|
|
205
|
+
const Database = await this.loadDatabaseConstructor();
|
|
206
|
+
return new Promise((resolve, reject) => {
|
|
207
|
+
const db = new Database(this.dbPath, (err) => {
|
|
208
|
+
if (err) {
|
|
209
|
+
reject(new Error(`Failed to connect to telemetry database at ${this.dbPath}: ${err.message}`));
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
resolve(db);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Close database connection
|
|
219
|
+
*/
|
|
220
|
+
async closeDatabase(db) {
|
|
221
|
+
return new Promise((resolve, reject) => {
|
|
222
|
+
db.close((err) => {
|
|
223
|
+
if (err) {
|
|
224
|
+
reject(err);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
resolve();
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Convert period string to SQL date filter
|
|
234
|
+
*/
|
|
235
|
+
getDateFilter(period) {
|
|
236
|
+
const now = new Date();
|
|
237
|
+
switch (period.toLowerCase()) {
|
|
238
|
+
case 'today':
|
|
239
|
+
const today = now.toISOString().split('T')[0];
|
|
240
|
+
return `DATE(start_time) = '${today}'`;
|
|
241
|
+
case 'yesterday':
|
|
242
|
+
const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000);
|
|
243
|
+
const yesterdayStr = yesterday.toISOString().split('T')[0];
|
|
244
|
+
return `DATE(start_time) = '${yesterdayStr}'`;
|
|
245
|
+
case 'week':
|
|
246
|
+
const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
247
|
+
return `start_time >= '${weekAgo.toISOString()}'`;
|
|
248
|
+
case 'month':
|
|
249
|
+
const monthAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
|
|
250
|
+
return `start_time >= '${monthAgo.toISOString()}'`;
|
|
251
|
+
default:
|
|
252
|
+
throw new Error(`Unsupported period: ${period}. Use: today, yesterday, week, month`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get telemetry records for specific agent and period
|
|
257
|
+
*/
|
|
258
|
+
async getAgentTelemetry(agentName, period) {
|
|
259
|
+
const db = await this.connectDatabase();
|
|
260
|
+
try {
|
|
261
|
+
let whereClause = '';
|
|
262
|
+
const conditions = [];
|
|
263
|
+
if (agentName) {
|
|
264
|
+
conditions.push(`agent_type = '${agentName}'`);
|
|
265
|
+
}
|
|
266
|
+
if (period) {
|
|
267
|
+
conditions.push(this.getDateFilter(period));
|
|
268
|
+
}
|
|
269
|
+
if (conditions.length > 0) {
|
|
270
|
+
whereClause = `WHERE ${conditions.join(' AND ')}`;
|
|
271
|
+
}
|
|
272
|
+
const query = `
|
|
273
|
+
SELECT
|
|
274
|
+
session_id as sessionId,
|
|
275
|
+
agent_type as agentType,
|
|
276
|
+
task_type as taskType,
|
|
277
|
+
description,
|
|
278
|
+
start_time as startTime,
|
|
279
|
+
end_time as endTime,
|
|
280
|
+
status,
|
|
281
|
+
model_used as modelUsed,
|
|
282
|
+
input_tokens as inputTokens,
|
|
283
|
+
output_tokens as outputTokens,
|
|
284
|
+
total_cost as totalCost,
|
|
285
|
+
duration
|
|
286
|
+
FROM telemetry_sessions
|
|
287
|
+
${whereClause}
|
|
288
|
+
ORDER BY start_time DESC
|
|
289
|
+
`;
|
|
290
|
+
return new Promise((resolve, reject) => {
|
|
291
|
+
db.all(query, (err, rows) => {
|
|
292
|
+
if (err) {
|
|
293
|
+
reject(err);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
resolve(rows);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
await this.closeDatabase(db);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Calculate cost summary from telemetry records
|
|
307
|
+
*/
|
|
308
|
+
calculateCostSummary(records) {
|
|
309
|
+
if (records.length === 0) {
|
|
310
|
+
return {
|
|
311
|
+
taskCount: 0,
|
|
312
|
+
totalCost: 0,
|
|
313
|
+
avgLatency: 0,
|
|
314
|
+
successRate: 0
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
const totalCost = records.reduce((sum, record) => sum + record.totalCost, 0);
|
|
318
|
+
const avgLatency = records.reduce((sum, record) => sum + record.duration, 0) / records.length;
|
|
319
|
+
const successCount = records.filter(record => record.status === 'success').length;
|
|
320
|
+
const successRate = (successCount / records.length) * 100;
|
|
321
|
+
return {
|
|
322
|
+
taskCount: records.length,
|
|
323
|
+
totalCost,
|
|
324
|
+
avgLatency,
|
|
325
|
+
successRate
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get model usage breakdown
|
|
330
|
+
*/
|
|
331
|
+
async getModelBreakdown() {
|
|
332
|
+
const db = await this.connectDatabase();
|
|
333
|
+
try {
|
|
334
|
+
const query = `
|
|
335
|
+
SELECT
|
|
336
|
+
model_used as model,
|
|
337
|
+
SUM(input_tokens + output_tokens) as totalTokens,
|
|
338
|
+
SUM(total_cost) as totalCost,
|
|
339
|
+
COUNT(*) as callCount
|
|
340
|
+
FROM telemetry_sessions
|
|
341
|
+
WHERE model_used IS NOT NULL
|
|
342
|
+
GROUP BY model_used
|
|
343
|
+
ORDER BY totalCost DESC
|
|
344
|
+
`;
|
|
345
|
+
return new Promise((resolve, reject) => {
|
|
346
|
+
db.all(query, (err, rows) => {
|
|
347
|
+
if (err) {
|
|
348
|
+
reject(err);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
resolve(rows);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
finally {
|
|
357
|
+
await this.closeDatabase(db);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Display cost summary table
|
|
362
|
+
*/
|
|
363
|
+
displayCostSummary(summary) {
|
|
364
|
+
console.log('\nš Cost Summary');
|
|
365
|
+
console.log('='.repeat(60));
|
|
366
|
+
console.log(`Tasks: ${summary.taskCount.toLocaleString()}`);
|
|
367
|
+
console.log(`Total Cost: $${summary.totalCost.toFixed(4)}`);
|
|
368
|
+
console.log(`Avg Latency: ${summary.avgLatency.toFixed(0)}ms`);
|
|
369
|
+
console.log(`Success Rate: ${summary.successRate.toFixed(1)}%`);
|
|
370
|
+
console.log('='.repeat(60));
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Display model breakdown table
|
|
374
|
+
*/
|
|
375
|
+
displayModelBreakdown(breakdowns) {
|
|
376
|
+
console.log('\nš¤ Model Usage Breakdown');
|
|
377
|
+
console.log('='.repeat(80));
|
|
378
|
+
console.log('Model'.padEnd(20) + 'Total Tokens'.padEnd(15) + 'Total Cost'.padEnd(12) + 'Call Count');
|
|
379
|
+
console.log('-'.repeat(80));
|
|
380
|
+
for (const breakdown of breakdowns) {
|
|
381
|
+
const model = breakdown.model.padEnd(20);
|
|
382
|
+
const tokens = breakdown.totalTokens.toLocaleString().padEnd(15);
|
|
383
|
+
const cost = `$${breakdown.totalCost.toFixed(4)}`.padEnd(12);
|
|
384
|
+
const calls = breakdown.callCount.toLocaleString();
|
|
385
|
+
console.log(`${model}${tokens}${cost}${calls}`);
|
|
386
|
+
}
|
|
387
|
+
console.log('='.repeat(80));
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Export telemetry data to CSV file
|
|
391
|
+
*/
|
|
392
|
+
async exportToCsv(filename, agentName, period) {
|
|
393
|
+
const records = await this.getAgentTelemetry(agentName, period);
|
|
394
|
+
if (records.length === 0) {
|
|
395
|
+
console.log('No telemetry data found to export.');
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
// CSV headers
|
|
399
|
+
const headers = [
|
|
400
|
+
'Session ID',
|
|
401
|
+
'Agent Type',
|
|
402
|
+
'Task Type',
|
|
403
|
+
'Description',
|
|
404
|
+
'Start Time',
|
|
405
|
+
'End Time',
|
|
406
|
+
'Status',
|
|
407
|
+
'Model Used',
|
|
408
|
+
'Input Tokens',
|
|
409
|
+
'Output Tokens',
|
|
410
|
+
'Total Cost',
|
|
411
|
+
'Duration (ms)'
|
|
412
|
+
];
|
|
413
|
+
// CSV rows
|
|
414
|
+
const rows = records.map(record => [
|
|
415
|
+
this.escapeCsvField(record.sessionId),
|
|
416
|
+
this.escapeCsvField(record.agentType),
|
|
417
|
+
this.escapeCsvField(record.taskType),
|
|
418
|
+
this.escapeCsvField(record.description),
|
|
419
|
+
this.escapeCsvField(record.startTime),
|
|
420
|
+
this.escapeCsvField(record.endTime),
|
|
421
|
+
this.escapeCsvField(record.status),
|
|
422
|
+
this.escapeCsvField(record.modelUsed || ''),
|
|
423
|
+
record.inputTokens.toString(),
|
|
424
|
+
record.outputTokens.toString(),
|
|
425
|
+
record.totalCost.toString(),
|
|
426
|
+
record.duration.toString()
|
|
427
|
+
]);
|
|
428
|
+
// Combine headers and rows
|
|
429
|
+
const csvContent = [
|
|
430
|
+
headers.join(','),
|
|
431
|
+
...rows.map(row => row.join(','))
|
|
432
|
+
].join('\n');
|
|
433
|
+
// Write to file
|
|
434
|
+
await fs.writeFile(filename, csvContent, 'utf-8');
|
|
435
|
+
console.log(`ā
Exported ${records.length} records to ${filename}`);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Escape CSV field (handle commas, quotes, newlines)
|
|
439
|
+
*/
|
|
440
|
+
escapeCsvField(field) {
|
|
441
|
+
if (!field) {
|
|
442
|
+
return '';
|
|
443
|
+
}
|
|
444
|
+
if (field.includes(',') || field.includes('"') || field.includes('\n')) {
|
|
445
|
+
return `"${field.replace(/"/g, '""')}"`;
|
|
446
|
+
}
|
|
447
|
+
return field;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Display agent telemetry data
|
|
451
|
+
*/
|
|
452
|
+
async displayAgentTelemetry(agentName, period) {
|
|
453
|
+
try {
|
|
454
|
+
const records = await this.getAgentTelemetry(agentName, period);
|
|
455
|
+
if (records.length === 0) {
|
|
456
|
+
console.log('No telemetry data found for the specified criteria.');
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
// Display summary
|
|
460
|
+
const summary = this.calculateCostSummary(records);
|
|
461
|
+
this.displayCostSummary(summary);
|
|
462
|
+
// Display recent records (limit to 10)
|
|
463
|
+
console.log('\nš Recent Activity');
|
|
464
|
+
console.log('='.repeat(100));
|
|
465
|
+
const recentRecords = records.slice(0, 10);
|
|
466
|
+
for (const record of recentRecords) {
|
|
467
|
+
const time = new Date(record.startTime).toLocaleString();
|
|
468
|
+
const cost = `$${record.totalCost.toFixed(4)}`;
|
|
469
|
+
const status = record.status === 'success' ? 'ā
' : 'ā';
|
|
470
|
+
const duration = `${record.duration}ms`;
|
|
471
|
+
console.log(`${status} ${time} | ${record.agentType} | ${cost} | ${duration}`);
|
|
472
|
+
console.log(` ${record.description.substring(0, 80)}${record.description.length > 80 ? '...' : ''}`);
|
|
473
|
+
console.log('');
|
|
474
|
+
}
|
|
475
|
+
if (records.length > 10) {
|
|
476
|
+
console.log(`... and ${records.length - 10} more records`);
|
|
477
|
+
}
|
|
478
|
+
console.log('='.repeat(100));
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
console.error(`ā Error retrieving telemetry data: ${error instanceof Error ? error.message : error}`);
|
|
482
|
+
process.exit(1);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Main CLI program
|
|
488
|
+
*/
|
|
489
|
+
async function main() {
|
|
490
|
+
const program = new Command();
|
|
491
|
+
const dashboard = new TelemetryDashboard();
|
|
492
|
+
const validator = new RuntimeValidator();
|
|
493
|
+
program
|
|
494
|
+
.name('dcyfr')
|
|
495
|
+
.description('DCYFR Telemetry Dashboard - View agent performance metrics')
|
|
496
|
+
.version('1.0.0');
|
|
497
|
+
// Telemetry command
|
|
498
|
+
program
|
|
499
|
+
.command('telemetry')
|
|
500
|
+
.description('Display telemetry data and cost analysis')
|
|
501
|
+
.option('--agent <name>', 'Filter by agent name')
|
|
502
|
+
.option('--period <period>', 'Time period (today, yesterday, week, month)', 'week')
|
|
503
|
+
.option('--breakdown <type>', 'Show breakdown by type (models)')
|
|
504
|
+
.option('--export <file>', 'Export data to CSV file')
|
|
505
|
+
.option('--db <path>', 'Custom database path')
|
|
506
|
+
.action(async (options) => {
|
|
507
|
+
// Set custom database path if provided
|
|
508
|
+
if (options.db) {
|
|
509
|
+
dashboard.setDatabasePath(options.db);
|
|
510
|
+
}
|
|
511
|
+
try {
|
|
512
|
+
if (options.breakdown) {
|
|
513
|
+
if (options.breakdown === 'models') {
|
|
514
|
+
const breakdown = await dashboard.getModelBreakdown();
|
|
515
|
+
dashboard.displayModelBreakdown(breakdown);
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
console.error(`ā Unsupported breakdown type: ${options.breakdown}`);
|
|
519
|
+
process.exit(1);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
else if (options.export) {
|
|
523
|
+
await dashboard.exportToCsv(options.export, options.agent, options.period);
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
await dashboard.displayAgentTelemetry(options.agent, options.period);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
console.error(`ā Command failed: ${error instanceof Error ? error.message : error}`);
|
|
531
|
+
process.exit(1);
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
// Validate runtime command
|
|
535
|
+
program
|
|
536
|
+
.command('validate-runtime')
|
|
537
|
+
.description('Validate DCYFR runtime environment and provider configuration')
|
|
538
|
+
.option('--setup-help', 'Show provider setup instructions')
|
|
539
|
+
.action(async (options) => {
|
|
540
|
+
try {
|
|
541
|
+
if (options.setupHelp) {
|
|
542
|
+
validator.displayProviderSetup();
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
const result = await validator.validateRuntime();
|
|
546
|
+
if (!result.valid) {
|
|
547
|
+
process.exit(1);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
catch (error) {
|
|
552
|
+
console.error(`ā Validation failed: ${error instanceof Error ? error.message : error}`);
|
|
553
|
+
process.exit(1);
|
|
554
|
+
}
|
|
555
|
+
});
|
|
556
|
+
// Parse command line arguments
|
|
557
|
+
program.parse();
|
|
558
|
+
}
|
|
559
|
+
if (import.meta.url === `file://${process.argv[1]}` || import.meta.url.endsWith(process.argv[1])) {
|
|
560
|
+
main().catch((error) => {
|
|
561
|
+
console.error('ā Unexpected error:', error);
|
|
562
|
+
process.exit(1);
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
//# sourceMappingURL=telemetry-dashboard.js.map
|