claude-mycelium 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/.agent-meta/_inhibitors.ndjson +1287 -0
  2. package/.agent-meta/_quarantine.json +45 -0
  3. package/.agent-meta/config.json +9 -0
  4. package/.agent-meta/tasks/_active.json +4 -0
  5. package/.agent-meta/tasks/task_0657b028-05a0-4b0c-b0b9-a4eae3d66cd9.json +168 -0
  6. package/.claude/memory.db +0 -0
  7. package/.claude/settings.local.json +4 -1
  8. package/README.md +85 -233
  9. package/SECURITY.md +145 -0
  10. package/dist/agent/task-worker.d.ts +11 -0
  11. package/dist/agent/task-worker.d.ts.map +1 -0
  12. package/dist/agent/task-worker.js +173 -0
  13. package/dist/agent/task-worker.js.map +1 -0
  14. package/dist/agent/worker.d.ts +8 -0
  15. package/dist/agent/worker.d.ts.map +1 -0
  16. package/dist/agent/worker.js +97 -0
  17. package/dist/agent/worker.js.map +1 -0
  18. package/dist/bin.d.ts +7 -0
  19. package/dist/bin.d.ts.map +1 -0
  20. package/dist/bin.js +11 -0
  21. package/dist/bin.js.map +1 -0
  22. package/dist/cli/cost.d.ts +10 -0
  23. package/dist/cli/cost.d.ts.map +1 -0
  24. package/dist/cli/cost.js +163 -0
  25. package/dist/cli/cost.js.map +1 -0
  26. package/dist/cli/gc.d.ts +10 -0
  27. package/dist/cli/gc.d.ts.map +1 -0
  28. package/dist/cli/gc.js +108 -0
  29. package/dist/cli/gc.js.map +1 -0
  30. package/dist/cli/gradients.d.ts +10 -0
  31. package/dist/cli/gradients.d.ts.map +1 -0
  32. package/dist/cli/gradients.js +70 -0
  33. package/dist/cli/gradients.js.map +1 -0
  34. package/dist/cli/grow.d.ts +17 -0
  35. package/dist/cli/grow.d.ts.map +1 -0
  36. package/dist/cli/grow.js +373 -0
  37. package/dist/cli/grow.js.map +1 -0
  38. package/dist/cli/index.d.ts +17 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +74 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/cli/init.d.ts +11 -0
  43. package/dist/cli/init.d.ts.map +1 -0
  44. package/dist/cli/init.js +97 -0
  45. package/dist/cli/init.js.map +1 -0
  46. package/dist/cli/status.d.ts +10 -0
  47. package/dist/cli/status.d.ts.map +1 -0
  48. package/dist/cli/status.js +191 -0
  49. package/dist/cli/status.js.map +1 -0
  50. package/dist/coordination/file-locks.d.ts +42 -0
  51. package/dist/coordination/file-locks.d.ts.map +1 -0
  52. package/dist/coordination/file-locks.js +269 -0
  53. package/dist/coordination/file-locks.js.map +1 -0
  54. package/dist/coordination/index.d.ts +4 -0
  55. package/dist/coordination/index.d.ts.map +1 -1
  56. package/dist/coordination/index.js +4 -0
  57. package/dist/coordination/index.js.map +1 -1
  58. package/dist/coordination/inhibitors.d.ts +84 -0
  59. package/dist/coordination/inhibitors.d.ts.map +1 -0
  60. package/dist/coordination/inhibitors.js +290 -0
  61. package/dist/coordination/inhibitors.js.map +1 -0
  62. package/dist/coordination/process-manager.d.ts +73 -0
  63. package/dist/coordination/process-manager.d.ts.map +1 -0
  64. package/dist/coordination/process-manager.js +144 -0
  65. package/dist/coordination/process-manager.js.map +1 -0
  66. package/dist/core/agent-executor.d.ts +4 -1
  67. package/dist/core/agent-executor.d.ts.map +1 -1
  68. package/dist/core/agent-executor.js +38 -12
  69. package/dist/core/agent-executor.js.map +1 -1
  70. package/dist/core/change-applier.d.ts +29 -5
  71. package/dist/core/change-applier.d.ts.map +1 -1
  72. package/dist/core/change-applier.js +254 -24
  73. package/dist/core/change-applier.js.map +1 -1
  74. package/dist/core/signals/churn.d.ts.map +1 -1
  75. package/dist/core/signals/churn.js +6 -4
  76. package/dist/core/signals/churn.js.map +1 -1
  77. package/dist/core/signals/debt.d.ts.map +1 -1
  78. package/dist/core/signals/debt.js +4 -3
  79. package/dist/core/signals/debt.js.map +1 -1
  80. package/dist/cost/cost-tracker.d.ts.map +1 -1
  81. package/dist/cost/cost-tracker.js +2 -0
  82. package/dist/cost/cost-tracker.js.map +1 -1
  83. package/dist/gc/index.d.ts +17 -0
  84. package/dist/gc/index.d.ts.map +1 -0
  85. package/dist/gc/index.js +17 -0
  86. package/dist/gc/index.js.map +1 -0
  87. package/dist/gc/runner.d.ts +39 -0
  88. package/dist/gc/runner.d.ts.map +1 -0
  89. package/dist/gc/runner.js +277 -0
  90. package/dist/gc/runner.js.map +1 -0
  91. package/dist/gc/trace-compactor.d.ts +31 -0
  92. package/dist/gc/trace-compactor.d.ts.map +1 -0
  93. package/dist/gc/trace-compactor.js +162 -0
  94. package/dist/gc/trace-compactor.js.map +1 -0
  95. package/dist/index.d.ts +5 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +6 -1
  98. package/dist/index.js.map +1 -1
  99. package/dist/prompts/index.d.ts +2 -1
  100. package/dist/prompts/index.d.ts.map +1 -1
  101. package/dist/prompts/index.js.map +1 -1
  102. package/dist/quarantine/explorer.d.ts +65 -0
  103. package/dist/quarantine/explorer.d.ts.map +1 -0
  104. package/dist/quarantine/explorer.js +175 -0
  105. package/dist/quarantine/explorer.js.map +1 -0
  106. package/dist/quarantine/index.d.ts +7 -0
  107. package/dist/quarantine/index.d.ts.map +1 -0
  108. package/dist/quarantine/index.js +7 -0
  109. package/dist/quarantine/index.js.map +1 -0
  110. package/dist/quarantine/manager.d.ts +75 -0
  111. package/dist/quarantine/manager.d.ts.map +1 -0
  112. package/dist/quarantine/manager.js +275 -0
  113. package/dist/quarantine/manager.js.map +1 -0
  114. package/dist/task/acceptance.d.ts +29 -0
  115. package/dist/task/acceptance.d.ts.map +1 -0
  116. package/dist/task/acceptance.js +228 -0
  117. package/dist/task/acceptance.js.map +1 -0
  118. package/dist/task/agent-coordinator.d.ts +40 -0
  119. package/dist/task/agent-coordinator.d.ts.map +1 -0
  120. package/dist/task/agent-coordinator.js +168 -0
  121. package/dist/task/agent-coordinator.js.map +1 -0
  122. package/dist/task/executor.d.ts +37 -0
  123. package/dist/task/executor.d.ts.map +1 -0
  124. package/dist/task/executor.js +462 -0
  125. package/dist/task/executor.js.map +1 -0
  126. package/dist/task/index.d.ts +12 -0
  127. package/dist/task/index.d.ts.map +1 -0
  128. package/dist/task/index.js +12 -0
  129. package/dist/task/index.js.map +1 -0
  130. package/dist/task/planner.d.ts +21 -0
  131. package/dist/task/planner.d.ts.map +1 -0
  132. package/dist/task/planner.js +253 -0
  133. package/dist/task/planner.js.map +1 -0
  134. package/dist/task/storage.d.ts +46 -0
  135. package/dist/task/storage.d.ts.map +1 -0
  136. package/dist/task/storage.js +266 -0
  137. package/dist/task/storage.js.map +1 -0
  138. package/dist/trace/trace-event.d.ts +2 -18
  139. package/dist/trace/trace-event.d.ts.map +1 -1
  140. package/dist/trace/trace-event.js +6 -6
  141. package/dist/trace/trace-event.js.map +1 -1
  142. package/dist/utils/file-utils.d.ts.map +1 -1
  143. package/dist/utils/file-utils.js +54 -15
  144. package/dist/utils/file-utils.js.map +1 -1
  145. package/docs/PHASE5_IMPLEMENTATION.md +237 -0
  146. package/docs/PHASES-3-7-COMPLETE.md +177 -0
  147. package/docs/PHASE_4_COMPLETE.md +135 -0
  148. package/docs/PHASE_7_DELIVERABLES.md +295 -0
  149. package/docs/PHASE_7_IMPLEMENTATION.md +306 -0
  150. package/docs/PHASE_7_SUMMARY.txt +195 -0
  151. package/docs/RELEASE-NOTES-v2.1.md +213 -0
  152. package/docs/ROADMAP.md +194 -107
  153. package/docs/SECURITY-AUDIT.md +387 -0
  154. package/docs/SNAPSHOT.md +59 -32
  155. package/docs/implementation/phase3-summary.md +220 -0
  156. package/package.json +27 -11
  157. package/src/agent/task-worker.ts +196 -0
  158. package/src/agent/worker.ts +111 -0
  159. package/src/bin.ts +13 -0
  160. package/src/cli/cost.ts +210 -0
  161. package/src/cli/gc.ts +138 -0
  162. package/src/cli/gradients.ts +97 -0
  163. package/src/cli/grow.ts +416 -0
  164. package/src/cli/index.ts +81 -0
  165. package/src/cli/init.ts +139 -0
  166. package/src/cli/status.ts +218 -0
  167. package/src/coordination/file-locks.ts +300 -0
  168. package/src/coordination/index.ts +4 -0
  169. package/src/coordination/inhibitors.ts +345 -0
  170. package/src/coordination/process-manager.ts +199 -0
  171. package/src/core/agent-executor.ts +37 -8
  172. package/src/core/signals/churn.ts +8 -5
  173. package/src/core/signals/debt.ts +4 -3
  174. package/src/cost/cost-tracker.ts +2 -0
  175. package/src/gc/index.ts +17 -0
  176. package/src/gc/runner.ts +314 -0
  177. package/src/gc/trace-compactor.ts +187 -0
  178. package/src/index.ts +7 -1
  179. package/src/prompts/index.ts +2 -1
  180. package/src/quarantine/explorer.ts +234 -0
  181. package/src/quarantine/index.ts +7 -0
  182. package/src/quarantine/manager.ts +336 -0
  183. package/src/task/acceptance.ts +267 -0
  184. package/src/task/agent-coordinator.ts +220 -0
  185. package/src/task/executor.ts +543 -0
  186. package/src/task/index.ts +38 -0
  187. package/src/task/planner.ts +294 -0
  188. package/src/task/storage.ts +332 -0
  189. package/src/trace/trace-event.ts +7 -26
  190. package/src/utils/file-utils.ts +61 -15
  191. package/tests/cli/gc.test.ts +206 -0
  192. package/tests/cli/init.test.ts +181 -0
  193. package/tests/cli/status.test.ts +282 -0
  194. package/tests/coordination/file-locks.test.ts +196 -0
  195. package/tests/coordination/inhibitors.test.ts +459 -0
  196. package/tests/coordination/integration.test.ts +195 -0
  197. package/tests/coordination/process-manager.test.ts +165 -0
  198. package/tests/gc/trace-compactor.test.ts +245 -0
  199. package/tests/integration/phase-7.test.ts +145 -0
  200. package/tests/quarantine/explorer.test.ts +381 -0
  201. package/tests/quarantine/manager.test.ts +399 -0
  202. package/tests/security/command-injection.test.ts +88 -0
  203. package/tests/security/path-traversal.test.ts +103 -0
  204. package/tests/task/acceptance.test.ts +411 -0
  205. package/tests/task/executor.test.ts +421 -0
  206. package/tests/task/planner.test.ts +359 -0
  207. package/tests/trace/trace-event.test.ts +62 -20
  208. package/tsconfig.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/task/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Task System Module
3
+ * Phase 5: Task Planning & Execution
4
+ *
5
+ * Exports all task-related functionality for LLM-based task decomposition,
6
+ * execution tracking, and acceptance criteria validation.
7
+ */
8
+ export { planTask, analyzeDependencies, identifyRisks, } from './planner.js';
9
+ export { executeTask, executeStep, trackProgress, } from './executor.js';
10
+ export { validateAcceptance, checkFileExists, runTests, generateDefaultCriteria, canCompleteTask, } from './acceptance.js';
11
+ export { storeTask, loadTask, listTasks, listActiveTasks, deleteTask, updateTaskStatus, getTaskHistoryForFile, getTaskStatistics, } from './storage.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Task System Module
3
+ * Phase 5: Task Planning & Execution
4
+ *
5
+ * Exports all task-related functionality for LLM-based task decomposition,
6
+ * execution tracking, and acceptance criteria validation.
7
+ */
8
+ export { planTask, analyzeDependencies, identifyRisks, } from './planner.js';
9
+ export { executeTask, executeStep, trackProgress, } from './executor.js';
10
+ export { validateAcceptance, checkFileExists, runTests, generateDefaultCriteria, canCompleteTask, } from './acceptance.js';
11
+ export { storeTask, loadTask, listTasks, listActiveTasks, deleteTask, updateTaskStatus, getTaskHistoryForFile, getTaskStatistics, } from './storage.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Task Planning Implementation
3
+ * Per second-spec §12.1: Task Planning
4
+ *
5
+ * LLM-based task decomposition that generates a TaskPlan with steps,
6
+ * dependency analysis, and risk identification.
7
+ */
8
+ import { Task, TaskPlan, TaskStep } from '../types/index.js';
9
+ /**
10
+ * Plan a task by using LLM to decompose it into steps
11
+ */
12
+ export declare function planTask(task: Task): Promise<TaskPlan>;
13
+ /**
14
+ * Analyze dependencies between task steps
15
+ */
16
+ export declare function analyzeDependencies(steps: TaskStep[]): Map<number, number[]>;
17
+ /**
18
+ * Identify potential risks in the task plan
19
+ */
20
+ export declare function identifyRisks(plan: TaskPlan): string[];
21
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/task/planner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7D;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkC5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAc5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CA0BtD"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Task Planning Implementation
3
+ * Per second-spec §12.1: Task Planning
4
+ *
5
+ * LLM-based task decomposition that generates a TaskPlan with steps,
6
+ * dependency analysis, and risk identification.
7
+ */
8
+ import { callLLM } from '../llm/anthropic-client.js';
9
+ import { logDebug, logError } from '../utils/logger.js';
10
+ import fg from 'fast-glob';
11
+ /**
12
+ * Plan a task by using LLM to decompose it into steps
13
+ */
14
+ export async function planTask(task) {
15
+ logDebug('Planning task', { taskId: task.id, description: task.description });
16
+ try {
17
+ // Get existing files in target directory
18
+ const existingFiles = await getExistingFiles(task.target ?? 'src');
19
+ // Build prompts for LLM
20
+ const systemPrompt = buildPlanningSystemPrompt();
21
+ const userPrompt = buildPlanningUserPrompt(task, existingFiles);
22
+ // Call LLM to generate plan
23
+ const response = await callLLM({
24
+ prompt: userPrompt,
25
+ systemPrompt,
26
+ temperature: 0.3, // Lower temperature for more deterministic planning
27
+ maxTokens: 4000,
28
+ });
29
+ // Parse JSON plan from response
30
+ const plan = parseTaskPlanFromResponse(response.content);
31
+ logDebug('Task plan generated', {
32
+ taskId: task.id,
33
+ steps: plan.steps.length,
34
+ complexity: plan.estimated_complexity,
35
+ });
36
+ return plan;
37
+ }
38
+ catch (error) {
39
+ const errorObj = error instanceof Error ? error : new Error(String(error));
40
+ logError('Failed to plan task', errorObj, { taskId: task.id });
41
+ throw new Error(`Task planning failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
42
+ }
43
+ }
44
+ /**
45
+ * Analyze dependencies between task steps
46
+ */
47
+ export function analyzeDependencies(steps) {
48
+ const dependencies = new Map();
49
+ for (const step of steps) {
50
+ // Direct dependencies from the step definition
51
+ dependencies.set(step.order, [...step.depends_on]);
52
+ // Detect implicit file dependencies
53
+ const implicitDeps = detectImplicitDependencies(step, steps);
54
+ const allDeps = new Set([...step.depends_on, ...implicitDeps]);
55
+ dependencies.set(step.order, Array.from(allDeps));
56
+ }
57
+ return dependencies;
58
+ }
59
+ /**
60
+ * Identify potential risks in the task plan
61
+ */
62
+ export function identifyRisks(plan) {
63
+ const risks = [...plan.risks];
64
+ // Check for circular dependencies
65
+ if (hasCircularDependencies(plan.steps)) {
66
+ risks.push('Circular dependency detected in task steps');
67
+ }
68
+ // Check for steps with many dependencies
69
+ const stepsWithManyDeps = plan.steps.filter(s => s.depends_on.length > 3);
70
+ if (stepsWithManyDeps.length > 0) {
71
+ risks.push(`${stepsWithManyDeps.length} step(s) have complex dependencies (>3 deps)`);
72
+ }
73
+ // Check for create mode on existing file patterns
74
+ const createSteps = plan.steps.filter(s => s.mode === 'create');
75
+ if (createSteps.length > 5) {
76
+ risks.push(`Many new files (${createSteps.length}) - may need more validation`);
77
+ }
78
+ // Check for high complexity tasks
79
+ if (plan.estimated_complexity === 'large' && plan.steps.length > 10) {
80
+ risks.push('Large task with many steps - consider breaking down further');
81
+ }
82
+ return risks;
83
+ }
84
+ /**
85
+ * Get existing files in the target directory
86
+ */
87
+ async function getExistingFiles(target) {
88
+ try {
89
+ const pattern = `${target}/**/*.{ts,tsx,js,jsx}`;
90
+ const files = await fg(pattern, {
91
+ ignore: ['**/node_modules/**', '**/dist/**', '**/*.test.ts', '**/*.spec.ts'],
92
+ onlyFiles: true,
93
+ });
94
+ return files;
95
+ }
96
+ catch (error) {
97
+ const errorObj = error instanceof Error ? error : new Error(String(error));
98
+ logError('Failed to list existing files', errorObj, { target });
99
+ return [];
100
+ }
101
+ }
102
+ /**
103
+ * Build system prompt for task planning
104
+ */
105
+ function buildPlanningSystemPrompt() {
106
+ return `You are a task planning agent.
107
+
108
+ Given a task description, create a step-by-step plan to accomplish it.
109
+
110
+ Output your plan as JSON in this exact format:
111
+ {
112
+ "summary": "Brief description of approach",
113
+ "steps": [
114
+ {
115
+ "order": 1,
116
+ "description": "What to do",
117
+ "target_file": "path/to/file.ts",
118
+ "mode": "create|error_reducer|complexity_reducer|debt_payer|stabilizer",
119
+ "depends_on": []
120
+ }
121
+ ],
122
+ "estimated_complexity": "small|medium|large",
123
+ "risks": ["potential risk 1", "potential risk 2"]
124
+ }
125
+
126
+ Rules:
127
+ - Prefer small, incremental steps over large changes
128
+ - Each step should be independently testable
129
+ - New files must include basic tests
130
+ - Follow existing code patterns
131
+ - mode "create" is for new files only
132
+ - Use error_reducer for fixing bugs
133
+ - Use complexity_reducer for simplifying code
134
+ - Use debt_payer for fixing lint/type issues
135
+ - Use stabilizer for adding tests/docs`;
136
+ }
137
+ /**
138
+ * Build user prompt for task planning
139
+ */
140
+ function buildPlanningUserPrompt(task, existingFiles) {
141
+ const fileList = existingFiles.length > 50
142
+ ? `${existingFiles.slice(0, 50).join('\n')}\n... and ${existingFiles.length - 50} more`
143
+ : existingFiles.join('\n') || '(no files found)';
144
+ const criteriaList = task.acceptance_criteria.length > 0
145
+ ? task.acceptance_criteria.map(c => `- ${c.description}`).join('\n')
146
+ : '(none specified)';
147
+ return `## Task
148
+ ${task.description}
149
+
150
+ ## Target Directory
151
+ ${task.target ?? 'src/'}
152
+
153
+ ## Existing Files
154
+ ${fileList}
155
+
156
+ ## Acceptance Criteria
157
+ ${criteriaList}
158
+
159
+ Create a plan to accomplish this task.`;
160
+ }
161
+ /**
162
+ * Parse TaskPlan from LLM response
163
+ */
164
+ function parseTaskPlanFromResponse(content) {
165
+ // Try to extract JSON from response
166
+ const jsonMatch = content.match(/\{[\s\S]*\}/);
167
+ if (!jsonMatch) {
168
+ throw new Error('Failed to parse task plan from LLM response - no JSON found');
169
+ }
170
+ try {
171
+ const parsed = JSON.parse(jsonMatch[0]);
172
+ // Validate required fields
173
+ if (!parsed.summary || !Array.isArray(parsed.steps) || !parsed.estimated_complexity) {
174
+ throw new Error('Invalid task plan structure - missing required fields');
175
+ }
176
+ // Validate each step
177
+ for (const step of parsed.steps) {
178
+ if (typeof step.order !== 'number' ||
179
+ !step.description ||
180
+ !step.target_file ||
181
+ !step.mode) {
182
+ throw new Error('Invalid task step structure');
183
+ }
184
+ // Ensure depends_on is an array
185
+ step.depends_on = step.depends_on || [];
186
+ step.completed = false;
187
+ }
188
+ // Ensure risks is an array
189
+ parsed.risks = parsed.risks || [];
190
+ return parsed;
191
+ }
192
+ catch (error) {
193
+ throw new Error(`Failed to parse task plan JSON: ${error instanceof Error ? error.message : 'Unknown error'}`);
194
+ }
195
+ }
196
+ /**
197
+ * Detect implicit dependencies between steps based on file relationships
198
+ */
199
+ function detectImplicitDependencies(step, allSteps) {
200
+ const implicitDeps = [];
201
+ // If this step modifies a file, it depends on the step that creates it
202
+ if (step.mode !== 'create') {
203
+ const createStep = allSteps.find(s => s.mode === 'create' &&
204
+ s.target_file === step.target_file &&
205
+ s.order < step.order);
206
+ if (createStep && !step.depends_on.includes(createStep.order)) {
207
+ implicitDeps.push(createStep.order);
208
+ }
209
+ }
210
+ // If this step creates a test file, it depends on the implementation file step
211
+ if (step.mode === 'create' && step.target_file.includes('.test.')) {
212
+ const implPath = step.target_file.replace(/\.test\./, '.');
213
+ const implStep = allSteps.find(s => s.target_file === implPath && s.order < step.order);
214
+ if (implStep && !step.depends_on.includes(implStep.order)) {
215
+ implicitDeps.push(implStep.order);
216
+ }
217
+ }
218
+ return implicitDeps;
219
+ }
220
+ /**
221
+ * Check if task steps have circular dependencies
222
+ */
223
+ function hasCircularDependencies(steps) {
224
+ const visited = new Set();
225
+ const recursionStack = new Set();
226
+ function hasCycle(stepOrder) {
227
+ if (recursionStack.has(stepOrder)) {
228
+ return true; // Found a cycle
229
+ }
230
+ if (visited.has(stepOrder)) {
231
+ return false; // Already checked this path
232
+ }
233
+ visited.add(stepOrder);
234
+ recursionStack.add(stepOrder);
235
+ const step = steps.find(s => s.order === stepOrder);
236
+ if (step) {
237
+ for (const dep of step.depends_on) {
238
+ if (hasCycle(dep)) {
239
+ return true;
240
+ }
241
+ }
242
+ }
243
+ recursionStack.delete(stepOrder);
244
+ return false;
245
+ }
246
+ for (const step of steps) {
247
+ if (hasCycle(step.order)) {
248
+ return true;
249
+ }
250
+ }
251
+ return false;
252
+ }
253
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/task/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Task Storage Implementation
3
+ * Per ROADMAP §Phase 5 Week 6 Day 7: Task Storage
4
+ *
5
+ * Stores tasks in .agent-meta/tasks/ with one file per task,
6
+ * tracks status transitions, and links to trace IDs.
7
+ */
8
+ import { Task, TaskStatus } from '../types/index.js';
9
+ /**
10
+ * Store a task to disk
11
+ */
12
+ export declare function storeTask(task: Task): Promise<void>;
13
+ /**
14
+ * Load a task from disk
15
+ */
16
+ export declare function loadTask(taskId: string): Promise<Task | null>;
17
+ /**
18
+ * List all tasks, optionally filtered by status
19
+ */
20
+ export declare function listTasks(statusFilter?: TaskStatus): Promise<Task[]>;
21
+ /**
22
+ * List active tasks (from index for performance)
23
+ */
24
+ export declare function listActiveTasks(): Promise<Task[]>;
25
+ /**
26
+ * Delete a task from storage
27
+ */
28
+ export declare function deleteTask(taskId: string): Promise<void>;
29
+ /**
30
+ * Update task status and store
31
+ */
32
+ export declare function updateTaskStatus(taskId: string, newStatus: TaskStatus, error?: string): Promise<void>;
33
+ /**
34
+ * Get task history for a file (all tasks that touched it)
35
+ */
36
+ export declare function getTaskHistoryForFile(filePath: string): Promise<Task[]>;
37
+ /**
38
+ * Get task statistics
39
+ */
40
+ export declare function getTaskStatistics(): Promise<{
41
+ total: number;
42
+ byStatus: Record<TaskStatus, number>;
43
+ avgCompletionTime: number;
44
+ successRate: number;
45
+ }>;
46
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/task/storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAuBrD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BzD;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAiBnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAuC1E;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAkBvD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB9D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAyBf;AAiED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAQ7E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAyCD"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Task Storage Implementation
3
+ * Per ROADMAP §Phase 5 Week 6 Day 7: Task Storage
4
+ *
5
+ * Stores tasks in .agent-meta/tasks/ with one file per task,
6
+ * tracks status transitions, and links to trace IDs.
7
+ */
8
+ import { fileExists, readJsonFile, writeJsonFile, ensureDir, deleteFile, } from '../utils/file-utils.js';
9
+ import { logDebug, logError } from '../utils/logger.js';
10
+ import * as path from 'path';
11
+ import * as fs from 'fs';
12
+ const TASKS_DIR = '.agent-meta/tasks';
13
+ const ACTIVE_TASKS_FILE = path.join(TASKS_DIR, '_active.json');
14
+ /**
15
+ * Store a task to disk
16
+ */
17
+ export async function storeTask(task) {
18
+ try {
19
+ // Ensure tasks directory exists
20
+ ensureDir(TASKS_DIR);
21
+ // Write task to its own file
22
+ const taskFilePath = getTaskFilePath(task.id);
23
+ writeJsonFile(taskFilePath, task);
24
+ // Update active tasks index
25
+ if (task.status === 'pending' || task.status === 'planning' || task.status === 'in_progress' || task.status === 'validating') {
26
+ await addToActiveIndex(task.id);
27
+ }
28
+ else {
29
+ await removeFromActiveIndex(task.id);
30
+ }
31
+ logDebug('Task stored', {
32
+ taskId: task.id,
33
+ status: task.status,
34
+ filePath: taskFilePath,
35
+ });
36
+ }
37
+ catch (error) {
38
+ const errorObj = error instanceof Error ? error : new Error(String(error));
39
+ logError('Failed to store task', errorObj, { taskId: task.id });
40
+ throw new Error(`Task storage failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
41
+ }
42
+ }
43
+ /**
44
+ * Load a task from disk
45
+ */
46
+ export async function loadTask(taskId) {
47
+ try {
48
+ const taskFilePath = getTaskFilePath(taskId);
49
+ if (!fileExists(taskFilePath)) {
50
+ logDebug('Task file not found', { taskId, filePath: taskFilePath });
51
+ return null;
52
+ }
53
+ const task = readJsonFile(taskFilePath);
54
+ logDebug('Task loaded', { taskId, status: task.status });
55
+ return task;
56
+ }
57
+ catch (error) {
58
+ const errorObj = error instanceof Error ? error : new Error(String(error));
59
+ logError('Failed to load task', errorObj, { taskId });
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * List all tasks, optionally filtered by status
65
+ */
66
+ export async function listTasks(statusFilter) {
67
+ try {
68
+ ensureDir(TASKS_DIR);
69
+ // Get all task files
70
+ const files = fs.readdirSync(TASKS_DIR).filter(f => f.startsWith('task_') && f.endsWith('.json'));
71
+ const tasks = [];
72
+ for (const file of files) {
73
+ try {
74
+ const taskFilePath = path.join(TASKS_DIR, file);
75
+ const task = readJsonFile(taskFilePath);
76
+ // Apply status filter if provided
77
+ if (!statusFilter || task.status === statusFilter) {
78
+ tasks.push(task);
79
+ }
80
+ }
81
+ catch (error) {
82
+ const errorObj = error instanceof Error ? error : new Error(String(error));
83
+ logError('Failed to load task file', errorObj, { file });
84
+ // Continue with other files
85
+ }
86
+ }
87
+ // Sort by creation date (newest first)
88
+ tasks.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
89
+ logDebug('Tasks listed', {
90
+ total: tasks.length,
91
+ statusFilter,
92
+ });
93
+ return tasks;
94
+ }
95
+ catch (error) {
96
+ const errorObj = error instanceof Error ? error : new Error(String(error));
97
+ logError('Failed to list tasks', errorObj);
98
+ return [];
99
+ }
100
+ }
101
+ /**
102
+ * List active tasks (from index for performance)
103
+ */
104
+ export async function listActiveTasks() {
105
+ try {
106
+ const index = await getActiveIndex();
107
+ const tasks = [];
108
+ for (const taskId of index.tasks) {
109
+ const task = await loadTask(taskId);
110
+ if (task) {
111
+ tasks.push(task);
112
+ }
113
+ }
114
+ return tasks;
115
+ }
116
+ catch (error) {
117
+ const errorObj = error instanceof Error ? error : new Error(String(error));
118
+ logError('Failed to list active tasks', errorObj);
119
+ return [];
120
+ }
121
+ }
122
+ /**
123
+ * Delete a task from storage
124
+ */
125
+ export async function deleteTask(taskId) {
126
+ try {
127
+ const taskFilePath = getTaskFilePath(taskId);
128
+ if (fileExists(taskFilePath)) {
129
+ deleteFile(taskFilePath);
130
+ logDebug('Task deleted', { taskId });
131
+ }
132
+ // Remove from active index
133
+ await removeFromActiveIndex(taskId);
134
+ }
135
+ catch (error) {
136
+ const errorObj = error instanceof Error ? error : new Error(String(error));
137
+ logError('Failed to delete task', errorObj, { taskId });
138
+ throw new Error(`Task deletion failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
139
+ }
140
+ }
141
+ /**
142
+ * Update task status and store
143
+ */
144
+ export async function updateTaskStatus(taskId, newStatus, error) {
145
+ const task = await loadTask(taskId);
146
+ if (!task) {
147
+ throw new Error(`Task ${taskId} not found`);
148
+ }
149
+ const oldStatus = task.status;
150
+ task.status = newStatus;
151
+ if (error) {
152
+ task.error = error;
153
+ }
154
+ if (newStatus === 'completed' || newStatus === 'failed') {
155
+ task.completed_at = new Date().toISOString();
156
+ }
157
+ await storeTask(task);
158
+ logDebug('Task status updated', {
159
+ taskId,
160
+ oldStatus,
161
+ newStatus,
162
+ hasError: !!error,
163
+ });
164
+ }
165
+ /**
166
+ * Get task file path
167
+ */
168
+ function getTaskFilePath(taskId) {
169
+ return path.join(TASKS_DIR, `task_${taskId}.json`);
170
+ }
171
+ /**
172
+ * Get active tasks index
173
+ */
174
+ async function getActiveIndex() {
175
+ try {
176
+ if (fileExists(ACTIVE_TASKS_FILE)) {
177
+ return readJsonFile(ACTIVE_TASKS_FILE);
178
+ }
179
+ }
180
+ catch (error) {
181
+ const errorObj = error instanceof Error ? error : new Error(String(error));
182
+ logError('Failed to read active tasks index', errorObj);
183
+ }
184
+ // Return empty index if file doesn't exist or can't be read
185
+ return {
186
+ updated_at: new Date().toISOString(),
187
+ tasks: [],
188
+ };
189
+ }
190
+ /**
191
+ * Save active tasks index
192
+ */
193
+ async function saveActiveIndex(index) {
194
+ index.updated_at = new Date().toISOString();
195
+ writeJsonFile(ACTIVE_TASKS_FILE, index);
196
+ }
197
+ /**
198
+ * Add task to active index
199
+ */
200
+ async function addToActiveIndex(taskId) {
201
+ const index = await getActiveIndex();
202
+ if (!index.tasks.includes(taskId)) {
203
+ index.tasks.push(taskId);
204
+ await saveActiveIndex(index);
205
+ logDebug('Task added to active index', { taskId });
206
+ }
207
+ }
208
+ /**
209
+ * Remove task from active index
210
+ */
211
+ async function removeFromActiveIndex(taskId) {
212
+ const index = await getActiveIndex();
213
+ const initialLength = index.tasks.length;
214
+ index.tasks = index.tasks.filter(id => id !== taskId);
215
+ if (index.tasks.length < initialLength) {
216
+ await saveActiveIndex(index);
217
+ logDebug('Task removed from active index', { taskId });
218
+ }
219
+ }
220
+ /**
221
+ * Get task history for a file (all tasks that touched it)
222
+ */
223
+ export async function getTaskHistoryForFile(filePath) {
224
+ const allTasks = await listTasks();
225
+ return allTasks.filter(task => task.files_created.includes(filePath) ||
226
+ task.files_modified.includes(filePath));
227
+ }
228
+ /**
229
+ * Get task statistics
230
+ */
231
+ export async function getTaskStatistics() {
232
+ const allTasks = await listTasks();
233
+ const byStatus = {
234
+ pending: 0,
235
+ planning: 0,
236
+ in_progress: 0,
237
+ validating: 0,
238
+ completed: 0,
239
+ failed: 0,
240
+ blocked: 0,
241
+ };
242
+ let totalCompletionTime = 0;
243
+ let completedOrFailed = 0;
244
+ for (const task of allTasks) {
245
+ byStatus[task.status]++;
246
+ if (task.completed_at) {
247
+ const created = new Date(task.created_at).getTime();
248
+ const completed = new Date(task.completed_at).getTime();
249
+ totalCompletionTime += completed - created;
250
+ completedOrFailed++;
251
+ }
252
+ }
253
+ const avgCompletionTime = completedOrFailed > 0
254
+ ? totalCompletionTime / completedOrFailed
255
+ : 0;
256
+ const successRate = completedOrFailed > 0
257
+ ? byStatus.completed / completedOrFailed
258
+ : 0;
259
+ return {
260
+ total: allTasks.length,
261
+ byStatus,
262
+ avgCompletionTime,
263
+ successRate,
264
+ };
265
+ }
266
+ //# sourceMappingURL=storage.js.map