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.
Files changed (104) hide show
  1. package/README.md +469 -36
  2. package/dist/commands/ci-setup.d.ts +5 -0
  3. package/dist/commands/ci-setup.d.ts.map +1 -0
  4. package/dist/commands/ci-setup.js +82 -0
  5. package/dist/commands/ci-setup.js.map +1 -0
  6. package/dist/commands/context-hub.d.ts.map +1 -1
  7. package/dist/commands/context-hub.js +154 -0
  8. package/dist/commands/context-hub.js.map +1 -1
  9. package/dist/commands/flows.d.ts +4 -1
  10. package/dist/commands/flows.d.ts.map +1 -1
  11. package/dist/commands/flows.js +160 -1
  12. package/dist/commands/flows.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +42 -0
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/peter.d.ts +2 -1
  17. package/dist/commands/peter.d.ts.map +1 -1
  18. package/dist/commands/peter.js +415 -2
  19. package/dist/commands/peter.js.map +1 -1
  20. package/dist/commands/pi.d.ts +21 -0
  21. package/dist/commands/pi.d.ts.map +1 -0
  22. package/dist/commands/pi.js +154 -0
  23. package/dist/commands/pi.js.map +1 -0
  24. package/dist/commands/portfolio.d.ts.map +1 -1
  25. package/dist/commands/portfolio.js +22 -69
  26. package/dist/commands/portfolio.js.map +1 -1
  27. package/dist/commands/predict.d.ts +6 -0
  28. package/dist/commands/predict.d.ts.map +1 -0
  29. package/dist/commands/predict.js +234 -0
  30. package/dist/commands/predict.js.map +1 -0
  31. package/dist/commands/synopsis.d.ts +44 -0
  32. package/dist/commands/synopsis.d.ts.map +1 -1
  33. package/dist/commands/synopsis.js +1 -1
  34. package/dist/commands/synopsis.js.map +1 -1
  35. package/dist/commands/update.d.ts.map +1 -1
  36. package/dist/commands/update.js +107 -5
  37. package/dist/commands/update.js.map +1 -1
  38. package/dist/commands/viz.d.ts +7 -0
  39. package/dist/commands/viz.d.ts.map +1 -0
  40. package/dist/commands/viz.js +460 -0
  41. package/dist/commands/viz.js.map +1 -0
  42. package/dist/dashboard/index.d.ts +4 -5
  43. package/dist/dashboard/index.d.ts.map +1 -1
  44. package/dist/dashboard/index.js +57 -146
  45. package/dist/dashboard/index.js.map +1 -1
  46. package/dist/dashboard-static/assets/index-B6kRK9Rq.js +116 -0
  47. package/dist/dashboard-static/assets/index-BpdKJPLu.css +1 -0
  48. package/dist/dashboard-static/index.html +16 -0
  49. package/dist/index.js +126 -19
  50. package/dist/index.js.map +1 -1
  51. package/dist/lib/flow-engine.d.ts +3 -0
  52. package/dist/lib/flow-engine.d.ts.map +1 -1
  53. package/dist/lib/flow-engine.js +70 -1
  54. package/dist/lib/flow-engine.js.map +1 -1
  55. package/dist/lib/hub-client.d.ts +80 -0
  56. package/dist/lib/hub-client.d.ts.map +1 -0
  57. package/dist/lib/hub-client.js +46 -0
  58. package/dist/lib/hub-client.js.map +1 -0
  59. package/dist/lib/predictor.d.ts +99 -0
  60. package/dist/lib/predictor.d.ts.map +1 -0
  61. package/dist/lib/predictor.js +394 -0
  62. package/dist/lib/predictor.js.map +1 -0
  63. package/dist/lib/service-gtm.d.ts +86 -51
  64. package/dist/lib/service-gtm.d.ts.map +1 -1
  65. package/dist/lib/service-gtm.js +417 -242
  66. package/dist/lib/service-gtm.js.map +1 -1
  67. package/dist/lib/telemetry-agent.d.ts +57 -0
  68. package/dist/lib/telemetry-agent.d.ts.map +1 -0
  69. package/dist/lib/telemetry-agent.js +268 -0
  70. package/dist/lib/telemetry-agent.js.map +1 -0
  71. package/dist/lib/telemetry-digest.d.ts.map +1 -1
  72. package/dist/lib/telemetry-digest.js +17 -17
  73. package/dist/lib/telemetry-digest.js.map +1 -1
  74. package/dist/lib/telemetry.d.ts +1 -0
  75. package/dist/lib/telemetry.d.ts.map +1 -1
  76. package/dist/lib/telemetry.js +14 -6
  77. package/dist/lib/telemetry.js.map +1 -1
  78. package/dist/mcp/context-hub-mcp.js +0 -0
  79. package/dist/mcp/service-registry-mcp.js +0 -0
  80. package/dist/types/map.d.ts +1 -1
  81. package/dist/types/map.d.ts.map +1 -1
  82. package/dist/types/map.js.map +1 -1
  83. package/dist/utils/jfl-paths.d.ts +1 -0
  84. package/dist/utils/jfl-paths.d.ts.map +1 -1
  85. package/dist/utils/jfl-paths.js +1 -0
  86. package/dist/utils/jfl-paths.js.map +1 -1
  87. package/package.json +7 -2
  88. package/scripts/generate-changesets.sh +113 -0
  89. package/scripts/pp-branch-pr.sh +115 -0
  90. package/template/.github/workflows/jfl-eval.yml +448 -0
  91. package/template/.github/workflows/jfl-review.yml +371 -0
  92. package/template/.jfl/flows/self-driving.yaml +190 -0
  93. package/dist/dashboard/components.d.ts +0 -7
  94. package/dist/dashboard/components.d.ts.map +0 -1
  95. package/dist/dashboard/components.js +0 -575
  96. package/dist/dashboard/components.js.map +0 -1
  97. package/dist/dashboard/pages.d.ts +0 -7
  98. package/dist/dashboard/pages.d.ts.map +0 -1
  99. package/dist/dashboard/pages.js +0 -1580
  100. package/dist/dashboard/pages.js.map +0 -1
  101. package/dist/dashboard/styles.d.ts +0 -7
  102. package/dist/dashboard/styles.d.ts.map +0 -1
  103. package/dist/dashboard/styles.js +0 -1110
  104. 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
- * Find parent GTM path from service config
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 declare function updateServiceSync(gtmPath: string, serviceName: string, timestamp: string): void;
83
- /**
84
- * Sync journal entries from service to GTM
85
- */
86
- export declare function syncJournalsToGTM(servicePath: string, gtmPath: string, serviceName: string): number;
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 payload
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
- * Service sync payload - comprehensive session summary for GTM
77
+ * Base sync payload common fields shared by both service→GTM and GTM→portfolio syncs
99
78
  */
100
- export interface ServiceSyncPayload {
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
- feature: number;
121
- fix: number;
122
- decision: number;
123
- discovery: number;
124
- milestone: number;
125
- other: number;
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":"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"}
1
+ {"version":3,"file":"service-gtm.d.ts","sourceRoot":"","sources":["../../src/lib/service-gtm.ts"],"names":[],"mappings":"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"}