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
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Agent Worker Process Entry Point
3
+ * Each agent runs as an independent Node.js process
4
+ *
5
+ * Reference: ADR-004 lines 30-45
6
+ */
7
+ // import { readGradientCache } from '../coordination/gradient-cache.js'; // TODO: Implement readGradientCache
8
+ /**
9
+ * Main agent worker loop
10
+ */
11
+ async function main() {
12
+ const agentId = process.env.AGENT_ID;
13
+ const maxIterations = parseInt(process.env.MAX_ITERATIONS ?? '10', 10);
14
+ if (!agentId) {
15
+ console.error('[worker] AGENT_ID environment variable not set');
16
+ process.exit(1);
17
+ }
18
+ console.log(`[${agentId}] Starting with max ${maxIterations} iterations`);
19
+ let iterations = 0;
20
+ while (iterations < maxIterations) {
21
+ try {
22
+ // 1. Read gradient cache
23
+ // const cache = await readGradientCache(); // TODO: Implement readGradientCache
24
+ const cache = null; // Temporary workaround
25
+ if (!cache) {
26
+ console.log(`[${agentId}] No gradient cache available. Exiting.`);
27
+ break;
28
+ }
29
+ // 2. Find unlocked target with highest gradient
30
+ // const target = findUnlockedTarget(cache.gradients); // TODO: Fix when readGradientCache is implemented
31
+ const target = null; // Temporary workaround
32
+ if (!target) {
33
+ console.log(`[${agentId}] No unlocked work available. Exiting.`);
34
+ break;
35
+ }
36
+ // TODO: The following code is disabled until readGradientCache is implemented
37
+ /*
38
+ // 3. Try to acquire lock
39
+ const locked = await acquireLock(target.file, agentId, 'error_reducer');
40
+
41
+ if (!locked) {
42
+ console.log(`[${agentId}] ${target.file} locked by another agent. Retrying...`);
43
+ iterations++;
44
+ continue;
45
+ }
46
+
47
+ console.log(`[${agentId}] Acquired lock on ${target.file}`);
48
+
49
+ try {
50
+ // 4. Execute work (stub for Phase 3)
51
+ console.log(`[${agentId}] Would process ${target.file} here`);
52
+
53
+ // Simulate work
54
+ await new Promise((resolve) => setTimeout(resolve, 100));
55
+
56
+ console.log(`[${agentId}] Completed work on ${target.file}`);
57
+ } finally {
58
+ // 5. Release lock
59
+ await releaseLock(target.file);
60
+ console.log(`[${agentId}] Released lock on ${target.file}`);
61
+ }
62
+ */
63
+ iterations++;
64
+ }
65
+ catch (error) {
66
+ console.error(`[${agentId}] Error in iteration ${iterations}:`, error);
67
+ iterations++;
68
+ }
69
+ }
70
+ console.log(`[${agentId}] Completed ${iterations} iterations. Exiting.`);
71
+ process.exit(0);
72
+ }
73
+ /**
74
+ * Find highest gradient file that isn't locked
75
+ * Stub implementation for Phase 3 - TODO: Enable when readGradientCache is implemented
76
+ */
77
+ /*
78
+ function findUnlockedTarget(gradients: any[]): { file: string; score: number } | null {
79
+ if (!gradients || gradients.length === 0) {
80
+ return null;
81
+ }
82
+
83
+ // Sort by score descending
84
+ const sorted = [...gradients].sort((a, b) => b.score - a.score);
85
+
86
+ // For Phase 3, just return the highest
87
+ // In Phase 4, we'll check lock status
88
+ return sorted[0] ? { file: sorted[0].file, score: sorted[0].score } : null;
89
+ }
90
+ */
91
+ // Run the worker
92
+ main().catch((error) => {
93
+ console.error('[worker] Fatal error:', error);
94
+ process.exit(1);
95
+ });
96
+ export {};
97
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,8GAA8G;AAE9G;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAEvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,uBAAuB,aAAa,aAAa,CAAC,CAAC;IAE1E,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,yBAAyB;YACzB,iFAAiF;YACjF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,uBAAuB;YAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,yCAAyC,CAAC,CAAC;gBAClE,MAAM;YACR,CAAC;YAED,gDAAgD;YAChD,0GAA0G;YAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,uBAAuB;YAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,wCAAwC,CAAC,CAAC;gBACjE,MAAM;YACR,CAAC;YAED,8EAA8E;YAC9E;;;;;;;;;;;;;;;;;;;;;;;;;cAyBE;YAEF,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,wBAAwB,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;YACvE,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,eAAe,UAAU,uBAAuB,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH;;;;;;;;;;;;;EAaE;AAEF,iBAAiB;AACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI Entry Point
4
+ * Executable entry point for claude-mycelium CLI
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
package/dist/bin.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI Entry Point
4
+ * Executable entry point for claude-mycelium CLI
5
+ */
6
+ import { execute } from './cli/index.js';
7
+ execute().catch((error) => {
8
+ console.error('Fatal error:', error);
9
+ process.exit(1);
10
+ });
11
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Cost CLI Command
3
+ *
4
+ * Display spending report with daily summaries
5
+ * Show efficiency trends
6
+ */
7
+ import { Command } from 'commander';
8
+ declare const command: Command;
9
+ export default command;
10
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/cli/cost.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,QAAA,MAAM,OAAO,SA6ET,CAAC;AAuHL,eAAe,OAAO,CAAC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Cost CLI Command
3
+ *
4
+ * Display spending report with daily summaries
5
+ * Show efficiency trends
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ const command = new Command()
12
+ .name('cost')
13
+ .description('Show spending report and efficiency trends')
14
+ .option('--days <number>', 'Show data for last N days', '30')
15
+ .option('--json', 'Output as JSON')
16
+ .action(async (options) => {
17
+ try {
18
+ const days = parseInt(options.days, 10) || 30;
19
+ const summary = await generateCostSummary(days);
20
+ if (options.json) {
21
+ console.log(JSON.stringify(summary, null, 2));
22
+ return;
23
+ }
24
+ // Colorized output
25
+ console.log('');
26
+ console.log(chalk.bold('Cost Report (Last ' + days + ' days)'));
27
+ console.log(chalk.dim('─'.repeat(80)));
28
+ // Overall totals
29
+ console.log(chalk.bold('Overall:'));
30
+ console.log(` Total cost: ${chalk.yellow('$' + summary.total_usd.toFixed(2))}`);
31
+ console.log(` Total tokens in: ${summary.total_tokens_in.toLocaleString()}`);
32
+ console.log(` Total tokens out: ${summary.total_tokens_out.toLocaleString()}`);
33
+ console.log(` Avg cost per run: ${chalk.yellow('$' + summary.avg_cost_per_run.toFixed(4))}`);
34
+ console.log(` Avg cost per improvement: ${chalk.yellow('$' + summary.avg_cost_per_improvement.toFixed(4))}`);
35
+ // Trend
36
+ const trendColor = summary.cost_efficiency_trend === 'improving'
37
+ ? 'green'
38
+ : summary.cost_efficiency_trend === 'stable'
39
+ ? 'yellow'
40
+ : 'red';
41
+ console.log(` Trend: ${chalk[trendColor](summary.cost_efficiency_trend)}`);
42
+ console.log(chalk.dim('─'.repeat(80)));
43
+ // Daily breakdown
44
+ if (summary.daily.length > 0) {
45
+ console.log(chalk.bold('Daily Breakdown:'));
46
+ console.log(chalk.gray(`${'Date'.padEnd(12)} ${'Runs'.padStart(6)} ${'Cost'.padStart(12)} ${'Eff.'.padStart(8)}`));
47
+ for (const day of summary.daily.slice(-7)) {
48
+ const costStr = ('$' + day.total_cost_usd.toFixed(2)).padStart(12);
49
+ const effStr = (day.avg_efficiency.toFixed(3)).padStart(8);
50
+ console.log(`${day.date.padEnd(12)} ${String(day.runs).padStart(6)} ${costStr} ${effStr}`);
51
+ }
52
+ }
53
+ console.log('');
54
+ }
55
+ catch (error) {
56
+ const message = error instanceof Error ? error.message : 'Unknown error';
57
+ console.error(chalk.red(`Error: ${message}`));
58
+ process.exit(1);
59
+ }
60
+ });
61
+ /**
62
+ * Generate cost summary from trace events
63
+ */
64
+ async function generateCostSummary(days) {
65
+ const tracesDir = '.agent-meta/traces';
66
+ const now = Date.now();
67
+ const cutoffMs = days * 24 * 60 * 60 * 1000;
68
+ let traceFiles = [];
69
+ try {
70
+ const entries = await fs.readdir(tracesDir);
71
+ traceFiles = entries.filter(f => f.endsWith('.ndjson'));
72
+ }
73
+ catch {
74
+ // Traces directory doesn't exist
75
+ }
76
+ const events = [];
77
+ // Collect all trace events from last N days
78
+ for (const file of traceFiles) {
79
+ const filePath = path.join(tracesDir, file);
80
+ try {
81
+ const content = await fs.readFile(filePath, 'utf-8');
82
+ const lines = content.split('\n').filter(Boolean);
83
+ for (const line of lines) {
84
+ try {
85
+ const event = JSON.parse(line);
86
+ const ageMs = now - new Date(event.timestamp).getTime();
87
+ if (ageMs < cutoffMs) {
88
+ events.push(event);
89
+ }
90
+ }
91
+ catch {
92
+ // Skip malformed lines
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // File read error
98
+ }
99
+ }
100
+ // Calculate daily summaries
101
+ const byDate = new Map();
102
+ for (const event of events) {
103
+ const date = new Date(event.timestamp).toISOString().split('T')[0];
104
+ if (!byDate.has(date)) {
105
+ byDate.set(date, []);
106
+ }
107
+ byDate.get(date).push(event);
108
+ }
109
+ const daily = [];
110
+ let totalCost = 0;
111
+ let totalTokensIn = 0;
112
+ let totalTokensOut = 0;
113
+ let totalEfficiency = 0;
114
+ let improvementCount = 0;
115
+ for (const [date, dayEvents] of Array.from(byDate).sort()) {
116
+ const cost = dayEvents.reduce((sum, e) => sum + e.cost.estimated_usd, 0);
117
+ const tokensIn = dayEvents.reduce((sum, e) => sum + e.cost.tokens_in, 0);
118
+ const tokensOut = dayEvents.reduce((sum, e) => sum + e.cost.tokens_out, 0);
119
+ const avgEff = dayEvents.reduce((sum, e) => sum + e.efficiency, 0) / dayEvents.length;
120
+ const improvements = dayEvents.filter(e => e.gradient_delta > 0).length;
121
+ const dayData = {
122
+ date,
123
+ runs: dayEvents.length,
124
+ total_cost_usd: cost,
125
+ total_tokens_in: tokensIn,
126
+ total_tokens_out: tokensOut,
127
+ avg_efficiency: avgEff,
128
+ cost_per_improvement: improvements > 0 ? cost / improvements : cost,
129
+ };
130
+ daily.push(dayData);
131
+ totalCost += cost;
132
+ totalTokensIn += tokensIn;
133
+ totalTokensOut += tokensOut;
134
+ totalEfficiency += avgEff;
135
+ improvementCount += improvements;
136
+ }
137
+ // Calculate trend (compare first half vs second half)
138
+ let trend = 'stable';
139
+ if (daily.length >= 2) {
140
+ const mid = Math.floor(daily.length / 2);
141
+ const firstHalf = daily.slice(0, mid);
142
+ const secondHalf = daily.slice(mid);
143
+ const firstAvgEff = firstHalf.reduce((sum, d) => sum + d.avg_efficiency, 0) / firstHalf.length;
144
+ const secondAvgEff = secondHalf.reduce((sum, d) => sum + d.avg_efficiency, 0) / secondHalf.length;
145
+ if (secondAvgEff > firstAvgEff * 1.1) {
146
+ trend = 'improving';
147
+ }
148
+ else if (secondAvgEff < firstAvgEff * 0.9) {
149
+ trend = 'degrading';
150
+ }
151
+ }
152
+ return {
153
+ total_usd: totalCost,
154
+ total_tokens_in: totalTokensIn,
155
+ total_tokens_out: totalTokensOut,
156
+ avg_cost_per_run: events.length > 0 ? totalCost / events.length : 0,
157
+ avg_cost_per_improvement: improvementCount > 0 ? totalCost / improvementCount : totalCost,
158
+ cost_efficiency_trend: trend,
159
+ daily,
160
+ };
161
+ }
162
+ export default command;
163
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/cli/cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * GC CLI Command
3
+ *
4
+ * Manual garbage collection trigger
5
+ * Show GC report and statistics
6
+ */
7
+ import { Command } from 'commander';
8
+ declare const command: Command;
9
+ export default command;
10
+ //# sourceMappingURL=gc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/cli/gc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,QAAA,MAAM,OAAO,SAkBT,CAAC;AA4GL,eAAe,OAAO,CAAC"}
package/dist/cli/gc.js ADDED
@@ -0,0 +1,108 @@
1
+ /**
2
+ * GC CLI Command
3
+ *
4
+ * Manual garbage collection trigger
5
+ * Show GC report and statistics
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import { runGC, readGCLog } from '../gc/runner.js';
10
+ const command = new Command()
11
+ .name('gc')
12
+ .description('Run garbage collection manually')
13
+ .option('--json', 'Output as JSON')
14
+ .option('--history', 'Show GC history')
15
+ .action(async (options) => {
16
+ try {
17
+ if (options.history) {
18
+ await showGCHistory(options.json);
19
+ return;
20
+ }
21
+ await runGarbageCollection(options.json);
22
+ }
23
+ catch (error) {
24
+ const message = error instanceof Error ? error.message : 'Unknown error';
25
+ console.error(chalk.red(`Error: ${message}`));
26
+ process.exit(1);
27
+ }
28
+ });
29
+ /**
30
+ * Run garbage collection and show report
31
+ */
32
+ async function runGarbageCollection(json = false) {
33
+ if (!json) {
34
+ console.log('');
35
+ console.log(chalk.bold('Running garbage collection...'));
36
+ }
37
+ const report = await runGC();
38
+ if (json) {
39
+ console.log(JSON.stringify(report, null, 2));
40
+ return;
41
+ }
42
+ // Display report
43
+ console.log(chalk.green('✓ GC completed'));
44
+ console.log('');
45
+ console.log(chalk.bold('Report:'));
46
+ console.log(` Timestamp: ${report.timestamp}`);
47
+ console.log(` Duration: ${report.duration_ms}ms`);
48
+ console.log(` Size before: ${report.size_before_mb.toFixed(2)} MB`);
49
+ console.log(` Size after: ${report.size_after_mb.toFixed(2)} MB`);
50
+ if (report.size_before_mb > 0) {
51
+ const saved = report.size_before_mb - report.size_after_mb;
52
+ const percent = ((saved / report.size_before_mb) * 100).toFixed(1);
53
+ console.log(` Space saved: ${chalk.green(saved.toFixed(2) + ' MB')} (${percent}%)`);
54
+ }
55
+ console.log('');
56
+ console.log(chalk.bold('Actions:'));
57
+ console.log(` Deleted items: ${report.deleted}`);
58
+ console.log(` Compacted files: ${report.compacted}`);
59
+ if (report.errors.length > 0) {
60
+ console.log('');
61
+ console.log(chalk.yellow('Warnings:'));
62
+ for (const error of report.errors) {
63
+ console.log(` - ${error}`);
64
+ }
65
+ }
66
+ console.log('');
67
+ }
68
+ /**
69
+ * Show GC history
70
+ */
71
+ async function showGCHistory(json = false) {
72
+ const reports = await readGCLog();
73
+ if (json) {
74
+ console.log(JSON.stringify(reports, null, 2));
75
+ return;
76
+ }
77
+ if (reports.length === 0) {
78
+ console.log(chalk.yellow('No GC history found'));
79
+ return;
80
+ }
81
+ console.log('');
82
+ console.log(chalk.bold('GC History'));
83
+ console.log(chalk.dim('─'.repeat(80)));
84
+ console.log(chalk.gray(`${'Timestamp'.padEnd(25)} ${'Duration'.padStart(10)} ${'Deleted'.padStart(10)} ${'Space'.padStart(15)}`));
85
+ console.log(chalk.dim('─'.repeat(80)));
86
+ for (const report of reports.slice(-10)) {
87
+ const date = new Date(report.timestamp).toISOString().split('T')[0];
88
+ const time = new Date(report.timestamp).toISOString().split('T')[1].substring(0, 5);
89
+ const timestamp = `${date} ${time}`.padEnd(25);
90
+ const duration = `${report.duration_ms}ms`.padStart(10);
91
+ const deleted = String(report.deleted).padStart(10);
92
+ const saved = (report.size_before_mb - report.size_after_mb).toFixed(2);
93
+ const space = `${saved}MB`.padStart(15);
94
+ console.log(`${timestamp} ${duration} ${deleted} ${space}`);
95
+ }
96
+ console.log(chalk.dim('─'.repeat(80)));
97
+ // Summary statistics
98
+ const totalDeleted = reports.reduce((sum, r) => sum + r.deleted, 0);
99
+ const totalSaved = reports.reduce((sum, r) => sum + (r.size_before_mb - r.size_after_mb), 0);
100
+ const avgDuration = reports.reduce((sum, r) => sum + r.duration_ms, 0) / reports.length;
101
+ console.log(chalk.bold('Summary (all runs):'));
102
+ console.log(` Total items deleted: ${totalDeleted}`);
103
+ console.log(` Total space saved: ${totalSaved.toFixed(2)} MB`);
104
+ console.log(` Average duration: ${avgDuration.toFixed(0)}ms`);
105
+ console.log('');
106
+ }
107
+ export default command;
108
+ //# sourceMappingURL=gc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/cli/gc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Gradients CLI Command
3
+ *
4
+ * Display gradient scores for all files
5
+ * Sorted by score descending with colorized output
6
+ */
7
+ import { Command } from 'commander';
8
+ declare const command: Command;
9
+ export default command;
10
+ //# sourceMappingURL=gradients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradients.d.ts","sourceRoot":"","sources":["../../src/cli/gradients.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,QAAA,MAAM,OAAO,SAgFT,CAAC;AAEL,eAAe,OAAO,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Gradients CLI Command
3
+ *
4
+ * Display gradient scores for all files
5
+ * Sorted by score descending with colorized output
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import glob from 'fast-glob';
10
+ import { calculateGradientBatch } from '../core/gradient.js';
11
+ const command = new Command()
12
+ .name('gradients')
13
+ .description('Show gradient scores for all files')
14
+ .argument('[path]', 'Root path to analyze', '.')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--limit <number>', 'Show top N files', '20')
17
+ .action(async (rootPath, options) => {
18
+ try {
19
+ // Find all TypeScript files (not .d.ts)
20
+ const files = await glob('**/*.ts', {
21
+ cwd: rootPath,
22
+ ignore: ['node_modules/**', 'dist/**', '**/*.d.ts', '**/*.test.ts', '**/*.spec.ts'],
23
+ });
24
+ if (files.length === 0) {
25
+ console.log(chalk.yellow('No TypeScript files found'));
26
+ return;
27
+ }
28
+ const gradientMap = await calculateGradientBatch(files);
29
+ const gradients = Array.from(gradientMap.values());
30
+ // Sort by score descending
31
+ const sorted = [...gradients].sort((a, b) => b.score - a.score);
32
+ // Apply limit
33
+ const limit = parseInt(options.limit, 10) || 20;
34
+ const limited = sorted.slice(0, limit);
35
+ if (options.json) {
36
+ console.log(JSON.stringify(limited, null, 2));
37
+ return;
38
+ }
39
+ // Colorized output
40
+ console.log('');
41
+ console.log(chalk.bold('Gradient Scores (sorted by impact)'));
42
+ console.log(chalk.dim('─'.repeat(80)));
43
+ console.log(chalk.gray(`${String('File').padEnd(50)} ${'Score'.padStart(10)} ${'Signal'.padStart(15)}`));
44
+ console.log(chalk.dim('─'.repeat(80)));
45
+ for (const gradient of limited) {
46
+ const scoreColor = gradient.score > 0.7 ? 'red' : gradient.score > 0.4 ? 'yellow' : 'green';
47
+ const score = gradient.score.toFixed(3);
48
+ const signal = gradient.dominantSignal.name;
49
+ console.log(`${gradient.file.substring(0, 50).padEnd(50)} ${chalk[scoreColor](score.padStart(10))} ${signal.padStart(15)}`);
50
+ }
51
+ console.log(chalk.dim('─'.repeat(80)));
52
+ console.log(chalk.dim(`Showing ${limited.length} of ${gradients.length} files`));
53
+ console.log('');
54
+ // Summary
55
+ const highImpact = sorted.filter(g => g.score > 0.7).length;
56
+ const mediumImpact = sorted.filter(g => g.score > 0.4 && g.score <= 0.7).length;
57
+ const lowImpact = sorted.filter(g => g.score <= 0.4).length;
58
+ console.log(chalk.bold('Summary:'));
59
+ console.log(` ${chalk.red(`High impact: ${highImpact}`)} | ${chalk.yellow(`Medium: ${mediumImpact}`)} | ${chalk.green(`Low: ${lowImpact}`)}`);
60
+ console.log('');
61
+ }
62
+ catch (error) {
63
+ const message = error instanceof Error ? error.message : 'Unknown error';
64
+ console.error(chalk.red(`Error: ${message}`));
65
+ process.exit(1);
66
+ }
67
+ });
68
+ export default command;
69
+ //# sourceMappingURL=gradients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradients.js","sourceRoot":"","sources":["../../src/cli/gradients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Claude Mycelium CLI
3
+ *
4
+ * Main CLI entry point using Commander.js
5
+ * Coordinates all CLI subcommands
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const program: Command;
9
+ /**
10
+ * Import and register subcommands
11
+ */
12
+ export declare function registerCommands(): Promise<void>;
13
+ /**
14
+ * Parse and execute CLI
15
+ */
16
+ export declare function execute(argv?: string[]): Promise<Command>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,OAAO,SAAgB,CAAC;AAkBrC;;GAEG;AACH,wBAAsB,gBAAgB,kBAarC;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,oBAG5C"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Claude Mycelium CLI
3
+ *
4
+ * Main CLI entry point using Commander.js
5
+ * Coordinates all CLI subcommands
6
+ */
7
+ import { Command } from 'commander';
8
+ import { readFileSync } from 'fs';
9
+ import { resolve } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { dirname } from 'path';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = dirname(__filename);
14
+ // Read package.json for version
15
+ let version = '2.0.0';
16
+ try {
17
+ const pkgPath = resolve(__dirname, '../../package.json');
18
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
19
+ if (pkg.version) {
20
+ version = pkg.version;
21
+ }
22
+ }
23
+ catch {
24
+ // Fallback to default version
25
+ }
26
+ export const program = new Command();
27
+ program
28
+ .name('claude-mycelium')
29
+ .description('Intelligent automated code improvement system')
30
+ .version(version)
31
+ .option('-v, --verbose', 'Enable verbose logging')
32
+ .option('--config <path>', 'Path to config file')
33
+ .hook('preAction', (thisCommand) => {
34
+ // Handle global options
35
+ if (thisCommand.optsWithGlobals().verbose) {
36
+ process.env.DEBUG = '1';
37
+ }
38
+ if (thisCommand.optsWithGlobals().config) {
39
+ process.env.MYCELIUM_CONFIG = thisCommand.optsWithGlobals().config;
40
+ }
41
+ });
42
+ /**
43
+ * Import and register subcommands
44
+ */
45
+ export async function registerCommands() {
46
+ // Dynamically import subcommands
47
+ const { default: gradients } = await import('./gradients.js');
48
+ const { default: cost } = await import('./cost.js');
49
+ const { default: status } = await import('./status.js');
50
+ const { default: init } = await import('./init.js');
51
+ const { default: gc } = await import('./gc.js');
52
+ program.addCommand(gradients);
53
+ program.addCommand(cost);
54
+ program.addCommand(status);
55
+ program.addCommand(init);
56
+ program.addCommand(gc);
57
+ }
58
+ /**
59
+ * Parse and execute CLI
60
+ */
61
+ export async function execute(argv) {
62
+ await registerCommands();
63
+ return program.parseAsync(argv || process.argv);
64
+ }
65
+ // Auto-execute when run as script
66
+ if (import.meta.url === `file://${process.argv[1]}`) {
67
+ execute().catch((error) => {
68
+ console.error('CLI Error:', error);
69
+ process.exit(1);
70
+ });
71
+ }
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,gCAAgC;AAChC,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAC;IAC/E,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACxB,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,8BAA8B;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,iBAAiB,CAAC;KACvB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,wBAAwB;IACxB,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;IAC1B,CAAC;IACD,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;IACrE,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,iCAAiC;IACjC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAEhD,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAe;IAC3C,MAAM,gBAAgB,EAAE,CAAC;IACzB,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,kCAAkC;AAClC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}