midas-mcp 4.0.0 → 5.0.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 (66) hide show
  1. package/dist/analyzer.d.ts.map +1 -1
  2. package/dist/analyzer.js +70 -22
  3. package/dist/analyzer.js.map +1 -1
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +185 -2
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +6 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +38 -0
  11. package/dist/config.js.map +1 -1
  12. package/dist/docs/WHY.md +168 -0
  13. package/dist/docs/examples/brainlift-example.md +87 -0
  14. package/dist/docs/examples/gameplan-example.md +230 -0
  15. package/dist/docs/examples/prd-example.md +170 -0
  16. package/dist/server.d.ts.map +1 -1
  17. package/dist/server.js +32 -2
  18. package/dist/server.js.map +1 -1
  19. package/dist/state/phase.d.ts +32 -0
  20. package/dist/state/phase.d.ts.map +1 -1
  21. package/dist/state/phase.js +25 -21
  22. package/dist/state/phase.js.map +1 -1
  23. package/dist/tools/analyze.d.ts +5 -0
  24. package/dist/tools/analyze.d.ts.map +1 -1
  25. package/dist/tools/analyze.js +21 -0
  26. package/dist/tools/analyze.js.map +1 -1
  27. package/dist/tools/cleanup.d.ts +53 -0
  28. package/dist/tools/cleanup.d.ts.map +1 -0
  29. package/dist/tools/cleanup.js +170 -0
  30. package/dist/tools/cleanup.js.map +1 -0
  31. package/dist/tools/examples.d.ts +30 -0
  32. package/dist/tools/examples.d.ts.map +1 -0
  33. package/dist/tools/examples.js +65 -0
  34. package/dist/tools/examples.js.map +1 -0
  35. package/dist/tools/hotfix.d.ts +69 -0
  36. package/dist/tools/hotfix.d.ts.map +1 -0
  37. package/dist/tools/hotfix.js +174 -0
  38. package/dist/tools/hotfix.js.map +1 -0
  39. package/dist/tools/index.d.ts +6 -1
  40. package/dist/tools/index.d.ts.map +1 -1
  41. package/dist/tools/index.js +11 -1
  42. package/dist/tools/index.js.map +1 -1
  43. package/dist/tools/scope.d.ts +50 -0
  44. package/dist/tools/scope.d.ts.map +1 -0
  45. package/dist/tools/scope.js +277 -0
  46. package/dist/tools/scope.js.map +1 -0
  47. package/dist/tools/validate-docs.d.ts +65 -0
  48. package/dist/tools/validate-docs.d.ts.map +1 -0
  49. package/dist/tools/validate-docs.js +196 -0
  50. package/dist/tools/validate-docs.js.map +1 -0
  51. package/dist/tools/verify.d.ts +22 -0
  52. package/dist/tools/verify.d.ts.map +1 -1
  53. package/dist/tools/verify.js +65 -1
  54. package/dist/tools/verify.js.map +1 -1
  55. package/dist/tracker.d.ts +36 -0
  56. package/dist/tracker.d.ts.map +1 -1
  57. package/dist/tracker.js +134 -0
  58. package/dist/tracker.js.map +1 -1
  59. package/dist/tui.d.ts.map +1 -1
  60. package/dist/tui.js +165 -40
  61. package/dist/tui.js.map +1 -1
  62. package/docs/WHY.md +168 -0
  63. package/docs/examples/brainlift-example.md +87 -0
  64. package/docs/examples/gameplan-example.md +230 -0
  65. package/docs/examples/prd-example.md +170 -0
  66. package/package.json +1 -1
@@ -0,0 +1,196 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { z } from 'zod';
4
+ import { sanitizePath } from '../security.js';
5
+ // Required sections for each document type
6
+ const BRAINLIFT_SECTIONS = {
7
+ required: [
8
+ { pattern: /what.*building|building|problem/i, name: 'Problem/What you\'re building' },
9
+ { pattern: /who.*for|target|user|audience/i, name: 'Target audience' },
10
+ { pattern: /know.*ai|edge|context|domain/i, name: 'Your unique context/edge' },
11
+ ],
12
+ recommended: [
13
+ { pattern: /constraint|limitation|requirement/i, name: 'Constraints' },
14
+ { pattern: /unknown|research|question/i, name: 'Unknowns to research' },
15
+ { pattern: /prior.*art|existing|alternative/i, name: 'Prior art/alternatives' },
16
+ { pattern: /decision|choice|chose/i, name: 'Key decisions' },
17
+ ],
18
+ };
19
+ const PRD_SECTIONS = {
20
+ required: [
21
+ { pattern: /goal|objective|purpose/i, name: 'Goals/Objectives' },
22
+ { pattern: /non-goal|out.*scope|won't|will not/i, name: 'Non-goals/Out of scope' },
23
+ { pattern: /user.*stor|requirement|feature/i, name: 'User stories/Requirements' },
24
+ ],
25
+ recommended: [
26
+ { pattern: /success.*metric|kpi|measure/i, name: 'Success metrics' },
27
+ { pattern: /acceptance.*criteria|done.*when/i, name: 'Acceptance criteria' },
28
+ { pattern: /milestone|phase|timeline/i, name: 'Milestones' },
29
+ { pattern: /risk|concern|blocke/i, name: 'Risks' },
30
+ ],
31
+ };
32
+ const GAMEPLAN_SECTIONS = {
33
+ required: [
34
+ { pattern: /tech.*stack|technolog|framework|language/i, name: 'Tech stack' },
35
+ { pattern: /task|step|phase|order/i, name: 'Ordered tasks' },
36
+ ],
37
+ recommended: [
38
+ { pattern: /depend|prerequisite|require/i, name: 'Dependencies' },
39
+ { pattern: /estimate|time|duration|day|week/i, name: 'Time estimates' },
40
+ { pattern: /risk|mitigation|concern/i, name: 'Risks & mitigations' },
41
+ { pattern: /structure|folder|architect/i, name: 'Project structure' },
42
+ ],
43
+ };
44
+ function validateDocument(content, sections) {
45
+ const missing = [];
46
+ const warnings = [];
47
+ const suggestions = [];
48
+ // Check required sections
49
+ for (const section of sections.required) {
50
+ if (!section.pattern.test(content)) {
51
+ missing.push(section.name);
52
+ }
53
+ }
54
+ // Check recommended sections
55
+ for (const section of sections.recommended) {
56
+ if (!section.pattern.test(content)) {
57
+ warnings.push(`Consider adding: ${section.name}`);
58
+ }
59
+ }
60
+ // Check document length (too short = probably incomplete)
61
+ const wordCount = content.split(/\s+/).length;
62
+ if (wordCount < 100) {
63
+ suggestions.push('Document seems short. Consider adding more detail.');
64
+ }
65
+ else if (wordCount < 300) {
66
+ suggestions.push('Document could be more detailed.');
67
+ }
68
+ // Calculate score
69
+ const requiredScore = ((sections.required.length - missing.length) / sections.required.length) * 70;
70
+ const recommendedScore = ((sections.recommended.length - warnings.length) / sections.recommended.length) * 30;
71
+ const score = Math.round(requiredScore + recommendedScore);
72
+ return {
73
+ valid: missing.length === 0,
74
+ score,
75
+ missing,
76
+ warnings,
77
+ suggestions,
78
+ };
79
+ }
80
+ // ============================================================================
81
+ // Brainlift Validation
82
+ // ============================================================================
83
+ export const validateBrainliftSchema = z.object({
84
+ projectPath: z.string().optional().describe('Path to project root'),
85
+ });
86
+ export function validateBrainlift(input) {
87
+ const projectPath = sanitizePath(input.projectPath);
88
+ const brainliftPath = join(projectPath, 'docs', 'brainlift.md');
89
+ if (!existsSync(brainliftPath)) {
90
+ return {
91
+ exists: false,
92
+ valid: false,
93
+ score: 0,
94
+ missing: ['Brainlift document does not exist'],
95
+ warnings: [],
96
+ suggestions: ['Create docs/brainlift.md to document your project context'],
97
+ };
98
+ }
99
+ const content = readFileSync(brainliftPath, 'utf-8');
100
+ const result = validateDocument(content, BRAINLIFT_SECTIONS);
101
+ return {
102
+ exists: true,
103
+ ...result,
104
+ };
105
+ }
106
+ // ============================================================================
107
+ // PRD Validation
108
+ // ============================================================================
109
+ export const validatePRDSchema = z.object({
110
+ projectPath: z.string().optional().describe('Path to project root'),
111
+ });
112
+ export function validatePRD(input) {
113
+ const projectPath = sanitizePath(input.projectPath);
114
+ const prdPath = join(projectPath, 'docs', 'prd.md');
115
+ if (!existsSync(prdPath)) {
116
+ return {
117
+ exists: false,
118
+ valid: false,
119
+ score: 0,
120
+ missing: ['PRD document does not exist'],
121
+ warnings: [],
122
+ suggestions: ['Create docs/prd.md to define requirements'],
123
+ };
124
+ }
125
+ const content = readFileSync(prdPath, 'utf-8');
126
+ const result = validateDocument(content, PRD_SECTIONS);
127
+ return {
128
+ exists: true,
129
+ ...result,
130
+ };
131
+ }
132
+ // ============================================================================
133
+ // Gameplan Validation
134
+ // ============================================================================
135
+ export const validateGameplanSchema = z.object({
136
+ projectPath: z.string().optional().describe('Path to project root'),
137
+ });
138
+ export function validateGameplan(input) {
139
+ const projectPath = sanitizePath(input.projectPath);
140
+ const gameplanPath = join(projectPath, 'docs', 'gameplan.md');
141
+ if (!existsSync(gameplanPath)) {
142
+ return {
143
+ exists: false,
144
+ valid: false,
145
+ score: 0,
146
+ missing: ['Gameplan document does not exist'],
147
+ warnings: [],
148
+ suggestions: ['Create docs/gameplan.md to plan implementation'],
149
+ };
150
+ }
151
+ const content = readFileSync(gameplanPath, 'utf-8');
152
+ const result = validateDocument(content, GAMEPLAN_SECTIONS);
153
+ return {
154
+ exists: true,
155
+ ...result,
156
+ };
157
+ }
158
+ // ============================================================================
159
+ // Validate All Planning Docs
160
+ // ============================================================================
161
+ export const validatePlanningDocsSchema = z.object({
162
+ projectPath: z.string().optional().describe('Path to project root'),
163
+ });
164
+ export function validatePlanningDocs(input) {
165
+ const projectPath = sanitizePath(input.projectPath);
166
+ const brainlift = validateBrainlift({ projectPath });
167
+ const prd = validatePRD({ projectPath });
168
+ const gameplan = validateGameplan({ projectPath });
169
+ // Calculate overall score (weighted: brainlift 40%, PRD 35%, gameplan 25%)
170
+ const overallScore = Math.round((brainlift.score * 0.4) + (prd.score * 0.35) + (gameplan.score * 0.25));
171
+ // Collect blockers
172
+ const blockers = [];
173
+ if (!brainlift.exists)
174
+ blockers.push('Missing brainlift.md');
175
+ else if (!brainlift.valid)
176
+ blockers.push(`Brainlift incomplete: ${brainlift.missing.join(', ')}`);
177
+ if (!prd.exists)
178
+ blockers.push('Missing prd.md');
179
+ else if (!prd.valid)
180
+ blockers.push(`PRD incomplete: ${prd.missing.join(', ')}`);
181
+ if (!gameplan.exists)
182
+ blockers.push('Missing gameplan.md');
183
+ else if (!gameplan.valid)
184
+ blockers.push(`Gameplan incomplete: ${gameplan.missing.join(', ')}`);
185
+ // Ready for BUILD if all docs exist and have required sections
186
+ const readyForBuild = brainlift.valid && prd.valid && gameplan.valid;
187
+ return {
188
+ brainlift,
189
+ prd,
190
+ gameplan,
191
+ overallScore,
192
+ readyForBuild,
193
+ blockers,
194
+ };
195
+ }
196
+ //# sourceMappingURL=validate-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-docs.js","sourceRoot":"","sources":["../../src/tools/validate-docs.ts"],"names":[],"mappings":"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"}
@@ -134,4 +134,26 @@ export declare const getStuckSchema: z.ZodObject<{
134
134
  }>;
135
135
  export type GetStuckInput = z.infer<typeof getStuckSchema>;
136
136
  export declare function getStuck(input: GetStuckInput): ErrorMemory[];
137
+ export declare const unstuckSchema: z.ZodObject<{
138
+ projectPath: z.ZodOptional<z.ZodString>;
139
+ action: z.ZodOptional<z.ZodEnum<["diagnose", "simplify", "pivot", "break"]>>;
140
+ }, "strip", z.ZodTypeAny, {
141
+ projectPath?: string | undefined;
142
+ action?: "diagnose" | "simplify" | "pivot" | "break" | undefined;
143
+ }, {
144
+ projectPath?: string | undefined;
145
+ action?: "diagnose" | "simplify" | "pivot" | "break" | undefined;
146
+ }>;
147
+ export type UnstuckInput = z.infer<typeof unstuckSchema>;
148
+ export interface UnstuckResult {
149
+ isStuck: boolean;
150
+ timeInPhase: string;
151
+ timeSinceProgress: string;
152
+ unresolvedErrors: number;
153
+ failingGates: string[];
154
+ action: string;
155
+ guidance: string;
156
+ suggestedPrompt: string;
157
+ }
158
+ export declare function unstuck(input: UnstuckInput): UnstuckResult;
137
159
  //# sourceMappingURL=verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AASvB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAKvB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA2DvD;AAMD,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAczE;AAMD,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE9F,eAAO,MAAM,aAAa;;;;;;;;;;;;EAIxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAGtD;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAIvE;AAED,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAIrE;AAMD,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAGpE;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAIrE;AAED,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,EAAE,CAG5D"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { runVerificationGates, getGatesStatus, maybeAutoAdvance, recordError, getSmartPromptSuggestion, markAnalysisComplete, } from '../tracker.js';
2
+ import { runVerificationGates, getGatesStatus, maybeAutoAdvance, recordError, getSmartPromptSuggestion, markAnalysisComplete, checkIfStuck, formatDuration, loadTracker, } from '../tracker.js';
3
3
  import { sanitizePath } from '../security.js';
4
4
  import { loadState } from '../state/phase.js';
5
5
  import { logEvent } from '../events.js';
@@ -148,4 +148,68 @@ export function getStuck(input) {
148
148
  const projectPath = sanitizePath(input.projectPath);
149
149
  return getStuckErrors(projectPath);
150
150
  }
151
+ // ============================================================================
152
+ // midas_unstuck - Intervention options when stuck
153
+ // ============================================================================
154
+ export const unstuckSchema = z.object({
155
+ projectPath: z.string().optional().describe('Path to project root'),
156
+ action: z.enum(['diagnose', 'simplify', 'pivot', 'break']).optional().describe('Action to take: diagnose (analyze what\'s blocking), simplify (cut scope), pivot (try different approach), break (take a break)'),
157
+ });
158
+ export function unstuck(input) {
159
+ const projectPath = sanitizePath(input.projectPath);
160
+ const action = input.action || 'diagnose';
161
+ const stuckInfo = checkIfStuck(projectPath);
162
+ const tracker = loadTracker(projectPath);
163
+ const gates = getGatesStatus(projectPath);
164
+ const isStuck = stuckInfo?.isStuck ?? false;
165
+ const timeInPhase = formatDuration(stuckInfo?.timeInPhase ?? 0);
166
+ const timeSinceProgress = formatDuration(stuckInfo?.timeSinceProgress ?? 0);
167
+ const unresolvedErrors = tracker.errorMemory?.filter((e) => !e.resolved).length ?? 0;
168
+ const failingGates = gates.failing;
169
+ // Generate guidance based on action
170
+ let guidance = '';
171
+ let suggestedPrompt = '';
172
+ switch (action) {
173
+ case 'diagnose':
174
+ guidance = 'Let\'s understand what\'s blocking you. Check the error memory and failing gates.';
175
+ if (failingGates.length > 0) {
176
+ suggestedPrompt = `Focus on fixing the failing ${failingGates[0]} gate first. Show me the specific error and let's work through it systematically.`;
177
+ }
178
+ else if (unresolvedErrors > 0) {
179
+ suggestedPrompt = `I've had ${unresolvedErrors} unresolved errors. Let's use the Tornado approach: Research + Logs + Tests to solve the most recent one.`;
180
+ }
181
+ else {
182
+ suggestedPrompt = 'I feel stuck but no specific errors. Let me describe what I\'m trying to do and what\'s not working...';
183
+ }
184
+ break;
185
+ case 'simplify':
186
+ guidance = 'Cut scope to the minimum viable feature. Ship something small that works.';
187
+ suggestedPrompt = 'Let\'s simplify. What\'s the absolute minimum version of this feature that would still be useful? Help me identify what I can defer to v2.';
188
+ break;
189
+ case 'pivot':
190
+ guidance = 'Maybe the current approach isn\'t working. Consider a completely different solution.';
191
+ suggestedPrompt = 'I\'ve been stuck on this approach. What are 3 completely different ways to solve this problem? Let\'s evaluate the tradeoffs.';
192
+ break;
193
+ case 'break':
194
+ guidance = 'Step away from the keyboard. Fresh eyes often see solutions immediately.';
195
+ suggestedPrompt = 'I\'m going to take a 15-minute break. Before I go, write a summary of where I am so I can pick up easily when I return.';
196
+ break;
197
+ }
198
+ // Log event
199
+ logEvent(projectPath, {
200
+ type: 'tool_called',
201
+ tool: 'midas_unstuck',
202
+ data: { action, isStuck },
203
+ });
204
+ return {
205
+ isStuck,
206
+ timeInPhase,
207
+ timeSinceProgress,
208
+ unresolvedErrors,
209
+ failingGates,
210
+ action,
211
+ guidance,
212
+ suggestedPrompt,
213
+ };
214
+ }
151
215
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
package/dist/tracker.d.ts CHANGED
@@ -81,6 +81,8 @@ export interface TrackerState {
81
81
  suggestionHistory: SuggestionHistory[];
82
82
  fileSnapshot: FileSnapshot[];
83
83
  lastAnalysis: number | null;
84
+ phaseEnteredAt: number | null;
85
+ lastProgressAt: number | null;
84
86
  }
85
87
  export declare function loadTracker(projectPath: string): TrackerState;
86
88
  export declare function saveTracker(projectPath: string, tracker: TrackerState): void;
@@ -101,6 +103,18 @@ export declare function clearTaskFocus(projectPath: string): void;
101
103
  export declare function recordSuggestion(projectPath: string, suggestion: string): void;
102
104
  export declare function recordSuggestionOutcome(projectPath: string, accepted: boolean, userPrompt?: string, rejectionReason?: string): void;
103
105
  export declare function getSuggestionAcceptanceRate(projectPath: string): number;
106
+ /**
107
+ * Get weekly summary of suggestion patterns
108
+ */
109
+ export interface WeeklySummary {
110
+ totalSuggestions: number;
111
+ accepted: number;
112
+ declined: number;
113
+ acceptanceRate: number;
114
+ topDeclineReasons: string[];
115
+ patternsToAvoid: string[];
116
+ }
117
+ export declare function getWeeklySummary(projectPath: string): WeeklySummary;
104
118
  export declare function takeFileSnapshot(projectPath: string): FileSnapshot[];
105
119
  export declare function detectFileChanges(projectPath: string): {
106
120
  changed: string[];
@@ -126,4 +140,26 @@ export declare function getGitActivity(projectPath: string): GitActivity | null;
126
140
  export declare function checkCompletionSignals(projectPath: string): TrackerState['completionSignals'];
127
141
  export declare function updateTracker(projectPath: string): TrackerState;
128
142
  export declare function getActivitySummary(projectPath: string): string;
143
+ /**
144
+ * Record that the user has entered a new phase/step
145
+ */
146
+ export declare function recordPhaseEntry(projectPath: string): void;
147
+ /**
148
+ * Record that meaningful progress was made (commit, test pass, etc.)
149
+ */
150
+ export declare function recordProgress(projectPath: string): void;
151
+ /**
152
+ * Check if the user appears to be stuck
153
+ * Returns stuck info if stuck, null otherwise
154
+ */
155
+ export declare function checkIfStuck(projectPath: string): {
156
+ isStuck: boolean;
157
+ timeInPhase: number;
158
+ timeSinceProgress: number;
159
+ suggestions: string[];
160
+ } | null;
161
+ /**
162
+ * Format time duration in human-readable form
163
+ */
164
+ export declare function formatDuration(ms: number): string;
129
165
  //# sourceMappingURL=tracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"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"}
package/dist/tracker.js CHANGED
@@ -64,6 +64,8 @@ function getDefaultTracker() {
64
64
  suggestionHistory: [],
65
65
  fileSnapshot: [],
66
66
  lastAnalysis: null,
67
+ phaseEnteredAt: null,
68
+ lastProgressAt: null,
67
69
  };
68
70
  }
69
71
  // ============================================================================
@@ -297,6 +299,62 @@ export function getSuggestionAcceptanceRate(projectPath) {
297
299
  const accepted = recent.filter(s => s.accepted).length;
298
300
  return Math.round((accepted / recent.length) * 100);
299
301
  }
302
+ export function getWeeklySummary(projectPath) {
303
+ const safePath = sanitizePath(projectPath);
304
+ const tracker = loadTracker(safePath);
305
+ // Get suggestions from last 7 days
306
+ const oneWeekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
307
+ const weekSuggestions = tracker.suggestionHistory.filter(s => s.timestamp > oneWeekAgo);
308
+ const accepted = weekSuggestions.filter(s => s.accepted).length;
309
+ const declined = weekSuggestions.filter(s => !s.accepted && s.rejectionReason).length;
310
+ // Count decline reasons
311
+ const reasonCounts = {};
312
+ for (const s of weekSuggestions) {
313
+ if (!s.accepted && s.rejectionReason) {
314
+ const reason = s.rejectionReason.toLowerCase();
315
+ // Categorize reasons
316
+ if (reason.includes('already') || reason.includes('exist')) {
317
+ reasonCounts['Already exists'] = (reasonCounts['Already exists'] || 0) + 1;
318
+ }
319
+ else if (reason.includes('wrong') || reason.includes('incorrect')) {
320
+ reasonCounts['Wrong approach'] = (reasonCounts['Wrong approach'] || 0) + 1;
321
+ }
322
+ else if (reason.includes('scope') || reason.includes('later')) {
323
+ reasonCounts['Out of scope'] = (reasonCounts['Out of scope'] || 0) + 1;
324
+ }
325
+ else if (reason.includes('irrelevant') || reason.includes('not needed')) {
326
+ reasonCounts['Not relevant'] = (reasonCounts['Not relevant'] || 0) + 1;
327
+ }
328
+ else {
329
+ reasonCounts['Other'] = (reasonCounts['Other'] || 0) + 1;
330
+ }
331
+ }
332
+ }
333
+ // Sort reasons by count
334
+ const topDeclineReasons = Object.entries(reasonCounts)
335
+ .sort((a, b) => b[1] - a[1])
336
+ .slice(0, 3)
337
+ .map(([reason, count]) => `${reason} (${count})`);
338
+ // Generate patterns to avoid
339
+ const patternsToAvoid = [];
340
+ if (reasonCounts['Already exists'] > 2) {
341
+ patternsToAvoid.push('Check for existing code before suggesting implementations');
342
+ }
343
+ if (reasonCounts['Out of scope'] > 2) {
344
+ patternsToAvoid.push('Focus on current phase tasks, not future features');
345
+ }
346
+ if (reasonCounts['Not relevant'] > 2) {
347
+ patternsToAvoid.push('Consider project type when suggesting steps');
348
+ }
349
+ return {
350
+ totalSuggestions: weekSuggestions.length,
351
+ accepted,
352
+ declined,
353
+ acceptanceRate: weekSuggestions.length > 0 ? Math.round((accepted / weekSuggestions.length) * 100) : 0,
354
+ topDeclineReasons,
355
+ patternsToAvoid,
356
+ };
357
+ }
300
358
  // ============================================================================
301
359
  // FILE CHANGE DETECTION
302
360
  // ============================================================================
@@ -809,4 +867,80 @@ export function getActivitySummary(projectPath) {
809
867
  }
810
868
  return lines.join(' | ') || 'No recent activity';
811
869
  }
870
+ // ============================================================================
871
+ // STUCK DETECTION
872
+ // ============================================================================
873
+ const STUCK_THRESHOLD_MS = 2 * 60 * 60 * 1000; // 2 hours
874
+ /**
875
+ * Record that the user has entered a new phase/step
876
+ */
877
+ export function recordPhaseEntry(projectPath) {
878
+ const tracker = loadTracker(projectPath);
879
+ tracker.phaseEnteredAt = Date.now();
880
+ tracker.lastProgressAt = Date.now();
881
+ saveTracker(projectPath, tracker);
882
+ }
883
+ /**
884
+ * Record that meaningful progress was made (commit, test pass, etc.)
885
+ */
886
+ export function recordProgress(projectPath) {
887
+ const tracker = loadTracker(projectPath);
888
+ tracker.lastProgressAt = Date.now();
889
+ saveTracker(projectPath, tracker);
890
+ }
891
+ /**
892
+ * Check if the user appears to be stuck
893
+ * Returns stuck info if stuck, null otherwise
894
+ */
895
+ export function checkIfStuck(projectPath) {
896
+ const tracker = loadTracker(projectPath);
897
+ const now = Date.now();
898
+ // Calculate time in phase
899
+ const phaseEnteredAt = tracker.phaseEnteredAt || now;
900
+ const timeInPhase = now - phaseEnteredAt;
901
+ // Calculate time since last progress
902
+ const lastProgressAt = tracker.lastProgressAt || phaseEnteredAt;
903
+ const timeSinceProgress = now - lastProgressAt;
904
+ // Not stuck if we've made progress recently
905
+ if (timeSinceProgress < STUCK_THRESHOLD_MS) {
906
+ return null;
907
+ }
908
+ // Check for repeated errors
909
+ const unresolvedErrors = tracker.errorMemory.filter(e => !e.resolved);
910
+ const repeatedErrors = unresolvedErrors.filter(e => e.fixAttempts.length >= 3);
911
+ // Generate suggestions based on context
912
+ const suggestions = [];
913
+ if (repeatedErrors.length > 0) {
914
+ suggestions.push('Use Tornado debugging: Research + Logs + Tests to systematically solve this error');
915
+ }
916
+ if (tracker.gates.testsPass === false) {
917
+ suggestions.push('Focus on fixing the failing tests before adding new features');
918
+ }
919
+ if (tracker.gates.compiles === false) {
920
+ suggestions.push('Get the build passing first - comment out broken code if needed');
921
+ }
922
+ // Generic suggestions
923
+ suggestions.push('Take a 15-minute break - fresh eyes help');
924
+ suggestions.push('Simplify: cut scope to minimum viable feature');
925
+ suggestions.push('Ask for help: describe the problem to someone else');
926
+ suggestions.push('Pivot: maybe there\'s a simpler approach you haven\'t considered');
927
+ return {
928
+ isStuck: true,
929
+ timeInPhase,
930
+ timeSinceProgress,
931
+ suggestions: suggestions.slice(0, 4), // Max 4 suggestions
932
+ };
933
+ }
934
+ /**
935
+ * Format time duration in human-readable form
936
+ */
937
+ export function formatDuration(ms) {
938
+ const minutes = Math.floor(ms / (1000 * 60));
939
+ const hours = Math.floor(minutes / 60);
940
+ const remainingMinutes = minutes % 60;
941
+ if (hours > 0) {
942
+ return `${hours}h ${remainingMinutes}m`;
943
+ }
944
+ return `${minutes}m`;
945
+ }
812
946
  //# sourceMappingURL=tracker.js.map