jfl 0.3.0 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +469 -36
- package/dist/commands/ci-setup.d.ts +5 -0
- package/dist/commands/ci-setup.d.ts.map +1 -0
- package/dist/commands/ci-setup.js +82 -0
- package/dist/commands/ci-setup.js.map +1 -0
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +154 -0
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/flows.d.ts +4 -1
- package/dist/commands/flows.d.ts.map +1 -1
- package/dist/commands/flows.js +160 -1
- package/dist/commands/flows.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +42 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/peter.d.ts +2 -1
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +415 -2
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/pi.d.ts +21 -0
- package/dist/commands/pi.d.ts.map +1 -0
- package/dist/commands/pi.js +154 -0
- package/dist/commands/pi.js.map +1 -0
- package/dist/commands/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio.js +22 -69
- package/dist/commands/portfolio.js.map +1 -1
- package/dist/commands/predict.d.ts +6 -0
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +234 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/synopsis.d.ts +44 -0
- package/dist/commands/synopsis.d.ts.map +1 -1
- package/dist/commands/synopsis.js +1 -1
- package/dist/commands/synopsis.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +107 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/viz.d.ts +7 -0
- package/dist/commands/viz.d.ts.map +1 -0
- package/dist/commands/viz.js +460 -0
- package/dist/commands/viz.js.map +1 -0
- package/dist/dashboard/index.d.ts +4 -5
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +57 -146
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard-static/assets/index-B6kRK9Rq.js +116 -0
- package/dist/dashboard-static/assets/index-BpdKJPLu.css +1 -0
- package/dist/dashboard-static/index.html +16 -0
- package/dist/index.js +126 -19
- package/dist/index.js.map +1 -1
- package/dist/lib/flow-engine.d.ts +3 -0
- package/dist/lib/flow-engine.d.ts.map +1 -1
- package/dist/lib/flow-engine.js +70 -1
- package/dist/lib/flow-engine.js.map +1 -1
- package/dist/lib/hub-client.d.ts +80 -0
- package/dist/lib/hub-client.d.ts.map +1 -0
- package/dist/lib/hub-client.js +46 -0
- package/dist/lib/hub-client.js.map +1 -0
- package/dist/lib/predictor.d.ts +99 -0
- package/dist/lib/predictor.d.ts.map +1 -0
- package/dist/lib/predictor.js +394 -0
- package/dist/lib/predictor.js.map +1 -0
- package/dist/lib/service-gtm.d.ts +86 -51
- package/dist/lib/service-gtm.d.ts.map +1 -1
- package/dist/lib/service-gtm.js +417 -242
- package/dist/lib/service-gtm.js.map +1 -1
- package/dist/lib/telemetry-agent.d.ts +57 -0
- package/dist/lib/telemetry-agent.d.ts.map +1 -0
- package/dist/lib/telemetry-agent.js +268 -0
- package/dist/lib/telemetry-agent.js.map +1 -0
- package/dist/lib/telemetry-digest.d.ts.map +1 -1
- package/dist/lib/telemetry-digest.js +17 -17
- package/dist/lib/telemetry-digest.js.map +1 -1
- package/dist/lib/telemetry.d.ts +1 -0
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +14 -6
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/mcp/context-hub-mcp.js +0 -0
- package/dist/mcp/service-registry-mcp.js +0 -0
- package/dist/types/map.d.ts +1 -1
- package/dist/types/map.d.ts.map +1 -1
- package/dist/types/map.js.map +1 -1
- package/dist/utils/jfl-paths.d.ts +1 -0
- package/dist/utils/jfl-paths.d.ts.map +1 -1
- package/dist/utils/jfl-paths.js +1 -0
- package/dist/utils/jfl-paths.js.map +1 -1
- package/package.json +7 -2
- package/scripts/generate-changesets.sh +113 -0
- package/scripts/pp-branch-pr.sh +115 -0
- package/template/.github/workflows/jfl-eval.yml +448 -0
- package/template/.github/workflows/jfl-review.yml +371 -0
- package/template/.jfl/flows/self-driving.yaml +190 -0
- package/dist/dashboard/components.d.ts +0 -7
- package/dist/dashboard/components.d.ts.map +0 -1
- package/dist/dashboard/components.js +0 -575
- package/dist/dashboard/components.js.map +0 -1
- package/dist/dashboard/pages.d.ts +0 -7
- package/dist/dashboard/pages.d.ts.map +0 -1
- package/dist/dashboard/pages.js +0 -1580
- package/dist/dashboard/pages.js.map +0 -1
- package/dist/dashboard/styles.d.ts +0 -7
- package/dist/dashboard/styles.d.ts.map +0 -1
- package/dist/dashboard/styles.js +0 -1110
- package/dist/dashboard/styles.js.map +0 -1
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stratus Prediction Engine (Phase 2 RL)
|
|
3
|
+
*
|
|
4
|
+
* Combines Stratus rollout (fast, structural JEPA world model) with
|
|
5
|
+
* chat (slow, semantic reasoning) into an ensemble prediction that
|
|
6
|
+
* estimates eval score delta before executing changes.
|
|
7
|
+
*
|
|
8
|
+
* @purpose Predict eval score delta before executing changes — Stratus as world model / value function
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, existsSync, appendFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
11
|
+
import { join, dirname } from 'path';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
function findProjectRoot() {
|
|
14
|
+
let dir = process.cwd();
|
|
15
|
+
while (dir !== dirname(dir)) {
|
|
16
|
+
if (existsSync(join(dir, '.jfl', 'config.json')))
|
|
17
|
+
return dir;
|
|
18
|
+
if (existsSync(join(dir, '.jfl')))
|
|
19
|
+
return dir;
|
|
20
|
+
dir = dirname(dir);
|
|
21
|
+
}
|
|
22
|
+
return process.cwd();
|
|
23
|
+
}
|
|
24
|
+
export class Predictor {
|
|
25
|
+
baseUrl;
|
|
26
|
+
apiKey;
|
|
27
|
+
model;
|
|
28
|
+
predictionsPath;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.baseUrl = options.baseUrl || process.env.STRATUS_API_URL || 'https://api.stratus.run';
|
|
31
|
+
this.apiKey = options.apiKey || process.env.STRATUS_API_KEY || '';
|
|
32
|
+
this.model = options.model || 'stratus-x1ac-base-claude-sonnet-4-6';
|
|
33
|
+
const root = options.projectRoot || findProjectRoot();
|
|
34
|
+
this.predictionsPath = join(root, '.jfl', 'predictions', 'predictions.jsonl');
|
|
35
|
+
}
|
|
36
|
+
async predict(input) {
|
|
37
|
+
const predictionId = `pred_${randomUUID().slice(0, 8)}`;
|
|
38
|
+
const ts = new Date().toISOString();
|
|
39
|
+
const [rolloutResult, chatResult] = await Promise.allSettled([
|
|
40
|
+
this.callRollout(input),
|
|
41
|
+
this.callChat(input),
|
|
42
|
+
]);
|
|
43
|
+
const rollout = rolloutResult.status === 'fulfilled' ? rolloutResult.value : null;
|
|
44
|
+
const chat = chatResult.status === 'fulfilled' ? chatResult.value : null;
|
|
45
|
+
let output;
|
|
46
|
+
if (chat && rollout) {
|
|
47
|
+
output = this.ensemble(predictionId, ts, input, rollout, chat);
|
|
48
|
+
}
|
|
49
|
+
else if (chat) {
|
|
50
|
+
output = this.fromChat(predictionId, ts, input, chat);
|
|
51
|
+
}
|
|
52
|
+
else if (rollout) {
|
|
53
|
+
output = this.fromRollout(predictionId, ts, input, rollout);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const rolloutErr = rolloutResult.status === 'rejected' ? rolloutResult.reason?.message : 'unknown';
|
|
57
|
+
const chatErr = chatResult.status === 'rejected' ? chatResult.reason?.message : 'unknown';
|
|
58
|
+
throw new Error(`Both Stratus endpoints failed. Rollout: ${rolloutErr}. Chat: ${chatErr}`);
|
|
59
|
+
}
|
|
60
|
+
this.logPrediction(output, input);
|
|
61
|
+
try {
|
|
62
|
+
const { telemetry } = await import('./telemetry.js');
|
|
63
|
+
telemetry.track({
|
|
64
|
+
category: 'performance',
|
|
65
|
+
event: 'predictor:predict',
|
|
66
|
+
success: true,
|
|
67
|
+
stratus_confidence: output.confidence,
|
|
68
|
+
feature_context: JSON.stringify({
|
|
69
|
+
method: output.method,
|
|
70
|
+
predicted_delta: output.predicted_delta,
|
|
71
|
+
recommendation: output.recommendation,
|
|
72
|
+
brain_goal_proximity: output.brain_goal_proximity,
|
|
73
|
+
change_type: input.proposal.change_type,
|
|
74
|
+
scope: input.proposal.scope,
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// telemetry is fire-and-forget
|
|
80
|
+
}
|
|
81
|
+
return output;
|
|
82
|
+
}
|
|
83
|
+
async resolve(predictionId, actualDelta, actualScore, evalRunId) {
|
|
84
|
+
const records = this.readRecords();
|
|
85
|
+
const idx = records.findIndex(r => r.prediction_id === predictionId);
|
|
86
|
+
if (idx === -1) {
|
|
87
|
+
throw new Error(`Prediction ${predictionId} not found`);
|
|
88
|
+
}
|
|
89
|
+
const record = records[idx];
|
|
90
|
+
record.actual = {
|
|
91
|
+
delta: actualDelta,
|
|
92
|
+
score: actualScore,
|
|
93
|
+
eval_run_id: evalRunId,
|
|
94
|
+
resolved_at: new Date().toISOString(),
|
|
95
|
+
};
|
|
96
|
+
const deltaError = Math.abs(record.prediction.delta - actualDelta);
|
|
97
|
+
const directionCorrect = (record.prediction.delta >= 0 && actualDelta >= 0) ||
|
|
98
|
+
(record.prediction.delta < 0 && actualDelta < 0);
|
|
99
|
+
const calibration = record.prediction.confidence > 0
|
|
100
|
+
? 1 - Math.abs(deltaError / Math.max(Math.abs(actualDelta), 0.001))
|
|
101
|
+
: 0;
|
|
102
|
+
record.accuracy = {
|
|
103
|
+
delta_error: deltaError,
|
|
104
|
+
direction_correct: directionCorrect,
|
|
105
|
+
calibration: Math.max(0, Math.min(1, calibration)),
|
|
106
|
+
};
|
|
107
|
+
records[idx] = record;
|
|
108
|
+
this.writeRecords(records);
|
|
109
|
+
try {
|
|
110
|
+
const { telemetry } = await import('./telemetry.js');
|
|
111
|
+
telemetry.track({
|
|
112
|
+
category: 'performance',
|
|
113
|
+
event: 'predictor:resolve',
|
|
114
|
+
success: directionCorrect,
|
|
115
|
+
feature_context: JSON.stringify({
|
|
116
|
+
prediction_id: predictionId,
|
|
117
|
+
delta_error: deltaError,
|
|
118
|
+
direction_correct: directionCorrect,
|
|
119
|
+
calibration: record.accuracy.calibration,
|
|
120
|
+
}),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// fire-and-forget
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
getAccuracy(limit) {
|
|
128
|
+
const records = this.readRecords();
|
|
129
|
+
const resolved = records.filter(r => r.accuracy !== null);
|
|
130
|
+
const subset = limit ? resolved.slice(-limit) : resolved;
|
|
131
|
+
if (subset.length === 0) {
|
|
132
|
+
return { total: records.length, resolved: 0, direction_accuracy: 0, mean_delta_error: 0, calibration: 0 };
|
|
133
|
+
}
|
|
134
|
+
const directionCorrect = subset.filter(r => r.accuracy.direction_correct).length;
|
|
135
|
+
const meanDeltaError = subset.reduce((s, r) => s + r.accuracy.delta_error, 0) / subset.length;
|
|
136
|
+
const meanCalibration = subset.reduce((s, r) => s + r.accuracy.calibration, 0) / subset.length;
|
|
137
|
+
return {
|
|
138
|
+
total: records.length,
|
|
139
|
+
resolved: subset.length,
|
|
140
|
+
direction_accuracy: directionCorrect / subset.length,
|
|
141
|
+
mean_delta_error: meanDeltaError,
|
|
142
|
+
calibration: meanCalibration,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
getHistory(limit = 20) {
|
|
146
|
+
const records = this.readRecords();
|
|
147
|
+
return records.slice(-limit);
|
|
148
|
+
}
|
|
149
|
+
async callRollout(input) {
|
|
150
|
+
const controller = new AbortController();
|
|
151
|
+
const timer = setTimeout(() => controller.abort(), 15_000);
|
|
152
|
+
try {
|
|
153
|
+
const state = {
|
|
154
|
+
current_score: input.current_score,
|
|
155
|
+
proposal: input.proposal,
|
|
156
|
+
failing_evals: input.failing_evals || [],
|
|
157
|
+
recent_trajectory: input.recent_trajectory,
|
|
158
|
+
};
|
|
159
|
+
const response = await fetch(`${this.baseUrl}/v1/rollout`, {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: this.headers(),
|
|
162
|
+
body: JSON.stringify({
|
|
163
|
+
model: this.model,
|
|
164
|
+
state,
|
|
165
|
+
goal: input.goal,
|
|
166
|
+
horizon: 5,
|
|
167
|
+
return_confidence: true,
|
|
168
|
+
}),
|
|
169
|
+
signal: controller.signal,
|
|
170
|
+
});
|
|
171
|
+
if (!response.ok) {
|
|
172
|
+
const errText = await response.text();
|
|
173
|
+
throw new Error(`Rollout API error (${response.status}): ${errText.slice(0, 200)}`);
|
|
174
|
+
}
|
|
175
|
+
return await response.json();
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
clearTimeout(timer);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async callChat(input) {
|
|
182
|
+
const controller = new AbortController();
|
|
183
|
+
const timer = setTimeout(() => controller.abort(), 60_000);
|
|
184
|
+
try {
|
|
185
|
+
const trajectoryStr = input.recent_trajectory.length > 0
|
|
186
|
+
? input.recent_trajectory
|
|
187
|
+
.map(t => ` - ${t.action}: delta=${t.delta >= 0 ? '+' : ''}${t.delta.toFixed(4)}, reward=${t.reward.toFixed(2)}`)
|
|
188
|
+
.join('\n')
|
|
189
|
+
: ' (no prior trajectory)';
|
|
190
|
+
const failingStr = input.failing_evals && input.failing_evals.length > 0
|
|
191
|
+
? input.failing_evals.map(e => ` - ${e}`).join('\n')
|
|
192
|
+
: ' (none specified)';
|
|
193
|
+
const prompt = `You are a prediction engine for an RL-based eval optimization loop. Given a proposed code change and current eval trajectory, predict whether the change will improve the eval composite score.
|
|
194
|
+
|
|
195
|
+
Current composite score: ${input.current_score}
|
|
196
|
+
Goal: ${input.goal}
|
|
197
|
+
|
|
198
|
+
Proposed change:
|
|
199
|
+
Description: ${input.proposal.description}
|
|
200
|
+
Type: ${input.proposal.change_type}
|
|
201
|
+
Scope: ${input.proposal.scope}
|
|
202
|
+
Files: ${(input.proposal.files_affected || []).join(', ') || 'unspecified'}
|
|
203
|
+
|
|
204
|
+
Failing evals:
|
|
205
|
+
${failingStr}
|
|
206
|
+
|
|
207
|
+
Recent trajectory (action, delta, reward):
|
|
208
|
+
${trajectoryStr}
|
|
209
|
+
|
|
210
|
+
Respond in this exact JSON format (no markdown fences):
|
|
211
|
+
{
|
|
212
|
+
"predicted_delta": <number between -1 and 1>,
|
|
213
|
+
"confidence": <number between 0 and 1>,
|
|
214
|
+
"reasoning": "<2-3 sentence explanation>",
|
|
215
|
+
"risks": [{"description": "<risk>", "severity": "low|medium|high"}],
|
|
216
|
+
"recommendation": "proceed|revise|abandon"
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
Base your prediction on:
|
|
220
|
+
1. How similar changes performed in the trajectory
|
|
221
|
+
2. Whether the change directly addresses failing evals
|
|
222
|
+
3. The scope and risk profile of the change type
|
|
223
|
+
4. Diminishing returns patterns in the trajectory`;
|
|
224
|
+
const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
|
|
225
|
+
method: 'POST',
|
|
226
|
+
headers: this.headers(),
|
|
227
|
+
body: JSON.stringify({
|
|
228
|
+
model: this.model,
|
|
229
|
+
messages: [{ role: 'user', content: prompt }],
|
|
230
|
+
temperature: 0.3,
|
|
231
|
+
max_tokens: 1000,
|
|
232
|
+
}),
|
|
233
|
+
signal: controller.signal,
|
|
234
|
+
});
|
|
235
|
+
if (!response.ok) {
|
|
236
|
+
const errText = await response.text();
|
|
237
|
+
throw new Error(`Chat API error (${response.status}): ${errText.slice(0, 200)}`);
|
|
238
|
+
}
|
|
239
|
+
const result = await response.json();
|
|
240
|
+
const content = result.choices?.[0]?.message?.content || '';
|
|
241
|
+
return this.parseChatResponse(content);
|
|
242
|
+
}
|
|
243
|
+
finally {
|
|
244
|
+
clearTimeout(timer);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
parseChatResponse(content) {
|
|
248
|
+
const jsonMatch = content.match(/\{[\s\S]*\}/);
|
|
249
|
+
if (!jsonMatch) {
|
|
250
|
+
throw new Error('Chat response did not contain valid JSON');
|
|
251
|
+
}
|
|
252
|
+
try {
|
|
253
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
254
|
+
const delta = typeof parsed.predicted_delta === 'number'
|
|
255
|
+
? Math.max(-1, Math.min(1, parsed.predicted_delta))
|
|
256
|
+
: 0;
|
|
257
|
+
const confidence = typeof parsed.confidence === 'number'
|
|
258
|
+
? Math.max(0, Math.min(1, parsed.confidence))
|
|
259
|
+
: 0.5;
|
|
260
|
+
const recommendation = ['proceed', 'revise', 'abandon'].includes(parsed.recommendation)
|
|
261
|
+
? parsed.recommendation
|
|
262
|
+
: 'revise';
|
|
263
|
+
const risks = Array.isArray(parsed.risks)
|
|
264
|
+
? parsed.risks.map((r) => ({
|
|
265
|
+
description: String(r.description || ''),
|
|
266
|
+
severity: ['low', 'medium', 'high'].includes(r.severity) ? r.severity : 'medium',
|
|
267
|
+
}))
|
|
268
|
+
: [];
|
|
269
|
+
return {
|
|
270
|
+
predicted_delta: delta,
|
|
271
|
+
confidence,
|
|
272
|
+
reasoning: String(parsed.reasoning || ''),
|
|
273
|
+
risks,
|
|
274
|
+
recommendation,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
throw new Error(`Failed to parse chat prediction JSON: ${content.slice(0, 200)}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
ensemble(predictionId, ts, input, rollout, chat) {
|
|
282
|
+
const avgGoalProximity = rollout.predictions.length > 0
|
|
283
|
+
? rollout.predictions.reduce((s, p) => s + p.brain_goal_proximity, 0) / rollout.predictions.length
|
|
284
|
+
: 0.5;
|
|
285
|
+
const rolloutDelta = (avgGoalProximity - 0.5) * 0.2;
|
|
286
|
+
const ensembleDelta = chat.predicted_delta * 0.6 + rolloutDelta * 0.4;
|
|
287
|
+
const avgBrainConf = rollout.predictions.length > 0
|
|
288
|
+
? rollout.predictions.reduce((s, p) => s + p.brain_confidence, 0) / rollout.predictions.length
|
|
289
|
+
: 0.5;
|
|
290
|
+
const ensembleConfidence = chat.confidence * 0.6 + avgBrainConf * 0.4;
|
|
291
|
+
return {
|
|
292
|
+
prediction_id: predictionId,
|
|
293
|
+
predicted_delta: Math.round(ensembleDelta * 10000) / 10000,
|
|
294
|
+
predicted_score: Math.round((input.current_score + ensembleDelta) * 10000) / 10000,
|
|
295
|
+
confidence: Math.round(ensembleConfidence * 100) / 100,
|
|
296
|
+
reasoning: chat.reasoning,
|
|
297
|
+
risks: chat.risks,
|
|
298
|
+
recommendation: chat.recommendation,
|
|
299
|
+
brain_goal_proximity: Math.round(avgGoalProximity * 10000) / 10000,
|
|
300
|
+
method: 'ensemble',
|
|
301
|
+
ts,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
fromChat(predictionId, ts, input, chat) {
|
|
305
|
+
return {
|
|
306
|
+
prediction_id: predictionId,
|
|
307
|
+
predicted_delta: chat.predicted_delta,
|
|
308
|
+
predicted_score: Math.round((input.current_score + chat.predicted_delta) * 10000) / 10000,
|
|
309
|
+
confidence: chat.confidence,
|
|
310
|
+
reasoning: chat.reasoning,
|
|
311
|
+
risks: chat.risks,
|
|
312
|
+
recommendation: chat.recommendation,
|
|
313
|
+
brain_goal_proximity: 0,
|
|
314
|
+
method: 'chat',
|
|
315
|
+
ts,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
fromRollout(predictionId, ts, input, rollout) {
|
|
319
|
+
const avgGoalProximity = rollout.predictions.length > 0
|
|
320
|
+
? rollout.predictions.reduce((s, p) => s + p.brain_goal_proximity, 0) / rollout.predictions.length
|
|
321
|
+
: 0.5;
|
|
322
|
+
const avgBrainConf = rollout.predictions.length > 0
|
|
323
|
+
? rollout.predictions.reduce((s, p) => s + p.brain_confidence, 0) / rollout.predictions.length
|
|
324
|
+
: 0.5;
|
|
325
|
+
const rolloutDelta = (avgGoalProximity - 0.5) * 0.2;
|
|
326
|
+
const recommendation = avgGoalProximity > 0.6 ? 'proceed' :
|
|
327
|
+
avgGoalProximity > 0.4 ? 'revise' : 'abandon';
|
|
328
|
+
return {
|
|
329
|
+
prediction_id: predictionId,
|
|
330
|
+
predicted_delta: Math.round(rolloutDelta * 10000) / 10000,
|
|
331
|
+
predicted_score: Math.round((input.current_score + rolloutDelta) * 10000) / 10000,
|
|
332
|
+
confidence: Math.round(avgBrainConf * 100) / 100,
|
|
333
|
+
reasoning: `Rollout-only prediction. Brain goal proximity: ${avgGoalProximity.toFixed(4)}. ` +
|
|
334
|
+
`${rollout.predictions.length} steps evaluated with avg confidence ${avgBrainConf.toFixed(4)}.`,
|
|
335
|
+
risks: [],
|
|
336
|
+
recommendation,
|
|
337
|
+
brain_goal_proximity: Math.round(avgGoalProximity * 10000) / 10000,
|
|
338
|
+
method: 'rollout',
|
|
339
|
+
ts,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
logPrediction(output, input) {
|
|
343
|
+
const record = {
|
|
344
|
+
prediction_id: output.prediction_id,
|
|
345
|
+
ts: output.ts,
|
|
346
|
+
proposal: input.proposal,
|
|
347
|
+
input_score: input.current_score,
|
|
348
|
+
prediction: {
|
|
349
|
+
delta: output.predicted_delta,
|
|
350
|
+
score: output.predicted_score,
|
|
351
|
+
confidence: output.confidence,
|
|
352
|
+
recommendation: output.recommendation,
|
|
353
|
+
method: output.method,
|
|
354
|
+
brain_goal_proximity: output.brain_goal_proximity,
|
|
355
|
+
},
|
|
356
|
+
actual: null,
|
|
357
|
+
accuracy: null,
|
|
358
|
+
};
|
|
359
|
+
const dir = dirname(this.predictionsPath);
|
|
360
|
+
if (!existsSync(dir))
|
|
361
|
+
mkdirSync(dir, { recursive: true });
|
|
362
|
+
appendFileSync(this.predictionsPath, JSON.stringify(record) + '\n');
|
|
363
|
+
}
|
|
364
|
+
readRecords() {
|
|
365
|
+
if (!existsSync(this.predictionsPath))
|
|
366
|
+
return [];
|
|
367
|
+
const content = readFileSync(this.predictionsPath, 'utf-8');
|
|
368
|
+
return content
|
|
369
|
+
.split('\n')
|
|
370
|
+
.filter(line => line.trim())
|
|
371
|
+
.map(line => {
|
|
372
|
+
try {
|
|
373
|
+
return JSON.parse(line);
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
})
|
|
379
|
+
.filter((r) => r !== null);
|
|
380
|
+
}
|
|
381
|
+
writeRecords(records) {
|
|
382
|
+
const dir = dirname(this.predictionsPath);
|
|
383
|
+
if (!existsSync(dir))
|
|
384
|
+
mkdirSync(dir, { recursive: true });
|
|
385
|
+
writeFileSync(this.predictionsPath, records.map(r => JSON.stringify(r)).join('\n') + '\n');
|
|
386
|
+
}
|
|
387
|
+
headers() {
|
|
388
|
+
const h = { 'Content-Type': 'application/json' };
|
|
389
|
+
if (this.apiKey)
|
|
390
|
+
h['Authorization'] = `Bearer ${this.apiKey}`;
|
|
391
|
+
return h;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=predictor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predictor.js","sourceRoot":"","sources":["../../src/lib/predictor.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,39 +53,18 @@ export interface GTMConfig extends ServiceConfig {
|
|
|
53
53
|
registered_services?: ServiceRegistration[];
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
57
|
-
*/
|
|
58
|
-
export declare function findGTMParent(servicePath: string): string | null;
|
|
59
|
-
/**
|
|
60
|
-
* Find portfolio parent path from GTM config
|
|
61
|
-
*/
|
|
62
|
-
export declare function findPortfolioParent(gtmPath: string): string | null;
|
|
63
|
-
/**
|
|
64
|
-
* Get full parent chain: service → GTM → portfolio
|
|
65
|
-
*/
|
|
66
|
-
export declare function getParentChain(projectPath: string): string[];
|
|
67
|
-
/**
|
|
68
|
-
* Validate GTM parent exists and is valid GTM workspace
|
|
69
|
-
*/
|
|
70
|
-
export declare function validateGTMParent(gtmPath: string): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Get registered services from GTM config
|
|
73
|
-
*/
|
|
74
|
-
export declare function getRegisteredServices(gtmPath: string): ServiceRegistration[];
|
|
75
|
-
/**
|
|
76
|
-
* Add service to GTM's registered_services array
|
|
77
|
-
*/
|
|
78
|
-
export declare function addServiceToGTM(gtmPath: string, serviceConfig: ServiceConfig): void;
|
|
79
|
-
/**
|
|
80
|
-
* Update service sync timestamp in GTM config
|
|
56
|
+
* Shared type for journal entry type counts
|
|
81
57
|
*/
|
|
82
|
-
export
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
58
|
+
export interface JournalTypeCounts {
|
|
59
|
+
feature: number;
|
|
60
|
+
fix: number;
|
|
61
|
+
decision: number;
|
|
62
|
+
discovery: number;
|
|
63
|
+
milestone: number;
|
|
64
|
+
other: number;
|
|
65
|
+
}
|
|
87
66
|
/**
|
|
88
|
-
* Git commit summary for phone home
|
|
67
|
+
* Git commit summary for phone home payloads
|
|
89
68
|
*/
|
|
90
69
|
export interface GitCommitSummary {
|
|
91
70
|
hash: string;
|
|
@@ -95,35 +74,37 @@ export interface GitCommitSummary {
|
|
|
95
74
|
files_changed: number;
|
|
96
75
|
}
|
|
97
76
|
/**
|
|
98
|
-
*
|
|
77
|
+
* Base sync payload — common fields shared by both service→GTM and GTM→portfolio syncs
|
|
99
78
|
*/
|
|
100
|
-
export interface
|
|
101
|
-
service_name: string;
|
|
79
|
+
export interface BaseSyncPayload {
|
|
102
80
|
sync_timestamp: string;
|
|
103
81
|
session_branch: string;
|
|
104
|
-
session: {
|
|
105
|
-
duration_seconds: number;
|
|
106
|
-
start_time: string;
|
|
107
|
-
end_time: string;
|
|
108
|
-
work_description?: string;
|
|
109
|
-
};
|
|
110
82
|
git: {
|
|
111
83
|
commits: GitCommitSummary[];
|
|
112
84
|
files_changed: number;
|
|
113
85
|
lines_added: number;
|
|
114
86
|
lines_removed: number;
|
|
115
|
-
branch_merged_to: string;
|
|
116
87
|
};
|
|
117
88
|
journal: {
|
|
118
89
|
entry_count: number;
|
|
119
|
-
types:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
90
|
+
types: JournalTypeCounts;
|
|
91
|
+
};
|
|
92
|
+
agent_notified: boolean;
|
|
93
|
+
errors: string[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Service sync payload — comprehensive session summary for GTM (service→GTM direction)
|
|
97
|
+
*/
|
|
98
|
+
export interface ServiceSyncPayload extends BaseSyncPayload {
|
|
99
|
+
service_name: string;
|
|
100
|
+
session: {
|
|
101
|
+
duration_seconds: number;
|
|
102
|
+
start_time: string;
|
|
103
|
+
end_time: string;
|
|
104
|
+
work_description?: string;
|
|
105
|
+
};
|
|
106
|
+
git: BaseSyncPayload["git"] & {
|
|
107
|
+
branch_merged_to: string;
|
|
127
108
|
};
|
|
128
109
|
health: {
|
|
129
110
|
validation_results?: {
|
|
@@ -153,9 +134,54 @@ export interface ServiceSyncPayload {
|
|
|
153
134
|
config_enabled: boolean;
|
|
154
135
|
detection_method: "git-diff" | "full-scan";
|
|
155
136
|
};
|
|
156
|
-
agent_notified: boolean;
|
|
157
|
-
errors: string[];
|
|
158
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* GTM sync payload — journal summary for portfolio (GTM→portfolio direction)
|
|
140
|
+
*/
|
|
141
|
+
export interface GTMSyncPayload extends BaseSyncPayload {
|
|
142
|
+
gtm_name: string;
|
|
143
|
+
git: BaseSyncPayload["git"] & {
|
|
144
|
+
working_branch: string;
|
|
145
|
+
};
|
|
146
|
+
journal: BaseSyncPayload["journal"] & {
|
|
147
|
+
since: string;
|
|
148
|
+
files_aggregated: string[];
|
|
149
|
+
incomplete_aggregated: string[];
|
|
150
|
+
next_steps: string[];
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Find parent GTM path from service config
|
|
155
|
+
*/
|
|
156
|
+
export declare function findGTMParent(servicePath: string): string | null;
|
|
157
|
+
/**
|
|
158
|
+
* Find portfolio parent path from GTM config
|
|
159
|
+
*/
|
|
160
|
+
export declare function findPortfolioParent(gtmPath: string): string | null;
|
|
161
|
+
/**
|
|
162
|
+
* Get full parent chain: service → GTM → portfolio
|
|
163
|
+
*/
|
|
164
|
+
export declare function getParentChain(projectPath: string): string[];
|
|
165
|
+
/**
|
|
166
|
+
* Validate GTM parent exists and is valid GTM workspace
|
|
167
|
+
*/
|
|
168
|
+
export declare function validateGTMParent(gtmPath: string): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Get registered services from GTM config
|
|
171
|
+
*/
|
|
172
|
+
export declare function getRegisteredServices(gtmPath: string): ServiceRegistration[];
|
|
173
|
+
/**
|
|
174
|
+
* Add service to GTM's registered_services array
|
|
175
|
+
*/
|
|
176
|
+
export declare function addServiceToGTM(gtmPath: string, serviceConfig: ServiceConfig): void;
|
|
177
|
+
/**
|
|
178
|
+
* Update service sync timestamp in GTM config
|
|
179
|
+
*/
|
|
180
|
+
export declare function updateServiceSync(gtmPath: string, serviceName: string, timestamp: string): void;
|
|
181
|
+
/**
|
|
182
|
+
* Sync journal entries from service to GTM
|
|
183
|
+
*/
|
|
184
|
+
export declare function syncJournalsToGTM(servicePath: string, gtmPath: string, serviceName: string): number;
|
|
159
185
|
/**
|
|
160
186
|
* Phone home to GTM - comprehensive sync with full session metadata
|
|
161
187
|
*
|
|
@@ -170,4 +196,13 @@ export interface ServiceSyncPayload {
|
|
|
170
196
|
* IMPORTANT: Never blocks session end. Collects all errors and returns partial success.
|
|
171
197
|
*/
|
|
172
198
|
export declare function phoneHomeToGTM(servicePath: string, gtmPath: string, sessionBranch: string): Promise<ServiceSyncPayload>;
|
|
199
|
+
/**
|
|
200
|
+
* Phone home to Portfolio - sync full GTM journal content up to parent portfolio
|
|
201
|
+
*
|
|
202
|
+
* Reads GTM journal entries since last sync, copies journal files to portfolio,
|
|
203
|
+
* writes aggregated service-sync entry to portfolio journal, and emits a hub event.
|
|
204
|
+
*
|
|
205
|
+
* IMPORTANT: Never blocks session end. Collects all errors and returns partial success.
|
|
206
|
+
*/
|
|
207
|
+
export declare function phoneHomeToPortfolio(gtmPath: string, portfolioPath: string, sessionBranch: string): Promise<GTMSyncPayload>;
|
|
173
208
|
//# sourceMappingURL=service-gtm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-gtm.d.ts","sourceRoot":"","sources":["../../src/lib/service-gtm.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"service-gtm.d.ts","sourceRoot":"","sources":["../../src/lib/service-gtm.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;IACtC,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC;IACxG,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,aAAa,EAAE,MAAM,CAAC;YACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YACpB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,YAAY,EAAE;gBACZ,OAAO,EAAE,OAAO,CAAC;gBACjB,GAAG,EAAE,MAAM,CAAC;gBACZ,QAAQ,EAAE,MAAM,CAAC;gBACjB,OAAO,EAAE,MAAM,CAAC;aACjB,GAAG,IAAI,CAAC;SACV,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE;QACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,iBAAiB,CAAC;KAC1B,CAAC;IACF,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,MAAM,EAAE;QACN,kBAAkB,CAAC,EAAE;YACnB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,qBAAqB,EAAE,OAAO,CAAC;QAC/B,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvC,CAAC;IACF,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,WAAW,EAAE;QACX,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;QACzB,cAAc,EAAE,OAAO,CAAC;QACxB,gBAAgB,EAAE,UAAU,GAAG,WAAW,CAAC;KAC5C,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,qBAAqB,EAAE,MAAM,EAAE,CAAC;QAChC,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAgDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAehE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAelE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkB1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GACd,mBAAmB,EAAE,CAevB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa,GAC3B,IAAI,CAsCN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,IAAI,CAqCN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CA4BR;AAogBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAqU7B;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC,CA8HzB"}
|