agentic-qe 1.0.1 → 1.0.3
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/.claude/agents/qe-api-contract-validator.md +51 -11
- package/.claude/agents/qe-chaos-engineer.md +95 -43
- package/.claude/agents/qe-coverage-analyzer.md +134 -57
- package/.claude/agents/qe-deployment-readiness.md +48 -11
- package/.claude/agents/qe-flaky-test-hunter.md +57 -11
- package/.claude/agents/qe-fleet-commander.md +106 -49
- package/.claude/agents/qe-performance-tester.md +98 -45
- package/.claude/agents/qe-production-intelligence.md +48 -11
- package/.claude/agents/qe-quality-gate.md +160 -28
- package/.claude/agents/qe-regression-risk-analyzer.md +53 -11
- package/.claude/agents/qe-requirements-validator.md +48 -11
- package/.claude/agents/qe-security-scanner.md +230 -47
- package/.claude/agents/qe-test-data-architect.md +49 -11
- package/.claude/agents/qe-test-executor.md +59 -55
- package/.claude/agents/qe-test-generator.md +222 -48
- package/.claude/agents/qe-visual-tester.md +66 -65
- package/CHANGELOG.md +162 -0
- package/README.md +33 -2
- package/dist/adapters/MemoryStoreAdapter.d.ts +157 -0
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryStoreAdapter.js +433 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/agents/BaseAgent.d.ts +22 -3
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +110 -6
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +0 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +0 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +0 -1
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +17 -7
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.js +17 -7
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/index.js +2 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/cli/commands/agent/assign.js +17 -7
- package/dist/cli/commands/agent/assign.js.map +1 -1
- package/dist/cli/commands/agent/attach.d.ts +0 -1
- package/dist/cli/commands/agent/attach.d.ts.map +1 -1
- package/dist/cli/commands/agent/attach.js +17 -7
- package/dist/cli/commands/agent/attach.js.map +1 -1
- package/dist/cli/commands/agent/benchmark.js +1 -2
- package/dist/cli/commands/agent/benchmark.js.map +1 -1
- package/dist/cli/commands/agent/clone.js +1 -2
- package/dist/cli/commands/agent/clone.js.map +1 -1
- package/dist/cli/commands/agent/detach.js +17 -7
- package/dist/cli/commands/agent/detach.js.map +1 -1
- package/dist/cli/commands/agent/index.js +3 -3
- package/dist/cli/commands/agent/index.js.map +1 -1
- package/dist/cli/commands/agent/inspect.js +17 -7
- package/dist/cli/commands/agent/inspect.js.map +1 -1
- package/dist/cli/commands/agent/migrate.js +1 -2
- package/dist/cli/commands/agent/migrate.js.map +1 -1
- package/dist/cli/commands/agent/restart.js +17 -7
- package/dist/cli/commands/agent/restart.js.map +1 -1
- package/dist/cli/commands/analyze.js +17 -7
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/config/export.js +17 -7
- package/dist/cli/commands/config/export.js.map +1 -1
- package/dist/cli/commands/config/get.js +19 -9
- package/dist/cli/commands/config/get.js.map +1 -1
- package/dist/cli/commands/config/import.js +17 -7
- package/dist/cli/commands/config/import.js.map +1 -1
- package/dist/cli/commands/config/init.js +19 -9
- package/dist/cli/commands/config/init.js.map +1 -1
- package/dist/cli/commands/config/list.js +1 -2
- package/dist/cli/commands/config/list.js.map +1 -1
- package/dist/cli/commands/config/reset.js +1 -2
- package/dist/cli/commands/config/reset.js.map +1 -1
- package/dist/cli/commands/config/set.js +19 -9
- package/dist/cli/commands/config/set.js.map +1 -1
- package/dist/cli/commands/config/validate.js +19 -9
- package/dist/cli/commands/config/validate.js.map +1 -1
- package/dist/cli/commands/debug/agent.js +18 -9
- package/dist/cli/commands/debug/agent.js.map +1 -1
- package/dist/cli/commands/debug/diagnostics.js +18 -9
- package/dist/cli/commands/debug/diagnostics.js.map +1 -1
- package/dist/cli/commands/debug/health-check.js +18 -9
- package/dist/cli/commands/debug/health-check.js.map +1 -1
- package/dist/cli/commands/debug/profile.js +18 -9
- package/dist/cli/commands/debug/profile.js.map +1 -1
- package/dist/cli/commands/debug/trace.js +18 -9
- package/dist/cli/commands/debug/trace.js.map +1 -1
- package/dist/cli/commands/debug/troubleshoot.js +18 -9
- package/dist/cli/commands/debug/troubleshoot.js.map +1 -1
- package/dist/cli/commands/fleet/backup.js +1 -2
- package/dist/cli/commands/fleet/backup.js.map +1 -1
- package/dist/cli/commands/fleet/health.js +17 -7
- package/dist/cli/commands/fleet/health.js.map +1 -1
- package/dist/cli/commands/fleet/init.js +17 -7
- package/dist/cli/commands/fleet/init.js.map +1 -1
- package/dist/cli/commands/fleet/logs.js +17 -7
- package/dist/cli/commands/fleet/logs.js.map +1 -1
- package/dist/cli/commands/fleet/metrics.js +17 -7
- package/dist/cli/commands/fleet/metrics.js.map +1 -1
- package/dist/cli/commands/fleet/monitor.js +17 -7
- package/dist/cli/commands/fleet/monitor.js.map +1 -1
- package/dist/cli/commands/fleet/optimize.js +1 -2
- package/dist/cli/commands/fleet/optimize.js.map +1 -1
- package/dist/cli/commands/fleet/recover.js +1 -2
- package/dist/cli/commands/fleet/recover.js.map +1 -1
- package/dist/cli/commands/fleet/restart.js +17 -7
- package/dist/cli/commands/fleet/restart.js.map +1 -1
- package/dist/cli/commands/fleet/scale.js +17 -7
- package/dist/cli/commands/fleet/scale.js.map +1 -1
- package/dist/cli/commands/fleet/shutdown.js +17 -7
- package/dist/cli/commands/fleet/shutdown.js.map +1 -1
- package/dist/cli/commands/fleet/status.js +17 -7
- package/dist/cli/commands/fleet/status.js.map +1 -1
- package/dist/cli/commands/fleet/topology.js +17 -7
- package/dist/cli/commands/fleet/topology.js.map +1 -1
- package/dist/cli/commands/fleet.d.ts +0 -1
- package/dist/cli/commands/fleet.d.ts.map +1 -1
- package/dist/cli/commands/fleet.js +37 -60
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/generate.js +17 -7
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +250 -82
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/memory/compact.js +1 -2
- package/dist/cli/commands/memory/compact.js.map +1 -1
- package/dist/cli/commands/memory/index.js +4 -5
- package/dist/cli/commands/memory/index.js.map +1 -1
- package/dist/cli/commands/memory/stats.js +1 -2
- package/dist/cli/commands/memory/stats.js.map +1 -1
- package/dist/cli/commands/memory/vacuum.js +1 -2
- package/dist/cli/commands/memory/vacuum.js.map +1 -1
- package/dist/cli/commands/monitor/alerts.js +17 -7
- package/dist/cli/commands/monitor/alerts.js.map +1 -1
- package/dist/cli/commands/monitor/analyze.js +17 -7
- package/dist/cli/commands/monitor/analyze.js.map +1 -1
- package/dist/cli/commands/monitor/compare.js +17 -7
- package/dist/cli/commands/monitor/compare.js.map +1 -1
- package/dist/cli/commands/monitor/dashboard.js +17 -7
- package/dist/cli/commands/monitor/dashboard.js.map +1 -1
- package/dist/cli/commands/monitor/export.js +17 -7
- package/dist/cli/commands/monitor/export.js.map +1 -1
- package/dist/cli/commands/quality/baseline.js +1 -2
- package/dist/cli/commands/quality/baseline.js.map +1 -1
- package/dist/cli/commands/quality/compare.js +1 -2
- package/dist/cli/commands/quality/compare.js.map +1 -1
- package/dist/cli/commands/quality/decision.js +2 -2
- package/dist/cli/commands/quality/decision.js.map +1 -1
- package/dist/cli/commands/quality/gate.js +2 -2
- package/dist/cli/commands/quality/gate.js.map +1 -1
- package/dist/cli/commands/quality/index.js +2 -2
- package/dist/cli/commands/quality/index.js.map +1 -1
- package/dist/cli/commands/quality/policy.js +19 -9
- package/dist/cli/commands/quality/policy.js.map +1 -1
- package/dist/cli/commands/quality/risk.js +2 -2
- package/dist/cli/commands/quality/risk.js.map +1 -1
- package/dist/cli/commands/quality/trends.js +1 -2
- package/dist/cli/commands/quality/trends.js.map +1 -1
- package/dist/cli/commands/quality/validate.js +19 -9
- package/dist/cli/commands/quality/validate.js.map +1 -1
- package/dist/cli/commands/run.js +17 -7
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/test/analyze-failures.js +1 -2
- package/dist/cli/commands/test/analyze-failures.js.map +1 -1
- package/dist/cli/commands/test/clean.js +18 -9
- package/dist/cli/commands/test/clean.js.map +1 -1
- package/dist/cli/commands/test/debug.js +18 -9
- package/dist/cli/commands/test/debug.js.map +1 -1
- package/dist/cli/commands/test/diff.js +18 -9
- package/dist/cli/commands/test/diff.js.map +1 -1
- package/dist/cli/commands/test/flakiness.js +1 -2
- package/dist/cli/commands/test/flakiness.js.map +1 -1
- package/dist/cli/commands/test/index.js +2 -2
- package/dist/cli/commands/test/index.js.map +1 -1
- package/dist/cli/commands/test/mutate.js +1 -2
- package/dist/cli/commands/test/mutate.js.map +1 -1
- package/dist/cli/commands/test/parallel.js +1 -2
- package/dist/cli/commands/test/parallel.js.map +1 -1
- package/dist/cli/commands/test/profile.js +18 -9
- package/dist/cli/commands/test/profile.js.map +1 -1
- package/dist/cli/commands/test/queue.js +1 -2
- package/dist/cli/commands/test/queue.js.map +1 -1
- package/dist/cli/commands/test/retry.js +1 -2
- package/dist/cli/commands/test/retry.js.map +1 -1
- package/dist/cli/commands/test/snapshot.js +1 -2
- package/dist/cli/commands/test/snapshot.js.map +1 -1
- package/dist/cli/commands/test/trace.js +18 -9
- package/dist/cli/commands/test/trace.js.map +1 -1
- package/dist/cli/commands/test/watch.js +1 -2
- package/dist/cli/commands/test/watch.js.map +1 -1
- package/dist/cli/commands/workflow/cancel.js +2 -3
- package/dist/cli/commands/workflow/cancel.js.map +1 -1
- package/dist/cli/commands/workflow/list.js +2 -3
- package/dist/cli/commands/workflow/list.js.map +1 -1
- package/dist/cli/commands/workflow/pause.js +2 -3
- package/dist/cli/commands/workflow/pause.js.map +1 -1
- package/dist/cli/index-working.js +17 -7
- package/dist/cli/index-working.js.map +1 -1
- package/dist/cli/index.js +17 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/core/Agent.d.ts +0 -1
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/ArtifactWorkflow.js +17 -7
- package/dist/core/ArtifactWorkflow.js.map +1 -1
- package/dist/core/EventBus.d.ts +0 -1
- package/dist/core/EventBus.d.ts.map +1 -1
- package/dist/core/FleetManager.d.ts +0 -1
- package/dist/core/FleetManager.d.ts.map +1 -1
- package/dist/core/FleetManager.js +17 -7
- package/dist/core/FleetManager.js.map +1 -1
- package/dist/core/MemoryManager.d.ts +0 -1
- package/dist/core/MemoryManager.d.ts.map +1 -1
- package/dist/core/Task.d.ts +0 -1
- package/dist/core/Task.d.ts.map +1 -1
- package/dist/core/coordination/BlackboardCoordination.d.ts +0 -1
- package/dist/core/coordination/BlackboardCoordination.d.ts.map +1 -1
- package/dist/core/coordination/ConsensusGating.d.ts +0 -1
- package/dist/core/coordination/ConsensusGating.d.ts.map +1 -1
- package/dist/core/coordination/GOAPCoordination.d.ts +0 -1
- package/dist/core/coordination/GOAPCoordination.d.ts.map +1 -1
- package/dist/core/coordination/OODACoordination.d.ts +0 -1
- package/dist/core/coordination/OODACoordination.d.ts.map +1 -1
- package/dist/core/events/QEEventBus.d.ts +0 -1
- package/dist/core/events/QEEventBus.d.ts.map +1 -1
- package/dist/core/hooks/RollbackManager.d.ts +2 -2
- package/dist/core/hooks/RollbackManager.d.ts.map +1 -1
- package/dist/core/hooks/RollbackManager.js +17 -7
- package/dist/core/hooks/RollbackManager.js.map +1 -1
- package/dist/core/hooks/VerificationHookManager.d.ts +2 -3
- package/dist/core/hooks/VerificationHookManager.d.ts.map +1 -1
- package/dist/core/hooks/VerificationHookManager.js.map +1 -1
- package/dist/core/hooks/checkers/ConfigurationChecker.d.ts +2 -2
- package/dist/core/hooks/checkers/ConfigurationChecker.d.ts.map +1 -1
- package/dist/core/hooks/checkers/ConfigurationChecker.js.map +1 -1
- package/dist/core/hooks/checkers/EnvironmentChecker.js +17 -7
- package/dist/core/hooks/checkers/EnvironmentChecker.js.map +1 -1
- package/dist/core/hooks/checkers/PermissionChecker.js +17 -7
- package/dist/core/hooks/checkers/PermissionChecker.js.map +1 -1
- package/dist/core/hooks/checkers/ResourceChecker.js +17 -7
- package/dist/core/hooks/checkers/ResourceChecker.js.map +1 -1
- package/dist/core/memory/CompressionManager.js +17 -7
- package/dist/core/memory/CompressionManager.js.map +1 -1
- package/dist/core/memory/EncryptionManager.js +17 -7
- package/dist/core/memory/EncryptionManager.js.map +1 -1
- package/dist/core/memory/EnhancedSwarmMemoryManager.js +17 -7
- package/dist/core/memory/EnhancedSwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +17 -7
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/VersionHistory.js +17 -7
- package/dist/core/memory/VersionHistory.js.map +1 -1
- package/dist/coverage/coverage-collector.js +17 -7
- package/dist/coverage/coverage-collector.js.map +1 -1
- package/dist/coverage/coverage-reporter.js +17 -7
- package/dist/coverage/coverage-reporter.js.map +1 -1
- package/dist/mcp/handlers/advanced/api-breaking-changes.js +1 -2
- package/dist/mcp/handlers/advanced/api-breaking-changes.js.map +1 -1
- package/dist/mcp/handlers/advanced/mutation-test-execute.js +1 -2
- package/dist/mcp/handlers/advanced/mutation-test-execute.js.map +1 -1
- package/dist/mcp/handlers/advanced/production-incident-replay.js +1 -2
- package/dist/mcp/handlers/advanced/production-incident-replay.js.map +1 -1
- package/dist/mcp/handlers/advanced/production-rum-analyze.js +1 -2
- package/dist/mcp/handlers/advanced/production-rum-analyze.js.map +1 -1
- package/dist/mcp/handlers/advanced/requirements-generate-bdd.js +1 -2
- package/dist/mcp/handlers/advanced/requirements-generate-bdd.js.map +1 -1
- package/dist/mcp/handlers/advanced/requirements-validate.js +1 -2
- package/dist/mcp/handlers/advanced/requirements-validate.js.map +1 -1
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js +1 -2
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js.map +1 -1
- package/dist/mcp/handlers/analysis/coverageGapsDetect.js +1 -2
- package/dist/mcp/handlers/analysis/coverageGapsDetect.js.map +1 -1
- package/dist/mcp/handlers/analysis/performanceBenchmarkRun.js +1 -2
- package/dist/mcp/handlers/analysis/performanceBenchmarkRun.js.map +1 -1
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js +1 -2
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js.map +1 -1
- package/dist/mcp/handlers/analysis/securityScanComprehensive.js +1 -2
- package/dist/mcp/handlers/analysis/securityScanComprehensive.js.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-inject-failure.js +3 -4
- package/dist/mcp/handlers/chaos/chaos-inject-failure.js.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-inject-latency.js +3 -4
- package/dist/mcp/handlers/chaos/chaos-inject-latency.js.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-resilience-test.js +3 -4
- package/dist/mcp/handlers/chaos/chaos-resilience-test.js.map +1 -1
- package/dist/mcp/handlers/integration/contract-validate.js +1 -2
- package/dist/mcp/handlers/integration/contract-validate.js.map +1 -1
- package/dist/mcp/handlers/integration/dependency-check.js +1 -2
- package/dist/mcp/handlers/integration/dependency-check.js.map +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js +1 -2
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js.map +1 -1
- package/dist/mcp/handlers/test-execute.js +17 -7
- package/dist/mcp/handlers/test-execute.js.map +1 -1
- package/dist/mcp/server.js +3 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +3 -3
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/services/HookExecutor.d.ts +79 -6
- package/dist/mcp/services/HookExecutor.d.ts.map +1 -1
- package/dist/mcp/services/HookExecutor.js +313 -17
- package/dist/mcp/services/HookExecutor.js.map +1 -1
- package/dist/types/api-contract.types.js +1 -2
- package/dist/types/api-contract.types.js.map +1 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +5 -5
- package/dist/types/errors.js.map +1 -1
- package/dist/types/hook.types.d.ts +147 -0
- package/dist/types/hook.types.d.ts.map +1 -0
- package/dist/types/hook.types.js +7 -0
- package/dist/types/hook.types.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/memory-interfaces.d.ts +104 -0
- package/dist/types/memory-interfaces.d.ts.map +1 -0
- package/dist/types/memory-interfaces.js +9 -0
- package/dist/types/memory-interfaces.js.map +1 -0
- package/dist/utils/Config.d.ts +2 -2
- package/dist/utils/Config.d.ts.map +1 -1
- package/dist/utils/Config.js +17 -7
- package/dist/utils/Config.js.map +1 -1
- package/dist/utils/FakerDataGenerator.d.ts.map +1 -1
- package/dist/utils/SecurityScanner.js +17 -7
- package/dist/utils/SecurityScanner.js.map +1 -1
- package/dist/utils/TestFrameworkExecutor.js +17 -7
- package/dist/utils/TestFrameworkExecutor.js.map +1 -1
- package/dist/utils/validation.js +6 -7
- package/dist/utils/validation.js.map +1 -1
- package/package.json +19 -15
package/README.md
CHANGED
|
@@ -21,9 +21,11 @@ A distributed fleet of specialized AI agents for comprehensive software testing,
|
|
|
21
21
|
|
|
22
22
|
### Autonomous Agent Fleet
|
|
23
23
|
- **16 Specialized QE Agents**: Each agent is an expert in specific quality engineering domains
|
|
24
|
+
- **AQE Hooks System**: 100-500x faster coordination with zero external dependencies
|
|
24
25
|
- **Intelligent Coordination**: Event-driven architecture with automatic task distribution
|
|
25
26
|
- **Scalable**: From single developer projects to enterprise-scale testing infrastructure
|
|
26
27
|
- **Self-Organizing**: Agents autonomously coordinate testing strategies
|
|
28
|
+
- **Type-Safe**: Full TypeScript type checking and IntelliSense support
|
|
27
29
|
|
|
28
30
|
### Comprehensive Testing
|
|
29
31
|
- **AI-Powered Test Generation**: Generate comprehensive test suites automatically
|
|
@@ -69,13 +71,15 @@ Before using Agentic QE, you must have:
|
|
|
69
71
|
- **npm**: 8.0 or higher
|
|
70
72
|
|
|
71
73
|
#### Optional (Advanced Features)
|
|
72
|
-
- **Claude Flow**: For
|
|
74
|
+
- **Claude Flow**: For optional MCP coordination features
|
|
73
75
|
```bash
|
|
74
76
|
npm install -g @claude/flow
|
|
75
77
|
# or
|
|
76
78
|
npx claude-flow@alpha init --force
|
|
77
79
|
```
|
|
78
80
|
|
|
81
|
+
**Note**: AQE hooks system requires NO external dependencies. All coordination features are built-in with TypeScript.
|
|
82
|
+
|
|
79
83
|
### Installation Steps
|
|
80
84
|
|
|
81
85
|
1. **Install Claude Code** globally or in your workspace
|
|
@@ -287,9 +291,36 @@ const tests = await testGen.execute({
|
|
|
287
291
|
|
|
288
292
|
- **EventBus**: Real-time communication between agents
|
|
289
293
|
- **Task Queue**: Priority-based task scheduling
|
|
290
|
-
- **Memory Store**: Shared context and learning
|
|
294
|
+
- **Memory Store**: Shared context and learning (SwarmMemoryManager)
|
|
291
295
|
- **Persistence**: SQLite for state, metrics, and audit trails
|
|
292
296
|
|
|
297
|
+
### AQE Hooks System
|
|
298
|
+
|
|
299
|
+
**Zero Dependencies** - Built-in TypeScript hooks for agent coordination:
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// Automatic lifecycle hooks in every agent (aqe-hooks protocol)
|
|
303
|
+
class QEAgent extends BaseAgent {
|
|
304
|
+
protected async onPreTask(data): Promise<void> { /* prepare */ }
|
|
305
|
+
protected async onPostTask(data): Promise<void> { /* validate */ }
|
|
306
|
+
protected async onTaskError(data): Promise<void> { /* recover */ }
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Advanced verification hooks
|
|
310
|
+
const hookManager = new VerificationHookManager(memoryStore);
|
|
311
|
+
await hookManager.executePreTaskVerification({ task, context });
|
|
312
|
+
await hookManager.executePostTaskValidation({ task, result });
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Performance**: 100-500x faster than external hooks (<1ms vs 100-500ms)
|
|
316
|
+
|
|
317
|
+
**Features**:
|
|
318
|
+
- Full TypeScript type safety
|
|
319
|
+
- Direct SwarmMemoryManager integration
|
|
320
|
+
- Built-in RollbackManager support
|
|
321
|
+
- EventBus coordination
|
|
322
|
+
- Context engineering (pre/post tool-use bundles)
|
|
323
|
+
|
|
293
324
|
---
|
|
294
325
|
|
|
295
326
|
## 📖 Documentation
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryStoreAdapter - Bridges MemoryStore interface to SwarmMemoryManager
|
|
3
|
+
*
|
|
4
|
+
* This adapter provides type-safe compatibility between the MemoryStore interface
|
|
5
|
+
* used by BaseAgent and the SwarmMemoryManager expected by VerificationHookManager.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Runtime validation of MemoryStore compatibility
|
|
9
|
+
* - Type-safe method delegation
|
|
10
|
+
* - Clear error messages for incompatible implementations
|
|
11
|
+
* - Full SwarmMemoryManager interface implementation
|
|
12
|
+
*/
|
|
13
|
+
import { MemoryStore } from '../types';
|
|
14
|
+
import { ISwarmMemoryManager } from '../types/memory-interfaces';
|
|
15
|
+
import { StoreOptions, RetrieveOptions, DeleteOptions, MemoryEntry, Hint, Event, WorkflowState, Pattern, ConsensusProposal, PerformanceMetric, Artifact, Session, Checkpoint, AgentRegistration, GOAPGoal, GOAPAction, GOAPPlan, OODACycle } from '../core/memory/SwarmMemoryManager';
|
|
16
|
+
/**
|
|
17
|
+
* Adapter that wraps MemoryStore to provide ISwarmMemoryManager interface
|
|
18
|
+
*/
|
|
19
|
+
export declare class MemoryStoreAdapter implements ISwarmMemoryManager {
|
|
20
|
+
private memoryStore;
|
|
21
|
+
private initialized;
|
|
22
|
+
constructor(memoryStore: MemoryStore);
|
|
23
|
+
/**
|
|
24
|
+
* Validates that MemoryStore has all required methods
|
|
25
|
+
* Throws clear error if incompatible
|
|
26
|
+
*/
|
|
27
|
+
private validateCompatibility;
|
|
28
|
+
/**
|
|
29
|
+
* Initialize adapter (no-op, delegates to underlying MemoryStore)
|
|
30
|
+
*/
|
|
31
|
+
initialize(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Store value with options
|
|
34
|
+
* Maps to MemoryStore.store() with TTL and partition support
|
|
35
|
+
*/
|
|
36
|
+
store(key: string, value: any, options?: StoreOptions): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Retrieve value with options
|
|
39
|
+
* Maps to MemoryStore.retrieve() with partition support
|
|
40
|
+
*/
|
|
41
|
+
retrieve(key: string, options?: RetrieveOptions): Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Query entries matching pattern
|
|
44
|
+
* Note: MemoryStore doesn't have native pattern matching,
|
|
45
|
+
* so this returns empty array as safe fallback
|
|
46
|
+
*/
|
|
47
|
+
query(pattern: string, options?: RetrieveOptions): Promise<MemoryEntry[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Delete entry
|
|
50
|
+
* Maps to MemoryStore.delete() with partition support
|
|
51
|
+
*/
|
|
52
|
+
delete(key: string, partition?: string, options?: DeleteOptions): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Clear partition
|
|
55
|
+
* Maps to MemoryStore.clear() with namespace support
|
|
56
|
+
*/
|
|
57
|
+
clear(partition?: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Post hint to blackboard
|
|
60
|
+
* Stores as regular entry with hint: prefix
|
|
61
|
+
*/
|
|
62
|
+
postHint(hint: {
|
|
63
|
+
key: string;
|
|
64
|
+
value: any;
|
|
65
|
+
ttl?: number;
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Read hints matching pattern
|
|
69
|
+
* Returns empty array as MemoryStore doesn't support pattern matching
|
|
70
|
+
*/
|
|
71
|
+
readHints(pattern: string): Promise<Hint[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Clean expired entries
|
|
74
|
+
* No-op for basic MemoryStore (relies on TTL)
|
|
75
|
+
*/
|
|
76
|
+
cleanExpired(): Promise<number>;
|
|
77
|
+
/**
|
|
78
|
+
* Close connection
|
|
79
|
+
* No-op for basic MemoryStore
|
|
80
|
+
*/
|
|
81
|
+
close(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Get memory statistics
|
|
84
|
+
* Returns basic stats structure
|
|
85
|
+
*/
|
|
86
|
+
stats(): Promise<{
|
|
87
|
+
totalEntries: number;
|
|
88
|
+
totalHints: number;
|
|
89
|
+
totalEvents: number;
|
|
90
|
+
totalWorkflows: number;
|
|
91
|
+
totalPatterns: number;
|
|
92
|
+
totalConsensus: number;
|
|
93
|
+
totalMetrics: number;
|
|
94
|
+
totalArtifacts: number;
|
|
95
|
+
totalSessions: number;
|
|
96
|
+
totalAgents: number;
|
|
97
|
+
totalGOAPGoals: number;
|
|
98
|
+
totalGOAPActions: number;
|
|
99
|
+
totalGOAPPlans: number;
|
|
100
|
+
totalOODACycles: number;
|
|
101
|
+
partitions: string[];
|
|
102
|
+
accessLevels: Record<string, number>;
|
|
103
|
+
}>;
|
|
104
|
+
storeEvent(event: Event): Promise<string>;
|
|
105
|
+
queryEvents(type: string): Promise<Event[]>;
|
|
106
|
+
getEventsBySource(source: string): Promise<Event[]>;
|
|
107
|
+
storeWorkflowState(workflow: WorkflowState): Promise<void>;
|
|
108
|
+
getWorkflowState(id: string): Promise<WorkflowState>;
|
|
109
|
+
updateWorkflowState(id: string, updates: Partial<WorkflowState>): Promise<void>;
|
|
110
|
+
queryWorkflowsByStatus(status: string): Promise<WorkflowState[]>;
|
|
111
|
+
storePattern(pattern: Pattern): Promise<string>;
|
|
112
|
+
getPattern(patternName: string): Promise<Pattern>;
|
|
113
|
+
incrementPatternUsage(patternName: string): Promise<void>;
|
|
114
|
+
queryPatternsByConfidence(threshold: number): Promise<Pattern[]>;
|
|
115
|
+
createConsensusProposal(proposal: ConsensusProposal): Promise<void>;
|
|
116
|
+
getConsensusProposal(id: string): Promise<ConsensusProposal>;
|
|
117
|
+
voteOnConsensus(proposalId: string, agentId: string): Promise<boolean>;
|
|
118
|
+
queryConsensusProposals(status: string): Promise<ConsensusProposal[]>;
|
|
119
|
+
storePerformanceMetric(metric: PerformanceMetric): Promise<string>;
|
|
120
|
+
queryPerformanceMetrics(metricName: string): Promise<PerformanceMetric[]>;
|
|
121
|
+
getMetricsByAgent(agentId: string): Promise<PerformanceMetric[]>;
|
|
122
|
+
getAverageMetric(metricName: string): Promise<number>;
|
|
123
|
+
createArtifact(artifact: Artifact): Promise<void>;
|
|
124
|
+
getArtifact(id: string): Promise<Artifact>;
|
|
125
|
+
queryArtifactsByKind(kind: string): Promise<Artifact[]>;
|
|
126
|
+
queryArtifactsByTag(tag: string): Promise<Artifact[]>;
|
|
127
|
+
createSession(session: Session): Promise<void>;
|
|
128
|
+
getSession(id: string): Promise<Session>;
|
|
129
|
+
addSessionCheckpoint(sessionId: string, checkpoint: Checkpoint): Promise<void>;
|
|
130
|
+
getLatestCheckpoint(sessionId: string): Promise<Checkpoint | undefined>;
|
|
131
|
+
markSessionResumed(sessionId: string): Promise<void>;
|
|
132
|
+
registerAgent(agent: AgentRegistration): Promise<void>;
|
|
133
|
+
getAgent(id: string): Promise<AgentRegistration>;
|
|
134
|
+
updateAgentStatus(agentId: string, status: 'active' | 'idle' | 'terminated'): Promise<void>;
|
|
135
|
+
queryAgentsByStatus(status: string): Promise<AgentRegistration[]>;
|
|
136
|
+
updateAgentPerformance(agentId: string, performance: any): Promise<void>;
|
|
137
|
+
storeGOAPGoal(goal: GOAPGoal): Promise<void>;
|
|
138
|
+
getGOAPGoal(id: string): Promise<GOAPGoal>;
|
|
139
|
+
storeGOAPAction(action: GOAPAction): Promise<void>;
|
|
140
|
+
getGOAPAction(id: string): Promise<GOAPAction>;
|
|
141
|
+
storeGOAPPlan(plan: GOAPPlan): Promise<void>;
|
|
142
|
+
getGOAPPlan(id: string): Promise<GOAPPlan>;
|
|
143
|
+
storeOODACycle(cycle: OODACycle): Promise<void>;
|
|
144
|
+
getOODACycle(id: string): Promise<OODACycle>;
|
|
145
|
+
updateOODAPhase(cycleId: string, phase: OODACycle['phase'], data: any): Promise<void>;
|
|
146
|
+
completeOODACycle(cycleId: string, result: any): Promise<void>;
|
|
147
|
+
queryOODACyclesByPhase(phase: string): Promise<OODACycle[]>;
|
|
148
|
+
storeACL(acl: any): Promise<void>;
|
|
149
|
+
getACL(resourceId: string): Promise<any | null>;
|
|
150
|
+
updateACL(resourceId: string, updates: any): Promise<void>;
|
|
151
|
+
grantPermission(resourceId: string, agentId: string, permissions: any[]): Promise<void>;
|
|
152
|
+
revokePermission(resourceId: string, agentId: string, permissions: any[]): Promise<void>;
|
|
153
|
+
blockAgent(resourceId: string, agentId: string): Promise<void>;
|
|
154
|
+
unblockAgent(resourceId: string, agentId: string): Promise<void>;
|
|
155
|
+
getAccessControl(): any;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=MemoryStoreAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryStoreAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/MemoryStoreAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MemoryStoreAdapter - Bridges MemoryStore interface to SwarmMemoryManager
|
|
4
|
+
*
|
|
5
|
+
* This adapter provides type-safe compatibility between the MemoryStore interface
|
|
6
|
+
* used by BaseAgent and the SwarmMemoryManager expected by VerificationHookManager.
|
|
7
|
+
*
|
|
8
|
+
* Key Features:
|
|
9
|
+
* - Runtime validation of MemoryStore compatibility
|
|
10
|
+
* - Type-safe method delegation
|
|
11
|
+
* - Clear error messages for incompatible implementations
|
|
12
|
+
* - Full SwarmMemoryManager interface implementation
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MemoryStoreAdapter = void 0;
|
|
16
|
+
/**
|
|
17
|
+
* Adapter that wraps MemoryStore to provide ISwarmMemoryManager interface
|
|
18
|
+
*/
|
|
19
|
+
class MemoryStoreAdapter {
|
|
20
|
+
constructor(memoryStore) {
|
|
21
|
+
this.memoryStore = memoryStore;
|
|
22
|
+
this.initialized = false;
|
|
23
|
+
this.validateCompatibility();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validates that MemoryStore has all required methods
|
|
27
|
+
* Throws clear error if incompatible
|
|
28
|
+
*/
|
|
29
|
+
validateCompatibility() {
|
|
30
|
+
const requiredMethods = ['store', 'retrieve', 'set', 'get', 'delete', 'clear'];
|
|
31
|
+
const missingMethods = [];
|
|
32
|
+
for (const method of requiredMethods) {
|
|
33
|
+
if (typeof this.memoryStore[method] !== 'function') {
|
|
34
|
+
missingMethods.push(method);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (missingMethods.length > 0) {
|
|
38
|
+
throw new Error(`MemoryStore is missing required methods: ${missingMethods.join(', ')}. ` +
|
|
39
|
+
`Cannot create VerificationHookManager with incompatible MemoryStore.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Initialize adapter (no-op, delegates to underlying MemoryStore)
|
|
44
|
+
*/
|
|
45
|
+
async initialize() {
|
|
46
|
+
this.initialized = true;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Store value with options
|
|
50
|
+
* Maps to MemoryStore.store() with TTL and partition support
|
|
51
|
+
*/
|
|
52
|
+
async store(key, value, options = {}) {
|
|
53
|
+
const partition = options.partition || 'default';
|
|
54
|
+
const namespacedKey = partition !== 'default' ? `${partition}:${key}` : key;
|
|
55
|
+
await this.memoryStore.store(namespacedKey, value, options.ttl);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Retrieve value with options
|
|
59
|
+
* Maps to MemoryStore.retrieve() with partition support
|
|
60
|
+
*/
|
|
61
|
+
async retrieve(key, options = {}) {
|
|
62
|
+
const partition = options.partition || 'default';
|
|
63
|
+
const namespacedKey = partition !== 'default' ? `${partition}:${key}` : key;
|
|
64
|
+
return await this.memoryStore.retrieve(namespacedKey);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Query entries matching pattern
|
|
68
|
+
* Note: MemoryStore doesn't have native pattern matching,
|
|
69
|
+
* so this returns empty array as safe fallback
|
|
70
|
+
*/
|
|
71
|
+
async query(pattern, options = {}) {
|
|
72
|
+
// MemoryStore doesn't support pattern queries
|
|
73
|
+
// Return empty array as safe fallback
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Delete entry
|
|
78
|
+
* Maps to MemoryStore.delete() with partition support
|
|
79
|
+
*/
|
|
80
|
+
async delete(key, partition = 'default', options = {}) {
|
|
81
|
+
const namespacedKey = partition !== 'default' ? `${partition}:${key}` : key;
|
|
82
|
+
await this.memoryStore.delete(namespacedKey);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Clear partition
|
|
86
|
+
* Maps to MemoryStore.clear() with namespace support
|
|
87
|
+
*/
|
|
88
|
+
async clear(partition = 'default') {
|
|
89
|
+
await this.memoryStore.clear(partition);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Post hint to blackboard
|
|
93
|
+
* Stores as regular entry with hint: prefix
|
|
94
|
+
*/
|
|
95
|
+
async postHint(hint) {
|
|
96
|
+
await this.memoryStore.store(`hint:${hint.key}`, hint.value, hint.ttl);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Read hints matching pattern
|
|
100
|
+
* Returns empty array as MemoryStore doesn't support pattern matching
|
|
101
|
+
*/
|
|
102
|
+
async readHints(pattern) {
|
|
103
|
+
// MemoryStore doesn't support pattern queries
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Clean expired entries
|
|
108
|
+
* No-op for basic MemoryStore (relies on TTL)
|
|
109
|
+
*/
|
|
110
|
+
async cleanExpired() {
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Close connection
|
|
115
|
+
* No-op for basic MemoryStore
|
|
116
|
+
*/
|
|
117
|
+
async close() {
|
|
118
|
+
// No-op
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get memory statistics
|
|
122
|
+
* Returns basic stats structure
|
|
123
|
+
*/
|
|
124
|
+
async stats() {
|
|
125
|
+
return {
|
|
126
|
+
totalEntries: 0,
|
|
127
|
+
totalHints: 0,
|
|
128
|
+
totalEvents: 0,
|
|
129
|
+
totalWorkflows: 0,
|
|
130
|
+
totalPatterns: 0,
|
|
131
|
+
totalConsensus: 0,
|
|
132
|
+
totalMetrics: 0,
|
|
133
|
+
totalArtifacts: 0,
|
|
134
|
+
totalSessions: 0,
|
|
135
|
+
totalAgents: 0,
|
|
136
|
+
totalGOAPGoals: 0,
|
|
137
|
+
totalGOAPActions: 0,
|
|
138
|
+
totalGOAPPlans: 0,
|
|
139
|
+
totalOODACycles: 0,
|
|
140
|
+
partitions: ['default'],
|
|
141
|
+
accessLevels: {}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
// ============================================================================
|
|
145
|
+
// Table-specific methods (delegated with basic implementation)
|
|
146
|
+
// ============================================================================
|
|
147
|
+
async storeEvent(event) {
|
|
148
|
+
const id = event.id || `event-${Date.now()}`;
|
|
149
|
+
await this.store(`events:${id}`, event, { partition: 'events', ttl: event.ttl });
|
|
150
|
+
return id;
|
|
151
|
+
}
|
|
152
|
+
async queryEvents(type) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
async getEventsBySource(source) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
async storeWorkflowState(workflow) {
|
|
159
|
+
await this.store(`workflow:${workflow.id}`, workflow, { partition: 'workflow_state' });
|
|
160
|
+
}
|
|
161
|
+
async getWorkflowState(id) {
|
|
162
|
+
const data = await this.retrieve(`workflow:${id}`, { partition: 'workflow_state' });
|
|
163
|
+
if (!data) {
|
|
164
|
+
throw new Error(`Workflow state not found: ${id}`);
|
|
165
|
+
}
|
|
166
|
+
return data;
|
|
167
|
+
}
|
|
168
|
+
async updateWorkflowState(id, updates) {
|
|
169
|
+
const current = await this.getWorkflowState(id);
|
|
170
|
+
await this.storeWorkflowState({ ...current, ...updates });
|
|
171
|
+
}
|
|
172
|
+
async queryWorkflowsByStatus(status) {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
async storePattern(pattern) {
|
|
176
|
+
const id = pattern.id || `pattern-${Date.now()}`;
|
|
177
|
+
await this.store(`patterns:${id}`, pattern, { partition: 'patterns', ttl: pattern.ttl });
|
|
178
|
+
return id;
|
|
179
|
+
}
|
|
180
|
+
async getPattern(patternName) {
|
|
181
|
+
const data = await this.retrieve(`patterns:${patternName}`, { partition: 'patterns' });
|
|
182
|
+
if (!data) {
|
|
183
|
+
throw new Error(`Pattern not found: ${patternName}`);
|
|
184
|
+
}
|
|
185
|
+
return data;
|
|
186
|
+
}
|
|
187
|
+
async incrementPatternUsage(patternName) {
|
|
188
|
+
try {
|
|
189
|
+
const pattern = await this.getPattern(patternName);
|
|
190
|
+
pattern.usageCount++;
|
|
191
|
+
await this.storePattern(pattern);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Pattern doesn't exist, ignore
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async queryPatternsByConfidence(threshold) {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
async createConsensusProposal(proposal) {
|
|
201
|
+
await this.store(`consensus:${proposal.id}`, proposal, { partition: 'consensus', ttl: proposal.ttl });
|
|
202
|
+
}
|
|
203
|
+
async getConsensusProposal(id) {
|
|
204
|
+
const data = await this.retrieve(`consensus:${id}`, { partition: 'consensus' });
|
|
205
|
+
if (!data) {
|
|
206
|
+
throw new Error(`Consensus proposal not found: ${id}`);
|
|
207
|
+
}
|
|
208
|
+
return data;
|
|
209
|
+
}
|
|
210
|
+
async voteOnConsensus(proposalId, agentId) {
|
|
211
|
+
const proposal = await this.getConsensusProposal(proposalId);
|
|
212
|
+
if (!proposal.votes.includes(agentId)) {
|
|
213
|
+
proposal.votes.push(agentId);
|
|
214
|
+
}
|
|
215
|
+
const approved = proposal.votes.length >= proposal.quorum;
|
|
216
|
+
if (approved) {
|
|
217
|
+
proposal.status = 'approved';
|
|
218
|
+
}
|
|
219
|
+
await this.createConsensusProposal(proposal);
|
|
220
|
+
return approved;
|
|
221
|
+
}
|
|
222
|
+
async queryConsensusProposals(status) {
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
async storePerformanceMetric(metric) {
|
|
226
|
+
const id = metric.id || `metric-${Date.now()}`;
|
|
227
|
+
await this.store(`metrics:${id}`, metric, { partition: 'performance_metrics' });
|
|
228
|
+
return id;
|
|
229
|
+
}
|
|
230
|
+
async queryPerformanceMetrics(metricName) {
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
233
|
+
async getMetricsByAgent(agentId) {
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
async getAverageMetric(metricName) {
|
|
237
|
+
return 0;
|
|
238
|
+
}
|
|
239
|
+
async createArtifact(artifact) {
|
|
240
|
+
await this.store(`artifact:${artifact.id}`, artifact, { partition: 'artifacts' });
|
|
241
|
+
}
|
|
242
|
+
async getArtifact(id) {
|
|
243
|
+
const data = await this.retrieve(`artifact:${id}`, { partition: 'artifacts' });
|
|
244
|
+
if (!data) {
|
|
245
|
+
throw new Error(`Artifact not found: ${id}`);
|
|
246
|
+
}
|
|
247
|
+
return data;
|
|
248
|
+
}
|
|
249
|
+
async queryArtifactsByKind(kind) {
|
|
250
|
+
return [];
|
|
251
|
+
}
|
|
252
|
+
async queryArtifactsByTag(tag) {
|
|
253
|
+
return [];
|
|
254
|
+
}
|
|
255
|
+
async createSession(session) {
|
|
256
|
+
await this.store(`session:${session.id}`, session, { partition: 'sessions' });
|
|
257
|
+
}
|
|
258
|
+
async getSession(id) {
|
|
259
|
+
const data = await this.retrieve(`session:${id}`, { partition: 'sessions' });
|
|
260
|
+
if (!data) {
|
|
261
|
+
throw new Error(`Session not found: ${id}`);
|
|
262
|
+
}
|
|
263
|
+
return data;
|
|
264
|
+
}
|
|
265
|
+
async addSessionCheckpoint(sessionId, checkpoint) {
|
|
266
|
+
const session = await this.getSession(sessionId);
|
|
267
|
+
session.checkpoints.push(checkpoint);
|
|
268
|
+
await this.createSession(session);
|
|
269
|
+
}
|
|
270
|
+
async getLatestCheckpoint(sessionId) {
|
|
271
|
+
const session = await this.getSession(sessionId);
|
|
272
|
+
return session.checkpoints.length > 0
|
|
273
|
+
? session.checkpoints[session.checkpoints.length - 1]
|
|
274
|
+
: undefined;
|
|
275
|
+
}
|
|
276
|
+
async markSessionResumed(sessionId) {
|
|
277
|
+
const session = await this.getSession(sessionId);
|
|
278
|
+
session.lastResumed = Date.now();
|
|
279
|
+
await this.createSession(session);
|
|
280
|
+
}
|
|
281
|
+
async registerAgent(agent) {
|
|
282
|
+
await this.store(`agent:${agent.id}`, agent, { partition: 'agent_registry' });
|
|
283
|
+
}
|
|
284
|
+
async getAgent(id) {
|
|
285
|
+
const data = await this.retrieve(`agent:${id}`, { partition: 'agent_registry' });
|
|
286
|
+
if (!data) {
|
|
287
|
+
throw new Error(`Agent not found: ${id}`);
|
|
288
|
+
}
|
|
289
|
+
return data;
|
|
290
|
+
}
|
|
291
|
+
async updateAgentStatus(agentId, status) {
|
|
292
|
+
const agent = await this.getAgent(agentId);
|
|
293
|
+
agent.status = status;
|
|
294
|
+
agent.updatedAt = Date.now();
|
|
295
|
+
await this.registerAgent(agent);
|
|
296
|
+
}
|
|
297
|
+
async queryAgentsByStatus(status) {
|
|
298
|
+
return [];
|
|
299
|
+
}
|
|
300
|
+
async updateAgentPerformance(agentId, performance) {
|
|
301
|
+
const agent = await this.getAgent(agentId);
|
|
302
|
+
agent.performance = performance;
|
|
303
|
+
agent.updatedAt = Date.now();
|
|
304
|
+
await this.registerAgent(agent);
|
|
305
|
+
}
|
|
306
|
+
async storeGOAPGoal(goal) {
|
|
307
|
+
await this.store(`goap_goal:${goal.id}`, goal, { partition: 'goap_goals' });
|
|
308
|
+
}
|
|
309
|
+
async getGOAPGoal(id) {
|
|
310
|
+
const data = await this.retrieve(`goap_goal:${id}`, { partition: 'goap_goals' });
|
|
311
|
+
if (!data) {
|
|
312
|
+
throw new Error(`GOAP goal not found: ${id}`);
|
|
313
|
+
}
|
|
314
|
+
return data;
|
|
315
|
+
}
|
|
316
|
+
async storeGOAPAction(action) {
|
|
317
|
+
await this.store(`goap_action:${action.id}`, action, { partition: 'goap_actions' });
|
|
318
|
+
}
|
|
319
|
+
async getGOAPAction(id) {
|
|
320
|
+
const data = await this.retrieve(`goap_action:${id}`, { partition: 'goap_actions' });
|
|
321
|
+
if (!data) {
|
|
322
|
+
throw new Error(`GOAP action not found: ${id}`);
|
|
323
|
+
}
|
|
324
|
+
return data;
|
|
325
|
+
}
|
|
326
|
+
async storeGOAPPlan(plan) {
|
|
327
|
+
await this.store(`goap_plan:${plan.id}`, plan, { partition: 'goap_plans' });
|
|
328
|
+
}
|
|
329
|
+
async getGOAPPlan(id) {
|
|
330
|
+
const data = await this.retrieve(`goap_plan:${id}`, { partition: 'goap_plans' });
|
|
331
|
+
if (!data) {
|
|
332
|
+
throw new Error(`GOAP plan not found: ${id}`);
|
|
333
|
+
}
|
|
334
|
+
return data;
|
|
335
|
+
}
|
|
336
|
+
async storeOODACycle(cycle) {
|
|
337
|
+
await this.store(`ooda_cycle:${cycle.id}`, cycle, { partition: 'ooda_cycles' });
|
|
338
|
+
}
|
|
339
|
+
async getOODACycle(id) {
|
|
340
|
+
const data = await this.retrieve(`ooda_cycle:${id}`, { partition: 'ooda_cycles' });
|
|
341
|
+
if (!data) {
|
|
342
|
+
throw new Error(`OODA cycle not found: ${id}`);
|
|
343
|
+
}
|
|
344
|
+
return data;
|
|
345
|
+
}
|
|
346
|
+
async updateOODAPhase(cycleId, phase, data) {
|
|
347
|
+
const cycle = await this.getOODACycle(cycleId);
|
|
348
|
+
cycle.phase = phase;
|
|
349
|
+
switch (phase) {
|
|
350
|
+
case 'observe':
|
|
351
|
+
cycle.observations = data;
|
|
352
|
+
break;
|
|
353
|
+
case 'orient':
|
|
354
|
+
cycle.orientation = data;
|
|
355
|
+
break;
|
|
356
|
+
case 'decide':
|
|
357
|
+
cycle.decision = data;
|
|
358
|
+
break;
|
|
359
|
+
case 'act':
|
|
360
|
+
cycle.action = data;
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
await this.storeOODACycle(cycle);
|
|
364
|
+
}
|
|
365
|
+
async completeOODACycle(cycleId, result) {
|
|
366
|
+
const cycle = await this.getOODACycle(cycleId);
|
|
367
|
+
cycle.completed = true;
|
|
368
|
+
cycle.result = result;
|
|
369
|
+
await this.storeOODACycle(cycle);
|
|
370
|
+
}
|
|
371
|
+
async queryOODACyclesByPhase(phase) {
|
|
372
|
+
return [];
|
|
373
|
+
}
|
|
374
|
+
// ACL methods (basic implementation)
|
|
375
|
+
async storeACL(acl) {
|
|
376
|
+
await this.store(`acl:${acl.resourceId}`, acl, { partition: 'acl' });
|
|
377
|
+
}
|
|
378
|
+
async getACL(resourceId) {
|
|
379
|
+
return await this.retrieve(`acl:${resourceId}`, { partition: 'acl' });
|
|
380
|
+
}
|
|
381
|
+
async updateACL(resourceId, updates) {
|
|
382
|
+
const existing = await this.getACL(resourceId);
|
|
383
|
+
if (!existing) {
|
|
384
|
+
throw new Error(`ACL not found for resource: ${resourceId}`);
|
|
385
|
+
}
|
|
386
|
+
await this.storeACL({ ...existing, ...updates });
|
|
387
|
+
}
|
|
388
|
+
async grantPermission(resourceId, agentId, permissions) {
|
|
389
|
+
const acl = await this.getACL(resourceId);
|
|
390
|
+
if (!acl) {
|
|
391
|
+
throw new Error(`ACL not found for resource: ${resourceId}`);
|
|
392
|
+
}
|
|
393
|
+
acl.grantedPermissions = acl.grantedPermissions || {};
|
|
394
|
+
acl.grantedPermissions[agentId] = permissions;
|
|
395
|
+
await this.storeACL(acl);
|
|
396
|
+
}
|
|
397
|
+
async revokePermission(resourceId, agentId, permissions) {
|
|
398
|
+
const acl = await this.getACL(resourceId);
|
|
399
|
+
if (!acl) {
|
|
400
|
+
throw new Error(`ACL not found for resource: ${resourceId}`);
|
|
401
|
+
}
|
|
402
|
+
if (acl.grantedPermissions && acl.grantedPermissions[agentId]) {
|
|
403
|
+
delete acl.grantedPermissions[agentId];
|
|
404
|
+
}
|
|
405
|
+
await this.storeACL(acl);
|
|
406
|
+
}
|
|
407
|
+
async blockAgent(resourceId, agentId) {
|
|
408
|
+
const acl = await this.getACL(resourceId);
|
|
409
|
+
if (!acl) {
|
|
410
|
+
throw new Error(`ACL not found for resource: ${resourceId}`);
|
|
411
|
+
}
|
|
412
|
+
acl.blockedAgents = acl.blockedAgents || [];
|
|
413
|
+
if (!acl.blockedAgents.includes(agentId)) {
|
|
414
|
+
acl.blockedAgents.push(agentId);
|
|
415
|
+
}
|
|
416
|
+
await this.storeACL(acl);
|
|
417
|
+
}
|
|
418
|
+
async unblockAgent(resourceId, agentId) {
|
|
419
|
+
const acl = await this.getACL(resourceId);
|
|
420
|
+
if (!acl) {
|
|
421
|
+
throw new Error(`ACL not found for resource: ${resourceId}`);
|
|
422
|
+
}
|
|
423
|
+
if (acl.blockedAgents) {
|
|
424
|
+
acl.blockedAgents = acl.blockedAgents.filter((id) => id !== agentId);
|
|
425
|
+
}
|
|
426
|
+
await this.storeACL(acl);
|
|
427
|
+
}
|
|
428
|
+
getAccessControl() {
|
|
429
|
+
return null; // Not implemented in basic adapter
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
exports.MemoryStoreAdapter = MemoryStoreAdapter;
|
|
433
|
+
//# sourceMappingURL=MemoryStoreAdapter.js.map
|