@backendkit-labs/agent-core 0.14.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/dist/agent-discovery/AgentPackageLoader.d.ts +14 -0
- package/dist/agent-discovery/AgentPackageLoader.d.ts.map +1 -0
- package/dist/agent-discovery/AgentPackageLoader.js +78 -0
- package/dist/agent-discovery/AgentPackageLoader.js.map +1 -0
- package/dist/agent-discovery/RemoteAgentRegistry.d.ts +31 -0
- package/dist/agent-discovery/RemoteAgentRegistry.d.ts.map +1 -0
- package/dist/agent-discovery/RemoteAgentRegistry.js +103 -0
- package/dist/agent-discovery/RemoteAgentRegistry.js.map +1 -0
- package/dist/agent-discovery/discoverAgents.d.ts +18 -0
- package/dist/agent-discovery/discoverAgents.d.ts.map +1 -0
- package/dist/agent-discovery/discoverAgents.js +59 -0
- package/dist/agent-discovery/discoverAgents.js.map +1 -0
- package/dist/agent-discovery/index.d.ts +5 -0
- package/dist/agent-discovery/index.d.ts.map +1 -0
- package/dist/agent-discovery/index.js +12 -0
- package/dist/agent-discovery/index.js.map +1 -0
- package/dist/agent-discovery/types.d.ts +42 -0
- package/dist/agent-discovery/types.d.ts.map +1 -0
- package/dist/agent-discovery/types.js +3 -0
- package/dist/agent-discovery/types.js.map +1 -0
- package/dist/agent-memory/EpisodicMemory.d.ts +26 -0
- package/dist/agent-memory/EpisodicMemory.d.ts.map +1 -0
- package/dist/agent-memory/EpisodicMemory.js +83 -0
- package/dist/agent-memory/EpisodicMemory.js.map +1 -0
- package/dist/agent-memory/MemorySystem.d.ts +40 -0
- package/dist/agent-memory/MemorySystem.d.ts.map +1 -0
- package/dist/agent-memory/MemorySystem.js +75 -0
- package/dist/agent-memory/MemorySystem.js.map +1 -0
- package/dist/agent-memory/ProceduralMemory.d.ts +26 -0
- package/dist/agent-memory/ProceduralMemory.d.ts.map +1 -0
- package/dist/agent-memory/ProceduralMemory.js +104 -0
- package/dist/agent-memory/ProceduralMemory.js.map +1 -0
- package/dist/agent-memory/SemanticMemory.d.ts +21 -0
- package/dist/agent-memory/SemanticMemory.d.ts.map +1 -0
- package/dist/agent-memory/SemanticMemory.js +68 -0
- package/dist/agent-memory/SemanticMemory.js.map +1 -0
- package/dist/agent-memory/index.d.ts +9 -0
- package/dist/agent-memory/index.d.ts.map +1 -0
- package/dist/agent-memory/index.js +19 -0
- package/dist/agent-memory/index.js.map +1 -0
- package/dist/agent-memory/scoring.d.ts +10 -0
- package/dist/agent-memory/scoring.d.ts.map +1 -0
- package/dist/agent-memory/scoring.js +32 -0
- package/dist/agent-memory/scoring.js.map +1 -0
- package/dist/agent-memory/stores/InMemoryStore.d.ts +10 -0
- package/dist/agent-memory/stores/InMemoryStore.d.ts.map +1 -0
- package/dist/agent-memory/stores/InMemoryStore.js +25 -0
- package/dist/agent-memory/stores/InMemoryStore.js.map +1 -0
- package/dist/agent-memory/stores/JsonFileStore.d.ts +18 -0
- package/dist/agent-memory/stores/JsonFileStore.d.ts.map +1 -0
- package/dist/agent-memory/stores/JsonFileStore.js +61 -0
- package/dist/agent-memory/stores/JsonFileStore.js.map +1 -0
- package/dist/agent-memory/tools.d.ts +6 -0
- package/dist/agent-memory/tools.d.ts.map +1 -0
- package/dist/agent-memory/tools.js +74 -0
- package/dist/agent-memory/tools.js.map +1 -0
- package/dist/agent-memory/types.d.ts +75 -0
- package/dist/agent-memory/types.d.ts.map +1 -0
- package/dist/agent-memory/types.js +4 -0
- package/dist/agent-memory/types.js.map +1 -0
- package/dist/bootstrap/GlobalSeed.d.ts +46 -0
- package/dist/bootstrap/GlobalSeed.d.ts.map +1 -0
- package/dist/bootstrap/GlobalSeed.js +285 -0
- package/dist/bootstrap/GlobalSeed.js.map +1 -0
- package/dist/bootstrap/config.d.ts +24 -0
- package/dist/bootstrap/config.d.ts.map +1 -0
- package/dist/bootstrap/config.js +71 -0
- package/dist/bootstrap/config.js.map +1 -0
- package/dist/checkpoint/index.d.ts +17 -0
- package/dist/checkpoint/index.d.ts.map +1 -0
- package/dist/checkpoint/index.js +207 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/commands/SlashCommandRegistry.d.ts +98 -0
- package/dist/commands/SlashCommandRegistry.d.ts.map +1 -0
- package/dist/commands/SlashCommandRegistry.js +41 -0
- package/dist/commands/SlashCommandRegistry.js.map +1 -0
- package/dist/commands/builtin.d.ts +7 -0
- package/dist/commands/builtin.d.ts.map +1 -0
- package/dist/commands/builtin.js +694 -0
- package/dist/commands/builtin.js.map +1 -0
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +8 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/context/index.d.ts +8 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +8 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/pipeline.d.ts +46 -0
- package/dist/context/pipeline.d.ts.map +1 -0
- package/dist/context/pipeline.js +111 -0
- package/dist/context/pipeline.js.map +1 -0
- package/dist/context/stages/stage-instructions.d.ts +12 -0
- package/dist/context/stages/stage-instructions.d.ts.map +1 -0
- package/dist/context/stages/stage-instructions.js +76 -0
- package/dist/context/stages/stage-instructions.js.map +1 -0
- package/dist/context/stages/stage-lessons.d.ts +13 -0
- package/dist/context/stages/stage-lessons.d.ts.map +1 -0
- package/dist/context/stages/stage-lessons.js +83 -0
- package/dist/context/stages/stage-lessons.js.map +1 -0
- package/dist/context/stages/stage-manifest.d.ts +11 -0
- package/dist/context/stages/stage-manifest.d.ts.map +1 -0
- package/dist/context/stages/stage-manifest.js +62 -0
- package/dist/context/stages/stage-manifest.js.map +1 -0
- package/dist/context/stages/stage-project.d.ts +10 -0
- package/dist/context/stages/stage-project.d.ts.map +1 -0
- package/dist/context/stages/stage-project.js +55 -0
- package/dist/context/stages/stage-project.js.map +1 -0
- package/dist/context/stages/stage-session.d.ts +12 -0
- package/dist/context/stages/stage-session.d.ts.map +1 -0
- package/dist/context/stages/stage-session.js +69 -0
- package/dist/context/stages/stage-session.js.map +1 -0
- package/dist/delegation/DelegationBus.d.ts +40 -0
- package/dist/delegation/DelegationBus.d.ts.map +1 -0
- package/dist/delegation/DelegationBus.js +68 -0
- package/dist/delegation/DelegationBus.js.map +1 -0
- package/dist/engine/AgentEngine.d.ts +212 -0
- package/dist/engine/AgentEngine.d.ts.map +1 -0
- package/dist/engine/AgentEngine.js +1037 -0
- package/dist/engine/AgentEngine.js.map +1 -0
- package/dist/engine/AgentRegistry.d.ts +13 -0
- package/dist/engine/AgentRegistry.d.ts.map +1 -0
- package/dist/engine/AgentRegistry.js +37 -0
- package/dist/engine/AgentRegistry.js.map +1 -0
- package/dist/engine/IterationManager.d.ts +79 -0
- package/dist/engine/IterationManager.d.ts.map +1 -0
- package/dist/engine/IterationManager.js +103 -0
- package/dist/engine/IterationManager.js.map +1 -0
- package/dist/engine/ProviderRegistry.d.ts +10 -0
- package/dist/engine/ProviderRegistry.d.ts.map +1 -0
- package/dist/engine/ProviderRegistry.js +28 -0
- package/dist/engine/ProviderRegistry.js.map +1 -0
- package/dist/engine/ToolRegistry.d.ts +54 -0
- package/dist/engine/ToolRegistry.d.ts.map +1 -0
- package/dist/engine/ToolRegistry.js +75 -0
- package/dist/engine/ToolRegistry.js.map +1 -0
- package/dist/engine/createBaseEngine.d.ts +169 -0
- package/dist/engine/createBaseEngine.d.ts.map +1 -0
- package/dist/engine/createBaseEngine.js +91 -0
- package/dist/engine/createBaseEngine.js.map +1 -0
- package/dist/engine/qa-orchestrator.d.ts +56 -0
- package/dist/engine/qa-orchestrator.d.ts.map +1 -0
- package/dist/engine/qa-orchestrator.js +163 -0
- package/dist/engine/qa-orchestrator.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +163 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/MCPClientManager.d.ts +65 -0
- package/dist/mcp/MCPClientManager.d.ts.map +1 -0
- package/dist/mcp/MCPClientManager.js +211 -0
- package/dist/mcp/MCPClientManager.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/types.d.ts +121 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +3 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/SessionMemory.d.ts +9 -0
- package/dist/memory/SessionMemory.d.ts.map +1 -0
- package/dist/memory/SessionMemory.js +20 -0
- package/dist/memory/SessionMemory.js.map +1 -0
- package/dist/observability/CostTracker.d.ts +19 -0
- package/dist/observability/CostTracker.d.ts.map +1 -0
- package/dist/observability/CostTracker.js +64 -0
- package/dist/observability/CostTracker.js.map +1 -0
- package/dist/observability/MetricsCollector.d.ts +17 -0
- package/dist/observability/MetricsCollector.d.ts.map +1 -0
- package/dist/observability/MetricsCollector.js +70 -0
- package/dist/observability/MetricsCollector.js.map +1 -0
- package/dist/observability/ObservabilityManager.d.ts +33 -0
- package/dist/observability/ObservabilityManager.d.ts.map +1 -0
- package/dist/observability/ObservabilityManager.js +107 -0
- package/dist/observability/ObservabilityManager.js.map +1 -0
- package/dist/observability/Tracer.d.ts +23 -0
- package/dist/observability/Tracer.d.ts.map +1 -0
- package/dist/observability/Tracer.js +65 -0
- package/dist/observability/Tracer.js.map +1 -0
- package/dist/observability/index.d.ts +7 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +14 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/types.d.ts +77 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +15 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/orchestration/audit/audit-ci-blocker.d.ts +31 -0
- package/dist/orchestration/audit/audit-ci-blocker.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-ci-blocker.js +120 -0
- package/dist/orchestration/audit/audit-ci-blocker.js.map +1 -0
- package/dist/orchestration/audit/audit-finding-tracer.d.ts +33 -0
- package/dist/orchestration/audit/audit-finding-tracer.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-finding-tracer.js +126 -0
- package/dist/orchestration/audit/audit-finding-tracer.js.map +1 -0
- package/dist/orchestration/audit/audit-lessons-learned.d.ts +27 -0
- package/dist/orchestration/audit/audit-lessons-learned.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-lessons-learned.js +155 -0
- package/dist/orchestration/audit/audit-lessons-learned.js.map +1 -0
- package/dist/orchestration/audit/audit-pending-issues.d.ts +21 -0
- package/dist/orchestration/audit/audit-pending-issues.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-pending-issues.js +110 -0
- package/dist/orchestration/audit/audit-pending-issues.js.map +1 -0
- package/dist/orchestration/audit/audit-reflection-bridge.d.ts +39 -0
- package/dist/orchestration/audit/audit-reflection-bridge.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-reflection-bridge.js +65 -0
- package/dist/orchestration/audit/audit-reflection-bridge.js.map +1 -0
- package/dist/orchestration/audit/audit-report-renderer.d.ts +30 -0
- package/dist/orchestration/audit/audit-report-renderer.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-report-renderer.js +249 -0
- package/dist/orchestration/audit/audit-report-renderer.js.map +1 -0
- package/dist/orchestration/audit/audit-report-version-manager.d.ts +52 -0
- package/dist/orchestration/audit/audit-report-version-manager.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-report-version-manager.js +144 -0
- package/dist/orchestration/audit/audit-report-version-manager.js.map +1 -0
- package/dist/orchestration/audit/audit-silent-gates-buffer.d.ts +37 -0
- package/dist/orchestration/audit/audit-silent-gates-buffer.d.ts.map +1 -0
- package/dist/orchestration/audit/audit-silent-gates-buffer.js +129 -0
- package/dist/orchestration/audit/audit-silent-gates-buffer.js.map +1 -0
- package/dist/orchestration/audit/index.d.ts +17 -0
- package/dist/orchestration/audit/index.d.ts.map +1 -0
- package/dist/orchestration/audit/index.js +26 -0
- package/dist/orchestration/audit/index.js.map +1 -0
- package/dist/orchestration/audit/types.d.ts +79 -0
- package/dist/orchestration/audit/types.d.ts.map +1 -0
- package/dist/orchestration/audit/types.js +10 -0
- package/dist/orchestration/audit/types.js.map +1 -0
- package/dist/orchestration/audit-reporter.d.ts +133 -0
- package/dist/orchestration/audit-reporter.d.ts.map +1 -0
- package/dist/orchestration/audit-reporter.js +322 -0
- package/dist/orchestration/audit-reporter.js.map +1 -0
- package/dist/orchestration/config-loader.d.ts +51 -0
- package/dist/orchestration/config-loader.d.ts.map +1 -0
- package/dist/orchestration/config-loader.js +215 -0
- package/dist/orchestration/config-loader.js.map +1 -0
- package/dist/orchestration/domain-detector.d.ts +36 -0
- package/dist/orchestration/domain-detector.d.ts.map +1 -0
- package/dist/orchestration/domain-detector.js +157 -0
- package/dist/orchestration/domain-detector.js.map +1 -0
- package/dist/orchestration/fsm.d.ts +86 -0
- package/dist/orchestration/fsm.d.ts.map +1 -0
- package/dist/orchestration/fsm.js +223 -0
- package/dist/orchestration/fsm.js.map +1 -0
- package/dist/orchestration/gate-resolver.d.ts +42 -0
- package/dist/orchestration/gate-resolver.d.ts.map +1 -0
- package/dist/orchestration/gate-resolver.js +94 -0
- package/dist/orchestration/gate-resolver.js.map +1 -0
- package/dist/orchestration/index.d.ts +15 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +32 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/intent-detector.d.ts +43 -0
- package/dist/orchestration/intent-detector.d.ts.map +1 -0
- package/dist/orchestration/intent-detector.js +249 -0
- package/dist/orchestration/intent-detector.js.map +1 -0
- package/dist/orchestration/keyword-match.d.ts +17 -0
- package/dist/orchestration/keyword-match.d.ts.map +1 -0
- package/dist/orchestration/keyword-match.js +26 -0
- package/dist/orchestration/keyword-match.js.map +1 -0
- package/dist/orchestration/llm-client-adapter.d.ts +11 -0
- package/dist/orchestration/llm-client-adapter.d.ts.map +1 -0
- package/dist/orchestration/llm-client-adapter.js +30 -0
- package/dist/orchestration/llm-client-adapter.js.map +1 -0
- package/dist/orchestration/orchestrator.d.ts +153 -0
- package/dist/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/orchestration/orchestrator.js +471 -0
- package/dist/orchestration/orchestrator.js.map +1 -0
- package/dist/orchestration/policy-engine.d.ts +47 -0
- package/dist/orchestration/policy-engine.d.ts.map +1 -0
- package/dist/orchestration/policy-engine.js +262 -0
- package/dist/orchestration/policy-engine.js.map +1 -0
- package/dist/orchestration/risk-scorer.d.ts +38 -0
- package/dist/orchestration/risk-scorer.d.ts.map +1 -0
- package/dist/orchestration/risk-scorer.js +145 -0
- package/dist/orchestration/risk-scorer.js.map +1 -0
- package/dist/orchestration/task-context.d.ts +195 -0
- package/dist/orchestration/task-context.d.ts.map +1 -0
- package/dist/orchestration/task-context.js +160 -0
- package/dist/orchestration/task-context.js.map +1 -0
- package/dist/orchestration/types.d.ts +111 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +37 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/qa/index.d.ts +3 -0
- package/dist/qa/index.d.ts.map +1 -0
- package/dist/qa/index.js +6 -0
- package/dist/qa/index.js.map +1 -0
- package/dist/qa/qa-service.d.ts +30 -0
- package/dist/qa/qa-service.d.ts.map +1 -0
- package/dist/qa/qa-service.js +200 -0
- package/dist/qa/qa-service.js.map +1 -0
- package/dist/reflection/commands/domain-commands.d.ts +78 -0
- package/dist/reflection/commands/domain-commands.d.ts.map +1 -0
- package/dist/reflection/commands/domain-commands.js +203 -0
- package/dist/reflection/commands/domain-commands.js.map +1 -0
- package/dist/reflection/domain-registry.d.ts +104 -0
- package/dist/reflection/domain-registry.d.ts.map +1 -0
- package/dist/reflection/domain-registry.js +279 -0
- package/dist/reflection/domain-registry.js.map +1 -0
- package/dist/reflection/domains/agent-domain.d.ts +40 -0
- package/dist/reflection/domains/agent-domain.d.ts.map +1 -0
- package/dist/reflection/domains/agent-domain.js +161 -0
- package/dist/reflection/domains/agent-domain.js.map +1 -0
- package/dist/reflection/domains/audit-domain.d.ts +46 -0
- package/dist/reflection/domains/audit-domain.d.ts.map +1 -0
- package/dist/reflection/domains/audit-domain.js +241 -0
- package/dist/reflection/domains/audit-domain.js.map +1 -0
- package/dist/reflection/domains/bootstrap-domain.d.ts +40 -0
- package/dist/reflection/domains/bootstrap-domain.d.ts.map +1 -0
- package/dist/reflection/domains/bootstrap-domain.js +156 -0
- package/dist/reflection/domains/bootstrap-domain.js.map +1 -0
- package/dist/reflection/domains/commit-domain.d.ts +40 -0
- package/dist/reflection/domains/commit-domain.d.ts.map +1 -0
- package/dist/reflection/domains/commit-domain.js +174 -0
- package/dist/reflection/domains/commit-domain.js.map +1 -0
- package/dist/reflection/domains/test-domain.d.ts +40 -0
- package/dist/reflection/domains/test-domain.d.ts.map +1 -0
- package/dist/reflection/domains/test-domain.js +194 -0
- package/dist/reflection/domains/test-domain.js.map +1 -0
- package/dist/reflection/failure-catalog.d.ts +100 -0
- package/dist/reflection/failure-catalog.d.ts.map +1 -0
- package/dist/reflection/failure-catalog.js +269 -0
- package/dist/reflection/failure-catalog.js.map +1 -0
- package/dist/reflection/historical-loader.d.ts +105 -0
- package/dist/reflection/historical-loader.d.ts.map +1 -0
- package/dist/reflection/historical-loader.js +462 -0
- package/dist/reflection/historical-loader.js.map +1 -0
- package/dist/reflection/hooks/agent-hook.d.ts +72 -0
- package/dist/reflection/hooks/agent-hook.d.ts.map +1 -0
- package/dist/reflection/hooks/agent-hook.js +98 -0
- package/dist/reflection/hooks/agent-hook.js.map +1 -0
- package/dist/reflection/hooks/audit-hook.d.ts +72 -0
- package/dist/reflection/hooks/audit-hook.d.ts.map +1 -0
- package/dist/reflection/hooks/audit-hook.js +112 -0
- package/dist/reflection/hooks/audit-hook.js.map +1 -0
- package/dist/reflection/hooks/bootstrap-hook.d.ts +71 -0
- package/dist/reflection/hooks/bootstrap-hook.d.ts.map +1 -0
- package/dist/reflection/hooks/bootstrap-hook.js +97 -0
- package/dist/reflection/hooks/bootstrap-hook.js.map +1 -0
- package/dist/reflection/hooks/commit-hook.d.ts +63 -0
- package/dist/reflection/hooks/commit-hook.d.ts.map +1 -0
- package/dist/reflection/hooks/commit-hook.js +90 -0
- package/dist/reflection/hooks/commit-hook.js.map +1 -0
- package/dist/reflection/hooks/test-hook.d.ts +65 -0
- package/dist/reflection/hooks/test-hook.d.ts.map +1 -0
- package/dist/reflection/hooks/test-hook.js +99 -0
- package/dist/reflection/hooks/test-hook.js.map +1 -0
- package/dist/reflection/index.d.ts +19 -0
- package/dist/reflection/index.d.ts.map +1 -0
- package/dist/reflection/index.js +40 -0
- package/dist/reflection/index.js.map +1 -0
- package/dist/reflection/lessons-memo-generator.d.ts +60 -0
- package/dist/reflection/lessons-memo-generator.d.ts.map +1 -0
- package/dist/reflection/lessons-memo-generator.js +286 -0
- package/dist/reflection/lessons-memo-generator.js.map +1 -0
- package/dist/reflection/pattern-detector.d.ts +55 -0
- package/dist/reflection/pattern-detector.d.ts.map +1 -0
- package/dist/reflection/pattern-detector.js +137 -0
- package/dist/reflection/pattern-detector.js.map +1 -0
- package/dist/reflection/policy-promoter.d.ts +86 -0
- package/dist/reflection/policy-promoter.d.ts.map +1 -0
- package/dist/reflection/policy-promoter.js +382 -0
- package/dist/reflection/policy-promoter.js.map +1 -0
- package/dist/reflection/reflection-engine.d.ts +160 -0
- package/dist/reflection/reflection-engine.d.ts.map +1 -0
- package/dist/reflection/reflection-engine.js +352 -0
- package/dist/reflection/reflection-engine.js.map +1 -0
- package/dist/reflection/types.d.ts +106 -0
- package/dist/reflection/types.d.ts.map +1 -0
- package/dist/reflection/types.js +64 -0
- package/dist/reflection/types.js.map +1 -0
- package/dist/shared/llm/resilient-client.d.ts +40 -0
- package/dist/shared/llm/resilient-client.d.ts.map +1 -0
- package/dist/shared/llm/resilient-client.js +60 -0
- package/dist/shared/llm/resilient-client.js.map +1 -0
- package/dist/shared/utils/atomic-write.d.ts +7 -0
- package/dist/shared/utils/atomic-write.d.ts.map +1 -0
- package/dist/shared/utils/atomic-write.js +52 -0
- package/dist/shared/utils/atomic-write.js.map +1 -0
- package/dist/shared/utils/git.d.ts +2 -0
- package/dist/shared/utils/git.d.ts.map +1 -0
- package/dist/shared/utils/git.js +17 -0
- package/dist/shared/utils/git.js.map +1 -0
- package/dist/shared/utils/project-key.d.ts +4 -0
- package/dist/shared/utils/project-key.d.ts.map +1 -0
- package/dist/shared/utils/project-key.js +54 -0
- package/dist/shared/utils/project-key.js.map +1 -0
- package/dist/shared/utils/string-utils.d.ts +17 -0
- package/dist/shared/utils/string-utils.d.ts.map +1 -0
- package/dist/shared/utils/string-utils.js +37 -0
- package/dist/shared/utils/string-utils.js.map +1 -0
- package/dist/skills/activator.d.ts +27 -0
- package/dist/skills/activator.d.ts.map +1 -0
- package/dist/skills/activator.js +127 -0
- package/dist/skills/activator.js.map +1 -0
- package/dist/skills/builtins/global.d.ts +7 -0
- package/dist/skills/builtins/global.d.ts.map +1 -0
- package/dist/skills/builtins/global.js +208 -0
- package/dist/skills/builtins/global.js.map +1 -0
- package/dist/skills/builtins/go-pack.d.ts +7 -0
- package/dist/skills/builtins/go-pack.d.ts.map +1 -0
- package/dist/skills/builtins/go-pack.js +263 -0
- package/dist/skills/builtins/go-pack.js.map +1 -0
- package/dist/skills/builtins/java-pack.d.ts +7 -0
- package/dist/skills/builtins/java-pack.d.ts.map +1 -0
- package/dist/skills/builtins/java-pack.js +272 -0
- package/dist/skills/builtins/java-pack.js.map +1 -0
- package/dist/skills/builtins/kotlin-pack.d.ts +9 -0
- package/dist/skills/builtins/kotlin-pack.d.ts.map +1 -0
- package/dist/skills/builtins/kotlin-pack.js +292 -0
- package/dist/skills/builtins/kotlin-pack.js.map +1 -0
- package/dist/skills/builtins/node-pack.d.ts +7 -0
- package/dist/skills/builtins/node-pack.d.ts.map +1 -0
- package/dist/skills/builtins/node-pack.js +750 -0
- package/dist/skills/builtins/node-pack.js.map +1 -0
- package/dist/skills/builtins/python-pack.d.ts +7 -0
- package/dist/skills/builtins/python-pack.d.ts.map +1 -0
- package/dist/skills/builtins/python-pack.js +303 -0
- package/dist/skills/builtins/python-pack.js.map +1 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +24 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +39 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +152 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/manager.d.ts +97 -0
- package/dist/skills/manager.d.ts.map +1 -0
- package/dist/skills/manager.js +296 -0
- package/dist/skills/manager.js.map +1 -0
- package/dist/skills/parse-md-skill.d.ts +14 -0
- package/dist/skills/parse-md-skill.d.ts.map +1 -0
- package/dist/skills/parse-md-skill.js +86 -0
- package/dist/skills/parse-md-skill.js.map +1 -0
- package/dist/skills/providers/github.d.ts +21 -0
- package/dist/skills/providers/github.d.ts.map +1 -0
- package/dist/skills/providers/github.js +146 -0
- package/dist/skills/providers/github.js.map +1 -0
- package/dist/skills/providers/index.d.ts +6 -0
- package/dist/skills/providers/index.d.ts.map +1 -0
- package/dist/skills/providers/index.js +12 -0
- package/dist/skills/providers/index.js.map +1 -0
- package/dist/skills/providers/local.d.ts +16 -0
- package/dist/skills/providers/local.d.ts.map +1 -0
- package/dist/skills/providers/local.js +91 -0
- package/dist/skills/providers/local.js.map +1 -0
- package/dist/skills/providers/obsidian.d.ts +31 -0
- package/dist/skills/providers/obsidian.d.ts.map +1 -0
- package/dist/skills/providers/obsidian.js +141 -0
- package/dist/skills/providers/obsidian.js.map +1 -0
- package/dist/skills/providers/skills-sh.d.ts +32 -0
- package/dist/skills/providers/skills-sh.d.ts.map +1 -0
- package/dist/skills/providers/skills-sh.js +53 -0
- package/dist/skills/providers/skills-sh.js.map +1 -0
- package/dist/skills/providers/types.d.ts +25 -0
- package/dist/skills/providers/types.d.ts.map +1 -0
- package/dist/skills/providers/types.js +3 -0
- package/dist/skills/providers/types.js.map +1 -0
- package/dist/skills/registry.d.ts +18 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +45 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/types.d.ts +66 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +3 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/defineTool.d.ts +34 -0
- package/dist/tools/defineTool.d.ts.map +1 -0
- package/dist/tools/defineTool.js +63 -0
- package/dist/tools/defineTool.js.map +1 -0
- package/dist/transport/CallbackTransport.d.ts +12 -0
- package/dist/transport/CallbackTransport.d.ts.map +1 -0
- package/dist/transport/CallbackTransport.js +28 -0
- package/dist/transport/CallbackTransport.js.map +1 -0
- package/dist/transport/StdoutTransport.d.ts +9 -0
- package/dist/transport/StdoutTransport.d.ts.map +1 -0
- package/dist/transport/StdoutTransport.js +63 -0
- package/dist/transport/StdoutTransport.js.map +1 -0
- package/dist/transport/Transport.d.ts +8 -0
- package/dist/transport/Transport.d.ts.map +1 -0
- package/dist/transport/Transport.js +3 -0
- package/dist/transport/Transport.js.map +1 -0
- package/dist/triggers/EventBus.d.ts +14 -0
- package/dist/triggers/EventBus.d.ts.map +1 -0
- package/dist/triggers/EventBus.js +18 -0
- package/dist/triggers/EventBus.js.map +1 -0
- package/dist/triggers/TriggerManager.d.ts +28 -0
- package/dist/triggers/TriggerManager.d.ts.map +1 -0
- package/dist/triggers/TriggerManager.js +158 -0
- package/dist/triggers/TriggerManager.js.map +1 -0
- package/dist/triggers/WebhookServer.d.ts +23 -0
- package/dist/triggers/WebhookServer.d.ts.map +1 -0
- package/dist/triggers/WebhookServer.js +127 -0
- package/dist/triggers/WebhookServer.js.map +1 -0
- package/dist/triggers/createAutonomousAgent.d.ts +49 -0
- package/dist/triggers/createAutonomousAgent.d.ts.map +1 -0
- package/dist/triggers/createAutonomousAgent.js +42 -0
- package/dist/triggers/createAutonomousAgent.js.map +1 -0
- package/dist/triggers/index.d.ts +8 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +12 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/types.d.ts +35 -0
- package/dist/triggers/types.d.ts.map +1 -0
- package/dist/triggers/types.js +3 -0
- package/dist/triggers/types.js.map +1 -0
- package/dist/types/index.d.ts +256 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/workflow/WorkflowBuilder.d.ts +22 -0
- package/dist/workflow/WorkflowBuilder.d.ts.map +1 -0
- package/dist/workflow/WorkflowBuilder.js +67 -0
- package/dist/workflow/WorkflowBuilder.js.map +1 -0
- package/dist/workflow/WorkflowRunner.d.ts +22 -0
- package/dist/workflow/WorkflowRunner.d.ts.map +1 -0
- package/dist/workflow/WorkflowRunner.js +97 -0
- package/dist/workflow/WorkflowRunner.js.map +1 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +10 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/types.d.ts +35 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +3 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workspace/index.d.ts +55 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +189 -0
- package/dist/workspace/index.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description ReflectionEngine — Orquestador universal del sistema de auto-mejora.
|
|
4
|
+
*
|
|
5
|
+
* Pipeline: Feedback → Catalog → Pattern Detection → Policy Promotion → Prevention
|
|
6
|
+
*
|
|
7
|
+
* Opera sobre 5 dominios: audit, test, commit, agent, bootstrap.
|
|
8
|
+
* Cada dominio tiene sus propios failureTypes y hooks de captura,
|
|
9
|
+
* pero comparten el mismo pipeline de deteccion y promocion.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const engine = new ReflectionEngine({ projectRoot: process.cwd() });
|
|
14
|
+
* await engine.initialize();
|
|
15
|
+
* await engine.reflect(); // escanea todos los dominios
|
|
16
|
+
* console.log(engine.getStats());
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
22
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
23
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(o, k2, desc);
|
|
26
|
+
}) : (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
o[k2] = m[k];
|
|
29
|
+
}));
|
|
30
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
31
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
32
|
+
}) : function(o, v) {
|
|
33
|
+
o["default"] = v;
|
|
34
|
+
});
|
|
35
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
36
|
+
var ownKeys = function(o) {
|
|
37
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
38
|
+
var ar = [];
|
|
39
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
40
|
+
return ar;
|
|
41
|
+
};
|
|
42
|
+
return ownKeys(o);
|
|
43
|
+
};
|
|
44
|
+
return function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
})();
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.ReflectionEngine = void 0;
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const path_1 = require("path");
|
|
56
|
+
const os = __importStar(require("os"));
|
|
57
|
+
const fs = __importStar(require("fs/promises"));
|
|
58
|
+
const atomic_write_1 = require("../shared/utils/atomic-write");
|
|
59
|
+
const failure_catalog_1 = require("./failure-catalog");
|
|
60
|
+
const pattern_detector_1 = require("./pattern-detector");
|
|
61
|
+
const policy_promoter_1 = require("./policy-promoter");
|
|
62
|
+
const types_1 = require("./types");
|
|
63
|
+
// ── ReflectionEngine ─────────────────────────────────────────────────────────
|
|
64
|
+
class ReflectionEngine {
|
|
65
|
+
catalog;
|
|
66
|
+
detector;
|
|
67
|
+
promoter;
|
|
68
|
+
config;
|
|
69
|
+
registry;
|
|
70
|
+
appName;
|
|
71
|
+
projectRoot;
|
|
72
|
+
onProjectContextUpdate;
|
|
73
|
+
onEngineInsights;
|
|
74
|
+
lastPatterns = [];
|
|
75
|
+
lastPromotedRules = [];
|
|
76
|
+
pendingReflections = new Set();
|
|
77
|
+
projectDir;
|
|
78
|
+
constructor(options) {
|
|
79
|
+
const projectRoot = options?.projectRoot ?? process.cwd();
|
|
80
|
+
const useGlobal = options?.useGlobalDir ?? true;
|
|
81
|
+
this.appName = options?.appName ?? 'bk-agent';
|
|
82
|
+
this.projectRoot = projectRoot;
|
|
83
|
+
this.onProjectContextUpdate = options?.onProjectContextUpdate;
|
|
84
|
+
this.onEngineInsights = options?.onEngineInsights;
|
|
85
|
+
this.catalog = new failure_catalog_1.FailureCatalog({ projectRoot, useGlobalDir: useGlobal, appName: this.appName });
|
|
86
|
+
this.detector = new pattern_detector_1.PatternDetector(this.catalog);
|
|
87
|
+
this.promoter = useGlobal
|
|
88
|
+
? new policy_promoter_1.PolicyPromoter({ appName: this.appName })
|
|
89
|
+
: new policy_promoter_1.PolicyPromoter({ manifestPath: path.join(projectRoot, `.${this.appName}`, 'manifest.yaml') });
|
|
90
|
+
this.config = {
|
|
91
|
+
...(0, types_1.defaultReflectionConfig)(),
|
|
92
|
+
...options?.config,
|
|
93
|
+
};
|
|
94
|
+
if (options?.registry) {
|
|
95
|
+
this.registry = options.registry;
|
|
96
|
+
this.promoter.setRegistry(options.registry);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ── Inicializacion ─────────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* @description Inicializa el engine: carga el catalogo de fallos y el registry desde disco.
|
|
102
|
+
* Siempre llamar antes de usar el engine.
|
|
103
|
+
*/
|
|
104
|
+
async initialize() {
|
|
105
|
+
await this.catalog.load();
|
|
106
|
+
if (this.registry) {
|
|
107
|
+
await this.registry.load();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @description Conecta un DomainRegistry al engine despues de la construccion.
|
|
112
|
+
* El registry se cargara en el siguiente llamado a initialize() o inmediatamente si
|
|
113
|
+
* el engine ya esta inicializado.
|
|
114
|
+
*/
|
|
115
|
+
async connectRegistry(registry) {
|
|
116
|
+
this.registry = registry;
|
|
117
|
+
this.promoter.setRegistry(registry);
|
|
118
|
+
await registry.load();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @description Devuelve el DomainRegistry conectado, si existe.
|
|
122
|
+
*/
|
|
123
|
+
getRegistry() {
|
|
124
|
+
return this.registry;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @description Conecta el engine con el directorio de memoria del proyecto.
|
|
128
|
+
* Una vez conectado, reflect() y AuditHook actualizaran los archivos de memoria.
|
|
129
|
+
*/
|
|
130
|
+
connectMemory(projectDir) {
|
|
131
|
+
this.projectDir = projectDir;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* @description Devuelve el directorio de memoria conectado, si existe.
|
|
135
|
+
*/
|
|
136
|
+
getProjectDir() {
|
|
137
|
+
return this.projectDir;
|
|
138
|
+
}
|
|
139
|
+
// ── Pipeline de reflexion ──────────────────────────────────────────────────
|
|
140
|
+
/**
|
|
141
|
+
* @description Ejecuta el pipeline completo de reflexion para todos los dominios
|
|
142
|
+
* (o solo los activos segun config):
|
|
143
|
+
* 1. Escanea el catalogo buscando patrones >= promotionThreshold
|
|
144
|
+
* 2. Promueve los patrones no promovidos aun a policyRules
|
|
145
|
+
* 3. Devuelve los patrones detectados y las reglas promovidas
|
|
146
|
+
*/
|
|
147
|
+
async reflect(options) {
|
|
148
|
+
const threshold = options?.threshold ?? this.config.promotionThreshold;
|
|
149
|
+
const autoPromote = options?.autoPromote ?? this.config.autoPromote;
|
|
150
|
+
// Registry tiene prioridad: usa sus dominios activos (built-ins + custom habilitados)
|
|
151
|
+
const activeDomains = options?.domain
|
|
152
|
+
? [options.domain]
|
|
153
|
+
: (this.registry?.getActiveDomains() ?? this.config.activeDomains);
|
|
154
|
+
// 1. Escanear dominios activos
|
|
155
|
+
const allPatterns = [];
|
|
156
|
+
for (const domain of activeDomains) {
|
|
157
|
+
const patterns = await this.detector.scanByDomain(domain, threshold);
|
|
158
|
+
allPatterns.push(...patterns);
|
|
159
|
+
}
|
|
160
|
+
this.lastPatterns = allPatterns;
|
|
161
|
+
// 2. Promover patrones no promovidos aun
|
|
162
|
+
const promotedRules = [];
|
|
163
|
+
if (autoPromote && this.config.enabled) {
|
|
164
|
+
// H-05: Contar reglas auto-generadas existentes para verificar limite maximo
|
|
165
|
+
const existingRules = await this.promoter.getExistingRules();
|
|
166
|
+
let autoGeneratedCount = existingRules.filter(r => r.autoGenerated === true).length;
|
|
167
|
+
const maxRules = this.config.maxAutoGeneratedRules;
|
|
168
|
+
for (const pattern of allPatterns) {
|
|
169
|
+
if (pattern.failureType.startsWith('unknown_'))
|
|
170
|
+
continue;
|
|
171
|
+
// H-05: Solo auto-promover patrones de severidad high o critical
|
|
172
|
+
if (pattern.severity !== 'high' && pattern.severity !== 'critical')
|
|
173
|
+
continue;
|
|
174
|
+
// H-05: Verificar umbral minimo explicito
|
|
175
|
+
if (pattern.count < this.config.promotionThreshold)
|
|
176
|
+
continue;
|
|
177
|
+
const existing = await this.promoter.findRule(pattern.domain, pattern.failureType);
|
|
178
|
+
if (existing) {
|
|
179
|
+
pattern.promotedToPolicy = true;
|
|
180
|
+
pattern.policyRuleId = existing.id;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
// H-05: No promover si se alcanzo el limite maximo de reglas auto-generadas
|
|
184
|
+
if (autoGeneratedCount >= maxRules) {
|
|
185
|
+
console.warn(`[ReflectionEngine] Limite de reglas auto-generadas alcanzado (${autoGeneratedCount}/${maxRules}). ` +
|
|
186
|
+
`No se promueve '${pattern.failureType}' (${pattern.domain}).`);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const rule = await this.promoter.promote(pattern);
|
|
190
|
+
promotedRules.push(rule);
|
|
191
|
+
pattern.promotedToPolicy = true;
|
|
192
|
+
pattern.promotedAt = new Date().toISOString();
|
|
193
|
+
pattern.policyRuleId = rule.id;
|
|
194
|
+
autoGeneratedCount++; // incrementar contador local para este batch
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
this.lastPromotedRules = promotedRules;
|
|
198
|
+
if (this.projectDir && promotedRules.length > 0 && this.onProjectContextUpdate) {
|
|
199
|
+
const policyLines = promotedRules.map(r => `- [${r.id}] ${r.name}`).join('\n');
|
|
200
|
+
await this.onProjectContextUpdate(this.projectDir, { notas: `Patrones auto-promovidos:\n${policyLines}` })
|
|
201
|
+
.catch(() => { });
|
|
202
|
+
}
|
|
203
|
+
if (this.projectDir && allPatterns.length > 0 && this.onEngineInsights) {
|
|
204
|
+
const insights = allPatterns.map(p => ({
|
|
205
|
+
failureType: p.failureType,
|
|
206
|
+
domain: p.domain,
|
|
207
|
+
severity: p.severity,
|
|
208
|
+
count: p.count,
|
|
209
|
+
recommendedAction: p.recommendedAction,
|
|
210
|
+
}));
|
|
211
|
+
await this.onEngineInsights(this.projectDir, insights)
|
|
212
|
+
.catch(() => { });
|
|
213
|
+
}
|
|
214
|
+
// 3. Calcular estadisticas
|
|
215
|
+
const stats = await this.calculateStats(activeDomains);
|
|
216
|
+
return { patterns: allPatterns, promotedRules, stats };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* @description Ejecuta reflexion solo para un dominio especifico.
|
|
220
|
+
* Util cuando un hook reporta un incidente y se quiere analizar inmediatamente.
|
|
221
|
+
*/
|
|
222
|
+
async reflectByDomain(domain) {
|
|
223
|
+
return this.reflect({ domain });
|
|
224
|
+
}
|
|
225
|
+
// ── Registro de incidentes (desde hooks) ───────────────────────────────────
|
|
226
|
+
/**
|
|
227
|
+
* @description Registra un incidente en el catalogo y ejecuta reflexion
|
|
228
|
+
* inmediata para el dominio al que pertenece.
|
|
229
|
+
*
|
|
230
|
+
* Este es el metodo principal que los hooks deben llamar.
|
|
231
|
+
*
|
|
232
|
+
* @param record - Datos del incidente (sin ID, se genera automaticamente)
|
|
233
|
+
* @returns El FailureRecord completo y los patrones detectados
|
|
234
|
+
*/
|
|
235
|
+
async reportIncident(record) {
|
|
236
|
+
const fullRecord = { ...record, id: (0, types_1.generateFailureId)() };
|
|
237
|
+
await this.catalog.addRecord(fullRecord);
|
|
238
|
+
this.pendingReflections.add(record.domain);
|
|
239
|
+
return { record: fullRecord, patterns: [] };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* @description Ejecuta la reflexion acumulada de todos los dominios con incidentes pendientes.
|
|
243
|
+
* Llamar al cerrar un sprint o al final de una sesion.
|
|
244
|
+
*/
|
|
245
|
+
async flushReflections() {
|
|
246
|
+
const allPatterns = [];
|
|
247
|
+
const allRules = [];
|
|
248
|
+
for (const domain of this.pendingReflections) {
|
|
249
|
+
const { patterns, promotedRules } = await this.reflectByDomain(domain);
|
|
250
|
+
allPatterns.push(...patterns);
|
|
251
|
+
allRules.push(...promotedRules);
|
|
252
|
+
}
|
|
253
|
+
this.pendingReflections.clear();
|
|
254
|
+
await this.maybeUpdateAgentMd(allPatterns);
|
|
255
|
+
return { patterns: allPatterns, promotedRules: allRules };
|
|
256
|
+
}
|
|
257
|
+
async maybeUpdateAgentMd(patterns) {
|
|
258
|
+
const promoted = patterns.filter(p => (p.severity === 'high' || p.severity === 'critical') && !p.promotedToPolicy);
|
|
259
|
+
if (promoted.length === 0)
|
|
260
|
+
return;
|
|
261
|
+
const agentMdPath = (0, path_1.join)(this.projectRoot, 'AGENT.md');
|
|
262
|
+
const lesson = this.formatLessonsBlock(promoted);
|
|
263
|
+
// Leer, verificar duplicados y escribir en una sola operacion atomica
|
|
264
|
+
// para evitar race conditions entre readFile y atomicWrite
|
|
265
|
+
const current = await fs.readFile(agentMdPath, 'utf-8').catch(() => '');
|
|
266
|
+
if (promoted.every(p => current.includes(p.failureType)))
|
|
267
|
+
return;
|
|
268
|
+
await (0, atomic_write_1.atomicWrite)(agentMdPath, current + '\n\n' + lesson);
|
|
269
|
+
}
|
|
270
|
+
formatLessonsBlock(patterns) {
|
|
271
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
272
|
+
const lines = patterns.map(p => `- **${p.failureType}** (${p.domain}, ${p.severity}): ${p.recommendedAction}`);
|
|
273
|
+
return `## Lessons Learned — ${date}\n\n${lines.join('\n')}\n`;
|
|
274
|
+
}
|
|
275
|
+
// ── Consultas ──────────────────────────────────────────────────────────────
|
|
276
|
+
/**
|
|
277
|
+
* @description Obtiene los patrones detectados en la ultima reflexion.
|
|
278
|
+
*/
|
|
279
|
+
getLastPatterns() {
|
|
280
|
+
return [...this.lastPatterns];
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* @description Obtiene las reglas promovidas en la ultima reflexion.
|
|
284
|
+
*/
|
|
285
|
+
getLastPromotedRules() {
|
|
286
|
+
return [...this.lastPromotedRules];
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* @description Obtiene el catalogo de fallos para operaciones directas.
|
|
290
|
+
*/
|
|
291
|
+
getCatalog() {
|
|
292
|
+
return this.catalog;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* @description Obtiene el detector de patrones.
|
|
296
|
+
*/
|
|
297
|
+
getDetector() {
|
|
298
|
+
return this.detector;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* @description Obtiene el promoter de politicas.
|
|
302
|
+
*/
|
|
303
|
+
getPromoter() {
|
|
304
|
+
return this.promoter;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* @description Obtiene la ruta del archivo de lecciones aprendidas.
|
|
308
|
+
* Util para que el AgentLoop pueda cargar el memo e inyectarlo en los agentes.
|
|
309
|
+
*/
|
|
310
|
+
getLessonsMemoPath() {
|
|
311
|
+
const home = process.env.USERPROFILE ?? process.env.HOME ?? os.homedir();
|
|
312
|
+
const projectKey = this.projectRoot
|
|
313
|
+
.replace(/[/\\]$/, '')
|
|
314
|
+
.replace(/:[/\\]/g, '--')
|
|
315
|
+
.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
316
|
+
return path.join(home, `.${this.appName}`, 'projects', projectKey, 'audits', 'lecciones-aprendidas.md');
|
|
317
|
+
}
|
|
318
|
+
// ── Estadisticas ───────────────────────────────────────────────────────────
|
|
319
|
+
/**
|
|
320
|
+
* @description Calcula estadisticas del Reflection Engine.
|
|
321
|
+
*/
|
|
322
|
+
async getStats() {
|
|
323
|
+
const activeDomains = this.config.activeDomains;
|
|
324
|
+
return this.calculateStats(activeDomains);
|
|
325
|
+
}
|
|
326
|
+
async calculateStats(domains) {
|
|
327
|
+
const domainCounts = await this.catalog.getDomainCounts();
|
|
328
|
+
const totalIncidents = await this.catalog.totalRecords();
|
|
329
|
+
const unresolved = await this.catalog.findUnresolved();
|
|
330
|
+
const countsByDomain = {};
|
|
331
|
+
for (const domain of domains) {
|
|
332
|
+
countsByDomain[domain] = domainCounts[domain] ?? 0;
|
|
333
|
+
}
|
|
334
|
+
const patternsByDomain = {};
|
|
335
|
+
for (const domain of domains) {
|
|
336
|
+
const patterns = await this.detector.scanByDomain(domain);
|
|
337
|
+
patternsByDomain[domain] = patterns.length;
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
enabled: this.config.enabled,
|
|
341
|
+
promotionThreshold: this.config.promotionThreshold,
|
|
342
|
+
activeDomains: [...domains],
|
|
343
|
+
totalIncidents,
|
|
344
|
+
unresolvedCount: unresolved.length,
|
|
345
|
+
countsByDomain,
|
|
346
|
+
patternsByDomain,
|
|
347
|
+
lastReflectionAt: new Date().toISOString(),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
exports.ReflectionEngine = ReflectionEngine;
|
|
352
|
+
//# sourceMappingURL=reflection-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflection-engine.js","sourceRoot":"","sources":["../../src/reflection/reflection-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Base types for the universal Reflection Engine.
|
|
3
|
+
*
|
|
4
|
+
* Defines contracts for FailureRecord, DetectedPattern and the structures
|
|
5
|
+
* connecting the feedback system with deterministic policy promotion.
|
|
6
|
+
*
|
|
7
|
+
* 5 built-in domains: audit, test, commit, agent, bootstrap
|
|
8
|
+
* Custom domains: registered via DomainRegistry and activated per project.
|
|
9
|
+
* Golden rule: >=3 occurrences of the same failureType -> promotion to policyRule
|
|
10
|
+
*/
|
|
11
|
+
export interface PolicyCondition {
|
|
12
|
+
actionType?: string | string[];
|
|
13
|
+
riskLevel?: string | string[];
|
|
14
|
+
domain?: string | string[];
|
|
15
|
+
keywords?: string[];
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface PolicyAction {
|
|
19
|
+
mustInclude?: string[];
|
|
20
|
+
mustPass?: string[];
|
|
21
|
+
mustExecute?: string[];
|
|
22
|
+
requireArchitectureReview?: boolean;
|
|
23
|
+
requireSecurityReview?: boolean;
|
|
24
|
+
requireQaApproval?: boolean;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface PolicyRule {
|
|
28
|
+
if: PolicyCondition;
|
|
29
|
+
then: PolicyAction;
|
|
30
|
+
}
|
|
31
|
+
export interface AuditFinding {
|
|
32
|
+
id?: string;
|
|
33
|
+
dimension: string;
|
|
34
|
+
hallazgo: string;
|
|
35
|
+
severidad: 'critical' | 'high' | 'medium' | 'low';
|
|
36
|
+
evidencia?: string;
|
|
37
|
+
recomendacion?: string;
|
|
38
|
+
agenteResponsable: string;
|
|
39
|
+
resolvedAt?: string;
|
|
40
|
+
}
|
|
41
|
+
export type ReflectionDomain = 'audit' | 'test' | 'commit' | 'agent' | 'bootstrap';
|
|
42
|
+
export type AnyDomain = ReflectionDomain | (string & {});
|
|
43
|
+
export declare const FAILURE_TYPES_BY_DOMAIN: Record<ReflectionDomain, readonly string[]>;
|
|
44
|
+
export type FailureType = typeof FAILURE_TYPES_BY_DOMAIN[ReflectionDomain][number];
|
|
45
|
+
export interface FailureRecord {
|
|
46
|
+
id: string;
|
|
47
|
+
domain: AnyDomain;
|
|
48
|
+
failureType: string;
|
|
49
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
50
|
+
dimension: string;
|
|
51
|
+
gate: string;
|
|
52
|
+
agenteResponsable: string;
|
|
53
|
+
hallazgo: string;
|
|
54
|
+
recomendacion: string;
|
|
55
|
+
archivos: string[];
|
|
56
|
+
fecha: string;
|
|
57
|
+
resolvedByCommit?: string;
|
|
58
|
+
resolvedAt?: string;
|
|
59
|
+
contextRaw?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface DetectedPattern {
|
|
62
|
+
failureType: string;
|
|
63
|
+
domain: AnyDomain;
|
|
64
|
+
count: number;
|
|
65
|
+
firstSeen: string;
|
|
66
|
+
lastSeen: string;
|
|
67
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
68
|
+
recordIds: string[];
|
|
69
|
+
dominantDimension: string;
|
|
70
|
+
dominantGate: string;
|
|
71
|
+
recommendedAction: string;
|
|
72
|
+
promotedToPolicy: boolean;
|
|
73
|
+
promotedAt?: string;
|
|
74
|
+
policyRuleId?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface ManifestPolicyRule extends PolicyRule {
|
|
77
|
+
id: string;
|
|
78
|
+
name: string;
|
|
79
|
+
trigger: {
|
|
80
|
+
domain: AnyDomain;
|
|
81
|
+
pattern: string;
|
|
82
|
+
minOccurrences: number;
|
|
83
|
+
};
|
|
84
|
+
autoGenerated: boolean;
|
|
85
|
+
sourceADR?: string;
|
|
86
|
+
createdAt: string;
|
|
87
|
+
engineVersion: string;
|
|
88
|
+
outcomes?: {
|
|
89
|
+
success: number;
|
|
90
|
+
failure: number;
|
|
91
|
+
lastSeen: string;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export interface ReflectionConfig {
|
|
95
|
+
enabled: boolean;
|
|
96
|
+
promotionThreshold: number;
|
|
97
|
+
autoPromote: boolean;
|
|
98
|
+
maxAutoGeneratedRules: number;
|
|
99
|
+
autoGenerateAdr: boolean;
|
|
100
|
+
activeDomains: AnyDomain[];
|
|
101
|
+
manifestPath: string;
|
|
102
|
+
}
|
|
103
|
+
export declare function defaultReflectionConfig(): ReflectionConfig;
|
|
104
|
+
export declare function generateFailureId(): string;
|
|
105
|
+
export declare function generatePolicyRuleId(domain: AnyDomain, number: number): string;
|
|
106
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/reflection/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,eAAe;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,eAAe,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACtB;AAID,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEzD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAyB/E,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAInF,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACL,MAAM,EAAE,SAAS,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;CACL;AAID,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,CAU1D;AAID,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG9E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Base types for the universal Reflection Engine.
|
|
4
|
+
*
|
|
5
|
+
* Defines contracts for FailureRecord, DetectedPattern and the structures
|
|
6
|
+
* connecting the feedback system with deterministic policy promotion.
|
|
7
|
+
*
|
|
8
|
+
* 5 built-in domains: audit, test, commit, agent, bootstrap
|
|
9
|
+
* Custom domains: registered via DomainRegistry and activated per project.
|
|
10
|
+
* Golden rule: >=3 occurrences of the same failureType -> promotion to policyRule
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.FAILURE_TYPES_BY_DOMAIN = void 0;
|
|
14
|
+
exports.defaultReflectionConfig = defaultReflectionConfig;
|
|
15
|
+
exports.generateFailureId = generateFailureId;
|
|
16
|
+
exports.generatePolicyRuleId = generatePolicyRuleId;
|
|
17
|
+
exports.FAILURE_TYPES_BY_DOMAIN = {
|
|
18
|
+
audit: [
|
|
19
|
+
'missing_rollback', 'connection_leak', 'security_vulnerability',
|
|
20
|
+
'missing_test_coverage', 'incomplete_error_handling', 'missing_documentation',
|
|
21
|
+
'architecture_violation', 'missing_logging', 'unvalidated_input', 'hardcoded_secret',
|
|
22
|
+
],
|
|
23
|
+
test: [
|
|
24
|
+
'tsc_noEmit_type_error', 'jest_timeout', 'coverage_below_threshold', 'flaky_test',
|
|
25
|
+
'missing_test_for_use_case', 'test_without_assertion',
|
|
26
|
+
'integration_test_without_container', 'property_test_missing',
|
|
27
|
+
],
|
|
28
|
+
commit: [
|
|
29
|
+
'unknown_failure', 'missing_type', 'wrong_scope', 'message_too_long',
|
|
30
|
+
'missing_issue_reference', 'coverage_not_run', 'typecheck_failed_before_commit',
|
|
31
|
+
'test_failed_before_commit', 'branch_naming_invalid',
|
|
32
|
+
],
|
|
33
|
+
agent: [
|
|
34
|
+
'wrong_agent_selected', 'agent_timeout', 'agent_hallucination',
|
|
35
|
+
'missing_agent_for_domain', 'tool_execution_failed', 'delegation_failed',
|
|
36
|
+
'response_rejected_by_evaluator',
|
|
37
|
+
],
|
|
38
|
+
bootstrap: [
|
|
39
|
+
'missing_config_yaml', 'wrong_project_type_detected', 'memory_load_failure',
|
|
40
|
+
'manifest_corrupt', 'seed_config_failed', 'agent_profile_load_failed', 'vault_sync_failed',
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
function defaultReflectionConfig() {
|
|
44
|
+
return {
|
|
45
|
+
enabled: true,
|
|
46
|
+
promotionThreshold: 3,
|
|
47
|
+
autoPromote: true,
|
|
48
|
+
maxAutoGeneratedRules: 20,
|
|
49
|
+
autoGenerateAdr: true,
|
|
50
|
+
activeDomains: ['audit', 'test', 'commit', 'agent', 'bootstrap'],
|
|
51
|
+
manifestPath: 'manifest.yaml',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
55
|
+
function generateFailureId() {
|
|
56
|
+
const timestamp = Date.now().toString(36);
|
|
57
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
58
|
+
return `fail_${timestamp}_${random}`;
|
|
59
|
+
}
|
|
60
|
+
function generatePolicyRuleId(domain, number) {
|
|
61
|
+
const prefix = domain.toUpperCase().slice(0, 4);
|
|
62
|
+
return `POL-${prefix}-${String(number).padStart(3, '0')}`;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reflection/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAiJH,0DAUC;AAID,8CAIC;AAED,oDAGC;AA1HY,QAAA,uBAAuB,GAAgD;IAChF,KAAK,EAAE;QACH,kBAAkB,EAAE,iBAAiB,EAAE,wBAAwB;QAC/D,uBAAuB,EAAE,2BAA2B,EAAE,uBAAuB;QAC7E,wBAAwB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB;KAC9E;IACV,IAAI,EAAE;QACF,uBAAuB,EAAE,cAAc,EAAE,0BAA0B,EAAE,YAAY;QACjF,2BAA2B,EAAE,wBAAwB;QACrD,oCAAoC,EAAE,uBAAuB;KACvD;IACV,MAAM,EAAE;QACJ,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB;QACpE,yBAAyB,EAAE,kBAAkB,EAAE,gCAAgC;QAC/E,2BAA2B,EAAE,uBAAuB;KAC9C;IACV,KAAK,EAAE;QACH,sBAAsB,EAAE,eAAe,EAAE,qBAAqB;QAC9D,0BAA0B,EAAE,uBAAuB,EAAE,mBAAmB;QACxE,gCAAgC;KAC1B;IACV,SAAS,EAAE;QACP,qBAAqB,EAAE,6BAA6B,EAAE,qBAAqB;QAC3E,kBAAkB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,mBAAmB;KACpF;CACb,CAAC;AA0EF,SAAgB,uBAAuB;IACnC,OAAO;QACH,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,CAAC;QACrB,WAAW,EAAE,IAAI;QACjB,qBAAqB,EAAE,EAAE;QACzB,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAgB;QAC/E,YAAY,EAAE,eAAe;KAChC,CAAC;AACN,CAAC;AAED,gFAAgF;AAEhF,SAAgB,iBAAiB;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,QAAQ,SAAS,IAAI,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAiB,EAAE,MAAc;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,OAAO,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CircuitBreakerState } from '@backendkit-labs/circuit-breaker';
|
|
2
|
+
import type { LLMChatClient } from '../../orchestration/intent-detector';
|
|
3
|
+
export interface ResilientLLMClientOptions {
|
|
4
|
+
client: LLMChatClient;
|
|
5
|
+
/** Circuit breaker name, e.g. 'openai', 'deepseek'. Default: 'llm-provider' */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** % of failures in the sliding window to open the circuit. Default: 50 */
|
|
8
|
+
failureThreshold?: number;
|
|
9
|
+
/** Minimum calls before thresholds are evaluated. Default: 5 */
|
|
10
|
+
minimumCalls?: number;
|
|
11
|
+
/** ms to wait in OPEN before transitioning to HALF_OPEN. Default: 30_000 */
|
|
12
|
+
openTimeoutMs?: number;
|
|
13
|
+
/** Called on every state transition — use for logging or alerting */
|
|
14
|
+
onStateChange?: (from: CircuitBreakerState, to: CircuitBreakerState) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Wraps any LLMChatClient with a CircuitBreaker.
|
|
18
|
+
*
|
|
19
|
+
* When the provider fails repeatedly the circuit opens and subsequent calls
|
|
20
|
+
* return { content: null } immediately instead of waiting for timeouts.
|
|
21
|
+
* After openTimeoutMs the circuit transitions to HALF_OPEN and lets a probe
|
|
22
|
+
* call through to test recovery.
|
|
23
|
+
*
|
|
24
|
+
* Pair with ResilientLLMClient + retry for full resilience:
|
|
25
|
+
* retry handles transient blips; circuit breaker handles sustained outages.
|
|
26
|
+
*/
|
|
27
|
+
export declare class ResilientLLMClient implements LLMChatClient {
|
|
28
|
+
private readonly breaker;
|
|
29
|
+
private readonly inner;
|
|
30
|
+
constructor(opts: ResilientLLMClientOptions);
|
|
31
|
+
chat(messages: Array<{
|
|
32
|
+
role: string;
|
|
33
|
+
content: string;
|
|
34
|
+
}>, tools?: unknown, temperature?: number): Promise<{
|
|
35
|
+
content: string | null;
|
|
36
|
+
}>;
|
|
37
|
+
getMetrics(): import("@backendkit-labs/circuit-breaker").CircuitBreakerMetrics;
|
|
38
|
+
getState(): CircuitBreakerState;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=resilient-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilient-client.d.ts","sourceRoot":"","sources":["../../../src/shared/llm/resilient-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAChH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;gBAE1B,IAAI,EAAE,yBAAyB;IAwBrC,IAAI,CACN,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,KAAK,CAAC,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IActC,UAAU;IAIV,QAAQ,IAAI,mBAAmB;CAGlC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResilientLLMClient = void 0;
|
|
4
|
+
const circuit_breaker_1 = require("@backendkit-labs/circuit-breaker");
|
|
5
|
+
/**
|
|
6
|
+
* Wraps any LLMChatClient with a CircuitBreaker.
|
|
7
|
+
*
|
|
8
|
+
* When the provider fails repeatedly the circuit opens and subsequent calls
|
|
9
|
+
* return { content: null } immediately instead of waiting for timeouts.
|
|
10
|
+
* After openTimeoutMs the circuit transitions to HALF_OPEN and lets a probe
|
|
11
|
+
* call through to test recovery.
|
|
12
|
+
*
|
|
13
|
+
* Pair with ResilientLLMClient + retry for full resilience:
|
|
14
|
+
* retry handles transient blips; circuit breaker handles sustained outages.
|
|
15
|
+
*/
|
|
16
|
+
class ResilientLLMClient {
|
|
17
|
+
breaker;
|
|
18
|
+
inner;
|
|
19
|
+
constructor(opts) {
|
|
20
|
+
this.inner = opts.client;
|
|
21
|
+
this.breaker = new circuit_breaker_1.CircuitBreaker({
|
|
22
|
+
name: opts.name ?? 'llm-provider',
|
|
23
|
+
failureThreshold: opts.failureThreshold ?? 50,
|
|
24
|
+
slowCallThreshold: 100, // disabled — LLM calls are slow by nature
|
|
25
|
+
slowCallDurationMs: 120_000, // 2 min threshold for "slow"
|
|
26
|
+
minimumCalls: opts.minimumCalls ?? 5,
|
|
27
|
+
slidingWindowSize: 10,
|
|
28
|
+
halfOpenMaxCalls: 2,
|
|
29
|
+
openTimeoutMs: opts.openTimeoutMs ?? 30_000,
|
|
30
|
+
isFailure: (err) => {
|
|
31
|
+
// HTTP 4xx (auth, quota) → handled by retry, not a circuit failure
|
|
32
|
+
if (err && typeof err === 'object' && 'status' in err) {
|
|
33
|
+
const status = err.status;
|
|
34
|
+
return status >= 500;
|
|
35
|
+
}
|
|
36
|
+
// Network errors and 5xx open the circuit
|
|
37
|
+
return true;
|
|
38
|
+
},
|
|
39
|
+
onStateChange: opts.onStateChange,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async chat(messages, tools, temperature) {
|
|
43
|
+
return this.breaker.execute(() => this.inner.chat(messages, tools, temperature), (err) => {
|
|
44
|
+
if (err instanceof circuit_breaker_1.CircuitBreakerOpenError) {
|
|
45
|
+
// Circuit is open — fail fast with null, caller decides fallback
|
|
46
|
+
return { content: null };
|
|
47
|
+
}
|
|
48
|
+
// Infrastructure error that opened the circuit — let retry handle it
|
|
49
|
+
throw err;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
getMetrics() {
|
|
53
|
+
return this.breaker.getMetrics();
|
|
54
|
+
}
|
|
55
|
+
getState() {
|
|
56
|
+
return this.breaker.getState();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.ResilientLLMClient = ResilientLLMClient;
|
|
60
|
+
//# sourceMappingURL=resilient-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilient-client.js","sourceRoot":"","sources":["../../../src/shared/llm/resilient-client.ts"],"names":[],"mappings":";;;AAAA,sEAAgH;AAiBhH;;;;;;;;;;GAUG;AACH,MAAa,kBAAkB;IACV,OAAO,CAAiB;IACxB,KAAK,CAAgB;IAEtC,YAAY,IAA+B;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAc,CAAC;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,cAAc;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;YAC7C,iBAAiB,EAAE,GAAG,EAAO,0CAA0C;YACvE,kBAAkB,EAAE,OAAO,EAAE,6BAA6B;YAC1D,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;YACpC,iBAAiB,EAAE,EAAE;YACrB,gBAAgB,EAAE,CAAC;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,MAAM;YAC3C,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,mEAAmE;gBACnE,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;oBACpD,MAAM,MAAM,GAAI,GAA0B,CAAC,MAAM,CAAC;oBAClD,OAAO,MAAM,IAAI,GAAG,CAAC;gBACzB,CAAC;gBACD,0CAA0C;gBAC1C,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAI,CACN,QAAkD,EAClD,KAAe,EACf,WAAoB;QAEpB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACvB,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,EACnD,CAAC,GAAG,EAAE,EAAE;YACJ,IAAI,GAAG,YAAY,yCAAuB,EAAE,CAAC;gBACzC,iEAAiE;gBACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,qEAAqE;YACrE,MAAM,GAAG,CAAC;QACd,CAAC,CACJ,CAAC;IACN,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;CACJ;AArDD,gDAqDC"}
|