claude-mycelium 2.0.0 → 2.1.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 (189) 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/.claude/memory.db +0 -0
  5. package/.claude/settings.local.json +4 -1
  6. package/README.md +81 -235
  7. package/SECURITY.md +145 -0
  8. package/dist/agent/worker.d.ts +8 -0
  9. package/dist/agent/worker.d.ts.map +1 -0
  10. package/dist/agent/worker.js +97 -0
  11. package/dist/agent/worker.js.map +1 -0
  12. package/dist/bin.d.ts +7 -0
  13. package/dist/bin.d.ts.map +1 -0
  14. package/dist/bin.js +11 -0
  15. package/dist/bin.js.map +1 -0
  16. package/dist/cli/cost.d.ts +10 -0
  17. package/dist/cli/cost.d.ts.map +1 -0
  18. package/dist/cli/cost.js +163 -0
  19. package/dist/cli/cost.js.map +1 -0
  20. package/dist/cli/gc.d.ts +10 -0
  21. package/dist/cli/gc.d.ts.map +1 -0
  22. package/dist/cli/gc.js +108 -0
  23. package/dist/cli/gc.js.map +1 -0
  24. package/dist/cli/gradients.d.ts +10 -0
  25. package/dist/cli/gradients.d.ts.map +1 -0
  26. package/dist/cli/gradients.js +69 -0
  27. package/dist/cli/gradients.js.map +1 -0
  28. package/dist/cli/index.d.ts +17 -0
  29. package/dist/cli/index.d.ts.map +1 -0
  30. package/dist/cli/index.js +72 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/cli/init.d.ts +11 -0
  33. package/dist/cli/init.d.ts.map +1 -0
  34. package/dist/cli/init.js +97 -0
  35. package/dist/cli/init.js.map +1 -0
  36. package/dist/cli/status.d.ts +10 -0
  37. package/dist/cli/status.d.ts.map +1 -0
  38. package/dist/cli/status.js +191 -0
  39. package/dist/cli/status.js.map +1 -0
  40. package/dist/coordination/file-locks.d.ts +42 -0
  41. package/dist/coordination/file-locks.d.ts.map +1 -0
  42. package/dist/coordination/file-locks.js +269 -0
  43. package/dist/coordination/file-locks.js.map +1 -0
  44. package/dist/coordination/index.d.ts +4 -0
  45. package/dist/coordination/index.d.ts.map +1 -1
  46. package/dist/coordination/index.js +4 -0
  47. package/dist/coordination/index.js.map +1 -1
  48. package/dist/coordination/inhibitors.d.ts +84 -0
  49. package/dist/coordination/inhibitors.d.ts.map +1 -0
  50. package/dist/coordination/inhibitors.js +290 -0
  51. package/dist/coordination/inhibitors.js.map +1 -0
  52. package/dist/coordination/process-manager.d.ts +73 -0
  53. package/dist/coordination/process-manager.d.ts.map +1 -0
  54. package/dist/coordination/process-manager.js +144 -0
  55. package/dist/coordination/process-manager.js.map +1 -0
  56. package/dist/core/agent-executor.d.ts.map +1 -1
  57. package/dist/core/agent-executor.js +28 -10
  58. package/dist/core/agent-executor.js.map +1 -1
  59. package/dist/core/change-applier.d.ts +29 -5
  60. package/dist/core/change-applier.d.ts.map +1 -1
  61. package/dist/core/change-applier.js +254 -24
  62. package/dist/core/change-applier.js.map +1 -1
  63. package/dist/core/signals/churn.d.ts.map +1 -1
  64. package/dist/core/signals/churn.js +6 -4
  65. package/dist/core/signals/churn.js.map +1 -1
  66. package/dist/core/signals/debt.d.ts.map +1 -1
  67. package/dist/core/signals/debt.js +4 -3
  68. package/dist/core/signals/debt.js.map +1 -1
  69. package/dist/cost/cost-tracker.d.ts.map +1 -1
  70. package/dist/cost/cost-tracker.js +2 -0
  71. package/dist/cost/cost-tracker.js.map +1 -1
  72. package/dist/gc/index.d.ts +17 -0
  73. package/dist/gc/index.d.ts.map +1 -0
  74. package/dist/gc/index.js +17 -0
  75. package/dist/gc/index.js.map +1 -0
  76. package/dist/gc/runner.d.ts +39 -0
  77. package/dist/gc/runner.d.ts.map +1 -0
  78. package/dist/gc/runner.js +277 -0
  79. package/dist/gc/runner.js.map +1 -0
  80. package/dist/gc/trace-compactor.d.ts +31 -0
  81. package/dist/gc/trace-compactor.d.ts.map +1 -0
  82. package/dist/gc/trace-compactor.js +162 -0
  83. package/dist/gc/trace-compactor.js.map +1 -0
  84. package/dist/index.d.ts +5 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +6 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/prompts/index.d.ts +2 -1
  89. package/dist/prompts/index.d.ts.map +1 -1
  90. package/dist/prompts/index.js.map +1 -1
  91. package/dist/quarantine/explorer.d.ts +65 -0
  92. package/dist/quarantine/explorer.d.ts.map +1 -0
  93. package/dist/quarantine/explorer.js +175 -0
  94. package/dist/quarantine/explorer.js.map +1 -0
  95. package/dist/quarantine/index.d.ts +7 -0
  96. package/dist/quarantine/index.d.ts.map +1 -0
  97. package/dist/quarantine/index.js +7 -0
  98. package/dist/quarantine/index.js.map +1 -0
  99. package/dist/quarantine/manager.d.ts +75 -0
  100. package/dist/quarantine/manager.d.ts.map +1 -0
  101. package/dist/quarantine/manager.js +275 -0
  102. package/dist/quarantine/manager.js.map +1 -0
  103. package/dist/task/acceptance.d.ts +29 -0
  104. package/dist/task/acceptance.d.ts.map +1 -0
  105. package/dist/task/acceptance.js +228 -0
  106. package/dist/task/acceptance.js.map +1 -0
  107. package/dist/task/executor.d.ts +30 -0
  108. package/dist/task/executor.d.ts.map +1 -0
  109. package/dist/task/executor.js +429 -0
  110. package/dist/task/executor.js.map +1 -0
  111. package/dist/task/index.d.ts +12 -0
  112. package/dist/task/index.d.ts.map +1 -0
  113. package/dist/task/index.js +12 -0
  114. package/dist/task/index.js.map +1 -0
  115. package/dist/task/planner.d.ts +21 -0
  116. package/dist/task/planner.d.ts.map +1 -0
  117. package/dist/task/planner.js +253 -0
  118. package/dist/task/planner.js.map +1 -0
  119. package/dist/task/storage.d.ts +46 -0
  120. package/dist/task/storage.d.ts.map +1 -0
  121. package/dist/task/storage.js +266 -0
  122. package/dist/task/storage.js.map +1 -0
  123. package/dist/trace/trace-event.d.ts +2 -18
  124. package/dist/trace/trace-event.d.ts.map +1 -1
  125. package/dist/trace/trace-event.js +6 -6
  126. package/dist/trace/trace-event.js.map +1 -1
  127. package/dist/utils/file-utils.d.ts.map +1 -1
  128. package/dist/utils/file-utils.js +54 -15
  129. package/dist/utils/file-utils.js.map +1 -1
  130. package/docs/PHASE5_IMPLEMENTATION.md +237 -0
  131. package/docs/PHASES-3-7-COMPLETE.md +177 -0
  132. package/docs/PHASE_4_COMPLETE.md +135 -0
  133. package/docs/PHASE_7_DELIVERABLES.md +295 -0
  134. package/docs/PHASE_7_IMPLEMENTATION.md +306 -0
  135. package/docs/PHASE_7_SUMMARY.txt +195 -0
  136. package/docs/RELEASE-NOTES-v2.1.md +213 -0
  137. package/docs/ROADMAP.md +64 -57
  138. package/docs/SECURITY-AUDIT.md +387 -0
  139. package/docs/SNAPSHOT.md +59 -32
  140. package/docs/implementation/phase3-summary.md +220 -0
  141. package/package.json +19 -11
  142. package/src/agent/worker.ts +111 -0
  143. package/src/bin.ts +13 -0
  144. package/src/cli/cost.ts +210 -0
  145. package/src/cli/gc.ts +138 -0
  146. package/src/cli/gradients.ts +95 -0
  147. package/src/cli/index.ts +79 -0
  148. package/src/cli/init.ts +139 -0
  149. package/src/cli/status.ts +218 -0
  150. package/src/coordination/file-locks.ts +300 -0
  151. package/src/coordination/index.ts +4 -0
  152. package/src/coordination/inhibitors.ts +345 -0
  153. package/src/coordination/process-manager.ts +199 -0
  154. package/src/core/agent-executor.ts +20 -4
  155. package/src/core/signals/churn.ts +8 -5
  156. package/src/core/signals/debt.ts +4 -3
  157. package/src/cost/cost-tracker.ts +2 -0
  158. package/src/gc/index.ts +17 -0
  159. package/src/gc/runner.ts +314 -0
  160. package/src/gc/trace-compactor.ts +187 -0
  161. package/src/index.ts +7 -1
  162. package/src/prompts/index.ts +2 -1
  163. package/src/quarantine/explorer.ts +234 -0
  164. package/src/quarantine/index.ts +7 -0
  165. package/src/quarantine/manager.ts +336 -0
  166. package/src/task/acceptance.ts +267 -0
  167. package/src/task/executor.ts +538 -0
  168. package/src/task/index.ts +38 -0
  169. package/src/task/planner.ts +294 -0
  170. package/src/task/storage.ts +332 -0
  171. package/src/trace/trace-event.ts +7 -26
  172. package/src/utils/file-utils.ts +61 -15
  173. package/tests/cli/gc.test.ts +206 -0
  174. package/tests/cli/init.test.ts +181 -0
  175. package/tests/cli/status.test.ts +282 -0
  176. package/tests/coordination/file-locks.test.ts +196 -0
  177. package/tests/coordination/inhibitors.test.ts +459 -0
  178. package/tests/coordination/integration.test.ts +195 -0
  179. package/tests/coordination/process-manager.test.ts +165 -0
  180. package/tests/gc/trace-compactor.test.ts +245 -0
  181. package/tests/integration/phase-7.test.ts +145 -0
  182. package/tests/quarantine/explorer.test.ts +381 -0
  183. package/tests/quarantine/manager.test.ts +399 -0
  184. package/tests/security/command-injection.test.ts +88 -0
  185. package/tests/security/path-traversal.test.ts +103 -0
  186. package/tests/task/acceptance.test.ts +411 -0
  187. package/tests/task/executor.test.ts +421 -0
  188. package/tests/task/planner.test.ts +359 -0
  189. package/tsconfig.json +2 -2
@@ -16,10 +16,9 @@ import { readFile, writeFile } from 'fs/promises';
16
16
  import { v4 as uuid } from 'uuid';
17
17
  import { calculateGradient } from './gradient.js';
18
18
  import { buildPrompt } from '../prompts/index.js';
19
- import { callClaude } from '../llm/anthropic-client.js';
19
+ import { callLLM, calculateCost } from '../llm/anthropic-client.js';
20
20
  import { applyChanges } from './change-applier.js';
21
21
  import { recordTrace } from '../trace/trace-event.js';
22
- import { calculateCost } from '../cost/cost-tracker.js';
23
22
  import { logInfo, logDebug, logWarn, logError } from '../utils/logger.js';
24
23
  import { ciProvider } from '../utils/ci-provider.js';
25
24
  const DEFAULT_OPTIONS = {
@@ -76,7 +75,21 @@ export async function executeAgent(file, mode, options) {
76
75
  }
77
76
  else {
78
77
  // Real run - apply changes and verify
79
- changeSet = await applyChanges(file, originalContent, parsedChanges.newContent);
78
+ const result = await applyChanges([
79
+ {
80
+ file,
81
+ newContent: parsedChanges.newContent,
82
+ reason: `Applied ${mode} changes`,
83
+ },
84
+ ]);
85
+ if (!result.success) {
86
+ throw new Error(result.error || 'Failed to apply changes');
87
+ }
88
+ changeSet = {
89
+ additions: countLines(parsedChanges.newContent) - countLines(originalContent),
90
+ deletions: 0,
91
+ files_touched: [file],
92
+ };
80
93
  // Step 7: Run CI checks
81
94
  logDebug('Step 7: Running CI checks');
82
95
  const ciResult = await ciProvider.run(changeSet);
@@ -94,10 +107,10 @@ export async function executeAgent(file, mode, options) {
94
107
  // Step 9: Calculate cost
95
108
  logDebug('Step 9: Calculating cost');
96
109
  const costRecord = {
97
- tokens_in: llmResponse.tokensIn,
98
- tokens_out: llmResponse.tokensOut,
110
+ tokens_in: llmResponse.usage.inputTokens,
111
+ tokens_out: llmResponse.usage.outputTokens,
99
112
  model: llmResponse.model,
100
- estimated_usd: calculateCost(llmResponse.model, llmResponse.tokensIn, llmResponse.tokensOut),
113
+ estimated_usd: calculateCost(llmResponse.model, llmResponse.usage.inputTokens, llmResponse.usage.outputTokens),
101
114
  };
102
115
  // Step 10: Calculate efficiency
103
116
  const gradientDelta = gradientAfter.score - gradientBefore.score;
@@ -126,24 +139,26 @@ export async function executeAgent(file, mode, options) {
126
139
  if (!opts.dryRun) {
127
140
  await recordTrace(trace);
128
141
  }
142
+ const finalCost = Number(costRecord.estimated_usd) || 0;
129
143
  logInfo('Agent execution completed', {
130
144
  file,
131
145
  mode,
132
146
  gradientDelta: gradientDelta.toFixed(3),
133
147
  efficiency: efficiency.toFixed(3),
134
- cost: costRecord.estimated_usd.toFixed(4),
148
+ cost: finalCost.toFixed(4),
135
149
  ciPassed,
136
150
  });
137
151
  return {
138
152
  success: true,
139
153
  changes: [file],
140
154
  trace,
141
- cost: costRecord.estimated_usd,
155
+ cost: finalCost,
142
156
  };
143
157
  }
144
158
  catch (error) {
145
159
  // Error handling - record failed trace
146
- logError('Agent execution failed', error, { file, mode, agentId });
160
+ const errorObj = error instanceof Error ? error : new Error(String(error));
161
+ logError('Agent execution failed', errorObj, { file, mode, agentId });
147
162
  const errorTrace = {
148
163
  id: traceId,
149
164
  timestamp: new Date().toISOString(),
@@ -184,7 +199,10 @@ async function callLLMWithRetry(prompt, mode, maxRetries) {
184
199
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
185
200
  try {
186
201
  logDebug('LLM call attempt', { attempt, maxRetries, mode });
187
- const response = await callClaude(prompt.system, prompt.user);
202
+ const response = await callLLM({
203
+ prompt: prompt.user,
204
+ systemPrompt: prompt.system,
205
+ });
188
206
  return response;
189
207
  }
190
208
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../../src/core/agent-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../../src/core/agent-executor.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,34 @@
1
1
  /**
2
- * Change Applier
3
- * Applies code changes and tracks what was modified
2
+ * Change Applier - Safe code change application with backup/rollback
3
+ * Per second-spec.md §4.2
4
+ *
5
+ * Applies code changes safely with:
6
+ * - Backup creation before changes
7
+ * - Atomic all-or-nothing application
8
+ * - Rollback on errors
9
+ * - TypeScript syntax validation
10
+ * - Safety checks (paths, size limits)
4
11
  */
5
- import type { ChangeSet } from '../types/index.js';
12
+ export interface CodeChange {
13
+ file: string;
14
+ newContent: string;
15
+ reason: string;
16
+ }
17
+ export interface ApplyResult {
18
+ success: boolean;
19
+ filesChanged: string[];
20
+ backup?: string;
21
+ error?: string;
22
+ }
6
23
  /**
7
- * Apply changes to a file and return change statistics
24
+ * Apply code changes with safety checks and backup
8
25
  */
9
- export declare function applyChanges(filePath: string, originalContent: string, newContent: string): Promise<ChangeSet>;
26
+ export declare function applyChanges(changes: CodeChange[], options?: {
27
+ dryRun?: boolean;
28
+ createBackup?: boolean;
29
+ }): Promise<ApplyResult>;
30
+ /**
31
+ * Rollback changes from backup
32
+ */
33
+ export declare function rollbackChanges(backup: string): Promise<void>;
10
34
  //# sourceMappingURL=change-applier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-applier.d.ts","sourceRoot":"","sources":["../../src/core/change-applier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CA2BpB"}
1
+ {"version":3,"file":"change-applier.d.ts","sourceRoot":"","sources":["../../src/core/change-applier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GACA,OAAO,CAAC,WAAW,CAAC,CAmEtB;AAqLD;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCnE"}
@@ -1,32 +1,262 @@
1
1
  /**
2
- * Change Applier
3
- * Applies code changes and tracks what was modified
2
+ * Change Applier - Safe code change application with backup/rollback
3
+ * Per second-spec.md §4.2
4
+ *
5
+ * Applies code changes safely with:
6
+ * - Backup creation before changes
7
+ * - Atomic all-or-nothing application
8
+ * - Rollback on errors
9
+ * - TypeScript syntax validation
10
+ * - Safety checks (paths, size limits)
4
11
  */
5
- import { writeFile } from 'fs/promises';
6
- import { logDebug } from '../utils/logger.js';
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ import * as crypto from 'crypto';
15
+ import { parse } from '@typescript-eslint/typescript-estree';
16
+ import { readFile } from '../utils/file-utils.js';
17
+ import { logDebug, logWarn, logError } from '../utils/logger.js';
18
+ const MAX_FILE_SIZE = 50 * 1024; // 50KB
19
+ const BACKUP_DIR = '.agent-meta/backups';
20
+ const BACKUP_INDEX = path.join(BACKUP_DIR, 'index.json');
7
21
  /**
8
- * Apply changes to a file and return change statistics
22
+ * Apply code changes with safety checks and backup
9
23
  */
10
- export async function applyChanges(filePath, originalContent, newContent) {
11
- logDebug('Applying changes', {
12
- file: filePath,
13
- originalLength: originalContent.length,
14
- newLength: newContent.length,
24
+ export async function applyChanges(changes, options) {
25
+ const { dryRun = false, createBackup = true } = options || {};
26
+ try {
27
+ logDebug('Applying changes', {
28
+ fileCount: changes.length,
29
+ dryRun,
30
+ createBackup,
31
+ });
32
+ // Validate all changes first
33
+ for (const change of changes) {
34
+ await validateChange(change);
35
+ }
36
+ // Dry run mode - validate only
37
+ if (dryRun) {
38
+ logDebug('Dry run mode - changes validated but not applied');
39
+ return {
40
+ success: true,
41
+ filesChanged: changes.map(c => c.file),
42
+ };
43
+ }
44
+ // Create backup if requested
45
+ let backupId;
46
+ if (createBackup) {
47
+ backupId = await createBackupFiles(changes);
48
+ }
49
+ // Apply all changes
50
+ const filesChanged = [];
51
+ try {
52
+ for (const change of changes) {
53
+ await applyChange(change);
54
+ filesChanged.push(change.file);
55
+ }
56
+ logDebug('All changes applied successfully', {
57
+ filesChanged,
58
+ backup: backupId,
59
+ });
60
+ return {
61
+ success: true,
62
+ filesChanged,
63
+ backup: backupId,
64
+ };
65
+ }
66
+ catch (error) {
67
+ // Rollback on error
68
+ logError('Error applying changes, rolling back', error);
69
+ if (backupId) {
70
+ await rollbackChanges(backupId);
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+ catch (error) {
76
+ logError('Failed to apply changes', error);
77
+ return {
78
+ success: false,
79
+ filesChanged: [],
80
+ error: error instanceof Error ? error.message : String(error),
81
+ };
82
+ }
83
+ }
84
+ /**
85
+ * Validate a single change before applying
86
+ */
87
+ async function validateChange(change) {
88
+ const { file, newContent } = change;
89
+ // Check file path is safe
90
+ const absolutePath = path.resolve(file);
91
+ const cwd = process.cwd();
92
+ if (!absolutePath.startsWith(cwd)) {
93
+ throw new Error(`File path outside project directory: ${file}`);
94
+ }
95
+ // Check file exists (only allow modifying existing files)
96
+ if (!fs.existsSync(absolutePath)) {
97
+ throw new Error(`File does not exist: ${file}`);
98
+ }
99
+ // Check existing file size (don't touch files that are already too large)
100
+ const stats = fs.statSync(absolutePath);
101
+ if (stats.size > MAX_FILE_SIZE) {
102
+ throw new Error(`File too large: ${stats.size} bytes (max ${MAX_FILE_SIZE})`);
103
+ }
104
+ // Don't modify protected directories
105
+ const relativePath = path.relative(cwd, absolutePath);
106
+ const pathComponents = relativePath.split(path.sep);
107
+ if (pathComponents.includes('.git') || pathComponents.includes('node_modules')) {
108
+ throw new Error(`Cannot modify protected directory: ${relativePath}`);
109
+ }
110
+ // Check new content size
111
+ if (newContent.length > MAX_FILE_SIZE) {
112
+ throw new Error(`File too large: ${newContent.length} bytes (max ${MAX_FILE_SIZE})`);
113
+ }
114
+ // Check file is writable
115
+ try {
116
+ fs.accessSync(absolutePath, fs.constants.W_OK);
117
+ }
118
+ catch {
119
+ throw new Error(`File not writable: ${file}`);
120
+ }
121
+ // Validate TypeScript syntax for .ts/.tsx files
122
+ if (file.endsWith('.ts') || file.endsWith('.tsx')) {
123
+ try {
124
+ parse(newContent, {
125
+ loc: true,
126
+ range: true,
127
+ jsx: file.endsWith('.tsx'),
128
+ });
129
+ }
130
+ catch (error) {
131
+ throw new Error(`TypeScript syntax error: ${error instanceof Error ? error.message : String(error)}`);
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * Apply a single change
137
+ */
138
+ async function applyChange(change) {
139
+ const { file, newContent, reason } = change;
140
+ logDebug('Applying change', {
141
+ file,
142
+ reason,
143
+ size: newContent.length,
15
144
  });
16
- // Write the new content
17
- await writeFile(filePath, newContent, 'utf-8');
18
- // Calculate line changes
19
- const originalLines = originalContent.split('\n');
20
- const newLines = newContent.split('\n');
21
- // Simple line-based diff
22
- const additions = Math.max(0, newLines.length - originalLines.length);
23
- const deletions = Math.max(0, originalLines.length - newLines.length);
24
- const changeSet = {
25
- additions,
26
- deletions,
27
- files_touched: [filePath],
145
+ // Ensure directory exists
146
+ const dir = path.dirname(file);
147
+ if (!fs.existsSync(dir)) {
148
+ fs.mkdirSync(dir, { recursive: true });
149
+ }
150
+ // Write file
151
+ fs.writeFileSync(file, newContent, 'utf-8');
152
+ }
153
+ /**
154
+ * Create backup of files before changes
155
+ */
156
+ async function createBackupFiles(changes) {
157
+ const timestamp = Date.now();
158
+ const backupId = `${timestamp}-${crypto.randomBytes(4).toString('hex')}`;
159
+ const backupPath = path.join(BACKUP_DIR, backupId);
160
+ logDebug('Creating backup', { backupId });
161
+ // Ensure backup directory exists
162
+ if (!fs.existsSync(BACKUP_DIR)) {
163
+ fs.mkdirSync(BACKUP_DIR, { recursive: true });
164
+ }
165
+ // Create backup directory
166
+ fs.mkdirSync(backupPath, { recursive: true });
167
+ // Backup metadata
168
+ const metadata = {
169
+ timestamp,
170
+ files: [],
171
+ };
172
+ // Backup each file
173
+ for (const change of changes) {
174
+ const { file } = change;
175
+ if (fs.existsSync(file)) {
176
+ // Read original content
177
+ const originalContent = readFile(file);
178
+ const hash = crypto.createHash('sha256').update(originalContent).digest('hex');
179
+ // Write to backup
180
+ const backupFile = path.join(backupPath, path.basename(file));
181
+ fs.writeFileSync(backupFile, originalContent, 'utf-8');
182
+ metadata.files.push({
183
+ file,
184
+ hash,
185
+ backed_up: true,
186
+ });
187
+ }
188
+ else {
189
+ // File doesn't exist yet (new file)
190
+ metadata.files.push({
191
+ file,
192
+ hash: '',
193
+ backed_up: false,
194
+ });
195
+ }
196
+ }
197
+ // Write metadata
198
+ const metadataFile = path.join(backupPath, 'metadata.json');
199
+ fs.writeFileSync(metadataFile, JSON.stringify(metadata, null, 2), 'utf-8');
200
+ // Update backup index
201
+ await updateBackupIndex(backupId, metadata);
202
+ logDebug('Backup created', { backupId, fileCount: metadata.files.length });
203
+ return backupId;
204
+ }
205
+ /**
206
+ * Update backup index
207
+ */
208
+ async function updateBackupIndex(backupId, metadata) {
209
+ let index = {};
210
+ if (fs.existsSync(BACKUP_INDEX)) {
211
+ const content = fs.readFileSync(BACKUP_INDEX, 'utf-8');
212
+ try {
213
+ index = JSON.parse(content);
214
+ }
215
+ catch {
216
+ logWarn('Failed to parse backup index, creating new one');
217
+ }
218
+ }
219
+ index[backupId] = {
220
+ timestamp: metadata.timestamp,
221
+ files: metadata.files.map(f => f.file),
28
222
  };
29
- logDebug('Changes applied', changeSet);
30
- return changeSet;
223
+ fs.writeFileSync(BACKUP_INDEX, JSON.stringify(index, null, 2), 'utf-8');
224
+ }
225
+ /**
226
+ * Rollback changes from backup
227
+ */
228
+ export async function rollbackChanges(backup) {
229
+ const backupPath = path.join(BACKUP_DIR, backup);
230
+ if (!fs.existsSync(backupPath)) {
231
+ throw new Error(`Backup not found: ${backup}`);
232
+ }
233
+ logDebug('Rolling back changes', { backup });
234
+ // Read metadata
235
+ const metadataFile = path.join(backupPath, 'metadata.json');
236
+ if (!fs.existsSync(metadataFile)) {
237
+ throw new Error(`Backup metadata not found: ${backup}`);
238
+ }
239
+ const metadata = JSON.parse(fs.readFileSync(metadataFile, 'utf-8'));
240
+ // Restore each file
241
+ for (const fileInfo of metadata.files) {
242
+ const { file, backed_up } = fileInfo;
243
+ if (backed_up) {
244
+ // Restore from backup
245
+ const backupFile = path.join(backupPath, path.basename(file));
246
+ const content = fs.readFileSync(backupFile, 'utf-8');
247
+ fs.writeFileSync(file, content, 'utf-8');
248
+ logDebug('File restored from backup', { file });
249
+ }
250
+ else {
251
+ // File was new, delete it
252
+ if (fs.existsSync(file)) {
253
+ fs.unlinkSync(file);
254
+ logDebug('New file removed', { file });
255
+ }
256
+ }
257
+ }
258
+ // Remove backup
259
+ fs.rmSync(backupPath, { recursive: true, force: true });
260
+ logDebug('Rollback complete', { backup });
31
261
  }
32
262
  //# sourceMappingURL=change-applier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-applier.js","sourceRoot":"","sources":["../../src/core/change-applier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,eAAuB,EACvB,UAAkB;IAElB,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,eAAe,CAAC,MAAM;QACtC,SAAS,EAAE,UAAU,CAAC,MAAM;KAC7B,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAE/C,yBAAyB;IACzB,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExC,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAc;QAC3B,SAAS;QACT,SAAS;QACT,aAAa,EAAE,CAAC,QAAQ,CAAC;KAC1B,CAAC;IAEF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAEvC,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"change-applier.js","sourceRoot":"","sources":["../../src/core/change-applier.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"churn.d.ts","sourceRoot":"","sources":["../../../src/core/signals/churn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAgBD;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0D3E;AA2FD;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAUnC"}
1
+ {"version":3,"file":"churn.d.ts","sourceRoot":"","sources":["../../../src/core/signals/churn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAgBD;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0D3E;AA8FD;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAUnC"}
@@ -11,11 +11,11 @@
11
11
  * Normalization: commits_to_file / max(commits_to_any_file)
12
12
  * Cache TTL: 5 minutes (300 seconds)
13
13
  */
14
- import { exec } from 'child_process';
14
+ import { execFile } from 'child_process';
15
15
  import { promisify } from 'util';
16
16
  import { resolve, dirname } from 'path';
17
17
  import { logDebug, logWarn } from '../../utils/logger.js';
18
- const execAsync = promisify(exec);
18
+ const execFileAsync = promisify(execFile);
19
19
  const CHURN_LOOKBACK_DAYS = 30;
20
20
  const CHURN_CACHE_TTL_MS = 300_000; // 5 minutes
21
21
  // Global cache (in-memory)
@@ -81,7 +81,8 @@ export async function calculateChurn(filePath) {
81
81
  async function findGitRootForFile(filePath) {
82
82
  const fileDir = dirname(resolve(filePath));
83
83
  try {
84
- const { stdout } = await execAsync('git rev-parse --show-toplevel', {
84
+ // SECURITY: Use execFile to prevent command injection
85
+ const { stdout } = await execFileAsync('git', ['rev-parse', '--show-toplevel'], {
85
86
  cwd: fileDir,
86
87
  maxBuffer: 1024,
87
88
  });
@@ -99,7 +100,8 @@ async function buildChurnCache(gitRoot) {
99
100
  try {
100
101
  // Get all commits with changed files
101
102
  // Use "30 days ago" which git understands better than ISO dates
102
- const { stdout } = await execAsync(`git log --since="${CHURN_LOOKBACK_DAYS} days ago" --name-only --pretty=format:"" --all`, {
103
+ // SECURITY: Use execFile with array args to prevent command injection
104
+ const { stdout } = await execFileAsync('git', ['log', `--since=${CHURN_LOOKBACK_DAYS} days ago`, '--name-only', '--pretty=format:', '--all'], {
103
105
  cwd: gitRoot,
104
106
  maxBuffer: 10 * 1024 * 1024, // 10MB buffer for large repos
105
107
  });
@@ -1 +1 @@
1
- {"version":3,"file":"churn.js","sourceRoot":"","sources":["../../../src/core/signals/churn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"churn.js","sourceRoot":"","sources":["../../../src/core/signals/churn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"debt.d.ts","sourceRoot":"","sources":["../../../src/core/signals/debt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDzE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CASlC"}
1
+ {"version":3,"file":"debt.d.ts","sourceRoot":"","sources":["../../../src/core/signals/debt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuDzE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CASlC"}
@@ -10,11 +10,11 @@
10
10
  *
11
11
  * Graceful fallback if ESLint missing or fails (returns 0)
12
12
  */
13
- import { exec } from 'child_process';
13
+ import { execFile } from 'child_process';
14
14
  import { promisify } from 'util';
15
15
  import { getLineCount } from '../../utils/file-utils.js';
16
16
  import { logDebug, logWarn } from '../../utils/logger.js';
17
- const execAsync = promisify(exec);
17
+ const execFileAsync = promisify(execFile);
18
18
  /**
19
19
  * Calculate technical debt for a file using ESLint
20
20
  */
@@ -24,7 +24,8 @@ export async function calculateDebt(filePath) {
24
24
  const loc = getLineCount(filePath);
25
25
  // Run ESLint with JSON formatter
26
26
  // Note: ESLint exits with code 1 if there are linting errors, so we catch and parse stdout
27
- const { stdout } = await execAsync(`npx eslint "${filePath}" --format json`, {
27
+ // SECURITY: Use execFile with array args to prevent command injection
28
+ const { stdout } = await execFileAsync('npx', ['eslint', filePath, '--format', 'json'], {
28
29
  maxBuffer: 1024 * 1024,
29
30
  }).catch((error) => {
30
31
  // ESLint returns exit code 1 when there are lint errors, but stdout still has JSON
@@ -1 +1 @@
1
- {"version":3,"file":"debt.js","sourceRoot":"","sources":["../../../src/core/signals/debt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debt.js","sourceRoot":"","sources":["../../../src/core/signals/debt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/cost/cost-tracker.ts"],"names":[],"mappings":"AAwCA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,eAAe,CA6BjB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF;AA2BD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAUhE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAU/E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAsCnE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAuCxE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC,CA8BF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC,CA6BF;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhD"}
1
+ {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/cost/cost-tracker.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,eAAe,CA6BjB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF;AA2BD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAUhE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAU/E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAsCnE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAuCxE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC,CA8BF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC,CA6BF;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhD"}
@@ -1,5 +1,7 @@
1
1
  import * as path from 'path';
2
2
  import { fileExists, readFile, writeFile, appendFile, ensureDir, } from '../utils/file-utils';
3
+ /* eslint-disable @typescript-eslint/no-unused-vars */
4
+ // @ts-ignore
3
5
  import { logDebug, createLogger } from '../utils/logger';
4
6
  const logger = createLogger({ module: 'cost-tracker' });
5
7
  /**