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,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResourceOptimizer — Lightweight RL agent for system resource management
|
|
3
|
+
*
|
|
4
|
+
* Runs in the hot path of every CLI command (<5ms budget).
|
|
5
|
+
* Uses cached physical state + tiny GRU model (18K params) for temporal patterns.
|
|
6
|
+
* Falls back to rule-based policy when no model is trained.
|
|
7
|
+
*
|
|
8
|
+
* Authority: Can DELAY/THROTTLE but never CANCEL or REDIRECT actions.
|
|
9
|
+
* The InvariantMonitor has veto power above this.
|
|
10
|
+
*
|
|
11
|
+
* Cold start: Rules-only for first 7 days while collecting telemetry.
|
|
12
|
+
* Model takes over for scenarios it's confident on after 5K+ tuples.
|
|
13
|
+
*
|
|
14
|
+
* @purpose Real-time system resource management agent
|
|
15
|
+
* @spec knowledge/CASH-REVIEW-RESPONSES.md
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_CONFIG = {
|
|
18
|
+
enabled: true,
|
|
19
|
+
maxDecisionMs: 5,
|
|
20
|
+
minModelConfidence: 0.7,
|
|
21
|
+
modelPath: null,
|
|
22
|
+
stateCacheIntervalMs: 1000,
|
|
23
|
+
};
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Command Categories (for one-hot encoding in model input)
|
|
26
|
+
// ============================================================================
|
|
27
|
+
const COMMAND_CATEGORIES = [
|
|
28
|
+
"build", // npm run build, tsc, etc.
|
|
29
|
+
"test", // jest, vitest, eval scripts
|
|
30
|
+
"lint", // eslint, prettier, tsc --noEmit
|
|
31
|
+
"git", // git operations
|
|
32
|
+
"deploy", // fly deploy, docker push
|
|
33
|
+
"interactive", // vim, less, debugger
|
|
34
|
+
"other", // everything else
|
|
35
|
+
];
|
|
36
|
+
function classifyCommand(command) {
|
|
37
|
+
const cmd = command.toLowerCase();
|
|
38
|
+
if (cmd.includes("build") || cmd.includes("tsc") || cmd.includes("compile"))
|
|
39
|
+
return "build";
|
|
40
|
+
if (cmd.includes("test") || cmd.includes("jest") || cmd.includes("vitest") || cmd.includes("eval"))
|
|
41
|
+
return "test";
|
|
42
|
+
if (cmd.includes("lint") || cmd.includes("eslint") || cmd.includes("prettier"))
|
|
43
|
+
return "lint";
|
|
44
|
+
if (cmd.includes("git") || cmd.includes("gh "))
|
|
45
|
+
return "git";
|
|
46
|
+
if (cmd.includes("deploy") || cmd.includes("fly") || cmd.includes("docker"))
|
|
47
|
+
return "deploy";
|
|
48
|
+
if (cmd.includes("vim") || cmd.includes("less") || cmd.includes("debug") || cmd.includes("repl"))
|
|
49
|
+
return "interactive";
|
|
50
|
+
return "other";
|
|
51
|
+
}
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// Cold Start Rules (work without any training data)
|
|
54
|
+
// ============================================================================
|
|
55
|
+
/**
|
|
56
|
+
* Rule-based policy for cold start and fallback.
|
|
57
|
+
* These are obvious heuristics that don't need learning.
|
|
58
|
+
*/
|
|
59
|
+
function applyRules(state, command) {
|
|
60
|
+
const category = classifyCommand(command);
|
|
61
|
+
// Interactive commands: never interfere
|
|
62
|
+
if (category === "interactive") {
|
|
63
|
+
return {
|
|
64
|
+
action: "monitor",
|
|
65
|
+
delay_ms: 0,
|
|
66
|
+
reason: "Interactive command — monitoring only",
|
|
67
|
+
confidence: 1.0,
|
|
68
|
+
source: "rules",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// SAFETY: Critical thermal — delay until cool
|
|
72
|
+
if (state.thermal_state === "critical") {
|
|
73
|
+
return {
|
|
74
|
+
action: "throttle",
|
|
75
|
+
delay_ms: 10000,
|
|
76
|
+
reason: "Critical thermal state — waiting 10s for cooling",
|
|
77
|
+
confidence: 1.0,
|
|
78
|
+
source: "rules",
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// SAFETY: Hot thermal — short delay for heavy commands
|
|
82
|
+
if (state.thermal_state === "hot" && (category === "build" || category === "test")) {
|
|
83
|
+
return {
|
|
84
|
+
action: "throttle",
|
|
85
|
+
delay_ms: 3000,
|
|
86
|
+
reason: "Hot thermal + heavy command — 3s cooldown",
|
|
87
|
+
confidence: 0.9,
|
|
88
|
+
source: "rules",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// CPU pressure: defer background work
|
|
92
|
+
if (state.cpu_usage_percent > 90) {
|
|
93
|
+
return {
|
|
94
|
+
action: "defer_background",
|
|
95
|
+
delay_ms: 0,
|
|
96
|
+
reason: `CPU at ${state.cpu_usage_percent.toFixed(0)}% — deferring background tasks`,
|
|
97
|
+
confidence: 0.85,
|
|
98
|
+
source: "rules",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Memory pressure: suggest GC
|
|
102
|
+
const memoryPercent = state.memory_usage_mb / (state.memory_usage_mb + state.memory_available_mb) * 100;
|
|
103
|
+
if (memoryPercent > 85) {
|
|
104
|
+
return {
|
|
105
|
+
action: "gc_hint",
|
|
106
|
+
delay_ms: 0,
|
|
107
|
+
reason: `Memory at ${memoryPercent.toFixed(0)}% — suggesting garbage collection`,
|
|
108
|
+
confidence: 0.8,
|
|
109
|
+
source: "rules",
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Battery conservation
|
|
113
|
+
if (state.battery_level !== undefined && state.battery_level < 20 && !state.battery_charging) {
|
|
114
|
+
return {
|
|
115
|
+
action: "conservation",
|
|
116
|
+
delay_ms: 0,
|
|
117
|
+
reason: `Battery at ${state.battery_level}% — conservation mode`,
|
|
118
|
+
confidence: 0.9,
|
|
119
|
+
source: "rules",
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Heavy command about to run — boost resources
|
|
123
|
+
if ((category === "build" || category === "test") && state.thermal_state === "nominal" && state.cpu_usage_percent < 50) {
|
|
124
|
+
return {
|
|
125
|
+
action: "boost",
|
|
126
|
+
delay_ms: 0,
|
|
127
|
+
reason: `Pre-allocating resources for ${category} command`,
|
|
128
|
+
confidence: 0.7,
|
|
129
|
+
source: "rules",
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// System load is fine — passthrough
|
|
133
|
+
return {
|
|
134
|
+
action: "passthrough",
|
|
135
|
+
delay_ms: 0,
|
|
136
|
+
reason: "System healthy — no intervention needed",
|
|
137
|
+
confidence: 1.0,
|
|
138
|
+
source: "rules",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// ============================================================================
|
|
142
|
+
// ResourceOptimizer Class
|
|
143
|
+
// ============================================================================
|
|
144
|
+
export class ResourceOptimizer {
|
|
145
|
+
config;
|
|
146
|
+
stateCache = null;
|
|
147
|
+
stateCacheTimer = null;
|
|
148
|
+
transitionBuffer = [];
|
|
149
|
+
MAX_BUFFER = 10000;
|
|
150
|
+
constructor(config) {
|
|
151
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Make a resource management decision.
|
|
155
|
+
* Must complete in <5ms.
|
|
156
|
+
*
|
|
157
|
+
* @param state - Current physical world state (from cache)
|
|
158
|
+
* @param command - The command about to execute
|
|
159
|
+
* @returns Resource guidance (action + delay)
|
|
160
|
+
*/
|
|
161
|
+
decide(state, command) {
|
|
162
|
+
if (!this.config.enabled) {
|
|
163
|
+
return {
|
|
164
|
+
action: "passthrough",
|
|
165
|
+
delay_ms: 0,
|
|
166
|
+
reason: "ResourceOptimizer disabled",
|
|
167
|
+
confidence: 1.0,
|
|
168
|
+
source: "passthrough",
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// TODO: When model is trained, use model prediction here
|
|
172
|
+
// For now, always use rules (cold start)
|
|
173
|
+
//
|
|
174
|
+
// Future path:
|
|
175
|
+
// if (this.model && this.model.confidence > this.config.minModelConfidence) {
|
|
176
|
+
// return this.modelDecide(state, command)
|
|
177
|
+
// }
|
|
178
|
+
return applyRules(state, command);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Record a transition for training.
|
|
182
|
+
* Called AFTER command execution, non-blocking.
|
|
183
|
+
*/
|
|
184
|
+
recordTransition(beforeState, command, afterState, actionTaken = "passthrough") {
|
|
185
|
+
this.transitionBuffer.push({
|
|
186
|
+
state: beforeState,
|
|
187
|
+
command,
|
|
188
|
+
action: actionTaken,
|
|
189
|
+
nextState: afterState,
|
|
190
|
+
timestamp: Date.now(),
|
|
191
|
+
});
|
|
192
|
+
// Cap buffer size
|
|
193
|
+
if (this.transitionBuffer.length > this.MAX_BUFFER) {
|
|
194
|
+
this.transitionBuffer = this.transitionBuffer.slice(-this.MAX_BUFFER);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Get buffer size for training readiness check */
|
|
198
|
+
get bufferSize() {
|
|
199
|
+
return this.transitionBuffer.length;
|
|
200
|
+
}
|
|
201
|
+
/** Check if we have enough data to train */
|
|
202
|
+
get isTrainingReady() {
|
|
203
|
+
return this.transitionBuffer.length >= 5000;
|
|
204
|
+
}
|
|
205
|
+
/** Export buffer for training pipeline */
|
|
206
|
+
exportBuffer() {
|
|
207
|
+
return [...this.transitionBuffer];
|
|
208
|
+
}
|
|
209
|
+
/** Get current config */
|
|
210
|
+
getConfig() {
|
|
211
|
+
return { ...this.config };
|
|
212
|
+
}
|
|
213
|
+
/** Update config (e.g., enable/disable, change model path) */
|
|
214
|
+
updateConfig(updates) {
|
|
215
|
+
this.config = { ...this.config, ...updates };
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// ============================================================================
|
|
219
|
+
// Singleton
|
|
220
|
+
// ============================================================================
|
|
221
|
+
let _instance = null;
|
|
222
|
+
export function getResourceOptimizer(config) {
|
|
223
|
+
if (!_instance) {
|
|
224
|
+
_instance = new ResourceOptimizer(config);
|
|
225
|
+
}
|
|
226
|
+
return _instance;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=resource-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-optimizer.js","sourceRoot":"","sources":["../../src/lib/resource-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose RL Loop Manager - Help users understand and manage their learning agents
|
|
3
|
+
*
|
|
4
|
+
* Shows what agents are learning, how they're improving, and lets users guide the process
|
|
5
|
+
*/
|
|
6
|
+
export interface RLAgentStatus {
|
|
7
|
+
name: string;
|
|
8
|
+
status: 'training' | 'active' | 'improving' | 'stable';
|
|
9
|
+
current_score: number;
|
|
10
|
+
baseline_score: number;
|
|
11
|
+
improvement: number;
|
|
12
|
+
training_episodes: number;
|
|
13
|
+
last_update: string;
|
|
14
|
+
next_training: string;
|
|
15
|
+
confidence: number;
|
|
16
|
+
learning_rate: number;
|
|
17
|
+
focus_areas: string[];
|
|
18
|
+
recent_insights: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface LearningInsight {
|
|
21
|
+
timestamp: string;
|
|
22
|
+
agent: string;
|
|
23
|
+
insight: string;
|
|
24
|
+
evidence: string[];
|
|
25
|
+
confidence: number;
|
|
26
|
+
actionable: boolean;
|
|
27
|
+
user_feedback?: 'helpful' | 'not_helpful' | 'needs_adjustment';
|
|
28
|
+
}
|
|
29
|
+
export declare class RLManager {
|
|
30
|
+
private projectRoot;
|
|
31
|
+
private tenentDir;
|
|
32
|
+
constructor(projectRoot: string);
|
|
33
|
+
/**
|
|
34
|
+
* Get current status of all RL agents
|
|
35
|
+
*/
|
|
36
|
+
getAgentStatus(): Promise<RLAgentStatus[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Show learning loop dashboard
|
|
39
|
+
*/
|
|
40
|
+
showDashboard(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Display status for a single agent
|
|
43
|
+
*/
|
|
44
|
+
private displayAgentStatus;
|
|
45
|
+
/**
|
|
46
|
+
* Display a learning insight
|
|
47
|
+
*/
|
|
48
|
+
private displayInsight;
|
|
49
|
+
/**
|
|
50
|
+
* Get performance data for a specific agent
|
|
51
|
+
*/
|
|
52
|
+
private getAgentPerformance;
|
|
53
|
+
/**
|
|
54
|
+
* Get recent learning insights from agents
|
|
55
|
+
*/
|
|
56
|
+
private getRecentInsights;
|
|
57
|
+
/**
|
|
58
|
+
* Determine agent status based on performance
|
|
59
|
+
*/
|
|
60
|
+
private determineStatus;
|
|
61
|
+
/**
|
|
62
|
+
* Get status icon for display
|
|
63
|
+
*/
|
|
64
|
+
private getStatusIcon;
|
|
65
|
+
/**
|
|
66
|
+
* Allow users to provide feedback on insights
|
|
67
|
+
*/
|
|
68
|
+
provideFeedback(insightId: string, feedback: 'helpful' | 'not_helpful' | 'needs_adjustment'): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Show detailed explanation of what agents are learning
|
|
71
|
+
*/
|
|
72
|
+
explainLearning(): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=rl-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rl-manager.d.ts","sourceRoot":"","sources":["../../src/lib/rl-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;IACtD,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,kBAAkB,CAAA;CAC/D;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,SAAS,CAAQ;gBAEb,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAuBhD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CpC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;YACW,mBAAmB;IAiDjC;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,aAAa,GAAG,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjH;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CA2BvC"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose RL Loop Manager - Help users understand and manage their learning agents
|
|
3
|
+
*
|
|
4
|
+
* Shows what agents are learning, how they're improving, and lets users guide the process
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, existsSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
export class RLManager {
|
|
10
|
+
projectRoot;
|
|
11
|
+
tenentDir;
|
|
12
|
+
constructor(projectRoot) {
|
|
13
|
+
this.projectRoot = projectRoot;
|
|
14
|
+
this.tenentDir = join(projectRoot, '.tenet');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get current status of all RL agents
|
|
18
|
+
*/
|
|
19
|
+
async getAgentStatus() {
|
|
20
|
+
const agentsDir = join(this.tenentDir, 'agents');
|
|
21
|
+
const agents = [];
|
|
22
|
+
if (!existsSync(agentsDir)) {
|
|
23
|
+
return agents;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const agentFiles = require('fs').readdirSync(agentsDir).filter((f) => f.endsWith('.json'));
|
|
27
|
+
for (const file of agentFiles) {
|
|
28
|
+
const agentConfig = JSON.parse(readFileSync(join(agentsDir, file), 'utf8'));
|
|
29
|
+
const status = await this.getAgentPerformance(agentConfig.name || file.replace('.json', ''));
|
|
30
|
+
agents.push(status);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.warn('Could not read agent status:', error);
|
|
35
|
+
}
|
|
36
|
+
return agents;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Show learning loop dashboard
|
|
40
|
+
*/
|
|
41
|
+
async showDashboard() {
|
|
42
|
+
console.log();
|
|
43
|
+
console.log(chalk.bold.cyan('🤖 RL Learning Dashboard'));
|
|
44
|
+
console.log(chalk.gray(' Your AI agents are continuously learning and improving'));
|
|
45
|
+
console.log();
|
|
46
|
+
const agents = await this.getAgentStatus();
|
|
47
|
+
if (agents.length === 0) {
|
|
48
|
+
console.log(chalk.yellow('⚠️ No RL agents found. Run: tenet setup --agents'));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Show overall status
|
|
52
|
+
const totalImprovement = agents.reduce((sum, a) => sum + a.improvement, 0);
|
|
53
|
+
const avgConfidence = agents.reduce((sum, a) => sum + a.confidence, 0) / agents.length;
|
|
54
|
+
console.log(chalk.bold('📊 Overall Performance:'));
|
|
55
|
+
console.log(chalk.green(`✅ Total improvement: +${totalImprovement.toFixed(1)}% across all agents`));
|
|
56
|
+
console.log(chalk.cyan(`🎯 Average confidence: ${(avgConfidence * 100).toFixed(1)}%`));
|
|
57
|
+
console.log();
|
|
58
|
+
// Show individual agents
|
|
59
|
+
console.log(chalk.bold('🤖 Individual Agents:'));
|
|
60
|
+
for (const agent of agents) {
|
|
61
|
+
this.displayAgentStatus(agent);
|
|
62
|
+
}
|
|
63
|
+
// Show recent insights
|
|
64
|
+
const insights = await this.getRecentInsights();
|
|
65
|
+
if (insights.length > 0) {
|
|
66
|
+
console.log();
|
|
67
|
+
console.log(chalk.bold('💡 Recent Learning Insights:'));
|
|
68
|
+
for (const insight of insights.slice(0, 3)) {
|
|
69
|
+
this.displayInsight(insight);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(chalk.bold('🎛️ Management Commands:'));
|
|
74
|
+
console.log(chalk.cyan(' tenet agents status') + chalk.gray(' - Detailed agent status'));
|
|
75
|
+
console.log(chalk.cyan(' tenet agents train') + chalk.gray(' - Trigger training cycle'));
|
|
76
|
+
console.log(chalk.cyan(' tenet agents tune') + chalk.gray(' - Adjust learning parameters'));
|
|
77
|
+
console.log(chalk.cyan(' tenet agents feedback') + chalk.gray(' - Provide feedback on insights'));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Display status for a single agent
|
|
81
|
+
*/
|
|
82
|
+
displayAgentStatus(agent) {
|
|
83
|
+
const statusIcon = this.getStatusIcon(agent.status);
|
|
84
|
+
const improvementColor = agent.improvement > 0 ? chalk.green : agent.improvement < 0 ? chalk.red : chalk.yellow;
|
|
85
|
+
console.log(`${statusIcon} ${chalk.bold(agent.name)}`);
|
|
86
|
+
console.log(chalk.gray(` Status: ${agent.status} | Score: ${agent.current_score.toFixed(3)} | `) +
|
|
87
|
+
improvementColor(`${agent.improvement > 0 ? '+' : ''}${agent.improvement.toFixed(1)}%`));
|
|
88
|
+
if (agent.focus_areas.length > 0) {
|
|
89
|
+
console.log(chalk.gray(` Focus: ${agent.focus_areas.join(', ')}`));
|
|
90
|
+
}
|
|
91
|
+
if (agent.recent_insights.length > 0) {
|
|
92
|
+
console.log(chalk.cyan(` 💡 ${agent.recent_insights[0]}`));
|
|
93
|
+
}
|
|
94
|
+
console.log();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Display a learning insight
|
|
98
|
+
*/
|
|
99
|
+
displayInsight(insight) {
|
|
100
|
+
const confidenceColor = insight.confidence > 0.8 ? chalk.green : insight.confidence > 0.6 ? chalk.yellow : chalk.gray;
|
|
101
|
+
console.log(`💡 ${chalk.bold(insight.agent)}: ${insight.insight}`);
|
|
102
|
+
console.log(chalk.gray(` Evidence: ${insight.evidence.slice(0, 2).join(', ')}`));
|
|
103
|
+
console.log(confidenceColor(` Confidence: ${(insight.confidence * 100).toFixed(0)}%`));
|
|
104
|
+
if (insight.actionable) {
|
|
105
|
+
console.log(chalk.cyan(' 🎯 Actionable - will be applied in next cycle'));
|
|
106
|
+
}
|
|
107
|
+
console.log();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get performance data for a specific agent
|
|
111
|
+
*/
|
|
112
|
+
async getAgentPerformance(agentName) {
|
|
113
|
+
// This would read from actual training logs and performance metrics
|
|
114
|
+
// For now, return simulated data based on patterns
|
|
115
|
+
const mockData = {
|
|
116
|
+
'performance-optimizer': {
|
|
117
|
+
current_score: 0.847,
|
|
118
|
+
baseline_score: 0.782,
|
|
119
|
+
improvement: 8.3,
|
|
120
|
+
training_episodes: 156,
|
|
121
|
+
focus_areas: ['startup_time', 'memory_usage'],
|
|
122
|
+
recent_insights: ['Lazy loading reduces startup time by 23%']
|
|
123
|
+
},
|
|
124
|
+
'test-reliability-agent': {
|
|
125
|
+
current_score: 0.923,
|
|
126
|
+
baseline_score: 0.856,
|
|
127
|
+
improvement: 7.8,
|
|
128
|
+
training_episodes: 89,
|
|
129
|
+
focus_areas: ['flaky_tests', 'test_coverage'],
|
|
130
|
+
recent_insights: ['Mock stability improves test reliability']
|
|
131
|
+
},
|
|
132
|
+
'workflow-optimizer': {
|
|
133
|
+
current_score: 0.761,
|
|
134
|
+
baseline_score: 0.703,
|
|
135
|
+
improvement: 8.2,
|
|
136
|
+
training_episodes: 134,
|
|
137
|
+
focus_areas: ['pr_cycle_time', 'review_quality'],
|
|
138
|
+
recent_insights: ['Smaller PRs get reviewed 40% faster']
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const mock = mockData[agentName] || {};
|
|
142
|
+
return {
|
|
143
|
+
name: agentName,
|
|
144
|
+
status: this.determineStatus(mock.improvement || 0, mock.training_episodes || 0),
|
|
145
|
+
current_score: mock.current_score || 0.5,
|
|
146
|
+
baseline_score: mock.baseline_score || 0.4,
|
|
147
|
+
improvement: mock.improvement || 0,
|
|
148
|
+
training_episodes: mock.training_episodes || 0,
|
|
149
|
+
last_update: new Date(Date.now() - Math.random() * 3600000).toISOString(),
|
|
150
|
+
next_training: new Date(Date.now() + Math.random() * 3600000).toISOString(),
|
|
151
|
+
confidence: Math.min(0.95, 0.3 + (mock.training_episodes || 0) / 200),
|
|
152
|
+
learning_rate: 0.001 + Math.random() * 0.009,
|
|
153
|
+
focus_areas: mock.focus_areas || ['general'],
|
|
154
|
+
recent_insights: mock.recent_insights || []
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get recent learning insights from agents
|
|
159
|
+
*/
|
|
160
|
+
async getRecentInsights() {
|
|
161
|
+
const insights = [];
|
|
162
|
+
// This would read from actual insight logs
|
|
163
|
+
// For now, return simulated insights
|
|
164
|
+
const mockInsights = [
|
|
165
|
+
{
|
|
166
|
+
timestamp: new Date().toISOString(),
|
|
167
|
+
agent: 'performance-optimizer',
|
|
168
|
+
insight: 'Bundle splitting reduces initial load time by 18%',
|
|
169
|
+
evidence: ['Webpack analysis', 'Load time measurements'],
|
|
170
|
+
confidence: 0.87,
|
|
171
|
+
actionable: true
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
timestamp: new Date(Date.now() - 3600000).toISOString(),
|
|
175
|
+
agent: 'test-reliability-agent',
|
|
176
|
+
insight: 'Tests that use setTimeout are 3x more likely to be flaky',
|
|
177
|
+
evidence: ['Test failure correlation analysis', 'Timing patterns'],
|
|
178
|
+
confidence: 0.92,
|
|
179
|
+
actionable: true
|
|
180
|
+
}
|
|
181
|
+
];
|
|
182
|
+
return mockInsights;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Determine agent status based on performance
|
|
186
|
+
*/
|
|
187
|
+
determineStatus(improvement, episodes) {
|
|
188
|
+
if (episodes < 10)
|
|
189
|
+
return 'training';
|
|
190
|
+
if (improvement > 5)
|
|
191
|
+
return 'improving';
|
|
192
|
+
if (improvement > 1)
|
|
193
|
+
return 'active';
|
|
194
|
+
return 'stable';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get status icon for display
|
|
198
|
+
*/
|
|
199
|
+
getStatusIcon(status) {
|
|
200
|
+
const icons = {
|
|
201
|
+
'training': '🏋️',
|
|
202
|
+
'active': '🚀',
|
|
203
|
+
'improving': '📈',
|
|
204
|
+
'stable': '✅'
|
|
205
|
+
};
|
|
206
|
+
return icons[status] || '🤖';
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Allow users to provide feedback on insights
|
|
210
|
+
*/
|
|
211
|
+
async provideFeedback(insightId, feedback) {
|
|
212
|
+
console.log(chalk.green(`✅ Feedback recorded: ${feedback}`));
|
|
213
|
+
console.log(chalk.gray(' This will help improve future learning recommendations'));
|
|
214
|
+
// This would update the insight database and adjust future learning
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Show detailed explanation of what agents are learning
|
|
218
|
+
*/
|
|
219
|
+
async explainLearning() {
|
|
220
|
+
console.log();
|
|
221
|
+
console.log(chalk.bold.cyan('🧠 How Your RL Agents Learn'));
|
|
222
|
+
console.log();
|
|
223
|
+
console.log(chalk.bold('The Learning Process:'));
|
|
224
|
+
console.log(chalk.cyan('1. Observe') + chalk.gray(' - Agents watch your development patterns'));
|
|
225
|
+
console.log(chalk.cyan('2. Experiment') + chalk.gray(' - Try small optimizations'));
|
|
226
|
+
console.log(chalk.cyan('3. Measure') + chalk.gray(' - Check if changes improved performance'));
|
|
227
|
+
console.log(chalk.cyan('4. Learn') + chalk.gray(' - Update their understanding based on results'));
|
|
228
|
+
console.log(chalk.cyan('5. Repeat') + chalk.gray(' - Continuously improve over time'));
|
|
229
|
+
console.log();
|
|
230
|
+
console.log(chalk.bold('What They Learn From:'));
|
|
231
|
+
console.log(chalk.gray('• Your coding patterns and preferences'));
|
|
232
|
+
console.log(chalk.gray('• Build and test performance metrics'));
|
|
233
|
+
console.log(chalk.gray('• Git workflow and collaboration patterns'));
|
|
234
|
+
console.log(chalk.gray('• Error patterns and debugging sessions'));
|
|
235
|
+
console.log(chalk.gray('• Performance bottlenecks and optimizations'));
|
|
236
|
+
console.log();
|
|
237
|
+
console.log(chalk.bold('Privacy & Control:'));
|
|
238
|
+
console.log(chalk.green('✅ All learning happens locally on your machine'));
|
|
239
|
+
console.log(chalk.green('✅ You can see exactly what they\'re learning'));
|
|
240
|
+
console.log(chalk.green('✅ You control which insights to apply'));
|
|
241
|
+
console.log(chalk.green('✅ You can adjust or disable any agent'));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=rl-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rl-manager.js","sourceRoot":"","sources":["../../src/lib/rl-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Deep codebase analysis for existing software projects.
|
|
5
|
+
* Two-pass: static file scan + optional LLM synthesis.
|
|
6
|
+
*
|
|
7
|
+
* @purpose Deep-analyze a codebase to generate GTM context and tailored questionnaire
|
|
8
|
+
*/
|
|
9
|
+
import { type ServiceMetadata } from "./service-detector.js";
|
|
10
|
+
export interface ServiceDeepScan {
|
|
11
|
+
metadata: ServiceMetadata;
|
|
12
|
+
readme: string | null;
|
|
13
|
+
fileTree: string[];
|
|
14
|
+
entryPoints: {
|
|
15
|
+
path: string;
|
|
16
|
+
preview: string;
|
|
17
|
+
}[];
|
|
18
|
+
apiRoutes: string[];
|
|
19
|
+
database: {
|
|
20
|
+
type: string;
|
|
21
|
+
schema?: string;
|
|
22
|
+
} | null;
|
|
23
|
+
auth: {
|
|
24
|
+
detected: boolean;
|
|
25
|
+
type?: string;
|
|
26
|
+
} | null;
|
|
27
|
+
ci: {
|
|
28
|
+
github_actions: boolean;
|
|
29
|
+
docker: boolean;
|
|
30
|
+
fly: boolean;
|
|
31
|
+
vercel: boolean;
|
|
32
|
+
};
|
|
33
|
+
testing: {
|
|
34
|
+
framework: string | null;
|
|
35
|
+
testCount: number;
|
|
36
|
+
};
|
|
37
|
+
envVars: string[];
|
|
38
|
+
openApiSpec: string | null;
|
|
39
|
+
gitHistory: {
|
|
40
|
+
commits: number;
|
|
41
|
+
contributors: string[];
|
|
42
|
+
firstCommit: string;
|
|
43
|
+
recentCommits: string[];
|
|
44
|
+
};
|
|
45
|
+
monorepo: boolean;
|
|
46
|
+
workspaces: string[];
|
|
47
|
+
packageDescription: string | null;
|
|
48
|
+
scripts: Record<string, string>;
|
|
49
|
+
}
|
|
50
|
+
export interface ServiceAnalysis {
|
|
51
|
+
confident: {
|
|
52
|
+
purpose: string;
|
|
53
|
+
architecture: string;
|
|
54
|
+
keyFeatures: string[];
|
|
55
|
+
techStack: string[];
|
|
56
|
+
deploymentTarget: string | null;
|
|
57
|
+
};
|
|
58
|
+
uncertain: string[];
|
|
59
|
+
questions: Question[];
|
|
60
|
+
}
|
|
61
|
+
export interface Question {
|
|
62
|
+
id: string;
|
|
63
|
+
question: string;
|
|
64
|
+
why: string;
|
|
65
|
+
type: "text" | "select" | "confirm";
|
|
66
|
+
options?: string[];
|
|
67
|
+
default?: string;
|
|
68
|
+
category: "vision" | "audience" | "roadmap" | "brand" | "narrative" | "deployment" | "monetization";
|
|
69
|
+
}
|
|
70
|
+
export declare function detectExistingProject(dir: string): boolean;
|
|
71
|
+
export declare function deepScan(servicePath: string): ServiceDeepScan;
|
|
72
|
+
export declare function buildAnalysisPrompt(scan: ServiceDeepScan): string;
|
|
73
|
+
export declare function buildDocGenerationPrompt(scan: ServiceDeepScan, analysis: ServiceAnalysis, answers: Record<string, string>): string;
|
|
74
|
+
export declare function synthesizeWithLLM(prompt: string): Promise<string>;
|
|
75
|
+
export declare function getStaticFallbackQuestions(): Question[];
|
|
76
|
+
//# sourceMappingURL=service-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/service-analyzer.ts"],"names":[],"mappings":"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"}
|