@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,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/learning/index.ts
|
|
21
|
+
var learning_exports = {};
|
|
22
|
+
__export(learning_exports, {
|
|
23
|
+
MemoryConsolidator: () => MemoryConsolidator,
|
|
24
|
+
MemoryScorer: () => MemoryScorer,
|
|
25
|
+
ProceduralCompiler: () => ProceduralCompiler,
|
|
26
|
+
SemanticClusterer: () => SemanticClusterer
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(learning_exports);
|
|
29
|
+
|
|
30
|
+
// src/learning/MemoryConsolidator.ts
|
|
31
|
+
var logger = { info: console.info, error: console.error };
|
|
32
|
+
var MemoryConsolidator = class {
|
|
33
|
+
/**
|
|
34
|
+
* Identifies conceptually similar episodic memories based on shared entities and actions.
|
|
35
|
+
*/
|
|
36
|
+
static clusterEpisodes(episodes) {
|
|
37
|
+
const clusters = {};
|
|
38
|
+
for (const ep of episodes) {
|
|
39
|
+
const key = `${ep.action}_${ep.entitiesInvolved[0] || "generic"}`;
|
|
40
|
+
if (!clusters[key]) clusters[key] = [];
|
|
41
|
+
clusters[key].push(ep);
|
|
42
|
+
}
|
|
43
|
+
return Object.values(clusters);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Mocks an LLM-based summarization pass converting a cluster of raw events
|
|
47
|
+
* into a single concrete semantic truth.
|
|
48
|
+
*/
|
|
49
|
+
static summarizeCluster(cluster) {
|
|
50
|
+
if (cluster.length < 3) return null;
|
|
51
|
+
const sample = cluster[0];
|
|
52
|
+
const successCount = cluster.filter((ep) => ep.outcome.includes("success")).length;
|
|
53
|
+
const successRate = successCount / cluster.length;
|
|
54
|
+
let rule = "";
|
|
55
|
+
if (successRate > 0.7) {
|
|
56
|
+
rule = `${sample.action} applied to ${sample.entitiesInvolved[0]} is generally effective.`;
|
|
57
|
+
} else {
|
|
58
|
+
rule = `${sample.action} applied to ${sample.entitiesInvolved[0]} has high failure risk.`;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
id: `fact_${Date.now()}_${Math.random().toString(36).substring(7)}`,
|
|
62
|
+
fact: rule,
|
|
63
|
+
confidence: successRate,
|
|
64
|
+
sourceEpisodes: cluster.map((c) => c.id)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Executes the background consolidation pass.
|
|
69
|
+
* Takes raw episodes, clusters them, extracts truths, and returns the facts
|
|
70
|
+
* while reporting which raw episodes can be safely garbage collected.
|
|
71
|
+
*/
|
|
72
|
+
static compressEpisodes(rawEpisodes) {
|
|
73
|
+
if (rawEpisodes.length < 5) return { newFacts: [], prunedEpisodes: [] };
|
|
74
|
+
logger.info(
|
|
75
|
+
`[Consolidation] Running idle memory compression on ${rawEpisodes.length} episodes.`
|
|
76
|
+
);
|
|
77
|
+
const clusters = this.clusterEpisodes(rawEpisodes);
|
|
78
|
+
const newFacts = [];
|
|
79
|
+
const prunedEpisodes = [];
|
|
80
|
+
for (const cluster of clusters) {
|
|
81
|
+
const fact = this.summarizeCluster(cluster);
|
|
82
|
+
if (fact) {
|
|
83
|
+
newFacts.push(fact);
|
|
84
|
+
prunedEpisodes.push(...fact.sourceEpisodes);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
logger.info(
|
|
88
|
+
`[Consolidation] Distilled ${prunedEpisodes.length} raw episodes into ${newFacts.length} semantic facts.`
|
|
89
|
+
);
|
|
90
|
+
return { newFacts, prunedEpisodes };
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// src/learning/MemoryScorer.ts
|
|
95
|
+
var MemoryScorer = class {
|
|
96
|
+
/**
|
|
97
|
+
* Scores an event from -100 (Absolute Noise) to 100 (Critical Experience).
|
|
98
|
+
*/
|
|
99
|
+
static computeImportance(event) {
|
|
100
|
+
let score = 0;
|
|
101
|
+
const action = event.action.toLowerCase();
|
|
102
|
+
if (action.includes("idle") || action.includes("wait") || action.includes("sleep")) {
|
|
103
|
+
score -= 50;
|
|
104
|
+
} else if (action.includes("move") || action.includes("look") || action.includes("walk")) {
|
|
105
|
+
score -= 10;
|
|
106
|
+
} else if (action.includes("craft") || action.includes("build") || action.includes("analyze")) {
|
|
107
|
+
score += 30;
|
|
108
|
+
} else if (action.includes("combat") || action.includes("attack") || action.includes("defense") || action.includes("damage")) {
|
|
109
|
+
score += 50;
|
|
110
|
+
}
|
|
111
|
+
const contextKeys = Object.keys(event.context || {}).length;
|
|
112
|
+
score += Math.min(20, contextKeys * 2);
|
|
113
|
+
const outcome = event.outcome.toLowerCase();
|
|
114
|
+
if (outcome.includes("failed") || outcome.includes("error")) {
|
|
115
|
+
score += 25;
|
|
116
|
+
} else if (outcome.includes("success") || outcome.includes("crafted") || outcome.includes("killed")) {
|
|
117
|
+
score += 25;
|
|
118
|
+
} else if (outcome.includes("nothing") || outcome.includes("none")) {
|
|
119
|
+
score -= 20;
|
|
120
|
+
}
|
|
121
|
+
return Math.max(-100, Math.min(100, score));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Filters arrays natively discarding negative arrays
|
|
125
|
+
*/
|
|
126
|
+
static cullLowImportance(events, threshold = 0) {
|
|
127
|
+
return events.filter((e) => this.computeImportance(e) >= threshold);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// src/learning/ProceduralCompiler.ts
|
|
132
|
+
var ProceduralCompiler = class {
|
|
133
|
+
/**
|
|
134
|
+
* Translates an Abstract Skill representation into native text executing within the VM.
|
|
135
|
+
*/
|
|
136
|
+
static compile(skill) {
|
|
137
|
+
let compiled = `// Auto-generated skill: ${skill.name}
|
|
138
|
+
`;
|
|
139
|
+
compiled += `// Desc: ${skill.description || "N/A"}
|
|
140
|
+
|
|
141
|
+
`;
|
|
142
|
+
compiled += `agent ${skill.id.replace(/-/g, "_")} {
|
|
143
|
+
`;
|
|
144
|
+
compiled += ` behavior execute() {
|
|
145
|
+
`;
|
|
146
|
+
const codeBlock = skill.code || "";
|
|
147
|
+
const parsedLines = codeBlock.split("\n");
|
|
148
|
+
for (let line of parsedLines) {
|
|
149
|
+
line = line.trim();
|
|
150
|
+
if (!line) continue;
|
|
151
|
+
if (line.includes("move(") || line.includes("attack(") || line.includes("craft(")) {
|
|
152
|
+
compiled += ` ensure_safety() {
|
|
153
|
+
${line}
|
|
154
|
+
}
|
|
155
|
+
`;
|
|
156
|
+
} else {
|
|
157
|
+
compiled += ` ${line}
|
|
158
|
+
`;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
compiled += ` }
|
|
162
|
+
`;
|
|
163
|
+
compiled += `}
|
|
164
|
+
`;
|
|
165
|
+
return compiled;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// src/learning/SemanticClusterer.ts
|
|
170
|
+
var SemanticClusterer = class {
|
|
171
|
+
/**
|
|
172
|
+
* Actively squash sequentially repeating abstract patterns mapping out semantic arrays.
|
|
173
|
+
*/
|
|
174
|
+
static distill(events) {
|
|
175
|
+
if (events.length === 0) return [];
|
|
176
|
+
const distilled = [];
|
|
177
|
+
let currentSequence = { ...events[0] };
|
|
178
|
+
let repetitonCount = 1;
|
|
179
|
+
for (let i = 1; i < events.length; i++) {
|
|
180
|
+
const ev = events[i];
|
|
181
|
+
if (this.isSimilar(currentSequence, ev)) {
|
|
182
|
+
repetitonCount++;
|
|
183
|
+
currentSequence.outcome = `Repeated action successfully (${repetitonCount} times)`;
|
|
184
|
+
if (!currentSequence.context.timeSpanStarted) {
|
|
185
|
+
currentSequence.context.timeSpanStarted = currentSequence.timestamp;
|
|
186
|
+
}
|
|
187
|
+
currentSequence.context.timeSpanEnded = ev.timestamp;
|
|
188
|
+
} else {
|
|
189
|
+
if (repetitonCount > 1) {
|
|
190
|
+
currentSequence.action = `${currentSequence.action}_Aggregated`;
|
|
191
|
+
}
|
|
192
|
+
distilled.push({ ...currentSequence });
|
|
193
|
+
currentSequence = { ...ev };
|
|
194
|
+
repetitonCount = 1;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (repetitonCount > 1) {
|
|
198
|
+
currentSequence.action = `${currentSequence.action}_Aggregated`;
|
|
199
|
+
}
|
|
200
|
+
distilled.push(currentSequence);
|
|
201
|
+
return distilled;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Determines heuristic thresholds to squash logic natively offline without LLM.
|
|
205
|
+
*/
|
|
206
|
+
static isSimilar(a, b) {
|
|
207
|
+
if (a.action !== b.action) return false;
|
|
208
|
+
const aTarget = a.context?.target || a.context?.location;
|
|
209
|
+
const bTarget = b.context?.target || b.context?.location;
|
|
210
|
+
return aTarget === bTarget;
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
214
|
+
0 && (module.exports = {
|
|
215
|
+
MemoryConsolidator,
|
|
216
|
+
MemoryScorer,
|
|
217
|
+
ProceduralCompiler,
|
|
218
|
+
SemanticClusterer
|
|
219
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
interface EpisodicMemory {
|
|
2
|
+
id: string;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
action: string;
|
|
5
|
+
outcome: string;
|
|
6
|
+
entitiesInvolved: string[];
|
|
7
|
+
semanticVector?: number[];
|
|
8
|
+
}
|
|
9
|
+
interface SemanticFact {
|
|
10
|
+
id: string;
|
|
11
|
+
fact: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
sourceEpisodes: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* MemoryConsolidator
|
|
17
|
+
*
|
|
18
|
+
* Compresses raw episodic events into structured semantic facts
|
|
19
|
+
* via idle background cycles, mirroring human sleep consolidation.
|
|
20
|
+
*/
|
|
21
|
+
declare class MemoryConsolidator {
|
|
22
|
+
/**
|
|
23
|
+
* Identifies conceptually similar episodic memories based on shared entities and actions.
|
|
24
|
+
*/
|
|
25
|
+
private static clusterEpisodes;
|
|
26
|
+
/**
|
|
27
|
+
* Mocks an LLM-based summarization pass converting a cluster of raw events
|
|
28
|
+
* into a single concrete semantic truth.
|
|
29
|
+
*/
|
|
30
|
+
private static summarizeCluster;
|
|
31
|
+
/**
|
|
32
|
+
* Executes the background consolidation pass.
|
|
33
|
+
* Takes raw episodes, clusters them, extracts truths, and returns the facts
|
|
34
|
+
* while reporting which raw episodes can be safely garbage collected.
|
|
35
|
+
*/
|
|
36
|
+
static compressEpisodes(rawEpisodes: EpisodicMemory[]): {
|
|
37
|
+
newFacts: SemanticFact[];
|
|
38
|
+
prunedEpisodes: string[];
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* MemoryScorer
|
|
44
|
+
*
|
|
45
|
+
* Generates an 'importance' dimensional scalar for Episodic memories.
|
|
46
|
+
* Allows the aggregation engine to aggressively prune trivial loops (like 'Idle')
|
|
47
|
+
* and permanently archive high-value bounds (like 'Combat' or 'Crafting').
|
|
48
|
+
*/
|
|
49
|
+
interface EpisodicEvent {
|
|
50
|
+
agentId: string;
|
|
51
|
+
timestamp: number;
|
|
52
|
+
action: string;
|
|
53
|
+
context: Record<string, any>;
|
|
54
|
+
outcome: string;
|
|
55
|
+
}
|
|
56
|
+
declare class MemoryScorer {
|
|
57
|
+
/**
|
|
58
|
+
* Scores an event from -100 (Absolute Noise) to 100 (Critical Experience).
|
|
59
|
+
*/
|
|
60
|
+
static computeImportance(event: EpisodicEvent): number;
|
|
61
|
+
/**
|
|
62
|
+
* Filters arrays natively discarding negative arrays
|
|
63
|
+
*/
|
|
64
|
+
static cullLowImportance(events: EpisodicEvent[], threshold?: number): EpisodicEvent[];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface ProceduralSkill {
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
code?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* ProceduralCompiler
|
|
75
|
+
*
|
|
76
|
+
* Takes JSON-based AI logic trees extracted from temporal LLM generation natively
|
|
77
|
+
* and compiles them strictly down into raw executable `.holo` syntax bounds.
|
|
78
|
+
*/
|
|
79
|
+
declare class ProceduralCompiler {
|
|
80
|
+
/**
|
|
81
|
+
* Translates an Abstract Skill representation into native text executing within the VM.
|
|
82
|
+
*/
|
|
83
|
+
static compile(skill: ProceduralSkill): string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* SemanticClusterer
|
|
88
|
+
*
|
|
89
|
+
* Compresses raw temporal Episodic buffers into distilled arrays.
|
|
90
|
+
* Native distillation drops repeating trivial structures mapping them into aggregated
|
|
91
|
+
* density nodes explicitly reducing database storage loads across vector boundaries.
|
|
92
|
+
*/
|
|
93
|
+
declare class SemanticClusterer {
|
|
94
|
+
/**
|
|
95
|
+
* Actively squash sequentially repeating abstract patterns mapping out semantic arrays.
|
|
96
|
+
*/
|
|
97
|
+
static distill(events: EpisodicEvent[]): EpisodicEvent[];
|
|
98
|
+
/**
|
|
99
|
+
* Determines heuristic thresholds to squash logic natively offline without LLM.
|
|
100
|
+
*/
|
|
101
|
+
private static isSimilar;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { type EpisodicEvent, type EpisodicMemory, MemoryConsolidator, MemoryScorer, ProceduralCompiler, type ProceduralSkill, SemanticClusterer, type SemanticFact };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
interface EpisodicMemory {
|
|
2
|
+
id: string;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
action: string;
|
|
5
|
+
outcome: string;
|
|
6
|
+
entitiesInvolved: string[];
|
|
7
|
+
semanticVector?: number[];
|
|
8
|
+
}
|
|
9
|
+
interface SemanticFact {
|
|
10
|
+
id: string;
|
|
11
|
+
fact: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
sourceEpisodes: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* MemoryConsolidator
|
|
17
|
+
*
|
|
18
|
+
* Compresses raw episodic events into structured semantic facts
|
|
19
|
+
* via idle background cycles, mirroring human sleep consolidation.
|
|
20
|
+
*/
|
|
21
|
+
declare class MemoryConsolidator {
|
|
22
|
+
/**
|
|
23
|
+
* Identifies conceptually similar episodic memories based on shared entities and actions.
|
|
24
|
+
*/
|
|
25
|
+
private static clusterEpisodes;
|
|
26
|
+
/**
|
|
27
|
+
* Mocks an LLM-based summarization pass converting a cluster of raw events
|
|
28
|
+
* into a single concrete semantic truth.
|
|
29
|
+
*/
|
|
30
|
+
private static summarizeCluster;
|
|
31
|
+
/**
|
|
32
|
+
* Executes the background consolidation pass.
|
|
33
|
+
* Takes raw episodes, clusters them, extracts truths, and returns the facts
|
|
34
|
+
* while reporting which raw episodes can be safely garbage collected.
|
|
35
|
+
*/
|
|
36
|
+
static compressEpisodes(rawEpisodes: EpisodicMemory[]): {
|
|
37
|
+
newFacts: SemanticFact[];
|
|
38
|
+
prunedEpisodes: string[];
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* MemoryScorer
|
|
44
|
+
*
|
|
45
|
+
* Generates an 'importance' dimensional scalar for Episodic memories.
|
|
46
|
+
* Allows the aggregation engine to aggressively prune trivial loops (like 'Idle')
|
|
47
|
+
* and permanently archive high-value bounds (like 'Combat' or 'Crafting').
|
|
48
|
+
*/
|
|
49
|
+
interface EpisodicEvent {
|
|
50
|
+
agentId: string;
|
|
51
|
+
timestamp: number;
|
|
52
|
+
action: string;
|
|
53
|
+
context: Record<string, any>;
|
|
54
|
+
outcome: string;
|
|
55
|
+
}
|
|
56
|
+
declare class MemoryScorer {
|
|
57
|
+
/**
|
|
58
|
+
* Scores an event from -100 (Absolute Noise) to 100 (Critical Experience).
|
|
59
|
+
*/
|
|
60
|
+
static computeImportance(event: EpisodicEvent): number;
|
|
61
|
+
/**
|
|
62
|
+
* Filters arrays natively discarding negative arrays
|
|
63
|
+
*/
|
|
64
|
+
static cullLowImportance(events: EpisodicEvent[], threshold?: number): EpisodicEvent[];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface ProceduralSkill {
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
code?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* ProceduralCompiler
|
|
75
|
+
*
|
|
76
|
+
* Takes JSON-based AI logic trees extracted from temporal LLM generation natively
|
|
77
|
+
* and compiles them strictly down into raw executable `.holo` syntax bounds.
|
|
78
|
+
*/
|
|
79
|
+
declare class ProceduralCompiler {
|
|
80
|
+
/**
|
|
81
|
+
* Translates an Abstract Skill representation into native text executing within the VM.
|
|
82
|
+
*/
|
|
83
|
+
static compile(skill: ProceduralSkill): string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* SemanticClusterer
|
|
88
|
+
*
|
|
89
|
+
* Compresses raw temporal Episodic buffers into distilled arrays.
|
|
90
|
+
* Native distillation drops repeating trivial structures mapping them into aggregated
|
|
91
|
+
* density nodes explicitly reducing database storage loads across vector boundaries.
|
|
92
|
+
*/
|
|
93
|
+
declare class SemanticClusterer {
|
|
94
|
+
/**
|
|
95
|
+
* Actively squash sequentially repeating abstract patterns mapping out semantic arrays.
|
|
96
|
+
*/
|
|
97
|
+
static distill(events: EpisodicEvent[]): EpisodicEvent[];
|
|
98
|
+
/**
|
|
99
|
+
* Determines heuristic thresholds to squash logic natively offline without LLM.
|
|
100
|
+
*/
|
|
101
|
+
private static isSimilar;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { type EpisodicEvent, type EpisodicMemory, MemoryConsolidator, MemoryScorer, ProceduralCompiler, type ProceduralSkill, SemanticClusterer, type SemanticFact };
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// src/learning/MemoryConsolidator.ts
|
|
2
|
+
var logger = { info: console.info, error: console.error };
|
|
3
|
+
var MemoryConsolidator = class {
|
|
4
|
+
/**
|
|
5
|
+
* Identifies conceptually similar episodic memories based on shared entities and actions.
|
|
6
|
+
*/
|
|
7
|
+
static clusterEpisodes(episodes) {
|
|
8
|
+
const clusters = {};
|
|
9
|
+
for (const ep of episodes) {
|
|
10
|
+
const key = `${ep.action}_${ep.entitiesInvolved[0] || "generic"}`;
|
|
11
|
+
if (!clusters[key]) clusters[key] = [];
|
|
12
|
+
clusters[key].push(ep);
|
|
13
|
+
}
|
|
14
|
+
return Object.values(clusters);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Mocks an LLM-based summarization pass converting a cluster of raw events
|
|
18
|
+
* into a single concrete semantic truth.
|
|
19
|
+
*/
|
|
20
|
+
static summarizeCluster(cluster) {
|
|
21
|
+
if (cluster.length < 3) return null;
|
|
22
|
+
const sample = cluster[0];
|
|
23
|
+
const successCount = cluster.filter((ep) => ep.outcome.includes("success")).length;
|
|
24
|
+
const successRate = successCount / cluster.length;
|
|
25
|
+
let rule = "";
|
|
26
|
+
if (successRate > 0.7) {
|
|
27
|
+
rule = `${sample.action} applied to ${sample.entitiesInvolved[0]} is generally effective.`;
|
|
28
|
+
} else {
|
|
29
|
+
rule = `${sample.action} applied to ${sample.entitiesInvolved[0]} has high failure risk.`;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
id: `fact_${Date.now()}_${Math.random().toString(36).substring(7)}`,
|
|
33
|
+
fact: rule,
|
|
34
|
+
confidence: successRate,
|
|
35
|
+
sourceEpisodes: cluster.map((c) => c.id)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Executes the background consolidation pass.
|
|
40
|
+
* Takes raw episodes, clusters them, extracts truths, and returns the facts
|
|
41
|
+
* while reporting which raw episodes can be safely garbage collected.
|
|
42
|
+
*/
|
|
43
|
+
static compressEpisodes(rawEpisodes) {
|
|
44
|
+
if (rawEpisodes.length < 5) return { newFacts: [], prunedEpisodes: [] };
|
|
45
|
+
logger.info(
|
|
46
|
+
`[Consolidation] Running idle memory compression on ${rawEpisodes.length} episodes.`
|
|
47
|
+
);
|
|
48
|
+
const clusters = this.clusterEpisodes(rawEpisodes);
|
|
49
|
+
const newFacts = [];
|
|
50
|
+
const prunedEpisodes = [];
|
|
51
|
+
for (const cluster of clusters) {
|
|
52
|
+
const fact = this.summarizeCluster(cluster);
|
|
53
|
+
if (fact) {
|
|
54
|
+
newFacts.push(fact);
|
|
55
|
+
prunedEpisodes.push(...fact.sourceEpisodes);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
logger.info(
|
|
59
|
+
`[Consolidation] Distilled ${prunedEpisodes.length} raw episodes into ${newFacts.length} semantic facts.`
|
|
60
|
+
);
|
|
61
|
+
return { newFacts, prunedEpisodes };
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// src/learning/MemoryScorer.ts
|
|
66
|
+
var MemoryScorer = class {
|
|
67
|
+
/**
|
|
68
|
+
* Scores an event from -100 (Absolute Noise) to 100 (Critical Experience).
|
|
69
|
+
*/
|
|
70
|
+
static computeImportance(event) {
|
|
71
|
+
let score = 0;
|
|
72
|
+
const action = event.action.toLowerCase();
|
|
73
|
+
if (action.includes("idle") || action.includes("wait") || action.includes("sleep")) {
|
|
74
|
+
score -= 50;
|
|
75
|
+
} else if (action.includes("move") || action.includes("look") || action.includes("walk")) {
|
|
76
|
+
score -= 10;
|
|
77
|
+
} else if (action.includes("craft") || action.includes("build") || action.includes("analyze")) {
|
|
78
|
+
score += 30;
|
|
79
|
+
} else if (action.includes("combat") || action.includes("attack") || action.includes("defense") || action.includes("damage")) {
|
|
80
|
+
score += 50;
|
|
81
|
+
}
|
|
82
|
+
const contextKeys = Object.keys(event.context || {}).length;
|
|
83
|
+
score += Math.min(20, contextKeys * 2);
|
|
84
|
+
const outcome = event.outcome.toLowerCase();
|
|
85
|
+
if (outcome.includes("failed") || outcome.includes("error")) {
|
|
86
|
+
score += 25;
|
|
87
|
+
} else if (outcome.includes("success") || outcome.includes("crafted") || outcome.includes("killed")) {
|
|
88
|
+
score += 25;
|
|
89
|
+
} else if (outcome.includes("nothing") || outcome.includes("none")) {
|
|
90
|
+
score -= 20;
|
|
91
|
+
}
|
|
92
|
+
return Math.max(-100, Math.min(100, score));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Filters arrays natively discarding negative arrays
|
|
96
|
+
*/
|
|
97
|
+
static cullLowImportance(events, threshold = 0) {
|
|
98
|
+
return events.filter((e) => this.computeImportance(e) >= threshold);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// src/learning/ProceduralCompiler.ts
|
|
103
|
+
var ProceduralCompiler = class {
|
|
104
|
+
/**
|
|
105
|
+
* Translates an Abstract Skill representation into native text executing within the VM.
|
|
106
|
+
*/
|
|
107
|
+
static compile(skill) {
|
|
108
|
+
let compiled = `// Auto-generated skill: ${skill.name}
|
|
109
|
+
`;
|
|
110
|
+
compiled += `// Desc: ${skill.description || "N/A"}
|
|
111
|
+
|
|
112
|
+
`;
|
|
113
|
+
compiled += `agent ${skill.id.replace(/-/g, "_")} {
|
|
114
|
+
`;
|
|
115
|
+
compiled += ` behavior execute() {
|
|
116
|
+
`;
|
|
117
|
+
const codeBlock = skill.code || "";
|
|
118
|
+
const parsedLines = codeBlock.split("\n");
|
|
119
|
+
for (let line of parsedLines) {
|
|
120
|
+
line = line.trim();
|
|
121
|
+
if (!line) continue;
|
|
122
|
+
if (line.includes("move(") || line.includes("attack(") || line.includes("craft(")) {
|
|
123
|
+
compiled += ` ensure_safety() {
|
|
124
|
+
${line}
|
|
125
|
+
}
|
|
126
|
+
`;
|
|
127
|
+
} else {
|
|
128
|
+
compiled += ` ${line}
|
|
129
|
+
`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
compiled += ` }
|
|
133
|
+
`;
|
|
134
|
+
compiled += `}
|
|
135
|
+
`;
|
|
136
|
+
return compiled;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// src/learning/SemanticClusterer.ts
|
|
141
|
+
var SemanticClusterer = class {
|
|
142
|
+
/**
|
|
143
|
+
* Actively squash sequentially repeating abstract patterns mapping out semantic arrays.
|
|
144
|
+
*/
|
|
145
|
+
static distill(events) {
|
|
146
|
+
if (events.length === 0) return [];
|
|
147
|
+
const distilled = [];
|
|
148
|
+
let currentSequence = { ...events[0] };
|
|
149
|
+
let repetitonCount = 1;
|
|
150
|
+
for (let i = 1; i < events.length; i++) {
|
|
151
|
+
const ev = events[i];
|
|
152
|
+
if (this.isSimilar(currentSequence, ev)) {
|
|
153
|
+
repetitonCount++;
|
|
154
|
+
currentSequence.outcome = `Repeated action successfully (${repetitonCount} times)`;
|
|
155
|
+
if (!currentSequence.context.timeSpanStarted) {
|
|
156
|
+
currentSequence.context.timeSpanStarted = currentSequence.timestamp;
|
|
157
|
+
}
|
|
158
|
+
currentSequence.context.timeSpanEnded = ev.timestamp;
|
|
159
|
+
} else {
|
|
160
|
+
if (repetitonCount > 1) {
|
|
161
|
+
currentSequence.action = `${currentSequence.action}_Aggregated`;
|
|
162
|
+
}
|
|
163
|
+
distilled.push({ ...currentSequence });
|
|
164
|
+
currentSequence = { ...ev };
|
|
165
|
+
repetitonCount = 1;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (repetitonCount > 1) {
|
|
169
|
+
currentSequence.action = `${currentSequence.action}_Aggregated`;
|
|
170
|
+
}
|
|
171
|
+
distilled.push(currentSequence);
|
|
172
|
+
return distilled;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Determines heuristic thresholds to squash logic natively offline without LLM.
|
|
176
|
+
*/
|
|
177
|
+
static isSimilar(a, b) {
|
|
178
|
+
if (a.action !== b.action) return false;
|
|
179
|
+
const aTarget = a.context?.target || a.context?.location;
|
|
180
|
+
const bTarget = b.context?.target || b.context?.location;
|
|
181
|
+
return aTarget === bTarget;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
export {
|
|
185
|
+
MemoryConsolidator,
|
|
186
|
+
MemoryScorer,
|
|
187
|
+
ProceduralCompiler,
|
|
188
|
+
SemanticClusterer
|
|
189
|
+
};
|