@ginkoai/cli 1.4.13 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/commands/graph/api-client.d.ts +45 -1
  2. package/dist/commands/graph/api-client.d.ts.map +1 -1
  3. package/dist/commands/graph/api-client.js +86 -4
  4. package/dist/commands/graph/api-client.js.map +1 -1
  5. package/dist/commands/graph/health.d.ts +22 -0
  6. package/dist/commands/graph/health.d.ts.map +1 -0
  7. package/dist/commands/graph/health.js +37 -0
  8. package/dist/commands/graph/health.js.map +1 -0
  9. package/dist/commands/graph/index.d.ts.map +1 -1
  10. package/dist/commands/graph/index.js +8 -0
  11. package/dist/commands/graph/index.js.map +1 -1
  12. package/dist/commands/handoff.d.ts +7 -1
  13. package/dist/commands/handoff.d.ts.map +1 -1
  14. package/dist/commands/handoff.js +8 -0
  15. package/dist/commands/handoff.js.map +1 -1
  16. package/dist/commands/log.d.ts +5 -4
  17. package/dist/commands/log.d.ts.map +1 -1
  18. package/dist/commands/log.js +197 -216
  19. package/dist/commands/log.js.map +1 -1
  20. package/dist/commands/start/start-reflection.d.ts +22 -0
  21. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  22. package/dist/commands/start/start-reflection.js +295 -47
  23. package/dist/commands/start/start-reflection.js.map +1 -1
  24. package/dist/index.js +7 -7
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/charter-loader.d.ts +74 -0
  27. package/dist/lib/charter-loader.d.ts.map +1 -0
  28. package/dist/lib/charter-loader.js +328 -0
  29. package/dist/lib/charter-loader.js.map +1 -0
  30. package/dist/lib/context-loader-events.d.ts +49 -0
  31. package/dist/lib/context-loader-events.d.ts.map +1 -1
  32. package/dist/lib/context-loader-events.js +289 -36
  33. package/dist/lib/context-loader-events.js.map +1 -1
  34. package/dist/lib/event-logger.d.ts +8 -5
  35. package/dist/lib/event-logger.d.ts.map +1 -1
  36. package/dist/lib/event-logger.js +54 -14
  37. package/dist/lib/event-logger.js.map +1 -1
  38. package/dist/lib/event-task-linker.d.ts +81 -0
  39. package/dist/lib/event-task-linker.d.ts.map +1 -0
  40. package/dist/lib/event-task-linker.js +132 -0
  41. package/dist/lib/event-task-linker.js.map +1 -0
  42. package/dist/lib/output-formatter.d.ts +182 -0
  43. package/dist/lib/output-formatter.d.ts.map +1 -0
  44. package/dist/lib/output-formatter.js +263 -0
  45. package/dist/lib/output-formatter.js.map +1 -0
  46. package/dist/lib/session-cursor.d.ts +12 -5
  47. package/dist/lib/session-cursor.d.ts.map +1 -1
  48. package/dist/lib/session-cursor.js +12 -5
  49. package/dist/lib/session-cursor.js.map +1 -1
  50. package/dist/lib/sprint-loader.d.ts +94 -0
  51. package/dist/lib/sprint-loader.d.ts.map +1 -0
  52. package/dist/lib/sprint-loader.js +330 -0
  53. package/dist/lib/sprint-loader.js.map +1 -0
  54. package/dist/lib/sprint-parser.d.ts +79 -0
  55. package/dist/lib/sprint-parser.d.ts.map +1 -0
  56. package/dist/lib/sprint-parser.js +346 -0
  57. package/dist/lib/sprint-parser.js.map +1 -0
  58. package/dist/lib/write-dispatcher/adapters/local-adapter.d.ts.map +1 -1
  59. package/dist/lib/write-dispatcher/adapters/local-adapter.js +8 -2
  60. package/dist/lib/write-dispatcher/adapters/local-adapter.js.map +1 -1
  61. package/dist/utils/command-helpers.d.ts +76 -0
  62. package/dist/utils/command-helpers.d.ts.map +1 -0
  63. package/dist/utils/command-helpers.js +314 -0
  64. package/dist/utils/command-helpers.js.map +1 -0
  65. package/dist/utils/graph-health-monitor.d.ts +75 -0
  66. package/dist/utils/graph-health-monitor.d.ts.map +1 -0
  67. package/dist/utils/graph-health-monitor.js +108 -0
  68. package/dist/utils/graph-health-monitor.js.map +1 -0
  69. package/dist/utils/synthesis.d.ts +9 -0
  70. package/dist/utils/synthesis.d.ts.map +1 -1
  71. package/dist/utils/synthesis.js +47 -40
  72. package/dist/utils/synthesis.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,314 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-11-18
5
+ * @pattern: utility
6
+ * @tags: [command-patterns, ai-first-ux, smart-defaults, adr-046, utility-command]
7
+ * @related: [log-quality.ts, ../commands/log.ts, ADR-046-command-patterns-reflection-vs-utility.md]
8
+ * @priority: high
9
+ * @complexity: medium
10
+ * @dependencies: [chalk, log-quality]
11
+ */
12
+ import chalk from 'chalk';
13
+ import { detectGitContext, validateEntry } from './log-quality.js';
14
+ /**
15
+ * Category detection keywords and patterns
16
+ */
17
+ const CATEGORY_PATTERNS = {
18
+ fix: [
19
+ /\b(fixed|fix|bug|error|issue|resolved|patched|repaired)\b/i,
20
+ /\b(root cause|caused by|breaking)\b/i,
21
+ /\b(corrected|debugged|troubleshot)\b/i,
22
+ ],
23
+ feature: [
24
+ /\b(implemented|added|created|built|developed)\b/i,
25
+ /\b(new feature|enhancement|capability)\b/i,
26
+ /\b(introducing|rolled out)\b/i,
27
+ ],
28
+ decision: [
29
+ /\b(decided|chose|selected|opted for)\b/i,
30
+ /\b(vs|versus|instead of|rather than|over)\b/i,
31
+ /\b(alternative|option|choice|approach)\b/i,
32
+ /\b(rationale|reasoning|considered)\b/i,
33
+ ],
34
+ insight: [
35
+ /\b(discovered|learned|realized|found that)\b/i,
36
+ /\b(insight|pattern|observation|gotcha)\b/i,
37
+ /\b(breakthrough|understanding|key finding)\b/i,
38
+ ],
39
+ achievement: [
40
+ /\b(completed|finished|delivered|shipped)\b/i,
41
+ /\b(milestone|achievement|success)\b/i,
42
+ /\b(100%|all tests|fully working)\b/i,
43
+ ],
44
+ git: [
45
+ /\b(commit(ted)?|push(ed)?|merg(e|ed|ing)|rebas(e|ed|ing)|cherry-pick(ed)?)\b/i,
46
+ /\b(pull request|pr)\b/i,
47
+ /\b(git|version control)\b/i,
48
+ /\b(created?|made|new)\s+(feature\s+)?branch\b/i, // Branch operations
49
+ /\bbranch\b.*\b(created?|new|made)\b/i, // Branch creation
50
+ ],
51
+ };
52
+ /**
53
+ * Impact indicators - metrics and language intensity
54
+ */
55
+ const IMPACT_INDICATORS = {
56
+ high: {
57
+ metrics: [
58
+ /\b\d+%\s*(reduction|improvement|faster|increase)\b/i,
59
+ /\b(by|improved|reduced).*\d+%/i,
60
+ /\b(\d+x|10x|100x)\b/i,
61
+ /\b(critical|severe|major|significant)\b/i,
62
+ /\b(production|blocker|urgent|emergency)\b/i,
63
+ ],
64
+ quantitative: [
65
+ /\b\d+\s*(ms|s|sec|seconds?|minutes?|hours?)\s*[→>-]+\s*\d+/i, // Performance changes
66
+ /\bfrom\s+\d+\s*(ms|s|sec|seconds?)\s+to\s+\d+/i, // "from X to Y" pattern
67
+ /\b(90|95|98|99|100)%/i, // High percentages
68
+ /\b[5-9]\d{1,2}\s*tokens?\b/i, // Large token counts
69
+ ],
70
+ },
71
+ medium: {
72
+ keywords: [
73
+ /\b(updated|modified|refactored|improved)\b/i,
74
+ /\b(moderate|reasonable|noticeable)\b/i,
75
+ ],
76
+ },
77
+ low: {
78
+ keywords: [
79
+ /\b(minor|small|trivial|cosmetic)\b/i,
80
+ /\b(typo|formatting|cleanup|documentation)\b/i,
81
+ ],
82
+ },
83
+ };
84
+ /**
85
+ * Detect category from description keywords
86
+ * Returns null if no clear category detected (caller should use default)
87
+ */
88
+ export function detectCategory(description) {
89
+ // Handle edge cases: null, undefined, empty, whitespace-only
90
+ if (!description || typeof description !== 'string' || !description.trim()) {
91
+ return null;
92
+ }
93
+ const scores = {
94
+ fix: 0,
95
+ feature: 0,
96
+ decision: 0,
97
+ insight: 0,
98
+ achievement: 0,
99
+ git: 0,
100
+ };
101
+ // Check for low-confidence cases (very short descriptions)
102
+ const wordCount = description.trim().split(/\s+/).length;
103
+ const isTerse = wordCount < 3;
104
+ // Score each category based on pattern matches
105
+ for (const [category, patterns] of Object.entries(CATEGORY_PATTERNS)) {
106
+ for (const pattern of patterns) {
107
+ if (pattern.test(description)) {
108
+ scores[category] += 1;
109
+ }
110
+ }
111
+ }
112
+ // Find highest scoring category
113
+ let maxScore = 0;
114
+ let detectedCategory = null;
115
+ for (const [category, score] of Object.entries(scores)) {
116
+ if (score > maxScore) {
117
+ maxScore = score;
118
+ detectedCategory = category;
119
+ }
120
+ }
121
+ // Require higher confidence for terse descriptions
122
+ const minScore = isTerse ? 2 : 1;
123
+ return maxScore >= minScore ? detectedCategory : null;
124
+ }
125
+ /**
126
+ * Detect impact level from metrics and language intensity
127
+ * Always returns a value (defaults to medium)
128
+ */
129
+ export function detectImpact(description) {
130
+ // Handle edge cases: null, undefined, empty, whitespace-only
131
+ if (!description || typeof description !== 'string' || !description.trim()) {
132
+ return 'medium'; // Safe default
133
+ }
134
+ // Check for high impact indicators first
135
+ for (const pattern of IMPACT_INDICATORS.high.metrics) {
136
+ if (pattern.test(description)) {
137
+ return 'high';
138
+ }
139
+ }
140
+ for (const pattern of IMPACT_INDICATORS.high.quantitative) {
141
+ if (pattern.test(description)) {
142
+ return 'high';
143
+ }
144
+ }
145
+ // Check for low impact indicators
146
+ for (const pattern of IMPACT_INDICATORS.low.keywords) {
147
+ if (pattern.test(description)) {
148
+ return 'low';
149
+ }
150
+ }
151
+ // Check for medium impact indicators (explicit)
152
+ for (const pattern of IMPACT_INDICATORS.medium.keywords) {
153
+ if (pattern.test(description)) {
154
+ return 'medium';
155
+ }
156
+ }
157
+ // Default to medium if no clear signals
158
+ return 'medium';
159
+ }
160
+ /**
161
+ * Determine if context module should be auto-created
162
+ * High-value entries: high impact + specific categories
163
+ */
164
+ export function shouldCreateContextModule(category, impact) {
165
+ const eligibleCategories = ['fix', 'feature', 'decision', 'insight'];
166
+ return impact === 'high' && eligibleCategories.includes(category);
167
+ }
168
+ /**
169
+ * Gather git context for smart defaults
170
+ * Wrapper around log-quality detectGitContext for convenience
171
+ */
172
+ export async function gatherGitContext() {
173
+ return await detectGitContext();
174
+ }
175
+ /**
176
+ * Format quality description for educational feedback
177
+ */
178
+ export function getQualityDescription(validation) {
179
+ if (validation.score >= 90) {
180
+ return chalk.green('Excellent ') + chalk.dim('(WHAT+WHY+HOW present)');
181
+ }
182
+ else if (validation.score >= 70) {
183
+ return chalk.cyan('Good ') + chalk.dim('(meets quality threshold)');
184
+ }
185
+ else if (validation.score >= 50) {
186
+ return chalk.yellow('Fair ') + chalk.dim('(could use more context)');
187
+ }
188
+ else {
189
+ return chalk.red('Needs improvement ') + chalk.dim('(add WHAT+WHY+HOW)');
190
+ }
191
+ }
192
+ /**
193
+ * Extract WHAT/WHY/HOW breakdown from description
194
+ * Returns formatted breakdown string if patterns detected
195
+ */
196
+ export function getQualityBreakdown(description) {
197
+ const lines = [];
198
+ // WHAT detection - action taken
199
+ const whatMatch = description.match(/\b(fixed|implemented|added|created|chose|discovered|optimized|improved|refactored|updated|built|developed)\s+([^.!?]+)/i);
200
+ if (whatMatch) {
201
+ lines.push(`WHAT: "${whatMatch[0].trim()}"`);
202
+ }
203
+ // WHY detection - root cause or reason
204
+ const whyPatterns = [
205
+ /root cause:\s*([^.!?]+)/i,
206
+ /because\s+([^.!?]+)/i,
207
+ /caused by\s+([^.!?]+)/i,
208
+ /problem:\s*([^.!?]+)/i,
209
+ ];
210
+ for (const pattern of whyPatterns) {
211
+ const match = description.match(pattern);
212
+ if (match) {
213
+ lines.push(`WHY: "${match[0].trim()}"`);
214
+ break;
215
+ }
216
+ }
217
+ // HOW detection - solution or approach
218
+ const howPatterns = [
219
+ /solution:\s*([^.!?]+)/i,
220
+ /implemented\s+([^.!?]+)/i,
221
+ /by\s+(adding|removing|changing|using)\s+([^.!?]+)/i,
222
+ ];
223
+ for (const pattern of howPatterns) {
224
+ const match = description.match(pattern);
225
+ if (match) {
226
+ lines.push(`HOW: "${match[0].trim()}"`);
227
+ break;
228
+ }
229
+ }
230
+ // IMPACT detection - metrics or results
231
+ const impactPatterns = [
232
+ /(\d+%|\d+x|\d+\s*(ms|s|sec|tokens?))\s*[→>-]+\s*(\d+%|\d+x|\d+\s*(ms|s|sec|tokens?))/i,
233
+ /from\s+(\d+\s*(ms|s|sec|seconds?|minutes?))\s+to\s+(\d+\s*(ms|s|sec|seconds?|minutes?))/i,
234
+ ];
235
+ for (const pattern of impactPatterns) {
236
+ const match = description.match(pattern);
237
+ if (match) {
238
+ lines.push(`IMPACT: "${match[0].trim()}"`);
239
+ break;
240
+ }
241
+ }
242
+ return lines.length >= 2 ? lines.join('\n - ') : null;
243
+ }
244
+ export function formatFeedback(options) {
245
+ const lines = [];
246
+ // Header - success message
247
+ const autoLabel = options.autoDetected?.category || options.autoDetected?.impact
248
+ ? chalk.dim(' (auto-detected)')
249
+ : '';
250
+ lines.push(chalk.green(`\n✓ Event logged: ${options.category} (${options.impact} impact)`) + autoLabel);
251
+ // Quality analysis (if provided)
252
+ if (options.quality) {
253
+ lines.push('');
254
+ lines.push(chalk.cyan('Quality: ') + getQualityDescription(options.quality));
255
+ }
256
+ // Auto-detection details (transparency)
257
+ if (options.autoDetected?.category || options.autoDetected?.impact) {
258
+ const detected = [];
259
+ if (options.autoDetected.category)
260
+ detected.push(`category=${options.category}`);
261
+ if (options.autoDetected.impact)
262
+ detected.push(`impact=${options.impact}`);
263
+ lines.push(chalk.dim(` Auto-detected: ${detected.join(', ')}`));
264
+ }
265
+ // Files included
266
+ if (options.files && options.files.length > 0) {
267
+ lines.push('');
268
+ lines.push(chalk.cyan('Files: ') + chalk.dim(`${options.files.length} auto-included`));
269
+ for (const file of options.files.slice(0, 3)) {
270
+ lines.push(chalk.dim(` - ${file}`));
271
+ }
272
+ if (options.files.length > 3) {
273
+ lines.push(chalk.dim(` ... and ${options.files.length - 3} more`));
274
+ }
275
+ }
276
+ // References detected
277
+ if (options.references && options.references.length > 0) {
278
+ lines.push('');
279
+ lines.push(chalk.cyan('References: ') + chalk.dim(`${options.references.length} detected`));
280
+ for (const ref of options.references.slice(0, 3)) {
281
+ lines.push(chalk.dim(` - ${ref.rawText}`));
282
+ }
283
+ }
284
+ // Context module creation
285
+ if (options.moduleCreated) {
286
+ lines.push('');
287
+ lines.push(chalk.green('Context module: ') + chalk.dim('Created (high-impact pattern)'));
288
+ }
289
+ // Quality coaching (if warnings present)
290
+ if (options.quality && options.quality.warnings.length > 0) {
291
+ lines.push('');
292
+ lines.push(chalk.yellow('💡 Quality Tips:'));
293
+ for (const warning of options.quality.warnings) {
294
+ lines.push(chalk.dim(` ${warning}`));
295
+ }
296
+ lines.push(chalk.dim('\n Next entry: Include WHAT+WHY+HOW for richer context'));
297
+ lines.push(chalk.dim(' Example: "Fixed X. Root cause: Y. Solution: Z. Impact: A→B"'));
298
+ }
299
+ lines.push(''); // Blank line for spacing
300
+ return lines.join('\n');
301
+ }
302
+ /**
303
+ * Analyze entry quality and return scoring
304
+ * Wrapper around validateEntry for consistency
305
+ */
306
+ export function analyzeQuality(entry) {
307
+ const validation = validateEntry(entry);
308
+ const score = validation.warnings.length === 0 ? 100 : Math.max(50, 100 - validation.warnings.length * 20);
309
+ return {
310
+ score,
311
+ warnings: validation.warnings,
312
+ };
313
+ }
314
+ //# sourceMappingURL=command-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/utils/command-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-11-21
5
+ * @tags: [monitoring, health-check, graph, reliability, task-013]
6
+ * @related: [../commands/graph/api-client.ts, event-logger.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: []
10
+ */
11
+ /**
12
+ * Graph Health Monitor (TASK-013)
13
+ *
14
+ * Tracks graph operation metrics for reliability monitoring.
15
+ * Provides simple in-memory metrics for:
16
+ * - Event creation success/failure rates
17
+ * - Request latencies
18
+ * - Retry counts
19
+ *
20
+ * Future: Export to external monitoring (Datadog, New Relic, etc.)
21
+ */
22
+ export interface GraphMetrics {
23
+ totalRequests: number;
24
+ successfulRequests: number;
25
+ failedRequests: number;
26
+ retryCount: number;
27
+ totalLatencyMs: number;
28
+ lastError?: {
29
+ timestamp: Date;
30
+ message: string;
31
+ operation: string;
32
+ };
33
+ }
34
+ declare class GraphHealthMonitor {
35
+ private metrics;
36
+ /**
37
+ * Record a successful graph operation
38
+ */
39
+ recordSuccess(latencyMs: number): void;
40
+ /**
41
+ * Record a failed graph operation
42
+ */
43
+ recordFailure(operation: string, errorMessage: string): void;
44
+ /**
45
+ * Record a retry attempt
46
+ */
47
+ recordRetry(): void;
48
+ /**
49
+ * Get current metrics
50
+ */
51
+ getMetrics(): GraphMetrics;
52
+ /**
53
+ * Get success rate percentage
54
+ */
55
+ getSuccessRate(): number;
56
+ /**
57
+ * Get average latency
58
+ */
59
+ getAverageLatency(): number;
60
+ /**
61
+ * Check if graph health is good (target: 99.9% uptime)
62
+ */
63
+ isHealthy(): boolean;
64
+ /**
65
+ * Get health status summary
66
+ */
67
+ getHealthSummary(): string;
68
+ /**
69
+ * Reset metrics (for testing)
70
+ */
71
+ reset(): void;
72
+ }
73
+ export declare const graphHealthMonitor: GraphHealthMonitor;
74
+ export {};
75
+ //# sourceMappingURL=graph-health-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-health-monitor.d.ts","sourceRoot":"","sources":["../../src/utils/graph-health-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,IAAI,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,OAAO,CAMb;IAEF;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMtC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAU5D;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,UAAU,IAAI,YAAY;IAI1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAKxB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAK3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAmB1B;;OAEG;IACH,KAAK,IAAI,IAAI;CASd;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-11-21
5
+ * @tags: [monitoring, health-check, graph, reliability, task-013]
6
+ * @related: [../commands/graph/api-client.ts, event-logger.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: []
10
+ */
11
+ class GraphHealthMonitor {
12
+ metrics = {
13
+ totalRequests: 0,
14
+ successfulRequests: 0,
15
+ failedRequests: 0,
16
+ retryCount: 0,
17
+ totalLatencyMs: 0,
18
+ };
19
+ /**
20
+ * Record a successful graph operation
21
+ */
22
+ recordSuccess(latencyMs) {
23
+ this.metrics.totalRequests++;
24
+ this.metrics.successfulRequests++;
25
+ this.metrics.totalLatencyMs += latencyMs;
26
+ }
27
+ /**
28
+ * Record a failed graph operation
29
+ */
30
+ recordFailure(operation, errorMessage) {
31
+ this.metrics.totalRequests++;
32
+ this.metrics.failedRequests++;
33
+ this.metrics.lastError = {
34
+ timestamp: new Date(),
35
+ message: errorMessage,
36
+ operation,
37
+ };
38
+ }
39
+ /**
40
+ * Record a retry attempt
41
+ */
42
+ recordRetry() {
43
+ this.metrics.retryCount++;
44
+ }
45
+ /**
46
+ * Get current metrics
47
+ */
48
+ getMetrics() {
49
+ return { ...this.metrics };
50
+ }
51
+ /**
52
+ * Get success rate percentage
53
+ */
54
+ getSuccessRate() {
55
+ if (this.metrics.totalRequests === 0)
56
+ return 100;
57
+ return (this.metrics.successfulRequests / this.metrics.totalRequests) * 100;
58
+ }
59
+ /**
60
+ * Get average latency
61
+ */
62
+ getAverageLatency() {
63
+ if (this.metrics.successfulRequests === 0)
64
+ return 0;
65
+ return this.metrics.totalLatencyMs / this.metrics.successfulRequests;
66
+ }
67
+ /**
68
+ * Check if graph health is good (target: 99.9% uptime)
69
+ */
70
+ isHealthy() {
71
+ return this.getSuccessRate() >= 99.9;
72
+ }
73
+ /**
74
+ * Get health status summary
75
+ */
76
+ getHealthSummary() {
77
+ const successRate = this.getSuccessRate();
78
+ const avgLatency = this.getAverageLatency();
79
+ const health = this.isHealthy() ? '✅ Healthy' : '⚠️ Degraded';
80
+ return `
81
+ Graph Health: ${health}
82
+ ──────────────────────────────────────
83
+ Total Requests: ${this.metrics.totalRequests}
84
+ Successful: ${this.metrics.successfulRequests} (${successRate.toFixed(2)}%)
85
+ Failed: ${this.metrics.failedRequests}
86
+ Retries: ${this.metrics.retryCount}
87
+ Avg Latency: ${avgLatency.toFixed(0)}ms
88
+ ──────────────────────────────────────
89
+ Target: 99.9% success rate
90
+ Status: ${successRate >= 99.9 ? '✅ Meeting target' : '⚠️ Below target'}
91
+ `;
92
+ }
93
+ /**
94
+ * Reset metrics (for testing)
95
+ */
96
+ reset() {
97
+ this.metrics = {
98
+ totalRequests: 0,
99
+ successfulRequests: 0,
100
+ failedRequests: 0,
101
+ retryCount: 0,
102
+ totalLatencyMs: 0,
103
+ };
104
+ }
105
+ }
106
+ // Singleton instance
107
+ export const graphHealthMonitor = new GraphHealthMonitor();
108
+ //# sourceMappingURL=graph-health-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-health-monitor.js","sourceRoot":"","sources":["../../src/utils/graph-health-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2BH,MAAM,kBAAkB;IACd,OAAO,GAAiB;QAC9B,aAAa,EAAE,CAAC;QAChB,kBAAkB,EAAE,CAAC;QACrB,cAAc,EAAE,CAAC;QACjB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,SAAiB,EAAE,YAAoB;QACnD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,OAAO,EAAE,YAAY;YACrB,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;QAE/D,OAAO;gBACK,MAAM;;qBAED,IAAI,CAAC,OAAO,CAAC,aAAa;qBAC1B,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;qBAC1D,IAAI,CAAC,OAAO,CAAC,cAAc;qBAC3B,IAAI,CAAC,OAAO,CAAC,UAAU;qBACvB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;;;qBAGrB,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;CACjF,CAAC;IACA,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG;YACb,aAAa,EAAE,CAAC;YAChB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
@@ -106,6 +106,12 @@ export declare class SessionSynthesizer {
106
106
  private static assessFlowStateFromEvents;
107
107
  /**
108
108
  * Generate resume point from events (static helper)
109
+ *
110
+ * TASK-P3: Removed suggestedCommand to prevent stale/conflicting commands
111
+ * Priority logic moved to start-reflection.ts display layer
112
+ *
113
+ * FIX: Events arrive from API in DESC order (newest first).
114
+ * Filter test events and pick first meaningful event for resume point.
109
115
  */
110
116
  private static generateResumePointFromEvents;
111
117
  /**
@@ -154,6 +160,9 @@ export declare class SessionSynthesizer {
154
160
  private assessFlowState;
155
161
  /**
156
162
  * Generate resume point from timeline and work context
163
+ *
164
+ * TASK-P3: Removed suggestedCommand to prevent stale/conflicting commands
165
+ * Priority logic moved to start-reflection.ts display layer
157
166
  */
158
167
  private generateResumePoint;
159
168
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"synthesis.d.ts","sourceRoot":"","sources":["../../src/utils/synthesis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synthesis.d.ts","sourceRoot":"","sources":["../../src/utils/synthesis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAqB,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,WAAW,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAMnD;;;;;;;;;OASG;WACU,oBAAoB,CAC/B,YAAY,EAAE,GAAG,EAAE,8CAA8C;IACjE,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC;IA8D3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgCnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAgDxC;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAuD5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC;;OAEG;mBACkB,oBAAoB;IAmBzC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAuB5C;;OAEG;YACW,aAAa;IA+D3B;;OAEG;YACW,UAAU;IAgDxB;;OAEG;YACW,SAAS;IAyCvB;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;YACW,iBAAiB;IA+B/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IA8DvB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA8C3B;;OAEG;YACW,aAAa;IAuB3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAclC;;OAEG;IACH,OAAO,CAAC,8BAA8B;CAUvC"}