@holoscript/framework 6.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/ALL-test-results.json +1 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/ROADMAP.md +175 -0
- package/dist/AgentManifest-CB4xM-Ma.d.cts +704 -0
- package/dist/AgentManifest-CB4xM-Ma.d.ts +704 -0
- package/dist/BehaviorTree-BrBFECv5.d.cts +103 -0
- package/dist/BehaviorTree-BrBFECv5.d.ts +103 -0
- package/dist/InvisibleWallet-BB6tFvRA.d.cts +1732 -0
- package/dist/InvisibleWallet-rtRrBOA8.d.ts +1732 -0
- package/dist/OrchestratorAgent-BvWgf9uw.d.cts +798 -0
- package/dist/OrchestratorAgent-Q_CbVTmO.d.ts +798 -0
- package/dist/agents/index.cjs +4790 -0
- package/dist/agents/index.d.cts +1788 -0
- package/dist/agents/index.d.ts +1788 -0
- package/dist/agents/index.js +4695 -0
- package/dist/ai/index.cjs +5347 -0
- package/dist/ai/index.d.cts +1753 -0
- package/dist/ai/index.d.ts +1753 -0
- package/dist/ai/index.js +5244 -0
- package/dist/behavior.cjs +449 -0
- package/dist/behavior.d.cts +130 -0
- package/dist/behavior.d.ts +130 -0
- package/dist/behavior.js +407 -0
- package/dist/economy/index.cjs +3659 -0
- package/dist/economy/index.d.cts +747 -0
- package/dist/economy/index.d.ts +747 -0
- package/dist/economy/index.js +3617 -0
- package/dist/implementations-D9T3un9D.d.cts +236 -0
- package/dist/implementations-D9T3un9D.d.ts +236 -0
- package/dist/index.cjs +24550 -0
- package/dist/index.d.cts +1729 -0
- package/dist/index.d.ts +1729 -0
- package/dist/index.js +24277 -0
- package/dist/learning/index.cjs +219 -0
- package/dist/learning/index.d.cts +104 -0
- package/dist/learning/index.d.ts +104 -0
- package/dist/learning/index.js +189 -0
- package/dist/negotiation/index.cjs +970 -0
- package/dist/negotiation/index.d.cts +610 -0
- package/dist/negotiation/index.d.ts +610 -0
- package/dist/negotiation/index.js +931 -0
- package/dist/skills/index.cjs +1118 -0
- package/dist/skills/index.d.cts +289 -0
- package/dist/skills/index.d.ts +289 -0
- package/dist/skills/index.js +1079 -0
- package/dist/swarm/index.cjs +5268 -0
- package/dist/swarm/index.d.cts +2433 -0
- package/dist/swarm/index.d.ts +2433 -0
- package/dist/swarm/index.js +5221 -0
- package/dist/training/index.cjs +2745 -0
- package/dist/training/index.d.cts +1734 -0
- package/dist/training/index.d.ts +1734 -0
- package/dist/training/index.js +2687 -0
- package/extract-failures.js +10 -0
- package/package.json +82 -0
- package/src/__tests__/bounty-marketplace.test.ts +374 -0
- package/src/__tests__/delegation.test.ts +144 -0
- package/src/__tests__/distributed-claimer.test.ts +147 -0
- package/src/__tests__/done-log-audit.test.ts +342 -0
- package/src/__tests__/framework.test.ts +865 -0
- package/src/__tests__/goal-synthesizer.test.ts +236 -0
- package/src/__tests__/presence.test.ts +223 -0
- package/src/__tests__/protocol-agent.test.ts +254 -0
- package/src/__tests__/revenue-splitter.test.ts +114 -0
- package/src/__tests__/scenario-driven-todo.test.ts +197 -0
- package/src/__tests__/self-improve.test.ts +349 -0
- package/src/__tests__/service-lifecycle.test.ts +237 -0
- package/src/__tests__/skill-router.test.ts +121 -0
- package/src/agents/AgentManifest.ts +493 -0
- package/src/agents/AgentRegistry.ts +475 -0
- package/src/agents/AgentTypes.ts +585 -0
- package/src/agents/AgentWalletRegistry.ts +83 -0
- package/src/agents/AuthenticatedCRDT.ts +388 -0
- package/src/agents/CapabilityMatcher.ts +453 -0
- package/src/agents/CrossRealityHandoff.ts +305 -0
- package/src/agents/CulturalMemory.ts +454 -0
- package/src/agents/FederatedRegistryAdapter.ts +429 -0
- package/src/agents/NormEngine.ts +450 -0
- package/src/agents/OrchestratorAgent.ts +414 -0
- package/src/agents/SkillWorkflowEngine.ts +472 -0
- package/src/agents/TaskDelegationService.ts +551 -0
- package/src/agents/__tests__/AgentManifest.prod.test.ts +134 -0
- package/src/agents/__tests__/AgentManifest.test.ts +182 -0
- package/src/agents/__tests__/AgentModule.test.ts +864 -0
- package/src/agents/__tests__/AgentRegistry.prod.test.ts +125 -0
- package/src/agents/__tests__/AgentRegistry.test.ts +148 -0
- package/src/agents/__tests__/AgentTypes.test.ts +534 -0
- package/src/agents/__tests__/AgentWalletRegistry.test.ts +152 -0
- package/src/agents/__tests__/AuthenticatedCRDT.test.ts +558 -0
- package/src/agents/__tests__/CapabilityMatcher.prod.test.ts +117 -0
- package/src/agents/__tests__/CapabilityMatcher.test.ts +178 -0
- package/src/agents/__tests__/CrossRealityHandoff.test.ts +402 -0
- package/src/agents/__tests__/CulturalMemory.test.ts +200 -0
- package/src/agents/__tests__/FederatedRegistryAdapter.test.ts +409 -0
- package/src/agents/__tests__/NormEngine.test.ts +276 -0
- package/src/agents/__tests__/OrchestratorAgent.test.ts +182 -0
- package/src/agents/__tests__/SkillWorkflowEngine.test.ts +357 -0
- package/src/agents/__tests__/TaskDelegationService.test.ts +446 -0
- package/src/agents/index.ts +107 -0
- package/src/agents/spatial-comms/Layer1RealTime.ts +621 -0
- package/src/agents/spatial-comms/Layer2A2A.ts +661 -0
- package/src/agents/spatial-comms/Layer3MCP.ts +651 -0
- package/src/agents/spatial-comms/ProtocolTypes.ts +543 -0
- package/src/agents/spatial-comms/SpatialCommClient.ts +483 -0
- package/src/agents/spatial-comms/__tests__/performance-benchmark.test.ts +465 -0
- package/src/agents/spatial-comms/examples/multi-agent-world-creation.ts +409 -0
- package/src/agents/spatial-comms/index.ts +66 -0
- package/src/ai/AIAdapter.ts +313 -0
- package/src/ai/AICopilot.ts +331 -0
- package/src/ai/AIOutputValidator.ts +203 -0
- package/src/ai/BTNodes.ts +239 -0
- package/src/ai/BehaviorSelector.ts +135 -0
- package/src/ai/BehaviorTree.ts +153 -0
- package/src/ai/Blackboard.ts +165 -0
- package/src/ai/GenerationAnalytics.ts +461 -0
- package/src/ai/GenerationCache.ts +265 -0
- package/src/ai/GoalPlanner.ts +165 -0
- package/src/ai/HoloScriptGenerator.ts +580 -0
- package/src/ai/InfluenceMap.ts +180 -0
- package/src/ai/NavMesh.ts +168 -0
- package/src/ai/PerceptionSystem.ts +178 -0
- package/src/ai/PromptTemplates.ts +453 -0
- package/src/ai/SemanticSearchService.ts +80 -0
- package/src/ai/StateMachine.ts +196 -0
- package/src/ai/SteeringBehavior.ts +150 -0
- package/src/ai/SteeringBehaviors.ts +244 -0
- package/src/ai/TrainingDataGenerator.ts +1082 -0
- package/src/ai/UtilityAI.ts +145 -0
- package/src/ai/__tests__/AIAdapter.prod.test.ts +259 -0
- package/src/ai/__tests__/AIAdapter.test.ts +109 -0
- package/src/ai/__tests__/AICopilot.prod.test.ts +341 -0
- package/src/ai/__tests__/AICopilot.test.ts +178 -0
- package/src/ai/__tests__/AIOutputValidator.prod.test.ts +226 -0
- package/src/ai/__tests__/AIOutputValidator.test.ts +138 -0
- package/src/ai/__tests__/BTNodes.prod.test.ts +391 -0
- package/src/ai/__tests__/BTNodes.test.ts +263 -0
- package/src/ai/__tests__/BehaviorSelector.prod.test.ts +129 -0
- package/src/ai/__tests__/BehaviorSelector.test.ts +132 -0
- package/src/ai/__tests__/BehaviorTree.prod.test.ts +266 -0
- package/src/ai/__tests__/BehaviorTree.test.ts +216 -0
- package/src/ai/__tests__/Blackboard.prod.test.ts +339 -0
- package/src/ai/__tests__/Blackboard.test.ts +183 -0
- package/src/ai/__tests__/GenerationAnalytics.prod.test.ts +141 -0
- package/src/ai/__tests__/GenerationAnalytics.test.ts +165 -0
- package/src/ai/__tests__/GenerationCache.prod.test.ts +144 -0
- package/src/ai/__tests__/GenerationCache.test.ts +171 -0
- package/src/ai/__tests__/GoalPlanner.prod.test.ts +189 -0
- package/src/ai/__tests__/GoalPlanner.test.ts +137 -0
- package/src/ai/__tests__/GoalPlannerDepth.prod.test.ts +217 -0
- package/src/ai/__tests__/HoloScriptGenerator.test.ts +125 -0
- package/src/ai/__tests__/InfluenceMap.prod.test.ts +146 -0
- package/src/ai/__tests__/InfluenceMap.test.ts +149 -0
- package/src/ai/__tests__/NavMesh.prod.test.ts +141 -0
- package/src/ai/__tests__/NavMesh.test.ts +159 -0
- package/src/ai/__tests__/PerceptionSystem.prod.test.ts +135 -0
- package/src/ai/__tests__/PerceptionSystem.test.ts +250 -0
- package/src/ai/__tests__/PromptTemplates.prod.test.ts +313 -0
- package/src/ai/__tests__/PromptTemplates.test.ts +146 -0
- package/src/ai/__tests__/SemanticSearch.test.ts +37 -0
- package/src/ai/__tests__/StateMachine.prod.test.ts +162 -0
- package/src/ai/__tests__/StateMachine.test.ts +163 -0
- package/src/ai/__tests__/SteeringBehavior.prod.test.ts +251 -0
- package/src/ai/__tests__/SteeringBehavior.test.ts +135 -0
- package/src/ai/__tests__/SteeringBehaviors.prod.test.ts +133 -0
- package/src/ai/__tests__/SteeringBehaviors.test.ts +151 -0
- package/src/ai/__tests__/TrainingDataGenerator.prod.test.ts +286 -0
- package/src/ai/__tests__/TrainingDataGenerator.test.ts +286 -0
- package/src/ai/__tests__/UtilityAI.prod.test.ts +207 -0
- package/src/ai/__tests__/UtilityAI.test.ts +155 -0
- package/src/ai/__tests__/adapters.prod.test.ts +263 -0
- package/src/ai/__tests__/adapters.test.ts +320 -0
- package/src/ai/adapters.ts +1585 -0
- package/src/ai/index.ts +130 -0
- package/src/behavior/BehaviorPresets.ts +140 -0
- package/src/behavior/BehaviorTree.ts +236 -0
- package/src/behavior/StateMachine.ts +176 -0
- package/src/behavior/StateTrait.ts +67 -0
- package/src/behavior/index.ts +8 -0
- package/src/behavior.ts +8 -0
- package/src/board/audit.ts +284 -0
- package/src/board/board-ops.ts +336 -0
- package/src/board/board-types.ts +302 -0
- package/src/board/index.ts +69 -0
- package/src/define-agent.ts +46 -0
- package/src/define-team.ts +33 -0
- package/src/delegation.ts +265 -0
- package/src/distributed-claimer.ts +228 -0
- package/src/economy/AgentBudgetEnforcer.ts +464 -0
- package/src/economy/BountyManager.ts +185 -0
- package/src/economy/CreatorRevenueAggregator.ts +460 -0
- package/src/economy/InvisibleWallet.ts +82 -0
- package/src/economy/KnowledgeMarketplace.ts +193 -0
- package/src/economy/PaymentWebhookService.ts +512 -0
- package/src/economy/RevenueSplitter.ts +156 -0
- package/src/economy/SubscriptionManager.ts +546 -0
- package/src/economy/UnifiedBudgetOptimizer.ts +635 -0
- package/src/economy/UsageMeter.ts +440 -0
- package/src/economy/_core-stubs.ts +219 -0
- package/src/economy/index.ts +100 -0
- package/src/economy/x402-facilitator.ts +1978 -0
- package/src/index.ts +348 -0
- package/src/knowledge/__tests__/knowledge-consolidator.test.ts +444 -0
- package/src/knowledge/__tests__/knowledge-store-vector.test.ts +291 -0
- package/src/knowledge/brain.ts +167 -0
- package/src/knowledge/consolidation.ts +581 -0
- package/src/knowledge/knowledge-consolidator.ts +510 -0
- package/src/knowledge/knowledge-store.ts +616 -0
- package/src/learning/MemoryConsolidator.ts +102 -0
- package/src/learning/MemoryScorer.ts +69 -0
- package/src/learning/ProceduralCompiler.ts +45 -0
- package/src/learning/SemanticClusterer.ts +66 -0
- package/src/learning/index.ts +8 -0
- package/src/llm/llm-adapter.ts +159 -0
- package/src/mesh/index.ts +309 -0
- package/src/negotiation/NegotiationProtocol.ts +694 -0
- package/src/negotiation/NegotiationTypes.ts +473 -0
- package/src/negotiation/VotingMechanisms.ts +691 -0
- package/src/negotiation/index.ts +49 -0
- package/src/protocol/goal-synthesizer.ts +317 -0
- package/src/protocol/implementations.ts +474 -0
- package/src/protocol/micro-phase-decomposer.ts +299 -0
- package/src/protocol/micro-step-decomposer.test.ts +306 -0
- package/src/protocol-agent.test.ts +353 -0
- package/src/protocol-agent.ts +670 -0
- package/src/self-improve/absorb-scanner.ts +252 -0
- package/src/self-improve/evolution-engine.ts +149 -0
- package/src/self-improve/framework-absorber.ts +214 -0
- package/src/self-improve/index.ts +50 -0
- package/src/self-improve/prompt-optimizer.ts +212 -0
- package/src/self-improve/test-generator.ts +175 -0
- package/src/skill-router.ts +186 -0
- package/src/skills/index.ts +5 -0
- package/src/skills/skill-md-bridge.ts +1699 -0
- package/src/swarm/ACOEngine.ts +261 -0
- package/src/swarm/CollectiveIntelligence.ts +383 -0
- package/src/swarm/ContributionSynthesizer.ts +481 -0
- package/src/swarm/LeaderElection.ts +393 -0
- package/src/swarm/PSOEngine.ts +206 -0
- package/src/swarm/QuorumPolicy.ts +173 -0
- package/src/swarm/SwarmCoordinator.ts +335 -0
- package/src/swarm/SwarmManager.ts +442 -0
- package/src/swarm/SwarmMembership.ts +456 -0
- package/src/swarm/VotingRound.ts +255 -0
- package/src/swarm/__tests__/ACOEngine.prod.test.ts +164 -0
- package/src/swarm/__tests__/ACOEngine.test.ts +117 -0
- package/src/swarm/__tests__/CollectiveIntelligence.prod.test.ts +296 -0
- package/src/swarm/__tests__/CollectiveIntelligence.test.ts +457 -0
- package/src/swarm/__tests__/ContributionSynthesizer.prod.test.ts +269 -0
- package/src/swarm/__tests__/ContributionSynthesizer.test.ts +254 -0
- package/src/swarm/__tests__/LeaderElection.prod.test.ts +196 -0
- package/src/swarm/__tests__/LeaderElection.test.ts +151 -0
- package/src/swarm/__tests__/PSOEngine.prod.test.ts +162 -0
- package/src/swarm/__tests__/PSOEngine.test.ts +106 -0
- package/src/swarm/__tests__/QuorumPolicy.prod.test.ts +216 -0
- package/src/swarm/__tests__/QuorumPolicy.test.ts +177 -0
- package/src/swarm/__tests__/SwarmCoordinator.prod.test.ts +186 -0
- package/src/swarm/__tests__/SwarmCoordinator.test.ts +167 -0
- package/src/swarm/__tests__/SwarmManager.prod.test.ts +308 -0
- package/src/swarm/__tests__/SwarmManager.test.ts +373 -0
- package/src/swarm/__tests__/SwarmMembership.prod.test.ts +273 -0
- package/src/swarm/__tests__/SwarmMembership.test.ts +264 -0
- package/src/swarm/__tests__/VotingRound.prod.test.ts +233 -0
- package/src/swarm/__tests__/VotingRound.test.ts +174 -0
- package/src/swarm/analytics/SwarmInspector.ts +476 -0
- package/src/swarm/analytics/SwarmMetrics.ts +449 -0
- package/src/swarm/analytics/__tests__/SwarmInspector.prod.test.ts +366 -0
- package/src/swarm/analytics/__tests__/SwarmInspector.test.ts +454 -0
- package/src/swarm/analytics/__tests__/SwarmMetrics.prod.test.ts +254 -0
- package/src/swarm/analytics/__tests__/SwarmMetrics.test.ts +370 -0
- package/src/swarm/analytics/index.ts +7 -0
- package/src/swarm/index.ts +69 -0
- package/src/swarm/messaging/BroadcastChannel.ts +509 -0
- package/src/swarm/messaging/GossipProtocol.ts +565 -0
- package/src/swarm/messaging/SwarmEventBus.ts +443 -0
- package/src/swarm/messaging/__tests__/BroadcastChannel.prod.test.ts +331 -0
- package/src/swarm/messaging/__tests__/BroadcastChannel.test.ts +333 -0
- package/src/swarm/messaging/__tests__/GossipProtocol.prod.test.ts +356 -0
- package/src/swarm/messaging/__tests__/GossipProtocol.test.ts +437 -0
- package/src/swarm/messaging/__tests__/SwarmEventBus.prod.test.ts +191 -0
- package/src/swarm/messaging/__tests__/SwarmEventBus.test.ts +247 -0
- package/src/swarm/messaging/index.ts +8 -0
- package/src/swarm/spatial/FlockingBehavior.ts +462 -0
- package/src/swarm/spatial/FormationController.ts +500 -0
- package/src/swarm/spatial/Vector3.ts +170 -0
- package/src/swarm/spatial/ZoneClaiming.ts +509 -0
- package/src/swarm/spatial/__tests__/FlockingBehavior.prod.test.ts +239 -0
- package/src/swarm/spatial/__tests__/FlockingBehavior.test.ts +298 -0
- package/src/swarm/spatial/__tests__/FormationController.prod.test.ts +240 -0
- package/src/swarm/spatial/__tests__/FormationController.test.ts +297 -0
- package/src/swarm/spatial/__tests__/Vector3.prod.test.ts +283 -0
- package/src/swarm/spatial/__tests__/Vector3.test.ts +224 -0
- package/src/swarm/spatial/__tests__/ZoneClaiming.prod.test.ts +246 -0
- package/src/swarm/spatial/__tests__/ZoneClaiming.test.ts +374 -0
- package/src/swarm/spatial/index.ts +28 -0
- package/src/team.ts +1245 -0
- package/src/training/LRScheduler.ts +377 -0
- package/src/training/QualityScoringPipeline.ts +139 -0
- package/src/training/SoftDedup.ts +461 -0
- package/src/training/SparsityMonitor.ts +685 -0
- package/src/training/SparsityMonitorTypes.ts +209 -0
- package/src/training/SpatialTrainingDataGenerator.ts +1526 -0
- package/src/training/SpatialTrainingDataTypes.ts +216 -0
- package/src/training/TrainingPipelineConfig.ts +215 -0
- package/src/training/constants.ts +94 -0
- package/src/training/index.ts +138 -0
- package/src/training/schema.ts +147 -0
- package/src/training/scripts/generate-novel-use-cases-dataset.ts +272 -0
- package/src/training/scripts/generate-spatial-dataset.ts +521 -0
- package/src/training/training/data/novel-use-cases.jsonl +153 -0
- package/src/training/training/data/spatial-reasoning-10k.jsonl +9354 -0
- package/src/training/trainingmonkey/TrainingMonkeyIntegration.ts +477 -0
- package/src/training/trainingmonkey/TrainingMonkeyTypes.ts +230 -0
- package/src/training/trainingmonkey/index.ts +26 -0
- package/src/training/trait-mappings.ts +157 -0
- package/src/types/core-stubs.d.ts +113 -0
- package/src/types.ts +304 -0
- package/test-output.txt +0 -0
- package/test-result.json +1 -0
- package/tsc-errors.txt +4 -0
- package/tsc_output.txt +0 -0
- package/tsconfig.json +14 -0
- package/tsup-learning-esm.config.ts +12 -0
- package/tsup.config.ts +21 -0
- package/typescript-errors-2.txt +0 -0
- package/typescript-errors.txt +22 -0
- package/vitest-log-utf8.txt +268 -0
- package/vitest-log.txt +0 -0
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol Implementations
|
|
3
|
+
*
|
|
4
|
+
* Canonical home for BaseAgent, BaseService, GoalSynthesizer, MicroPhaseDecomposer.
|
|
5
|
+
* These were absorbed from @holoscript/agent-protocol which now keeps only specs/interfaces.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// ── Protocol spec types (defined here as canonical source, no circular deps) ──
|
|
9
|
+
|
|
10
|
+
export enum ProtocolPhase {
|
|
11
|
+
INTAKE = 0,
|
|
12
|
+
REFLECT = 1,
|
|
13
|
+
EXECUTE = 2,
|
|
14
|
+
COMPRESS = 3,
|
|
15
|
+
REINTAKE = 4,
|
|
16
|
+
GROW = 5,
|
|
17
|
+
EVOLVE = 6,
|
|
18
|
+
AUTONOMIZE = 7,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface PhaseResult {
|
|
22
|
+
phase: ProtocolPhase;
|
|
23
|
+
status: 'success' | 'failure' | 'skipped';
|
|
24
|
+
data: unknown;
|
|
25
|
+
durationMs: number;
|
|
26
|
+
timestamp: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface AgentIdentity {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
domain: string;
|
|
33
|
+
version: string;
|
|
34
|
+
capabilities: string[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ProtocolCycleResult {
|
|
38
|
+
cycleId: string;
|
|
39
|
+
task: string;
|
|
40
|
+
domain: string;
|
|
41
|
+
phases: PhaseResult[];
|
|
42
|
+
status: 'complete' | 'partial' | 'failed';
|
|
43
|
+
totalDurationMs: number;
|
|
44
|
+
startedAt: number;
|
|
45
|
+
completedAt: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface Goal {
|
|
49
|
+
id: string;
|
|
50
|
+
description: string;
|
|
51
|
+
category: string;
|
|
52
|
+
priority: 'low' | 'medium' | 'high';
|
|
53
|
+
estimatedComplexity: number;
|
|
54
|
+
generatedAt: string;
|
|
55
|
+
source: 'autonomous-boredom' | 'user-instruction' | 'system-mandate';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface MicroPhaseTask {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
estimatedDuration: number;
|
|
62
|
+
dependencies: string[];
|
|
63
|
+
execute: () => Promise<unknown>;
|
|
64
|
+
priority?: number;
|
|
65
|
+
timeout?: number;
|
|
66
|
+
retryCount?: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface MicroPhaseGroup {
|
|
70
|
+
id: string;
|
|
71
|
+
name: string;
|
|
72
|
+
tasks: MicroPhaseTask[];
|
|
73
|
+
parallel: boolean;
|
|
74
|
+
estimatedDuration: number;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface ExecutionPlan {
|
|
78
|
+
groups: MicroPhaseGroup[];
|
|
79
|
+
totalEstimatedTime: number;
|
|
80
|
+
parallelizationRatio: number;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface ExecutionResult {
|
|
84
|
+
taskId: string;
|
|
85
|
+
status: 'success' | 'failure' | 'timeout' | 'skipped';
|
|
86
|
+
duration: number;
|
|
87
|
+
result?: unknown;
|
|
88
|
+
error?: Error;
|
|
89
|
+
timestamp: number;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface ServiceMetadata {
|
|
93
|
+
name: string;
|
|
94
|
+
version: string;
|
|
95
|
+
description: string;
|
|
96
|
+
dependencies?: string[];
|
|
97
|
+
lifecycle: string;
|
|
98
|
+
initializedAt?: Date;
|
|
99
|
+
readyAt?: Date;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface ServiceMetrics {
|
|
103
|
+
requestCount: number;
|
|
104
|
+
errorCount: number;
|
|
105
|
+
latency: { p50: number; p95: number; p99: number };
|
|
106
|
+
lastRequestAt?: Date;
|
|
107
|
+
lastErrorAt?: Date;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface ServiceConfig {
|
|
111
|
+
enabled: boolean;
|
|
112
|
+
timeout: number;
|
|
113
|
+
retries: number;
|
|
114
|
+
[key: string]: unknown;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export type PWGSeverity = 'low' | 'medium' | 'high' | 'critical';
|
|
118
|
+
|
|
119
|
+
export interface Pattern {
|
|
120
|
+
id: string; domain: string; problem: string; solution: string; context?: string; tags: string[]; confidence: number; createdAt: number; updatedAt: number;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface Wisdom {
|
|
124
|
+
id: string; domain: string; insight: string; context: string; source: string; tags: string[]; createdAt: number;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export interface Gotcha {
|
|
128
|
+
id: string; domain: string; mistake: string; fix: string; severity: PWGSeverity; tags: string[]; createdAt: number;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export type PWGEntry = Pattern | Wisdom | Gotcha;
|
|
132
|
+
|
|
133
|
+
export function isPattern(entry: PWGEntry): entry is Pattern { return entry.id.startsWith('P.'); }
|
|
134
|
+
export function isWisdom(entry: PWGEntry): entry is Wisdom { return entry.id.startsWith('W.'); }
|
|
135
|
+
export function isGotcha(entry: PWGEntry): entry is Gotcha { return entry.id.startsWith('G.'); }
|
|
136
|
+
|
|
137
|
+
// =============================================================================
|
|
138
|
+
// BASE AGENT — Abstract 7-phase agent contract
|
|
139
|
+
// =============================================================================
|
|
140
|
+
|
|
141
|
+
export abstract class BaseAgent {
|
|
142
|
+
abstract readonly identity: AgentIdentity;
|
|
143
|
+
|
|
144
|
+
/** Phase 0: Gather data and context */
|
|
145
|
+
abstract intake(input: unknown): Promise<PhaseResult>;
|
|
146
|
+
/** Phase 1: Analyze and understand */
|
|
147
|
+
abstract reflect(data: unknown): Promise<PhaseResult>;
|
|
148
|
+
/** Phase 2: Take action */
|
|
149
|
+
abstract execute(plan: unknown): Promise<PhaseResult>;
|
|
150
|
+
/** Phase 3: Store knowledge efficiently */
|
|
151
|
+
abstract compress(results: unknown): Promise<PhaseResult>;
|
|
152
|
+
/** Phase 4: Re-evaluate with compressed knowledge */
|
|
153
|
+
abstract reintake(compressed: unknown): Promise<PhaseResult>;
|
|
154
|
+
/** Phase 5: Learn patterns, wisdom, gotchas */
|
|
155
|
+
abstract grow(learnings: unknown): Promise<PhaseResult>;
|
|
156
|
+
/** Phase 6: Adapt and optimize */
|
|
157
|
+
abstract evolve(adaptations: unknown): Promise<PhaseResult>;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Execute a complete 7-phase cycle
|
|
161
|
+
*/
|
|
162
|
+
async runCycle(task: string, context: Record<string, unknown> = {}): Promise<ProtocolCycleResult> {
|
|
163
|
+
const startedAt = Date.now();
|
|
164
|
+
const cycleId = `cycle_${startedAt}_${Math.random().toString(36).slice(2, 8)}`;
|
|
165
|
+
const phases: PhaseResult[] = [];
|
|
166
|
+
|
|
167
|
+
const runPhase = async (
|
|
168
|
+
phase: ProtocolPhase,
|
|
169
|
+
fn: (input: unknown) => Promise<PhaseResult>,
|
|
170
|
+
input: unknown
|
|
171
|
+
): Promise<PhaseResult> => {
|
|
172
|
+
const start = Date.now();
|
|
173
|
+
try {
|
|
174
|
+
const result = await fn.call(this, input);
|
|
175
|
+
result.durationMs = Date.now() - start;
|
|
176
|
+
phases.push(result);
|
|
177
|
+
return result;
|
|
178
|
+
} catch (err) {
|
|
179
|
+
const failResult: PhaseResult = {
|
|
180
|
+
phase,
|
|
181
|
+
status: 'failure',
|
|
182
|
+
data: err instanceof Error ? err.message : String(err),
|
|
183
|
+
durationMs: Date.now() - start,
|
|
184
|
+
timestamp: Date.now(),
|
|
185
|
+
};
|
|
186
|
+
phases.push(failResult);
|
|
187
|
+
return failResult;
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const intakeResult = await runPhase(ProtocolPhase.INTAKE, this.intake, { task, ...context });
|
|
192
|
+
const reflectResult = await runPhase(ProtocolPhase.REFLECT, this.reflect, intakeResult.data);
|
|
193
|
+
const executeResult = await runPhase(ProtocolPhase.EXECUTE, this.execute, reflectResult.data);
|
|
194
|
+
const compressResult = await runPhase(ProtocolPhase.COMPRESS, this.compress, executeResult.data);
|
|
195
|
+
const reintakeResult = await runPhase(ProtocolPhase.REINTAKE, this.reintake, compressResult.data);
|
|
196
|
+
const growResult = await runPhase(ProtocolPhase.GROW, this.grow, reintakeResult.data);
|
|
197
|
+
await runPhase(ProtocolPhase.EVOLVE, this.evolve, growResult.data);
|
|
198
|
+
|
|
199
|
+
const failed = phases.some((p) => p.status === 'failure');
|
|
200
|
+
return {
|
|
201
|
+
cycleId,
|
|
202
|
+
task,
|
|
203
|
+
domain: this.identity.domain,
|
|
204
|
+
phases,
|
|
205
|
+
status: failed ? 'partial' : 'complete',
|
|
206
|
+
totalDurationMs: Date.now() - startedAt,
|
|
207
|
+
startedAt,
|
|
208
|
+
completedAt: Date.now(),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// =============================================================================
|
|
214
|
+
// BASE SERVICE — Lifecycle-managed service with metrics
|
|
215
|
+
// =============================================================================
|
|
216
|
+
|
|
217
|
+
export enum ServiceLifecycle {
|
|
218
|
+
INITIALIZING = 'initializing',
|
|
219
|
+
READY = 'ready',
|
|
220
|
+
DEGRADED = 'degraded',
|
|
221
|
+
STOPPING = 'stopping',
|
|
222
|
+
STOPPED = 'stopped',
|
|
223
|
+
ERROR = 'error',
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export enum ServiceErrorCode {
|
|
227
|
+
VALIDATION_ERROR = 'VALIDATION_ERROR',
|
|
228
|
+
NOT_FOUND = 'NOT_FOUND',
|
|
229
|
+
CONFLICT = 'CONFLICT',
|
|
230
|
+
RATE_LIMIT = 'RATE_LIMIT',
|
|
231
|
+
INTERNAL_ERROR = 'INTERNAL_ERROR',
|
|
232
|
+
SERVICE_UNAVAILABLE = 'SERVICE_UNAVAILABLE',
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export class ServiceError extends Error {
|
|
236
|
+
constructor(
|
|
237
|
+
public code: ServiceErrorCode,
|
|
238
|
+
message: string,
|
|
239
|
+
public statusCode: number = 500,
|
|
240
|
+
public details?: Record<string, unknown>
|
|
241
|
+
) {
|
|
242
|
+
super(message);
|
|
243
|
+
this.name = 'ServiceError';
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export abstract class BaseService {
|
|
248
|
+
protected metadata: ServiceMetadata;
|
|
249
|
+
protected config: ServiceConfig;
|
|
250
|
+
protected metrics: ServiceMetrics;
|
|
251
|
+
|
|
252
|
+
constructor(
|
|
253
|
+
metadata: Omit<ServiceMetadata, 'lifecycle' | 'initializedAt' | 'readyAt'>,
|
|
254
|
+
config?: Partial<ServiceConfig>
|
|
255
|
+
) {
|
|
256
|
+
this.metadata = { ...metadata, lifecycle: ServiceLifecycle.INITIALIZING };
|
|
257
|
+
this.config = { enabled: true, timeout: 30000, retries: 3, ...config };
|
|
258
|
+
this.metrics = { requestCount: 0, errorCount: 0, latency: { p50: 0, p95: 0, p99: 0 } };
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
async initialize(): Promise<void> {
|
|
262
|
+
this.metadata.initializedAt = new Date();
|
|
263
|
+
await this.onInit();
|
|
264
|
+
this.metadata.lifecycle = ServiceLifecycle.READY;
|
|
265
|
+
this.metadata.readyAt = new Date();
|
|
266
|
+
await this.onReady();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
async stop(): Promise<void> {
|
|
270
|
+
if (this.metadata.lifecycle === ServiceLifecycle.STOPPED) return;
|
|
271
|
+
this.metadata.lifecycle = ServiceLifecycle.STOPPING;
|
|
272
|
+
await this.onStop();
|
|
273
|
+
this.metadata.lifecycle = ServiceLifecycle.STOPPED;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
getMetadata(): ServiceMetadata { return { ...this.metadata }; }
|
|
277
|
+
getMetrics(): ServiceMetrics { return { ...this.metrics }; }
|
|
278
|
+
isReady(): boolean { return this.metadata.lifecycle === ServiceLifecycle.READY; }
|
|
279
|
+
|
|
280
|
+
protected recordRequest(latency: number): void {
|
|
281
|
+
this.metrics.requestCount++;
|
|
282
|
+
this.metrics.lastRequestAt = new Date();
|
|
283
|
+
this.metrics.latency.p50 = (this.metrics.latency.p50 + latency) / 2;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
protected recordError(_error: Error): void {
|
|
287
|
+
this.metrics.errorCount++;
|
|
288
|
+
this.metrics.lastErrorAt = new Date();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
protected async executeWithMetrics<T>(op: () => Promise<T>): Promise<T> {
|
|
292
|
+
const start = Date.now();
|
|
293
|
+
try {
|
|
294
|
+
const result = await op();
|
|
295
|
+
this.recordRequest(Date.now() - start);
|
|
296
|
+
return result;
|
|
297
|
+
} catch (err) {
|
|
298
|
+
this.recordError(err instanceof Error ? err : new Error(String(err)));
|
|
299
|
+
throw err;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
protected async onInit(): Promise<void> {}
|
|
304
|
+
protected async onReady(): Promise<void> {}
|
|
305
|
+
protected async onStop(): Promise<void> {}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export class ServiceManager {
|
|
309
|
+
private services: BaseService[] = [];
|
|
310
|
+
private started = false;
|
|
311
|
+
|
|
312
|
+
register(service: BaseService): void {
|
|
313
|
+
if (this.started) throw new Error('Cannot register service after starting manager');
|
|
314
|
+
this.services.push(service);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
get size(): number {
|
|
318
|
+
return this.services.length;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
async startAll(): Promise<void> {
|
|
322
|
+
this.started = true;
|
|
323
|
+
for (const svc of this.services) {
|
|
324
|
+
await svc.initialize();
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
async stopAll(): Promise<void> {
|
|
329
|
+
// Stop in reverse order
|
|
330
|
+
for (let i = this.services.length - 1; i >= 0; i--) {
|
|
331
|
+
await this.services[i].stop();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
health(): ServiceManagerHealth {
|
|
336
|
+
const ready = this.services.filter(s => s.isReady());
|
|
337
|
+
return {
|
|
338
|
+
totalServices: this.services.length,
|
|
339
|
+
readyCount: ready.length,
|
|
340
|
+
allReady: this.services.length > 0 && ready.length === this.services.length,
|
|
341
|
+
services: this.services.map(s => ({
|
|
342
|
+
name: s.getMetadata().name,
|
|
343
|
+
ready: s.isReady(),
|
|
344
|
+
lifecycle: s.getMetadata().lifecycle
|
|
345
|
+
}))
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/** Health status of a single service */
|
|
351
|
+
export interface ServiceHealth {
|
|
352
|
+
name: string;
|
|
353
|
+
ready: boolean;
|
|
354
|
+
lifecycle: string;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/** Aggregate health status from ServiceManager */
|
|
358
|
+
export interface ServiceManagerHealth {
|
|
359
|
+
totalServices: number;
|
|
360
|
+
readyCount: number;
|
|
361
|
+
allReady: boolean;
|
|
362
|
+
services: ServiceHealth[];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// =============================================================================
|
|
366
|
+
// GOAL SYNTHESIZER — Autonomous goal generation (FW-0.2)
|
|
367
|
+
// =============================================================================
|
|
368
|
+
// Canonical implementation moved to ./goal-synthesizer.ts with LLM + KnowledgeStore support.
|
|
369
|
+
// Re-exported here for backward compatibility.
|
|
370
|
+
|
|
371
|
+
export { GoalSynthesizer } from './goal-synthesizer';
|
|
372
|
+
export type { GoalContext, SynthesizedGoal } from './goal-synthesizer';
|
|
373
|
+
|
|
374
|
+
// =============================================================================
|
|
375
|
+
// MICRO-PHASE DECOMPOSER — Parallel task execution with dependency graph
|
|
376
|
+
// =============================================================================
|
|
377
|
+
|
|
378
|
+
export class MicroPhaseDecomposer {
|
|
379
|
+
private nodes: Map<string, MicroPhaseTask> = new Map();
|
|
380
|
+
private edges: Map<string, Set<string>> = new Map();
|
|
381
|
+
private reverseEdges: Map<string, Set<string>> = new Map();
|
|
382
|
+
private history: ExecutionResult[] = [];
|
|
383
|
+
|
|
384
|
+
registerTask(task: MicroPhaseTask): void {
|
|
385
|
+
if (this.nodes.has(task.id)) throw new Error(`Task ${task.id} already registered`);
|
|
386
|
+
this.nodes.set(task.id, task);
|
|
387
|
+
if (!this.edges.has(task.id)) this.edges.set(task.id, new Set());
|
|
388
|
+
if (!this.reverseEdges.has(task.id)) this.reverseEdges.set(task.id, new Set());
|
|
389
|
+
|
|
390
|
+
for (const dep of task.dependencies) {
|
|
391
|
+
if (!this.nodes.has(dep)) throw new Error(`Dependency ${dep} not registered`);
|
|
392
|
+
this.reverseEdges.get(task.id)!.add(dep);
|
|
393
|
+
this.edges.get(dep)!.add(task.id);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
createExecutionPlan(): ExecutionPlan {
|
|
398
|
+
const sorted = this.topologicalSort();
|
|
399
|
+
const groups: MicroPhaseGroup[] = [];
|
|
400
|
+
const assignedToGroup: Map<string, number> = new Map();
|
|
401
|
+
|
|
402
|
+
for (const taskId of sorted) {
|
|
403
|
+
const task = this.nodes.get(taskId)!;
|
|
404
|
+
let groupIdx = 0;
|
|
405
|
+
for (const depId of task.dependencies) {
|
|
406
|
+
groupIdx = Math.max(groupIdx, (assignedToGroup.get(depId) ?? 0) + 1);
|
|
407
|
+
}
|
|
408
|
+
while (groups.length <= groupIdx) {
|
|
409
|
+
groups.push({ id: `group_${groups.length}`, name: `Group ${groups.length}`, tasks: [], parallel: true, estimatedDuration: 0 });
|
|
410
|
+
}
|
|
411
|
+
groups[groupIdx].tasks.push(task);
|
|
412
|
+
assignedToGroup.set(taskId, groupIdx);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
let totalTime = 0;
|
|
416
|
+
for (const g of groups) {
|
|
417
|
+
g.estimatedDuration = Math.max(...g.tasks.map((t) => t.estimatedDuration));
|
|
418
|
+
totalTime += g.estimatedDuration;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
const seqTime = [...this.nodes.values()].reduce((s, t) => s + t.estimatedDuration, 0);
|
|
422
|
+
return { groups, totalEstimatedTime: totalTime, parallelizationRatio: seqTime > 0 ? ((seqTime - totalTime) / seqTime) * 100 : 0 };
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
async executePlan(plan: ExecutionPlan): Promise<ExecutionResult[]> {
|
|
426
|
+
const results: ExecutionResult[] = [];
|
|
427
|
+
for (const group of plan.groups) {
|
|
428
|
+
const groupResults = await Promise.all(
|
|
429
|
+
group.tasks.map(async (task) => {
|
|
430
|
+
const start = Date.now();
|
|
431
|
+
try {
|
|
432
|
+
const timeout = task.timeout ?? 30000;
|
|
433
|
+
const result = await Promise.race([
|
|
434
|
+
task.execute(),
|
|
435
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Task timeout')), timeout)),
|
|
436
|
+
]);
|
|
437
|
+
return { taskId: task.id, status: 'success' as const, duration: Date.now() - start, result, timestamp: Date.now() };
|
|
438
|
+
} catch (err) {
|
|
439
|
+
const isTimeout = err instanceof Error && err.message === 'Task timeout';
|
|
440
|
+
return { taskId: task.id, status: (isTimeout ? 'timeout' : 'failure') as 'timeout' | 'failure', duration: Date.now() - start, error: err instanceof Error ? err : new Error(String(err)), timestamp: Date.now() };
|
|
441
|
+
}
|
|
442
|
+
})
|
|
443
|
+
);
|
|
444
|
+
results.push(...groupResults);
|
|
445
|
+
}
|
|
446
|
+
this.history.push(...results);
|
|
447
|
+
return results;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
getHistory(): ExecutionResult[] { return [...this.history]; }
|
|
451
|
+
|
|
452
|
+
reset(): void {
|
|
453
|
+
this.nodes.clear();
|
|
454
|
+
this.edges.clear();
|
|
455
|
+
this.reverseEdges.clear();
|
|
456
|
+
this.history = [];
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
private topologicalSort(): string[] {
|
|
460
|
+
const visited = new Set<string>();
|
|
461
|
+
const stack: string[] = [];
|
|
462
|
+
const dfs = (id: string) => {
|
|
463
|
+
visited.add(id);
|
|
464
|
+
for (const dep of this.reverseEdges.get(id) ?? []) {
|
|
465
|
+
if (!visited.has(dep)) dfs(dep);
|
|
466
|
+
}
|
|
467
|
+
stack.push(id);
|
|
468
|
+
};
|
|
469
|
+
for (const id of this.nodes.keys()) {
|
|
470
|
+
if (!visited.has(id)) dfs(id);
|
|
471
|
+
}
|
|
472
|
+
return stack.reverse();
|
|
473
|
+
}
|
|
474
|
+
}
|