jfl 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +30 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/ide.d.ts +2 -1
- package/dist/commands/ide.d.ts.map +1 -1
- package/dist/commands/ide.js +60 -1
- package/dist/commands/ide.js.map +1 -1
- package/dist/commands/init-from-service.d.ts +15 -0
- package/dist/commands/init-from-service.d.ts.map +1 -0
- package/dist/commands/init-from-service.js +541 -0
- package/dist/commands/init-from-service.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/kanban.d.ts.map +1 -1
- package/dist/commands/kanban.js +13 -4
- package/dist/commands/kanban.js.map +1 -1
- package/dist/commands/linear.d.ts +41 -0
- package/dist/commands/linear.d.ts.map +1 -0
- package/dist/commands/linear.js +715 -0
- package/dist/commands/linear.js.map +1 -0
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +232 -25
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/services.d.ts.map +1 -1
- package/dist/commands/services.js +146 -0
- package/dist/commands/services.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +173 -13
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/telemetry-monitor.d.ts +11 -0
- package/dist/commands/telemetry-monitor.d.ts.map +1 -0
- package/dist/commands/telemetry-monitor.js +224 -0
- package/dist/commands/telemetry-monitor.js.map +1 -0
- package/dist/commands/telemetry-test.d.ts +11 -0
- package/dist/commands/telemetry-test.d.ts.map +1 -0
- package/dist/commands/telemetry-test.js +67 -0
- package/dist/commands/telemetry-test.js.map +1 -0
- package/dist/commands/tenet-agents.d.ts +13 -0
- package/dist/commands/tenet-agents.d.ts.map +1 -0
- package/dist/commands/tenet-agents.js +191 -0
- package/dist/commands/tenet-agents.js.map +1 -0
- package/dist/commands/tenet-setup.d.ts +19 -0
- package/dist/commands/tenet-setup.d.ts.map +1 -0
- package/dist/commands/tenet-setup.js +131 -0
- package/dist/commands/tenet-setup.js.map +1 -0
- package/dist/commands/train.d.ts +18 -0
- package/dist/commands/train.d.ts.map +1 -1
- package/dist/commands/train.js +182 -0
- package/dist/commands/train.js.map +1 -1
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +24 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.js +159 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/advanced-setup.d.ts +78 -0
- package/dist/lib/advanced-setup.d.ts.map +1 -0
- package/dist/lib/advanced-setup.js +433 -0
- package/dist/lib/advanced-setup.js.map +1 -0
- package/dist/lib/agent-config.d.ts +33 -0
- package/dist/lib/agent-config.d.ts.map +1 -1
- package/dist/lib/agent-config.js +26 -0
- package/dist/lib/agent-config.js.map +1 -1
- package/dist/lib/counterfactual-training-bridge.d.ts +114 -0
- package/dist/lib/counterfactual-training-bridge.d.ts.map +1 -0
- package/dist/lib/counterfactual-training-bridge.js +322 -0
- package/dist/lib/counterfactual-training-bridge.js.map +1 -0
- package/dist/lib/discovery-agent.d.ts +48 -0
- package/dist/lib/discovery-agent.d.ts.map +1 -0
- package/dist/lib/discovery-agent.js +111 -0
- package/dist/lib/discovery-agent.js.map +1 -0
- package/dist/lib/flow-engine.d.ts.map +1 -1
- package/dist/lib/flow-engine.js +46 -8
- package/dist/lib/flow-engine.js.map +1 -1
- package/dist/lib/gtm-generator.d.ts +29 -0
- package/dist/lib/gtm-generator.d.ts.map +1 -0
- package/dist/lib/gtm-generator.js +252 -0
- package/dist/lib/gtm-generator.js.map +1 -0
- package/dist/lib/hub-health.d.ts +40 -0
- package/dist/lib/hub-health.d.ts.map +1 -0
- package/dist/lib/hub-health.js +89 -0
- package/dist/lib/hub-health.js.map +1 -0
- package/dist/lib/invariant-monitor.d.ts +6 -2
- package/dist/lib/invariant-monitor.d.ts.map +1 -1
- package/dist/lib/invariant-monitor.js +89 -2
- package/dist/lib/invariant-monitor.js.map +1 -1
- package/dist/lib/journal-analyzer.d.ts +71 -0
- package/dist/lib/journal-analyzer.d.ts.map +1 -0
- package/dist/lib/journal-analyzer.js +306 -0
- package/dist/lib/journal-analyzer.js.map +1 -0
- package/dist/lib/linear-client.d.ts +73 -0
- package/dist/lib/linear-client.d.ts.map +1 -0
- package/dist/lib/linear-client.js +112 -0
- package/dist/lib/linear-client.js.map +1 -0
- package/dist/lib/linear-id-map.d.ts +20 -0
- package/dist/lib/linear-id-map.d.ts.map +1 -0
- package/dist/lib/linear-id-map.js +57 -0
- package/dist/lib/linear-id-map.js.map +1 -0
- package/dist/lib/linear-kanban.d.ts +66 -0
- package/dist/lib/linear-kanban.d.ts.map +1 -0
- package/dist/lib/linear-kanban.js +175 -0
- package/dist/lib/linear-kanban.js.map +1 -0
- package/dist/lib/onboarding.d.ts +40 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +213 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/physical-world-model.d.ts +50 -0
- package/dist/lib/physical-world-model.d.ts.map +1 -0
- package/dist/lib/physical-world-model.js +251 -0
- package/dist/lib/physical-world-model.js.map +1 -0
- package/dist/lib/planning-loop.d.ts +157 -0
- package/dist/lib/planning-loop.d.ts.map +1 -0
- package/dist/lib/planning-loop.js +537 -0
- package/dist/lib/planning-loop.js.map +1 -0
- package/dist/lib/policy-head.d.ts +13 -0
- package/dist/lib/policy-head.d.ts.map +1 -1
- package/dist/lib/policy-head.js +168 -2
- package/dist/lib/policy-head.js.map +1 -1
- package/dist/lib/resource-optimizer-middleware.d.ts +39 -0
- package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -0
- package/dist/lib/resource-optimizer-middleware.js +222 -0
- package/dist/lib/resource-optimizer-middleware.js.map +1 -0
- package/dist/lib/resource-optimizer.d.ts +71 -0
- package/dist/lib/resource-optimizer.d.ts.map +1 -0
- package/dist/lib/resource-optimizer.js +228 -0
- package/dist/lib/resource-optimizer.js.map +1 -0
- package/dist/lib/rl-manager.d.ts +74 -0
- package/dist/lib/rl-manager.d.ts.map +1 -0
- package/dist/lib/rl-manager.js +244 -0
- package/dist/lib/rl-manager.js.map +1 -0
- package/dist/lib/service-analyzer.d.ts +76 -0
- package/dist/lib/service-analyzer.d.ts.map +1 -0
- package/dist/lib/service-analyzer.js +704 -0
- package/dist/lib/service-analyzer.js.map +1 -0
- package/dist/lib/service-gtm.js +2 -2
- package/dist/lib/service-gtm.js.map +1 -1
- package/dist/lib/service-questionnaire.d.ts +11 -0
- package/dist/lib/service-questionnaire.d.ts.map +1 -0
- package/dist/lib/service-questionnaire.js +89 -0
- package/dist/lib/service-questionnaire.js.map +1 -0
- package/dist/lib/setup/agent-generator.d.ts +2 -0
- package/dist/lib/setup/agent-generator.d.ts.map +1 -1
- package/dist/lib/setup/agent-generator.js +128 -4
- package/dist/lib/setup/agent-generator.js.map +1 -1
- package/dist/lib/setup/flow-generator.d.ts +10 -0
- package/dist/lib/setup/flow-generator.d.ts.map +1 -0
- package/dist/lib/setup/flow-generator.js +113 -0
- package/dist/lib/setup/flow-generator.js.map +1 -0
- package/dist/lib/setup/invariant-bridge.d.ts +91 -0
- package/dist/lib/setup/invariant-bridge.d.ts.map +1 -0
- package/dist/lib/setup/invariant-bridge.js +384 -0
- package/dist/lib/setup/invariant-bridge.js.map +1 -0
- package/dist/lib/setup/spec-generator.d.ts +41 -5
- package/dist/lib/setup/spec-generator.d.ts.map +1 -1
- package/dist/lib/setup/spec-generator.js +503 -29
- package/dist/lib/setup/spec-generator.js.map +1 -1
- package/dist/lib/stratus-client.js +1 -1
- package/dist/lib/stratus-client.js.map +1 -1
- package/dist/lib/surface-agent.d.ts +78 -0
- package/dist/lib/surface-agent.d.ts.map +1 -0
- package/dist/lib/surface-agent.js +105 -0
- package/dist/lib/surface-agent.js.map +1 -0
- package/dist/lib/surface-coordination-example.d.ts +30 -0
- package/dist/lib/surface-coordination-example.d.ts.map +1 -0
- package/dist/lib/surface-coordination-example.js +164 -0
- package/dist/lib/surface-coordination-example.js.map +1 -0
- package/dist/lib/telemetry/physical-world-collector.d.ts +15 -0
- package/dist/lib/telemetry/physical-world-collector.d.ts.map +1 -0
- package/dist/lib/telemetry/physical-world-collector.js +177 -0
- package/dist/lib/telemetry/physical-world-collector.js.map +1 -0
- package/dist/lib/telemetry/training-bridge.d.ts +51 -0
- package/dist/lib/telemetry/training-bridge.d.ts.map +1 -0
- package/dist/lib/telemetry/training-bridge.js +185 -0
- package/dist/lib/telemetry/training-bridge.js.map +1 -0
- package/dist/lib/telemetry.d.ts +2 -1
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +23 -2
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/tenet-board-agent.d.ts +52 -0
- package/dist/lib/tenet-board-agent.d.ts.map +1 -0
- package/dist/lib/tenet-board-agent.js +226 -0
- package/dist/lib/tenet-board-agent.js.map +1 -0
- package/dist/lib/tenet-ide-agent.d.ts +40 -0
- package/dist/lib/tenet-ide-agent.d.ts.map +1 -0
- package/dist/lib/tenet-ide-agent.js +199 -0
- package/dist/lib/tenet-ide-agent.js.map +1 -0
- package/dist/lib/workspace/data-pipeline.d.ts.map +1 -1
- package/dist/lib/workspace/data-pipeline.js +27 -5
- package/dist/lib/workspace/data-pipeline.js.map +1 -1
- package/dist/lib/workspace/sidebar-runner.d.ts +13 -0
- package/dist/lib/workspace/sidebar-runner.d.ts.map +1 -0
- package/dist/lib/workspace/sidebar-runner.js +419 -0
- package/dist/lib/workspace/sidebar-runner.js.map +1 -0
- package/dist/lib/workspace/surface-registry.d.ts.map +1 -1
- package/dist/lib/workspace/surface-registry.js +4 -1
- package/dist/lib/workspace/surface-registry.js.map +1 -1
- package/dist/lib/workspace/surfaces/agent-overview.d.ts +3 -3
- package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -1
- package/dist/lib/workspace/surfaces/agent-overview.js +3 -3
- package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -1
- package/dist/lib/workspace/surfaces/index.d.ts +3 -0
- package/dist/lib/workspace/surfaces/index.d.ts.map +1 -1
- package/dist/lib/workspace/surfaces/index.js +3 -0
- package/dist/lib/workspace/surfaces/index.js.map +1 -1
- package/dist/lib/workspace/surfaces/kanban.d.ts +15 -0
- package/dist/lib/workspace/surfaces/kanban.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/kanban.js +43 -0
- package/dist/lib/workspace/surfaces/kanban.js.map +1 -0
- package/dist/lib/workspace/surfaces/physical-world.d.ts +15 -0
- package/dist/lib/workspace/surfaces/physical-world.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/physical-world.js +37 -0
- package/dist/lib/workspace/surfaces/physical-world.js.map +1 -0
- package/dist/lib/workspace/surfaces/sidebar.d.ts +22 -0
- package/dist/lib/workspace/surfaces/sidebar.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/sidebar.js +90 -0
- package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
- package/dist/types/flows.d.ts +2 -1
- package/dist/types/flows.d.ts.map +1 -1
- package/dist/types/physical-world-model.d.ts +65 -0
- package/dist/types/physical-world-model.d.ts.map +1 -0
- package/dist/types/physical-world-model.js +43 -0
- package/dist/types/physical-world-model.js.map +1 -0
- package/dist/types/telemetry.d.ts +37 -0
- package/dist/types/telemetry.d.ts.map +1 -1
- package/dist/types/world-model.d.ts.map +1 -1
- package/dist/types/world-model.js +14 -7
- package/dist/types/world-model.js.map +1 -1
- package/dist/utils/context-hub-port.d.ts.map +1 -1
- package/dist/utils/context-hub-port.js +6 -1
- package/dist/utils/context-hub-port.js.map +1 -1
- package/package.json +3 -2
- package/packages/pi/extensions/index.ts +34 -6
- package/scripts/telemetry-dashboard.sh +44 -0
- package/scripts/test-planning-loop-e2e.ts +181 -0
- package/scripts/test-server-inference.ts +49 -0
- package/scripts/test-state-sensitivity.ts +32 -0
- package/scripts/train/v2/benchmark.py +661 -0
- package/scripts/train/v2/generate_balanced.py +439 -0
- package/scripts/train/v2/generate_hard_negatives.py +219 -0
- package/scripts/train/v2/infer.py +149 -36
- package/scripts/train/v2/infer_server.py +224 -0
- package/scripts/train/v2/online_train.py +576 -0
- package/scripts/train/v2/precompute.py +24 -6
- package/template/CLAUDE.md +74 -132
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Physical-World World Model
|
|
3
|
+
* Integrates physical system dynamics with Stratus reasoning for RL training
|
|
4
|
+
*/
|
|
5
|
+
import { physicalWorldCollector } from './telemetry/physical-world-collector.js';
|
|
6
|
+
import { physicalWorldTrainingBridge } from './telemetry/training-bridge.js';
|
|
7
|
+
import { StratusClient } from './stratus-client.js';
|
|
8
|
+
export class PhysicalWorldModel {
|
|
9
|
+
transitions = [];
|
|
10
|
+
MAX_TRANSITIONS = 1000; // Keep recent transitions
|
|
11
|
+
stratusClient;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.stratusClient = new StratusClient();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Capture current physical world state
|
|
17
|
+
*/
|
|
18
|
+
async captureCurrentState() {
|
|
19
|
+
const telemetryData = await physicalWorldCollector.collect({
|
|
20
|
+
category: 'performance',
|
|
21
|
+
event: 'physical_world_state_capture',
|
|
22
|
+
ts: new Date().toISOString()
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
cpu_usage_percent: telemetryData.cpu_usage_percent || 0,
|
|
26
|
+
memory_usage_mb: telemetryData.memory_usage_mb || 0,
|
|
27
|
+
memory_available_mb: telemetryData.memory_available_mb || 0,
|
|
28
|
+
thermal_state: telemetryData.thermal_state || 'nominal',
|
|
29
|
+
system_load_1m: telemetryData.system_load_1m || 0,
|
|
30
|
+
disk_free_gb: telemetryData.disk_free_gb || 50,
|
|
31
|
+
battery_level: telemetryData.battery_level,
|
|
32
|
+
battery_charging: telemetryData.battery_charging,
|
|
33
|
+
git_branch: telemetryData.git_branch || 'main',
|
|
34
|
+
git_dirty_files: telemetryData.git_dirty_files || 0,
|
|
35
|
+
concurrent_terminals: telemetryData.concurrent_terminals || 1,
|
|
36
|
+
active_ide: !!telemetryData.active_ide,
|
|
37
|
+
recent_build_time_ms: telemetryData.build_time_ms,
|
|
38
|
+
recent_test_time_ms: telemetryData.test_time_ms,
|
|
39
|
+
avg_command_duration_ms: telemetryData.session_uptime_s ? 1000 : 800,
|
|
40
|
+
network_latency_ms: telemetryData.network_latency_ms,
|
|
41
|
+
internet_connectivity: telemetryData.internet_connectivity !== false,
|
|
42
|
+
localhost_ports_active: telemetryData.localhost_ports_active || []
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Predict outcome of an action using Stratus reasoning
|
|
47
|
+
*/
|
|
48
|
+
async predictOutcome(currentState, action) {
|
|
49
|
+
// Find similar past transitions for context
|
|
50
|
+
const similarTransitions = this.findSimilarTransitions(currentState, action);
|
|
51
|
+
const prompt = `You are an expert system dynamics analyst. Predict the physical-world outcome of an action.
|
|
52
|
+
|
|
53
|
+
CURRENT PHYSICAL STATE:
|
|
54
|
+
${JSON.stringify(currentState, null, 2)}
|
|
55
|
+
|
|
56
|
+
PROPOSED ACTION:
|
|
57
|
+
Type: ${action.type}
|
|
58
|
+
Agent: ${action.agent}
|
|
59
|
+
Description: ${action.description}
|
|
60
|
+
Target Metric: ${action.target_metric}
|
|
61
|
+
Expected Impact: ${action.expected_impact}
|
|
62
|
+
|
|
63
|
+
SIMILAR PAST TRANSITIONS (for reference):
|
|
64
|
+
${similarTransitions.map(t => `
|
|
65
|
+
Action: ${t.action.description}
|
|
66
|
+
Before: CPU ${t.before_state.cpu_usage_percent}%, Mem ${(t.before_state.memory_usage_mb / 1024).toFixed(1)}GB, Thermal ${t.before_state.thermal_state}
|
|
67
|
+
After: CPU ${t.after_state.cpu_usage_percent}%, Mem ${(t.after_state.memory_usage_mb / 1024).toFixed(1)}GB, Thermal ${t.after_state.thermal_state}
|
|
68
|
+
Reward: ${t.physical_world_reward.toFixed(3)}
|
|
69
|
+
`).join('\n')}
|
|
70
|
+
|
|
71
|
+
PREDICT THE OUTCOME:
|
|
72
|
+
Consider system dynamics, thermal behavior, memory allocation patterns, and workflow impacts.
|
|
73
|
+
|
|
74
|
+
Respond with JSON in this exact format:
|
|
75
|
+
{
|
|
76
|
+
"predicted_state": {
|
|
77
|
+
"cpu_usage_percent": <number>,
|
|
78
|
+
"memory_usage_mb": <number>,
|
|
79
|
+
"thermal_state": "<nominal|warm|hot|critical>",
|
|
80
|
+
"system_load_1m": <number>,
|
|
81
|
+
"recent_build_time_ms": <number|null>,
|
|
82
|
+
"git_dirty_files": <number>
|
|
83
|
+
},
|
|
84
|
+
"confidence": <0.0 to 1.0>,
|
|
85
|
+
"risk_factors": ["<factor1>", "<factor2>"],
|
|
86
|
+
"expected_reward": <-1.0 to 1.0>,
|
|
87
|
+
"safety_level": "<safe|caution|risky|dangerous>",
|
|
88
|
+
"reasoning": "<brief explanation of prediction logic>"
|
|
89
|
+
}`;
|
|
90
|
+
try {
|
|
91
|
+
const response = await this.stratusClient.reason(prompt);
|
|
92
|
+
// Parse Stratus response
|
|
93
|
+
const prediction = typeof response === 'string' ? JSON.parse(response) : response;
|
|
94
|
+
return {
|
|
95
|
+
predicted_state: prediction.predicted_state,
|
|
96
|
+
confidence: Math.max(0, Math.min(1, prediction.confidence || 0.5)),
|
|
97
|
+
risk_factors: prediction.risk_factors || [],
|
|
98
|
+
expected_reward: Math.max(-1, Math.min(1, prediction.expected_reward || 0)),
|
|
99
|
+
safety_level: prediction.safety_level || 'safe',
|
|
100
|
+
stratus_reasoning: prediction.reasoning || ''
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.warn('Stratus prediction failed, using fallback:', error);
|
|
105
|
+
return this.fallbackPrediction(currentState, action);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Record actual outcome and learn from it
|
|
110
|
+
*/
|
|
111
|
+
async recordTransition(transition) {
|
|
112
|
+
// Add to transition history
|
|
113
|
+
this.transitions.push(transition);
|
|
114
|
+
// Keep only recent transitions
|
|
115
|
+
if (this.transitions.length > this.MAX_TRANSITIONS) {
|
|
116
|
+
this.transitions = this.transitions.slice(-this.MAX_TRANSITIONS);
|
|
117
|
+
}
|
|
118
|
+
// Feed to training bridge for RL learning
|
|
119
|
+
const trainingEvent = {
|
|
120
|
+
category: 'performance',
|
|
121
|
+
event: 'physical_world_transition_recorded',
|
|
122
|
+
ts: transition.timestamp,
|
|
123
|
+
cpu_usage_percent: transition.after_state.cpu_usage_percent,
|
|
124
|
+
memory_usage_mb: transition.after_state.memory_usage_mb,
|
|
125
|
+
thermal_state: transition.after_state.thermal_state,
|
|
126
|
+
build_time_ms: transition.after_state.recent_build_time_ms,
|
|
127
|
+
duration_ms: transition.actual_duration_ms
|
|
128
|
+
};
|
|
129
|
+
const trainingTuple = physicalWorldTrainingBridge.processEventForTraining(trainingEvent, // Type assertion for compatibility
|
|
130
|
+
transition.action.agent, transition.action.description);
|
|
131
|
+
if (trainingTuple) {
|
|
132
|
+
console.log(`🧠 World model recorded transition: ${transition.action.description} → reward ${transition.physical_world_reward.toFixed(3)}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Check physical world safety invariants
|
|
137
|
+
*/
|
|
138
|
+
checkSafetyInvariants(state) {
|
|
139
|
+
const { PHYSICAL_WORLD_INVARIANTS } = require('../types/physical-world-model.js');
|
|
140
|
+
return PHYSICAL_WORLD_INVARIANTS.map((invariant) => ({
|
|
141
|
+
invariant,
|
|
142
|
+
violated: !invariant.condition(state)
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Generate counterfactual scenarios
|
|
147
|
+
*/
|
|
148
|
+
async generateCounterfactuals(actualTransition, alternativeActions) {
|
|
149
|
+
const counterfactuals = await Promise.all(alternativeActions.map(action => this.predictOutcome(actualTransition.before_state, action)));
|
|
150
|
+
return counterfactuals.filter(cf => cf.confidence > 0.3); // Filter low-confidence predictions
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get physical world insights for agent decision making
|
|
154
|
+
*/
|
|
155
|
+
getPhysicalWorldInsights() {
|
|
156
|
+
if (this.transitions.length === 0) {
|
|
157
|
+
return {
|
|
158
|
+
current_health: 'unknown',
|
|
159
|
+
optimization_opportunities: [],
|
|
160
|
+
risk_factors: [],
|
|
161
|
+
recent_trends: []
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const recentTransitions = this.transitions.slice(-10);
|
|
165
|
+
const avgReward = recentTransitions.reduce((sum, t) => sum + t.physical_world_reward, 0) / recentTransitions.length;
|
|
166
|
+
const latestState = recentTransitions[recentTransitions.length - 1].after_state;
|
|
167
|
+
const safetyViolations = this.checkSafetyInvariants(latestState);
|
|
168
|
+
return {
|
|
169
|
+
current_health: this.assessSystemHealth(latestState),
|
|
170
|
+
optimization_opportunities: this.identifyOptimizationOpportunities(latestState),
|
|
171
|
+
risk_factors: safetyViolations
|
|
172
|
+
.filter(v => v.violated)
|
|
173
|
+
.map(v => v.invariant.description),
|
|
174
|
+
recent_trends: this.analyzeTrends(recentTransitions)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
findSimilarTransitions(currentState, action) {
|
|
178
|
+
return this.transitions
|
|
179
|
+
.filter(t => t.action.type === action.type &&
|
|
180
|
+
Math.abs(t.before_state.cpu_usage_percent - currentState.cpu_usage_percent) < 20 &&
|
|
181
|
+
Math.abs(t.before_state.memory_usage_mb - currentState.memory_usage_mb) < 1000)
|
|
182
|
+
.slice(-5); // Most recent 5 similar transitions
|
|
183
|
+
}
|
|
184
|
+
fallbackPrediction(currentState, action) {
|
|
185
|
+
// Simple heuristic-based prediction when Stratus fails
|
|
186
|
+
const predicted_state = { ...currentState };
|
|
187
|
+
if (action.type === 'optimization') {
|
|
188
|
+
predicted_state.cpu_usage_percent = Math.max(0, currentState.cpu_usage_percent - 5);
|
|
189
|
+
predicted_state.memory_usage_mb = Math.max(0, currentState.memory_usage_mb - 200);
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
predicted_state,
|
|
193
|
+
confidence: 0.3, // Low confidence for fallback
|
|
194
|
+
risk_factors: [],
|
|
195
|
+
expected_reward: 0.1,
|
|
196
|
+
safety_level: 'safe',
|
|
197
|
+
stratus_reasoning: 'Fallback prediction (Stratus unavailable)'
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
assessSystemHealth(state) {
|
|
201
|
+
if (state.thermal_state === 'critical' || state.cpu_usage_percent > 90)
|
|
202
|
+
return 'critical';
|
|
203
|
+
if (state.thermal_state === 'hot' || state.cpu_usage_percent > 75)
|
|
204
|
+
return 'degraded';
|
|
205
|
+
if (state.thermal_state === 'warm' || state.cpu_usage_percent > 50)
|
|
206
|
+
return 'moderate';
|
|
207
|
+
return 'healthy';
|
|
208
|
+
}
|
|
209
|
+
identifyOptimizationOpportunities(state) {
|
|
210
|
+
const opportunities = [];
|
|
211
|
+
if (state.cpu_usage_percent > 60)
|
|
212
|
+
opportunities.push('CPU optimization available');
|
|
213
|
+
if (state.memory_usage_mb > 6000)
|
|
214
|
+
opportunities.push('Memory optimization available');
|
|
215
|
+
if (state.thermal_state !== 'nominal')
|
|
216
|
+
opportunities.push('Thermal management needed');
|
|
217
|
+
if (state.git_dirty_files > 5)
|
|
218
|
+
opportunities.push('Workflow cleanup recommended');
|
|
219
|
+
if (state.recent_build_time_ms && state.recent_build_time_ms > 5000)
|
|
220
|
+
opportunities.push('Build speed optimization');
|
|
221
|
+
return opportunities;
|
|
222
|
+
}
|
|
223
|
+
analyzeTrends(transitions) {
|
|
224
|
+
if (transitions.length < 3)
|
|
225
|
+
return [];
|
|
226
|
+
const trends = [];
|
|
227
|
+
const recent = transitions.slice(-3);
|
|
228
|
+
// CPU trend
|
|
229
|
+
const cpuTrend = recent[2].after_state.cpu_usage_percent - recent[0].after_state.cpu_usage_percent;
|
|
230
|
+
if (cpuTrend > 10)
|
|
231
|
+
trends.push('CPU usage increasing');
|
|
232
|
+
else if (cpuTrend < -10)
|
|
233
|
+
trends.push('CPU usage decreasing');
|
|
234
|
+
// Memory trend
|
|
235
|
+
const memTrend = recent[2].after_state.memory_usage_mb - recent[0].after_state.memory_usage_mb;
|
|
236
|
+
if (memTrend > 500)
|
|
237
|
+
trends.push('Memory usage increasing');
|
|
238
|
+
else if (memTrend < -500)
|
|
239
|
+
trends.push('Memory usage decreasing');
|
|
240
|
+
// Reward trend
|
|
241
|
+
const rewardTrend = recent[2].physical_world_reward - recent[0].physical_world_reward;
|
|
242
|
+
if (rewardTrend > 0.1)
|
|
243
|
+
trends.push('Performance improvements trending up');
|
|
244
|
+
else if (rewardTrend < -0.1)
|
|
245
|
+
trends.push('Performance degrading');
|
|
246
|
+
return trends;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Export singleton with real Stratus integration
|
|
250
|
+
export const physicalWorldModel = new PhysicalWorldModel();
|
|
251
|
+
//# sourceMappingURL=physical-world-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical-world-model.js","sourceRoot":"","sources":["../../src/lib/physical-world-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planning Loop
|
|
3
|
+
*
|
|
4
|
+
* Connects PolicyHead (action selection) with DynamicsModel (outcome prediction)
|
|
5
|
+
* in a collaborative planning loop. This is the core decision-making pipeline
|
|
6
|
+
* for agent action selection.
|
|
7
|
+
*
|
|
8
|
+
* Flow (from Drew's architecture, section 8.5):
|
|
9
|
+
* 1. Capture current WorldState
|
|
10
|
+
* 2. PolicyHead proposes top-k actions
|
|
11
|
+
* 3. DynamicsModel simulates each action (rollout)
|
|
12
|
+
* 4. Score predicted outcomes, select best
|
|
13
|
+
* 5. Execute action
|
|
14
|
+
* 6. Observe actual outcome
|
|
15
|
+
* 7. Record transition (WM learns dynamics, PH learns action selection)
|
|
16
|
+
* 8. Check invariants (InvariantMonitor)
|
|
17
|
+
*
|
|
18
|
+
* Phase 1: Single-step rollouts (this implementation)
|
|
19
|
+
* Phase 2: Multi-step lookahead (future)
|
|
20
|
+
* Phase 3: Beam search with pruning (future)
|
|
21
|
+
*
|
|
22
|
+
* @purpose Orchestrate PolicyHead → DynamicsModel → InvariantMonitor planning loop
|
|
23
|
+
* @spec knowledge/DREW-RESPONSE-ANSWERS.md
|
|
24
|
+
* @decision drew-planning-loop-architecture
|
|
25
|
+
*/
|
|
26
|
+
import type { WorldState, AgentAction, WorldOutcome, StateTransition, PredictionResult } from "../types/world-model.js";
|
|
27
|
+
export interface PlanningConfig {
|
|
28
|
+
/** Number of top actions to propose (default: 5) */
|
|
29
|
+
topK: number;
|
|
30
|
+
/** Minimum confidence to consider an action (default: 0.1) */
|
|
31
|
+
minConfidence: number;
|
|
32
|
+
/** Maximum planning time in ms (default: 5000) */
|
|
33
|
+
maxPlanningTimeMs: number;
|
|
34
|
+
/** Whether to check invariants before selecting (default: true) */
|
|
35
|
+
checkInvariants: boolean;
|
|
36
|
+
/** Whether to record transitions for learning (default: true) */
|
|
37
|
+
recordTransitions: boolean;
|
|
38
|
+
/** Whether to write training tuples (default: true) */
|
|
39
|
+
writeTrainingTuples: boolean;
|
|
40
|
+
/** Rollout depth — 1 = single step, >1 = multi-step lookahead (default: 1) */
|
|
41
|
+
rolloutDepth: number;
|
|
42
|
+
/** Weight for immediate outcome vs confidence (default: 0.7 outcome, 0.3 confidence) */
|
|
43
|
+
outcomeWeight: number;
|
|
44
|
+
/** Verbose logging (default: false) */
|
|
45
|
+
verbose: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** A single evaluated action with its predicted outcome */
|
|
48
|
+
export interface EvaluatedAction {
|
|
49
|
+
/** The proposed action */
|
|
50
|
+
action: AgentAction;
|
|
51
|
+
/** PolicyHead's confidence in this action */
|
|
52
|
+
phConfidence: number;
|
|
53
|
+
/** DynamicsModel's predicted outcome */
|
|
54
|
+
prediction: PredictionResult;
|
|
55
|
+
/** Combined score (outcome * outcomeWeight + confidence * (1-outcomeWeight)) */
|
|
56
|
+
combinedScore: number;
|
|
57
|
+
/** Invariant violations this action would cause (empty = safe) */
|
|
58
|
+
invariantViolations: string[];
|
|
59
|
+
/** Whether this action was filtered out */
|
|
60
|
+
filtered: boolean;
|
|
61
|
+
/** Reason for filtering (if filtered) */
|
|
62
|
+
filterReason?: string;
|
|
63
|
+
}
|
|
64
|
+
/** Result of a planning loop execution */
|
|
65
|
+
export interface PlanningResult {
|
|
66
|
+
/** The selected action (best scored, non-filtered) */
|
|
67
|
+
selectedAction: EvaluatedAction | null;
|
|
68
|
+
/** All evaluated actions (including filtered) */
|
|
69
|
+
allActions: EvaluatedAction[];
|
|
70
|
+
/** Current world state used for planning */
|
|
71
|
+
state: WorldState;
|
|
72
|
+
/** Time spent planning (ms) */
|
|
73
|
+
planningTimeMs: number;
|
|
74
|
+
/** Whether planning completed or timed out */
|
|
75
|
+
completed: boolean;
|
|
76
|
+
/** Number of DynamicsModel rollouts performed */
|
|
77
|
+
rolloutsPerformed: number;
|
|
78
|
+
/** Reason if no action was selected */
|
|
79
|
+
noSelectionReason?: string;
|
|
80
|
+
}
|
|
81
|
+
/** Result of executing and observing an action */
|
|
82
|
+
export interface ExecutionResult {
|
|
83
|
+
/** The action that was executed */
|
|
84
|
+
action: AgentAction;
|
|
85
|
+
/** Predicted outcome (from planning) */
|
|
86
|
+
predictedOutcome: WorldOutcome;
|
|
87
|
+
/** Actual outcome (observed after execution) */
|
|
88
|
+
actualOutcome: WorldOutcome;
|
|
89
|
+
/** State before execution */
|
|
90
|
+
priorState: WorldState;
|
|
91
|
+
/** State after execution */
|
|
92
|
+
posteriorState: WorldState;
|
|
93
|
+
/** Prediction error (|predicted - actual| for eval score change) */
|
|
94
|
+
predictionError: number;
|
|
95
|
+
/** The recorded transition (if recordTransitions was true) */
|
|
96
|
+
transition?: StateTransition;
|
|
97
|
+
}
|
|
98
|
+
export declare class PlanningLoop {
|
|
99
|
+
private policyHead;
|
|
100
|
+
private dynamicsModel;
|
|
101
|
+
private store;
|
|
102
|
+
private trainingBuffer;
|
|
103
|
+
private config;
|
|
104
|
+
private projectRoot;
|
|
105
|
+
constructor(projectRoot?: string, config?: Partial<PlanningConfig>);
|
|
106
|
+
/** Check if the planning loop has all required components */
|
|
107
|
+
get isReady(): boolean;
|
|
108
|
+
/** Get PolicyHead version and stats */
|
|
109
|
+
get policyHeadStats(): {
|
|
110
|
+
version: number;
|
|
111
|
+
stats: {
|
|
112
|
+
trained_on: number;
|
|
113
|
+
direction_accuracy: number;
|
|
114
|
+
rank_correlation: number;
|
|
115
|
+
val_accuracy?: number;
|
|
116
|
+
} | null;
|
|
117
|
+
isLoaded: boolean;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Run the planning loop: propose → simulate → select
|
|
121
|
+
*
|
|
122
|
+
* This is the main entry point. Given an agent and goal, it:
|
|
123
|
+
* 1. Captures current state
|
|
124
|
+
* 2. Gets top-k action proposals from PolicyHead
|
|
125
|
+
* 3. Simulates each action via DynamicsModel
|
|
126
|
+
* 4. Checks invariants for each simulated outcome
|
|
127
|
+
* 5. Scores and selects the best action
|
|
128
|
+
*/
|
|
129
|
+
plan(agentId: string, goal: string): Promise<PlanningResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Record the actual outcome after an action was executed.
|
|
132
|
+
* Updates both World Model (dynamics learning) and PolicyHead (training buffer).
|
|
133
|
+
*
|
|
134
|
+
* Call this after the selected action has been executed and the outcome observed.
|
|
135
|
+
*/
|
|
136
|
+
recordOutcome(priorState: WorldState, action: AgentAction, predictedOutcome: WorldOutcome): Promise<ExecutionResult>;
|
|
137
|
+
/** Create a minimal WorldState when full capture fails.
|
|
138
|
+
* Uses realistic defaults (not zeros) so PolicyHead gets meaningful embeddings. */
|
|
139
|
+
private minimalState;
|
|
140
|
+
/** Score an outcome prediction (higher = better) */
|
|
141
|
+
private scoreOutcome;
|
|
142
|
+
/** Create a hypothetical state by applying a prediction */
|
|
143
|
+
private applyPredictionToState;
|
|
144
|
+
/** Compute actual outcome by diffing prior and posterior states */
|
|
145
|
+
private computeActualOutcome;
|
|
146
|
+
/** Generate fallback proposals when PolicyHead is unavailable */
|
|
147
|
+
private fallbackProposals;
|
|
148
|
+
/** Convert a PH action name + goal to an RLAction */
|
|
149
|
+
private proposalToRLAction;
|
|
150
|
+
/** Generate a deterministic transition ID */
|
|
151
|
+
private transitionId;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a PlanningLoop with default configuration
|
|
155
|
+
*/
|
|
156
|
+
export declare function createPlanningLoop(projectRoot?: string, config?: Partial<PlanningConfig>): PlanningLoop;
|
|
157
|
+
//# sourceMappingURL=planning-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-loop.d.ts","sourceRoot":"","sources":["../../src/lib/planning-loop.ts"],"names":[],"mappings":"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"}
|