jfl 0.8.1 → 0.9.1
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/README.md +35 -4
- package/dist/commands/digest.d.ts +6 -0
- package/dist/commands/digest.d.ts.map +1 -1
- package/dist/commands/digest.js +70 -69
- package/dist/commands/digest.js.map +1 -1
- 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/eval.d.ts +40 -0
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +8 -8
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/findings.d.ts +7 -0
- package/dist/commands/findings.d.ts.map +1 -1
- package/dist/commands/findings.js +4 -4
- package/dist/commands/findings.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 +61 -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/portfolio.d.ts +5 -0
- package/dist/commands/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio.js +193 -203
- package/dist/commands/portfolio.js.map +1 -1
- package/dist/commands/predict.d.ts +19 -0
- package/dist/commands/predict.d.ts.map +1 -1
- package/dist/commands/predict.js +4 -4
- package/dist/commands/predict.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 +279 -20
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.d.ts +25 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +191 -0
- package/dist/commands/start.js.map +1 -0
- 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 +20 -0
- package/dist/commands/tenet-setup.d.ts.map +1 -0
- package/dist/commands/tenet-setup.js +135 -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/viz.d.ts +33 -0
- package/dist/commands/viz.d.ts.map +1 -1
- package/dist/commands/viz.js +9 -9
- package/dist/commands/viz.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 +230 -30
- 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 +59 -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 +245 -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/setup/starter-intelligence.d.ts +25 -0
- package/dist/lib/setup/starter-intelligence.d.ts.map +1 -0
- package/dist/lib/setup/starter-intelligence.js +309 -0
- package/dist/lib/setup/starter-intelligence.js.map +1 -0
- 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 +9 -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 +94 -0
- package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
- package/dist/lib/workspace/tmux-adapter.d.ts +8 -5
- package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -1
- package/dist/lib/workspace/tmux-adapter.js +38 -7
- package/dist/lib/workspace/tmux-adapter.js.map +1 -1
- package/dist/lib/workspace/tmux-sidebar.d.ts +14 -0
- package/dist/lib/workspace/tmux-sidebar.d.ts.map +1 -0
- package/dist/lib/workspace/tmux-sidebar.js +230 -0
- package/dist/lib/workspace/tmux-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/dist/utils/jfl-config.d.ts +7 -2
- package/dist/utils/jfl-config.d.ts.map +1 -1
- package/dist/utils/jfl-config.js +14 -4
- package/dist/utils/jfl-config.js.map +1 -1
- package/package.json +3 -2
- package/packages/pi/extensions/context.ts +51 -1
- package/packages/pi/extensions/hub-tools.ts +247 -0
- package/packages/pi/extensions/index.ts +38 -6
- package/packages/pi/extensions/memory-tool.ts +84 -4
- package/packages/pi/extensions/service-skills.ts +214 -0
- 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,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Surface Agent - Subway-based agent that manages a specific product surface area
|
|
3
|
+
*
|
|
4
|
+
* Each Tenet surface (IDE, Board, Notes, Flow) gets its own Subway agent that:
|
|
5
|
+
* - Manages the surface UX and intelligence
|
|
6
|
+
* - Coordinates with domain-specific RL agents
|
|
7
|
+
* - Learns from user behavior patterns
|
|
8
|
+
* - Collaborates with other surface agents
|
|
9
|
+
*/
|
|
10
|
+
export class SurfaceAgent {
|
|
11
|
+
surfaceType;
|
|
12
|
+
subwayId;
|
|
13
|
+
policyHead; // PolicyHead
|
|
14
|
+
associatedRLAgents;
|
|
15
|
+
constructor(surfaceType, subwayId) {
|
|
16
|
+
this.surfaceType = surfaceType;
|
|
17
|
+
this.subwayId = subwayId;
|
|
18
|
+
this.associatedRLAgents = [];
|
|
19
|
+
// Each surface has its own policy head trained on domain-specific patterns
|
|
20
|
+
// this.policyHead = new PolicyHead(`surface_${surfaceType}`)
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Learn from user behavior on this surface
|
|
24
|
+
*/
|
|
25
|
+
async updateLearning(userAction, outcome, context) {
|
|
26
|
+
// Update surface-specific policy head
|
|
27
|
+
await this.policyHead.updateFromFeedback({
|
|
28
|
+
state: this.serializeContext(context),
|
|
29
|
+
action: userAction,
|
|
30
|
+
reward: outcome === 'positive' ? 1 : outcome === 'negative' ? -1 : 0,
|
|
31
|
+
surfaceType: this.surfaceType
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Coordinate with other surfaces
|
|
36
|
+
*/
|
|
37
|
+
async coordinateWithSurface(targetSurface, method, payload) {
|
|
38
|
+
// This would use the subway_call tool in practice
|
|
39
|
+
console.log(`[${this.subwayId}] Calling ${targetSurface}.${method}(${JSON.stringify(payload)})`);
|
|
40
|
+
// Placeholder for actual Subway coordination
|
|
41
|
+
return { success: true, data: {} };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Spawn domain-specific RL agent
|
|
45
|
+
*/
|
|
46
|
+
async spawnRLAgent(agentType, task) {
|
|
47
|
+
const agentId = `${this.surfaceType}_${agentType}_${Date.now()}`;
|
|
48
|
+
console.log(`[${this.subwayId}] Spawning RL agent: ${agentId} for ${agentType}`);
|
|
49
|
+
// This would integrate with the existing RL agent infrastructure
|
|
50
|
+
// For now, just track that we spawned it
|
|
51
|
+
this.associatedRLAgents.push(agentId);
|
|
52
|
+
return agentId;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Share learning insights across surfaces
|
|
56
|
+
*/
|
|
57
|
+
async broadcastLearning(insight) {
|
|
58
|
+
// This would use subway_broadcast tool
|
|
59
|
+
console.log(`[${this.subwayId}] Broadcasting learning: ${insight.pattern} (${insight.optimization})`);
|
|
60
|
+
// Track cross-surface learning impact
|
|
61
|
+
await this.updateCrossSurfaceLearning(insight);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Convert surface context to state representation for policy head
|
|
65
|
+
*/
|
|
66
|
+
serializeContext(context) {
|
|
67
|
+
return {
|
|
68
|
+
surface: context.surfaceType,
|
|
69
|
+
userId: context.userId,
|
|
70
|
+
session: context.sessionId,
|
|
71
|
+
capabilities: context.capabilities,
|
|
72
|
+
preferences: context.userPreferences,
|
|
73
|
+
crossSurfaceSignals: Object.keys(context.crossSurfaceData).length
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Update learning that spans multiple surfaces
|
|
78
|
+
*/
|
|
79
|
+
async updateCrossSurfaceLearning(insight) {
|
|
80
|
+
// Store cross-surface patterns for coordination optimization
|
|
81
|
+
// This helps surfaces learn when and how to work together
|
|
82
|
+
const crossSurfacePattern = {
|
|
83
|
+
pattern: insight.pattern,
|
|
84
|
+
surfaces: insight.surfaces,
|
|
85
|
+
optimization: insight.optimization,
|
|
86
|
+
timestamp: new Date().toISOString(),
|
|
87
|
+
confidence: insight.confidence
|
|
88
|
+
};
|
|
89
|
+
// Would be stored in shared learning database
|
|
90
|
+
console.log('Cross-surface learning update:', crossSurfacePattern);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get current surface metrics for coordination decisions
|
|
94
|
+
*/
|
|
95
|
+
async getSurfaceMetrics() {
|
|
96
|
+
return {
|
|
97
|
+
activeUsers: Math.floor(Math.random() * 100),
|
|
98
|
+
avgSessionLength: Math.floor(Math.random() * 30) + 10,
|
|
99
|
+
engagementScore: Math.random() * 100,
|
|
100
|
+
errorRate: Math.random() * 0.1,
|
|
101
|
+
optimizationOpportunities: Math.floor(Math.random() * 5)
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=surface-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-agent.js","sourceRoot":"","sources":["../../src/lib/surface-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Example of how Surface Agents coordinate via Subway P2P mesh
|
|
3
|
+
*
|
|
4
|
+
* Scenario: User files GitHub issue → Multi-surface intelligent response
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Example coordination flow between surface agents
|
|
8
|
+
*/
|
|
9
|
+
export declare class SurfaceCoordinationExample {
|
|
10
|
+
private ideAgent;
|
|
11
|
+
private boardAgent;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Simulate the full coordination flow
|
|
15
|
+
*/
|
|
16
|
+
demonstrateCoordination(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Simulate an RL agent working on the fix
|
|
19
|
+
*/
|
|
20
|
+
private simulateFixAgent;
|
|
21
|
+
/**
|
|
22
|
+
* Example of learning insights being shared across surfaces
|
|
23
|
+
*/
|
|
24
|
+
demonstrateCrossSurfaceLearning(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Run the example
|
|
28
|
+
*/
|
|
29
|
+
export declare function runSurfaceCoordinationDemo(): Promise<void>;
|
|
30
|
+
//# sourceMappingURL=surface-coordination-example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-coordination-example.d.ts","sourceRoot":"","sources":["../../src/lib/surface-coordination-example.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,UAAU,CAAiB;;IAOnC;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0F9C;;OAEG;YACW,gBAAgB;IAiB9B;;OAEG;IACG,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;CAsCvD;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAYhE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Example of how Surface Agents coordinate via Subway P2P mesh
|
|
3
|
+
*
|
|
4
|
+
* Scenario: User files GitHub issue → Multi-surface intelligent response
|
|
5
|
+
*/
|
|
6
|
+
import { TenetIDEAgent } from './tenet-ide-agent.js';
|
|
7
|
+
import { TenetBoardAgent } from './tenet-board-agent.js';
|
|
8
|
+
/**
|
|
9
|
+
* Example coordination flow between surface agents
|
|
10
|
+
*/
|
|
11
|
+
export class SurfaceCoordinationExample {
|
|
12
|
+
ideAgent;
|
|
13
|
+
boardAgent;
|
|
14
|
+
constructor() {
|
|
15
|
+
this.ideAgent = new TenetIDEAgent();
|
|
16
|
+
this.boardAgent = new TenetBoardAgent();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Simulate the full coordination flow
|
|
20
|
+
*/
|
|
21
|
+
async demonstrateCoordination() {
|
|
22
|
+
console.log('🚀 Surface Agent Coordination Example');
|
|
23
|
+
console.log('===================================');
|
|
24
|
+
// 1. User files a new issue
|
|
25
|
+
const newIssue = {
|
|
26
|
+
id: 'issue-42',
|
|
27
|
+
title: 'CLI startup latency regression',
|
|
28
|
+
body: 'The jfl command takes 500ms+ to start, used to be <200ms',
|
|
29
|
+
priority: 'high',
|
|
30
|
+
labels: ['bug', 'performance'],
|
|
31
|
+
createdAt: new Date().toISOString()
|
|
32
|
+
};
|
|
33
|
+
console.log(`\n📋 New issue filed: ${newIssue.title}`);
|
|
34
|
+
// 2. Board agent receives the issue
|
|
35
|
+
console.log(`\n[tenet-board.relay] Processing new issue...`);
|
|
36
|
+
const boardContext = {
|
|
37
|
+
surfaceType: 'board',
|
|
38
|
+
userId: 'user123',
|
|
39
|
+
sessionId: 'session456',
|
|
40
|
+
capabilities: ['issue_tracking', 'project_management'],
|
|
41
|
+
userPreferences: { autoAssignment: true },
|
|
42
|
+
crossSurfaceData: {
|
|
43
|
+
newIssues: 1,
|
|
44
|
+
backlogItems: 5,
|
|
45
|
+
availableAgents: 2
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const boardAction = await this.boardAgent.decide(boardContext);
|
|
49
|
+
console.log(`[tenet-board.relay] Decision:`, boardAction);
|
|
50
|
+
// 3. Board agent notifies IDE agent about technical issue
|
|
51
|
+
console.log(`\n[tenet-board.relay] → [tenet-ide.relay] Sending issue for analysis...`);
|
|
52
|
+
await this.boardAgent.handleCrossSurfaceEvent('new_issue_filed', {
|
|
53
|
+
issue: newIssue
|
|
54
|
+
});
|
|
55
|
+
// Simulate IDE agent receiving the issue
|
|
56
|
+
await this.ideAgent.handleCrossSurfaceEvent('new_issue_filed', {
|
|
57
|
+
issue: newIssue
|
|
58
|
+
});
|
|
59
|
+
// 4. IDE agent analyzes and potentially spawns RL agent
|
|
60
|
+
console.log(`\n[tenet-ide.relay] Analyzing issue fixability...`);
|
|
61
|
+
const ideContext = {
|
|
62
|
+
surfaceType: 'ide',
|
|
63
|
+
userId: 'user123',
|
|
64
|
+
sessionId: 'session456',
|
|
65
|
+
capabilities: ['code_analysis', 'performance_tuning'],
|
|
66
|
+
userPreferences: {
|
|
67
|
+
autoFix: true,
|
|
68
|
+
cliSlowness: 520 // Current latency
|
|
69
|
+
},
|
|
70
|
+
crossSurfaceData: {
|
|
71
|
+
newIssues: 1,
|
|
72
|
+
performanceAlerts: 1
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const ideAction = await this.ideAgent.decide(ideContext);
|
|
76
|
+
console.log(`[tenet-ide.relay] Decision:`, ideAction);
|
|
77
|
+
// 5. Coordination between surfaces
|
|
78
|
+
console.log(`\n🤝 Cross-surface coordination happening...`);
|
|
79
|
+
// IDE assigns a fix agent
|
|
80
|
+
await this.simulateFixAgent(newIssue);
|
|
81
|
+
// Board updates issue status
|
|
82
|
+
await this.boardAgent.handleCrossSurfaceEvent('agent_assigned', {
|
|
83
|
+
issue: newIssue.id,
|
|
84
|
+
agent: 'cli-speed-agent-123',
|
|
85
|
+
estimatedTime: 15
|
|
86
|
+
});
|
|
87
|
+
// 6. Learning and optimization
|
|
88
|
+
console.log(`\n🧠 Cross-surface learning...`);
|
|
89
|
+
await this.ideAgent.learnFromIDEUsage('issue_auto_assigned', ideContext);
|
|
90
|
+
await this.boardAgent.learnFromBoardUsage('issue_prioritized', boardContext);
|
|
91
|
+
console.log(`\n✅ Coordination complete! Issue moving through automated pipeline.`);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Simulate an RL agent working on the fix
|
|
95
|
+
*/
|
|
96
|
+
async simulateFixAgent(issue) {
|
|
97
|
+
console.log(`\n[cli-speed-agent] Working on: ${issue.title}`);
|
|
98
|
+
console.log(`[cli-speed-agent] Analyzing startup performance...`);
|
|
99
|
+
console.log(`[cli-speed-agent] Found: Unnecessary import loading`);
|
|
100
|
+
console.log(`[cli-speed-agent] Applying fix: Lazy import optimization`);
|
|
101
|
+
console.log(`[cli-speed-agent] Testing: New startup time 180ms ✅`);
|
|
102
|
+
console.log(`[cli-speed-agent] Creating PR...`);
|
|
103
|
+
// Notify board agent of completion
|
|
104
|
+
await this.boardAgent.handleCrossSurfaceEvent('fix_completed', {
|
|
105
|
+
issue: issue.id,
|
|
106
|
+
agent: 'cli-speed-agent-123',
|
|
107
|
+
improvement: '65% faster startup',
|
|
108
|
+
prUrl: 'https://github.com/user/repo/pull/123'
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Example of learning insights being shared across surfaces
|
|
113
|
+
*/
|
|
114
|
+
async demonstrateCrossSurfaceLearning() {
|
|
115
|
+
console.log('\n🎓 Cross-surface Learning Example');
|
|
116
|
+
console.log('=================================');
|
|
117
|
+
const learningInsights = [
|
|
118
|
+
{
|
|
119
|
+
pattern: 'performance_issues_auto_fixable',
|
|
120
|
+
surfaces: ['board', 'ide'],
|
|
121
|
+
optimization: '+80% performance issues resolved automatically',
|
|
122
|
+
userImpact: '+25% developer velocity',
|
|
123
|
+
confidence: 0.9
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
pattern: 'issue_priority_correlation',
|
|
127
|
+
surfaces: ['board', 'ide'],
|
|
128
|
+
optimization: 'High priority issues fixed 3x faster',
|
|
129
|
+
userImpact: '+30% customer satisfaction',
|
|
130
|
+
confidence: 0.85
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
pattern: 'cross_surface_handoff_timing',
|
|
134
|
+
surfaces: ['board', 'ide'],
|
|
135
|
+
optimization: 'Optimal handoff: <2min from issue creation',
|
|
136
|
+
userImpact: '+15% issue resolution speed',
|
|
137
|
+
confidence: 0.78
|
|
138
|
+
}
|
|
139
|
+
];
|
|
140
|
+
for (const insight of learningInsights) {
|
|
141
|
+
console.log(`\n📊 Learning Insight: ${insight.pattern}`);
|
|
142
|
+
console.log(` Optimization: ${insight.optimization}`);
|
|
143
|
+
console.log(` User Impact: ${insight.userImpact}`);
|
|
144
|
+
console.log(` Confidence: ${(insight.confidence * 100).toFixed(0)}%`);
|
|
145
|
+
console.log(` Surfaces: ${insight.surfaces.join(', ')}`);
|
|
146
|
+
}
|
|
147
|
+
console.log(`\n🚀 Result: Each surface gets smarter at its domain AND coordination`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Run the example
|
|
152
|
+
*/
|
|
153
|
+
export async function runSurfaceCoordinationDemo() {
|
|
154
|
+
const example = new SurfaceCoordinationExample();
|
|
155
|
+
await example.demonstrateCoordination();
|
|
156
|
+
await example.demonstrateCrossSurfaceLearning();
|
|
157
|
+
console.log(`\n🎯 Key Benefits of Surface Agent Architecture:`);
|
|
158
|
+
console.log(`• Specialized intelligence per product surface`);
|
|
159
|
+
console.log(`• Distributed learning and optimization`);
|
|
160
|
+
console.log(`• Cross-surface coordination via Subway mesh`);
|
|
161
|
+
console.log(`• Each agent owns and evolves its domain`);
|
|
162
|
+
console.log(`• Scalable to new surfaces (Notes, Flow, etc.)`);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=surface-coordination-example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-coordination-example.js","sourceRoot":"","sources":["../../src/lib/surface-coordination-example.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Physical-World Data Engine — System telemetry collection
|
|
3
|
+
* Captures hardware, system, and workflow context that web UIs can't access
|
|
4
|
+
*/
|
|
5
|
+
import type { TelemetryEvent } from '../../types/telemetry.js';
|
|
6
|
+
export declare class PhysicalWorldCollector {
|
|
7
|
+
private startTime;
|
|
8
|
+
collect(baseEvent: Partial<TelemetryEvent>): Promise<Partial<TelemetryEvent>>;
|
|
9
|
+
private collectSystemMetrics;
|
|
10
|
+
private collectWorkflowMetrics;
|
|
11
|
+
private collectNetworkMetrics;
|
|
12
|
+
private extractVmStatValue;
|
|
13
|
+
}
|
|
14
|
+
export declare const physicalWorldCollector: PhysicalWorldCollector;
|
|
15
|
+
//# sourceMappingURL=physical-world-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical-world-collector.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/physical-world-collector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AA4B9D,qBAAa,sBAAsB;IACjC,OAAO,CAAC,SAAS,CAAa;IAExB,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAcrE,oBAAoB;YA0EpB,sBAAsB;YAgDtB,qBAAqB;IAoCnC,OAAO,CAAC,kBAAkB;CAK3B;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAA"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Physical-World Data Engine — System telemetry collection
|
|
3
|
+
* Captures hardware, system, and workflow context that web UIs can't access
|
|
4
|
+
*/
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
export class PhysicalWorldCollector {
|
|
8
|
+
startTime = Date.now();
|
|
9
|
+
async collect(baseEvent) {
|
|
10
|
+
const systemMetrics = await this.collectSystemMetrics();
|
|
11
|
+
const workflowMetrics = await this.collectWorkflowMetrics();
|
|
12
|
+
const networkMetrics = await this.collectNetworkMetrics();
|
|
13
|
+
return {
|
|
14
|
+
...baseEvent,
|
|
15
|
+
...systemMetrics,
|
|
16
|
+
...workflowMetrics,
|
|
17
|
+
...networkMetrics,
|
|
18
|
+
session_uptime_s: Math.floor((Date.now() - this.startTime) / 1000)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async collectSystemMetrics() {
|
|
22
|
+
const metrics = {};
|
|
23
|
+
try {
|
|
24
|
+
// CPU usage (macOS)
|
|
25
|
+
if (process.platform === 'darwin') {
|
|
26
|
+
const cpuUsage = execSync("top -l 1 | grep 'CPU usage:' | awk '{print $3}' | sed 's/%//'", {
|
|
27
|
+
encoding: 'utf-8', timeout: 3000
|
|
28
|
+
}).trim();
|
|
29
|
+
if (cpuUsage)
|
|
30
|
+
metrics.cpu_usage_percent = parseFloat(cpuUsage);
|
|
31
|
+
// Memory stats
|
|
32
|
+
const vmStat = execSync('vm_stat', { encoding: 'utf-8', timeout: 3000 });
|
|
33
|
+
const freePages = this.extractVmStatValue(vmStat, 'Pages free:');
|
|
34
|
+
const activePages = this.extractVmStatValue(vmStat, 'Pages active:');
|
|
35
|
+
const inactivePages = this.extractVmStatValue(vmStat, 'Pages inactive:');
|
|
36
|
+
const wiredPages = this.extractVmStatValue(vmStat, 'Pages wired down:');
|
|
37
|
+
if (freePages && activePages && inactivePages && wiredPages) {
|
|
38
|
+
const totalPages = freePages + activePages + inactivePages + wiredPages;
|
|
39
|
+
const pageSize = 4096; // 4KB pages on macOS
|
|
40
|
+
metrics.memory_available_mb = Math.round((freePages * pageSize) / (1024 * 1024));
|
|
41
|
+
metrics.memory_usage_mb = Math.round(((totalPages - freePages) * pageSize) / (1024 * 1024));
|
|
42
|
+
}
|
|
43
|
+
// System load
|
|
44
|
+
const uptime = execSync('uptime', { encoding: 'utf-8', timeout: 3000 });
|
|
45
|
+
const loadMatch = uptime.match(/load averages?:\s*([0-9.]+)/);
|
|
46
|
+
if (loadMatch)
|
|
47
|
+
metrics.system_load_1m = parseFloat(loadMatch[1]);
|
|
48
|
+
// Disk space
|
|
49
|
+
const diskInfo = execSync("df -h / | tail -1 | awk '{print $4}'", {
|
|
50
|
+
encoding: 'utf-8', timeout: 3000
|
|
51
|
+
}).trim();
|
|
52
|
+
if (diskInfo) {
|
|
53
|
+
const sizeMatch = diskInfo.match(/([0-9.]+)([KMGT])i?/);
|
|
54
|
+
if (sizeMatch) {
|
|
55
|
+
const [, size, unit] = sizeMatch;
|
|
56
|
+
const multiplier = { K: 0.001, M: 1 / 1024, G: 1, T: 1024 }[unit] || 1;
|
|
57
|
+
metrics.disk_free_gb = Math.round(parseFloat(size) * multiplier * 10) / 10;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Battery info
|
|
61
|
+
try {
|
|
62
|
+
const batteryInfo = execSync('pmset -g batt', { encoding: 'utf-8', timeout: 3000 });
|
|
63
|
+
if (batteryInfo.includes('Battery')) {
|
|
64
|
+
const pctMatch = batteryInfo.match(/([0-9]+)%/);
|
|
65
|
+
if (pctMatch)
|
|
66
|
+
metrics.battery_level = parseInt(pctMatch[1]);
|
|
67
|
+
metrics.battery_charging = batteryInfo.includes('charging');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// No battery (desktop)
|
|
72
|
+
}
|
|
73
|
+
// Thermal state (basic heuristic based on CPU usage and system load)
|
|
74
|
+
const cpuPct = metrics.cpu_usage_percent || 0;
|
|
75
|
+
const load = metrics.system_load_1m || 0;
|
|
76
|
+
if (cpuPct > 80 || load > 3.0) {
|
|
77
|
+
metrics.thermal_state = 'hot';
|
|
78
|
+
}
|
|
79
|
+
else if (cpuPct > 60 || load > 2.0) {
|
|
80
|
+
metrics.thermal_state = 'warm';
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
metrics.thermal_state = 'nominal';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// Fail silently - telemetry shouldn't break functionality
|
|
89
|
+
}
|
|
90
|
+
return metrics;
|
|
91
|
+
}
|
|
92
|
+
async collectWorkflowMetrics() {
|
|
93
|
+
const metrics = {};
|
|
94
|
+
try {
|
|
95
|
+
// Git information
|
|
96
|
+
if (existsSync('.git')) {
|
|
97
|
+
try {
|
|
98
|
+
metrics.git_branch = execSync('git branch --show-current', {
|
|
99
|
+
encoding: 'utf-8', timeout: 2000
|
|
100
|
+
}).trim();
|
|
101
|
+
const gitStatus = execSync('git status --porcelain', {
|
|
102
|
+
encoding: 'utf-8', timeout: 2000
|
|
103
|
+
});
|
|
104
|
+
metrics.git_dirty_files = gitStatus.split('\n').filter(line => line.trim()).length;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Not in a git repo or git not available
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Tmux sessions (indicator of terminal workflows)
|
|
111
|
+
try {
|
|
112
|
+
const tmuxSessions = execSync('tmux list-sessions 2>/dev/null || echo ""', {
|
|
113
|
+
encoding: 'utf-8', timeout: 2000
|
|
114
|
+
});
|
|
115
|
+
metrics.concurrent_terminals = tmuxSessions.split('\n').filter(line => line.trim()).length;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
metrics.concurrent_terminals = 1; // Default single terminal
|
|
119
|
+
}
|
|
120
|
+
// Current workspace path
|
|
121
|
+
metrics.workspace_path = process.cwd();
|
|
122
|
+
// Detect IDE (basic heuristics)
|
|
123
|
+
const processes = execSync('ps aux | grep -E "(code|cursor|nvim|vim|emacs)" | grep -v grep | wc -l', {
|
|
124
|
+
encoding: 'utf-8', timeout: 2000
|
|
125
|
+
}).trim();
|
|
126
|
+
if (parseInt(processes) > 0) {
|
|
127
|
+
// Could be enhanced to detect specific IDE
|
|
128
|
+
metrics.active_ide = 'detected';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Fail silently
|
|
133
|
+
}
|
|
134
|
+
return metrics;
|
|
135
|
+
}
|
|
136
|
+
async collectNetworkMetrics() {
|
|
137
|
+
const metrics = {};
|
|
138
|
+
try {
|
|
139
|
+
// Network latency test
|
|
140
|
+
const pingResult = execSync('ping -c 1 -W 2000 8.8.8.8 | grep "time=" | awk -F"time=" \'{print $2}\' | awk \'{print $1}\'', {
|
|
141
|
+
encoding: 'utf-8', timeout: 5000
|
|
142
|
+
}).trim();
|
|
143
|
+
if (pingResult) {
|
|
144
|
+
metrics.network_latency_ms = Math.round(parseFloat(pingResult));
|
|
145
|
+
metrics.internet_connectivity = true;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
metrics.internet_connectivity = false;
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
// Active localhost ports (development servers)
|
|
153
|
+
const portsOutput = execSync("lsof -i :3000-9000 -sTCP:LISTEN 2>/dev/null | awk 'NR>1 {print $9}' | cut -d: -f2 | sort -n", {
|
|
154
|
+
encoding: 'utf-8', timeout: 3000
|
|
155
|
+
});
|
|
156
|
+
const ports = portsOutput.split('\n')
|
|
157
|
+
.filter(line => line.trim())
|
|
158
|
+
.map(port => parseInt(port))
|
|
159
|
+
.filter(port => !isNaN(port));
|
|
160
|
+
if (ports.length > 0) {
|
|
161
|
+
metrics.localhost_ports_active = ports;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Command failed - no ports or lsof not available
|
|
166
|
+
}
|
|
167
|
+
return metrics;
|
|
168
|
+
}
|
|
169
|
+
extractVmStatValue(vmStat, label) {
|
|
170
|
+
const regex = new RegExp(`${label.replace(':', '\\:')}\\s+(\\d+)\\.?`);
|
|
171
|
+
const match = vmStat.match(regex);
|
|
172
|
+
return match ? parseInt(match[1]) : null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Singleton instance
|
|
176
|
+
export const physicalWorldCollector = new PhysicalWorldCollector();
|
|
177
|
+
//# sourceMappingURL=physical-world-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical-world-collector.js","sourceRoot":"","sources":["../../../src/lib/telemetry/physical-world-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Bridge between physical-world telemetry and RL training pipeline
|
|
3
|
+
* Converts telemetry events into training data for RL agents
|
|
4
|
+
*/
|
|
5
|
+
import type { TelemetryEvent } from '../../types/telemetry.js';
|
|
6
|
+
interface TrainingTuple {
|
|
7
|
+
agent: string;
|
|
8
|
+
state: PhysicalWorldState;
|
|
9
|
+
action: string;
|
|
10
|
+
reward: number;
|
|
11
|
+
next_state: PhysicalWorldState;
|
|
12
|
+
terminal: boolean;
|
|
13
|
+
timestamp: string;
|
|
14
|
+
}
|
|
15
|
+
interface PhysicalWorldState {
|
|
16
|
+
cpu_usage_percent: number;
|
|
17
|
+
memory_usage_mb: number;
|
|
18
|
+
thermal_state: 'nominal' | 'warm' | 'hot' | 'critical';
|
|
19
|
+
system_load_1m: number;
|
|
20
|
+
git_dirty_files: number;
|
|
21
|
+
concurrent_terminals: number;
|
|
22
|
+
active_ide: boolean;
|
|
23
|
+
avg_command_duration_ms: number;
|
|
24
|
+
recent_build_time_ms?: number;
|
|
25
|
+
recent_test_time_ms?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare class PhysicalWorldTrainingBridge {
|
|
28
|
+
private stateHistory;
|
|
29
|
+
private readonly STATE_WINDOW_SIZE;
|
|
30
|
+
/**
|
|
31
|
+
* Convert telemetry events into RL training tuples
|
|
32
|
+
*/
|
|
33
|
+
processEventForTraining(event: TelemetryEvent, agentName: string, action: string): TrainingTuple | null;
|
|
34
|
+
private extractPhysicalWorldState;
|
|
35
|
+
private calculatePhysicalWorldReward;
|
|
36
|
+
private getThermalScore;
|
|
37
|
+
private isTerminalState;
|
|
38
|
+
private updateStateHistory;
|
|
39
|
+
/**
|
|
40
|
+
* Export training data for RL pipeline
|
|
41
|
+
*/
|
|
42
|
+
exportTrainingData(): TrainingTuple[];
|
|
43
|
+
/**
|
|
44
|
+
* Get physical-world state summary for current system
|
|
45
|
+
*/
|
|
46
|
+
getCurrentPhysicalWorldSummary(): Partial<PhysicalWorldState>;
|
|
47
|
+
private average;
|
|
48
|
+
}
|
|
49
|
+
export declare const physicalWorldTrainingBridge: PhysicalWorldTrainingBridge;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=training-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"training-bridge.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/training-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,kBAAkB,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,kBAAkB,CAAA;IAC9B,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,kBAAkB;IAE1B,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAA;IACtD,cAAc,EAAE,MAAM,CAAA;IAGtB,eAAe,EAAE,MAAM,CAAA;IACvB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,UAAU,EAAE,OAAO,CAAA;IAGnB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAQD,qBAAa,2BAA2B;IACtC,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IAEvC;;OAEG;IACH,uBAAuB,CACrB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,aAAa,GAAG,IAAI;IA6BvB,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,4BAA4B;IA+FpC,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAMrC;;OAEG;IACH,8BAA8B,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAY7D,OAAO,CAAC,OAAO;CAGhB;AAGD,eAAO,MAAM,2BAA2B,6BAAoC,CAAA"}
|