codymaster 4.4.5 → 4.5.2

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 (197) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +29 -14
  3. package/commands/demo.md +1 -1
  4. package/dist/context-bus.js +70 -0
  5. package/dist/context-db.js +265 -0
  6. package/dist/continuity.js +12 -0
  7. package/dist/file-watcher.js +79 -0
  8. package/dist/index.js +152 -1
  9. package/dist/l0-indexer.js +158 -0
  10. package/dist/mcp-context-server.js +400 -0
  11. package/dist/migrate-json-to-sqlite.js +126 -0
  12. package/dist/skill-chain.js +19 -3
  13. package/dist/token-budget.js +108 -0
  14. package/dist/uri-resolver.js +203 -0
  15. package/package.json +5 -1
  16. package/scripts/gate-0-secrets.js +63 -0
  17. package/scripts/gate-1-syntax.js +53 -0
  18. package/scripts/gate-5-dist-verify.js +55 -0
  19. package/scripts/gate-6-smoke-test.js +30 -0
  20. package/scripts/index-codebase.sh +552 -0
  21. package/scripts/mcp-bridge.js +284 -0
  22. package/scripts/postinstall.js +301 -0
  23. package/scripts/security-fixer.js +143 -0
  24. package/scripts/security-scan.js +55 -0
  25. package/scripts/test-gemini.js +13 -0
  26. package/scripts/todo-bridge.js +112 -0
  27. package/skills/_shared/helpers.md +50 -14
  28. package/skills/cm-autopilot/SKILL.md +29 -0
  29. package/skills/cm-autopilot/scripts/autopilot.py +190 -0
  30. package/skills/cm-continuity/SKILL.md +90 -28
  31. package/skills/cm-skill-chain/SKILL.md +47 -1
  32. package/skills/cm-start/SKILL.md +11 -2
  33. package/skills/boxme-git-config/SKILL.md +0 -56
  34. package/skills/boxme-local-dev/SKILL.md +0 -66
  35. package/skills/jobs-to-be-done/SKILL.md +0 -266
  36. package/skills/jobs-to-be-done/references/case-studies.md +0 -154
  37. package/skills/jobs-to-be-done/references/competitive-strategy.md +0 -280
  38. package/skills/jobs-to-be-done/references/diagnostics.md +0 -158
  39. package/skills/jobs-to-be-done/references/innovation-process.md +0 -392
  40. package/skills/jobs-to-be-done/references/organizational-change.md +0 -328
  41. package/skills/marketplace-report-crawler/SKILL.md +0 -176
  42. package/skills/marketplace-report-crawler/config/accounts.json +0 -41
  43. package/skills/marketplace-report-crawler/config/report-types.json +0 -422
  44. package/skills/marketplace-report-crawler/config/sessions.json +0 -3
  45. package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +0 -102
  46. package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +0 -114
  47. package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +0 -94
  48. package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +0 -272
  49. package/skills/marketplace-report-crawler/scripts/crawl-runner.js +0 -281
  50. package/skills/marketplace-report-crawler/scripts/session-check.sh +0 -72
  51. package/skills/marketplace-report-crawler/scripts/session-manager.sh +0 -349
  52. package/skills/marketplace-report-crawler/scripts/setup-folders.sh +0 -83
  53. package/skills/medical-research/SKILL.md +0 -194
  54. package/skills/medical-research/scripts/evidence_checker.py +0 -288
  55. package/skills/mom-test/SKILL.md +0 -267
  56. package/skills/mom-test/references/avoiding-bad-data.md +0 -221
  57. package/skills/mom-test/references/case-studies.md +0 -306
  58. package/skills/mom-test/references/commitment-advancement.md +0 -219
  59. package/skills/mom-test/references/finding-conversations.md +0 -251
  60. package/skills/mom-test/references/processing-learning.md +0 -256
  61. package/skills/mom-test/references/question-patterns.md +0 -198
  62. package/skills/pandasai-analytics/SKILL.md +0 -251
  63. package/skills/release-it/SKILL.md +0 -235
  64. package/skills/release-it/references/anti-patterns.md +0 -279
  65. package/skills/release-it/references/capacity-planning.md +0 -285
  66. package/skills/release-it/references/chaos-engineering.md +0 -325
  67. package/skills/release-it/references/deployment-strategies.md +0 -331
  68. package/skills/release-it/references/observability.md +0 -301
  69. package/skills/release-it/references/stability-patterns.md +0 -355
  70. package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +0 -37
  71. package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +0 -34
  72. package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +0 -51
  73. package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +0 -39
  74. package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +0 -52
  75. package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +0 -25
  76. package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +0 -31
  77. package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +0 -25
  78. package/skills/skill-creator-ultra/README.md +0 -1242
  79. package/skills/skill-creator-ultra/SKILL.md +0 -388
  80. package/skills/skill-creator-ultra/agents/analyzer.md +0 -274
  81. package/skills/skill-creator-ultra/agents/comparator.md +0 -202
  82. package/skills/skill-creator-ultra/agents/grader.md +0 -223
  83. package/skills/skill-creator-ultra/assets/eval_review.html +0 -146
  84. package/skills/skill-creator-ultra/eval-viewer/generate_review.py +0 -471
  85. package/skills/skill-creator-ultra/eval-viewer/viewer.html +0 -1325
  86. package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +0 -109
  87. package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +0 -116
  88. package/skills/skill-creator-ultra/examples/example_api_docs.md +0 -189
  89. package/skills/skill-creator-ultra/examples/example_db_migration.md +0 -253
  90. package/skills/skill-creator-ultra/examples/example_git_commit.md +0 -111
  91. package/skills/skill-creator-ultra/install.ps1 +0 -289
  92. package/skills/skill-creator-ultra/install.sh +0 -313
  93. package/skills/skill-creator-ultra/phases/phase1_interview.md +0 -202
  94. package/skills/skill-creator-ultra/phases/phase2_extract.md +0 -55
  95. package/skills/skill-creator-ultra/phases/phase3_detect.md +0 -57
  96. package/skills/skill-creator-ultra/phases/phase4_generate.md +0 -543
  97. package/skills/skill-creator-ultra/phases/phase5_test.md +0 -319
  98. package/skills/skill-creator-ultra/phases/phase6_eval.md +0 -301
  99. package/skills/skill-creator-ultra/phases/phase7_iterate.md +0 -103
  100. package/skills/skill-creator-ultra/phases/phase8_optimize.md +0 -113
  101. package/skills/skill-creator-ultra/resources/advanced_patterns.md +0 -499
  102. package/skills/skill-creator-ultra/resources/anti_patterns.md +0 -376
  103. package/skills/skill-creator-ultra/resources/blueprints.md +0 -498
  104. package/skills/skill-creator-ultra/resources/checklist.md +0 -243
  105. package/skills/skill-creator-ultra/resources/composition_cookbook.md +0 -291
  106. package/skills/skill-creator-ultra/resources/description_optimization.md +0 -90
  107. package/skills/skill-creator-ultra/resources/eval_guide.md +0 -133
  108. package/skills/skill-creator-ultra/resources/industry_questions.md +0 -189
  109. package/skills/skill-creator-ultra/resources/interview_questions.md +0 -200
  110. package/skills/skill-creator-ultra/resources/pattern_detection.md +0 -200
  111. package/skills/skill-creator-ultra/resources/prompt_engineering.md +0 -531
  112. package/skills/skill-creator-ultra/resources/schemas.md +0 -430
  113. package/skills/skill-creator-ultra/resources/script_integration.md +0 -593
  114. package/skills/skill-creator-ultra/resources/scripts_guide.md +0 -339
  115. package/skills/skill-creator-ultra/resources/skill_template.md +0 -124
  116. package/skills/skill-creator-ultra/resources/skill_writing_guide.md +0 -634
  117. package/skills/skill-creator-ultra/resources/versioning_guide.md +0 -193
  118. package/skills/skill-creator-ultra/scripts/ci_eval.py +0 -200
  119. package/skills/skill-creator-ultra/scripts/package_skill.py +0 -165
  120. package/skills/skill-creator-ultra/scripts/simulate_skill.py +0 -398
  121. package/skills/skill-creator-ultra/scripts/skill_audit.py +0 -611
  122. package/skills/skill-creator-ultra/scripts/skill_compare.py +0 -265
  123. package/skills/skill-creator-ultra/scripts/skill_export.py +0 -334
  124. package/skills/skill-creator-ultra/scripts/skill_scaffold.py +0 -403
  125. package/skills/skill-creator-ultra/scripts/skill_stats.py +0 -339
  126. package/skills/skill-creator-ultra/scripts/validate_skill.py +0 -411
  127. package/skills/tailwind-mastery/SKILL.md +0 -229
  128. package/skills/vercel-react-best-practices/AGENTS.md +0 -3373
  129. package/skills/vercel-react-best-practices/README.md +0 -123
  130. package/skills/vercel-react-best-practices/SKILL.md +0 -143
  131. package/skills/vercel-react-best-practices/rules/_sections.md +0 -46
  132. package/skills/vercel-react-best-practices/rules/_template.md +0 -28
  133. package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  134. package/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  135. package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  136. package/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  137. package/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  138. package/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  139. package/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  140. package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  141. package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  142. package/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  143. package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  144. package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  145. package/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  146. package/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  147. package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  148. package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  149. package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  150. package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  151. package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  152. package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  153. package/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  154. package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  155. package/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  156. package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  157. package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  158. package/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  159. package/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  160. package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  161. package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  162. package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  163. package/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  164. package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  165. package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  166. package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  167. package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  168. package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  169. package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  170. package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  171. package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  172. package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  173. package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  174. package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  175. package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  176. package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  177. package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  178. package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  179. package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  180. package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  181. package/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  182. package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  183. package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  184. package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  185. package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  186. package/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  187. package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  188. package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  189. package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  190. package/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  191. package/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  192. package/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  193. package/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  194. package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
  195. package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  196. package/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  197. package/skills/web-design-guidelines/SKILL.md +0 -39
package/dist/index.js CHANGED
@@ -54,6 +54,11 @@ const data_1 = require("./data");
54
54
  const dashboard_1 = require("./dashboard");
55
55
  const agent_dispatch_1 = require("./agent-dispatch");
56
56
  const continuity_1 = require("./continuity");
57
+ const l0_indexer_1 = require("./l0-indexer");
58
+ const context_bus_1 = require("./context-bus");
59
+ const token_budget_1 = require("./token-budget");
60
+ const migrate_json_to_sqlite_1 = require("./migrate-json-to-sqlite");
61
+ const uri_resolver_1 = require("./uri-resolver");
57
62
  const judge_1 = require("./judge");
58
63
  const skill_chain_1 = require("./skill-chain");
59
64
  const path_1 = __importDefault(require("path"));
@@ -1410,9 +1415,27 @@ program
1410
1415
  case 'dec':
1411
1416
  continuityDecisions(projectPath);
1412
1417
  break;
1418
+ case 'index':
1419
+ continuityIndex(projectPath);
1420
+ break;
1421
+ case 'budget':
1422
+ continuityBudget(projectPath);
1423
+ break;
1424
+ case 'bus':
1425
+ continuityBus(projectPath);
1426
+ break;
1427
+ case 'mcp':
1428
+ continuityMcp(projectPath);
1429
+ break;
1430
+ case 'migrate':
1431
+ continuityMigrate(projectPath);
1432
+ break;
1433
+ case 'export':
1434
+ continuityExport(projectPath);
1435
+ break;
1413
1436
  default:
1414
1437
  console.log(chalk_1.default.red(`Unknown: ${cmd}`));
1415
- console.log(chalk_1.default.gray('Available: init, status, reset, learnings, decisions'));
1438
+ console.log(chalk_1.default.gray('Available: init, status, reset, learnings, decisions, index, budget, bus, mcp, migrate, export'));
1416
1439
  }
1417
1440
  });
1418
1441
  function continuityInit(projectPath) {
@@ -1502,6 +1525,134 @@ function continuityDecisions(projectPath) {
1502
1525
  console.log((0, theme_1.dim)(` ${formatTimeAgoCli(d.timestamp)} | ${d.agent || 'unknown'}\n`));
1503
1526
  }
1504
1527
  }
1528
+ function continuityIndex(projectPath) {
1529
+ if (!(0, continuity_1.hasCmDir)(projectPath)) {
1530
+ console.log((0, box_1.renderResult)('warning', 'No .cm/ directory found. Run: cm continuity init'));
1531
+ return;
1532
+ }
1533
+ console.log((0, box_1.renderCommandHeader)('Refreshing L0 Indexes', '🗂️'));
1534
+ const result = (0, l0_indexer_1.refreshAllIndexes)(projectPath);
1535
+ const learningsLines = result.learnings.split('\n').length;
1536
+ const skeletonLines = result.skeleton.split('\n').length;
1537
+ console.log((0, theme_1.success)(` ✅ learnings-index.md (${learningsLines} lines)`));
1538
+ console.log((0, theme_1.success)(` ✅ skeleton-index.md (${skeletonLines} lines)`));
1539
+ console.log((0, theme_1.success)(' ✅ Continuity abstract generated'));
1540
+ console.log((0, theme_1.dim)(`\n Files written to .cm/`));
1541
+ }
1542
+ function continuityBudget(projectPath) {
1543
+ const budget = (0, token_budget_1.loadBudget)(projectPath);
1544
+ console.log((0, box_1.renderCommandHeader)('Token Budget', '💰'));
1545
+ console.log('\n' + (0, token_budget_1.generateBudgetReport)(budget) + '\n');
1546
+ }
1547
+ function continuityBus(projectPath) {
1548
+ const bus = (0, context_bus_1.readBus)(projectPath);
1549
+ if (!bus) {
1550
+ console.log((0, box_1.renderResult)('info', 'No active context bus. Start a chain to initialize.'));
1551
+ return;
1552
+ }
1553
+ console.log((0, box_1.renderCommandHeader)(`Context Bus — ${bus.pipeline}`, '🚌'));
1554
+ console.log((0, theme_1.dim)(` Session: ${bus.session_id}`));
1555
+ console.log((0, theme_1.dim)(` Step: ${bus.current_step || '(none)'}`));
1556
+ console.log((0, theme_1.dim)(` Started: ${bus.started_at}`));
1557
+ console.log((0, theme_1.dim)(` Updated: ${bus.updated_at}`));
1558
+ const steps = Object.keys(bus.shared_context);
1559
+ if (steps.length > 0) {
1560
+ console.log((0, theme_1.brand)('\n Completed Steps:'));
1561
+ for (const skill of steps) {
1562
+ const out = bus.shared_context[skill];
1563
+ console.log((0, theme_1.success)(` ✅ ${skill}`) + ((out === null || out === void 0 ? void 0 : out.summary) ? (0, theme_1.dim)(` — ${out.summary}`) : ''));
1564
+ }
1565
+ }
1566
+ console.log((0, theme_1.dim)('\n Resource State:'));
1567
+ for (const [k, v] of Object.entries(bus.resource_state)) {
1568
+ console.log((0, theme_1.dim)(` ${k}: ${v || 'not indexed'}`));
1569
+ }
1570
+ }
1571
+ function continuityMigrate(projectPath) {
1572
+ if (!(0, continuity_1.hasCmDir)(projectPath)) {
1573
+ console.log((0, box_1.renderResult)('warning', 'No .cm/ directory found. Run: cm continuity init'));
1574
+ return;
1575
+ }
1576
+ console.log((0, box_1.renderCommandHeader)('Migrate JSON → SQLite', '🗃️'));
1577
+ console.log((0, theme_1.dim)(' Reading learnings.json + decisions.json → .cm/context.db\n'));
1578
+ try {
1579
+ const result = (0, migrate_json_to_sqlite_1.migrateJsonToSqlite)(projectPath);
1580
+ console.log((0, theme_1.success)(` ✅ Learnings migrated: ${result.learnings.migrated} (skipped: ${result.learnings.skipped})`));
1581
+ console.log((0, theme_1.success)(` ✅ Decisions migrated: ${result.decisions.migrated} (skipped: ${result.decisions.skipped})`));
1582
+ if (result.backupCreated)
1583
+ console.log((0, theme_1.dim)(' 📦 Backups created: learnings.json.backup, decisions.json.backup'));
1584
+ console.log((0, theme_1.dim)(`\n DB: ${result.dbPath}`));
1585
+ }
1586
+ catch (err) {
1587
+ console.log((0, theme_1.error)(` ❌ Migration failed: ${err.message}`));
1588
+ }
1589
+ }
1590
+ function continuityExport(projectPath) {
1591
+ if (!(0, continuity_1.hasCmDir)(projectPath)) {
1592
+ console.log((0, box_1.renderResult)('warning', 'No .cm/ directory found. Run: cm continuity init'));
1593
+ return;
1594
+ }
1595
+ console.log((0, box_1.renderCommandHeader)('Export SQLite → JSON', '📤'));
1596
+ try {
1597
+ const result = (0, migrate_json_to_sqlite_1.exportSqliteToJson)(projectPath);
1598
+ console.log((0, theme_1.success)(` ✅ Learnings exported: ${result.learnings} → ${result.learningsPath}`));
1599
+ console.log((0, theme_1.success)(` ✅ Decisions exported: ${result.decisions} → ${result.decisionsPath}`));
1600
+ }
1601
+ catch (err) {
1602
+ console.log((0, theme_1.error)(` ❌ Export failed: ${err.message}`));
1603
+ }
1604
+ }
1605
+ function continuityMcp(projectPath) {
1606
+ const mcpPath = path_1.default.join(__dirname, 'mcp-context-server.js');
1607
+ console.log((0, box_1.renderCommandHeader)('MCP Context Server', '🔌'));
1608
+ console.log((0, theme_1.dim)(' Runs as a stdio MCP server exposing 7 context tools.\n'));
1609
+ console.log((0, box_1.renderKeyValue)([
1610
+ ['Binary', mcpPath],
1611
+ ['Project', projectPath],
1612
+ ['Tools', 'cm_query, cm_resolve, cm_bus_read, cm_bus_write, cm_budget_check, cm_memory_decay, cm_index_refresh'],
1613
+ ]));
1614
+ console.log((0, theme_1.brand)('\n Claude Desktop config snippet:'));
1615
+ console.log((0, theme_1.dim)(` {
1616
+ "mcpServers": {
1617
+ "cm-context": {
1618
+ "command": "node",
1619
+ "args": ["${mcpPath}", "--project", "${projectPath}"]
1620
+ }
1621
+ }
1622
+ }`));
1623
+ console.log((0, theme_1.info)('\n 💡 Add the above to ~/Library/Application Support/Claude/claude_desktop_config.json'));
1624
+ }
1625
+ // ─── Resolve Command ──────────────────────────────────────────────────────────
1626
+ program
1627
+ .command('resolve <uri>')
1628
+ .description('Resolve a cm:// URI and print content (e.g. cm://memory/learnings)')
1629
+ .option('-d, --depth <depth>', 'Loading depth: L0 | L1 | L2', 'L1')
1630
+ .option('-p, --project <path>', 'Project path (default: cwd)')
1631
+ .action((uri, opts) => {
1632
+ var _a;
1633
+ const projectPath = path_1.default.resolve(opts.project || process.cwd());
1634
+ const depth = (['L0', 'L1', 'L2'].includes((_a = opts.depth) !== null && _a !== void 0 ? _a : '') ? opts.depth : 'L1');
1635
+ try {
1636
+ const resolved = (0, uri_resolver_1.resolve)(uri, projectPath, depth);
1637
+ console.log((0, box_1.renderCommandHeader)(`cm:// Resolver — ${depth}`, '🔗'));
1638
+ console.log((0, box_1.renderKeyValue)([
1639
+ ['URI', resolved.uri],
1640
+ ['Depth', resolved.depth],
1641
+ ['Found', String(resolved.found)],
1642
+ ['Tokens', String(resolved.tokenEstimate)],
1643
+ ]));
1644
+ if (resolved.found) {
1645
+ console.log((0, theme_1.brand)('\n Content:\n'));
1646
+ console.log(resolved.content);
1647
+ }
1648
+ else {
1649
+ console.log((0, theme_1.warning)('\n Not found — no content available at this URI.'));
1650
+ }
1651
+ }
1652
+ catch (err) {
1653
+ console.log((0, theme_1.error)(` ❌ ${err.message}`));
1654
+ }
1655
+ });
1505
1656
  // ─── Brain Command (Enhanced Memory Explorer) ────────────────────────────────
1506
1657
  program
1507
1658
  .command('brain [cmd]')
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateLearningsIndex = generateLearningsIndex;
7
+ exports.generateSkeletonIndex = generateSkeletonIndex;
8
+ exports.generateContinuityAbstract = generateContinuityAbstract;
9
+ exports.refreshAllIndexes = refreshAllIndexes;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ // ─── Constants ──────────────────────────────────────────────────────────────
13
+ const CM_DIR = '.cm';
14
+ // ─── Learnings Index (L0) ───────────────────────────────────────────────────
15
+ function generateLearningsIndex(projectPath) {
16
+ const learningsPath = path_1.default.join(projectPath, CM_DIR, 'memory', 'learnings.json');
17
+ let learnings = [];
18
+ try {
19
+ if (fs_1.default.existsSync(learningsPath)) {
20
+ learnings = JSON.parse(fs_1.default.readFileSync(learningsPath, 'utf-8'));
21
+ }
22
+ }
23
+ catch (_a) {
24
+ learnings = [];
25
+ }
26
+ const active = learnings.filter(l => !l.status || l.status === 'active');
27
+ const lines = [
28
+ `# Learnings Index (${active.length} entries)`,
29
+ `> L0 summary — read full entry by ID when needed`,
30
+ '',
31
+ ];
32
+ for (const l of active) {
33
+ const id = l.id || '?';
34
+ const summary = l.error || l.whatFailed || '(no description)';
35
+ const scope = l.scope ? `[${l.scope}` : '[global';
36
+ const ttl = l.ttl ? `, TTL:${l.ttl}d]` : ']';
37
+ const reinforce = l.reinforceCount && l.reinforceCount > 0 ? ` ×${l.reinforceCount}` : '';
38
+ lines.push(`- ${id}: ${summary} ${scope}${ttl}${reinforce}`);
39
+ }
40
+ const index = lines.join('\n');
41
+ // Write to disk
42
+ const outPath = path_1.default.join(projectPath, CM_DIR, 'learnings-index.md');
43
+ try {
44
+ fs_1.default.writeFileSync(outPath, index, 'utf-8');
45
+ }
46
+ catch ( /* non-fatal */_b) { /* non-fatal */ }
47
+ return index;
48
+ }
49
+ // ─── Skeleton Index (L0) ────────────────────────────────────────────────────
50
+ function generateSkeletonIndex(projectPath) {
51
+ const skeletonPath = path_1.default.join(projectPath, CM_DIR, 'skeleton.md');
52
+ if (!fs_1.default.existsSync(skeletonPath)) {
53
+ const fallback = '# Skeleton Index\n> No skeleton.md found. Run `cm continuity index` to generate.\n';
54
+ const outPath = path_1.default.join(projectPath, CM_DIR, 'skeleton-index.md');
55
+ try {
56
+ fs_1.default.writeFileSync(outPath, fallback, 'utf-8');
57
+ }
58
+ catch ( /* non-fatal */_a) { /* non-fatal */ }
59
+ return fallback;
60
+ }
61
+ const content = fs_1.default.readFileSync(skeletonPath, 'utf-8');
62
+ const lines = content.split('\n');
63
+ const result = ['# Skeleton Index (L0)\n'];
64
+ // Extract Entry Points section
65
+ const entryIdx = lines.findIndex(l => /entry points?/i.test(l));
66
+ if (entryIdx !== -1) {
67
+ result.push('## Entry Points');
68
+ for (let i = entryIdx + 1; i < Math.min(entryIdx + 8, lines.length); i++) {
69
+ if (lines[i].startsWith('#'))
70
+ break;
71
+ if (lines[i].trim())
72
+ result.push(lines[i]);
73
+ }
74
+ result.push('');
75
+ }
76
+ // Extract top-level src/ module names from directory tree
77
+ const modules = [];
78
+ for (const line of lines) {
79
+ // Match lines like " continuity.ts (469 lines)" or "src/continuity.ts"
80
+ const m = line.match(/(?:^|\s{2,4})(\w[\w-]+)\.ts\b/);
81
+ if (m && !m[1].includes('test') && !m[1].includes('spec')) {
82
+ if (!modules.includes(m[1]))
83
+ modules.push(m[1]);
84
+ }
85
+ if (modules.length >= 12)
86
+ break;
87
+ }
88
+ if (modules.length > 0) {
89
+ result.push('## Core Modules');
90
+ result.push(modules.map(m => `- ${m}`).join('\n'));
91
+ result.push('');
92
+ }
93
+ // Extract Config Files section
94
+ const configIdx = lines.findIndex(l => /config files?/i.test(l));
95
+ if (configIdx !== -1) {
96
+ result.push('## Config');
97
+ for (let i = configIdx + 1; i < Math.min(configIdx + 6, lines.length); i++) {
98
+ if (lines[i].startsWith('#'))
99
+ break;
100
+ if (lines[i].trim())
101
+ result.push(lines[i]);
102
+ }
103
+ result.push('');
104
+ }
105
+ // Extract Tests section
106
+ const testIdx = lines.findIndex(l => /^#+\s*tests?/i.test(l));
107
+ if (testIdx !== -1) {
108
+ result.push('## Tests');
109
+ for (let i = testIdx + 1; i < Math.min(testIdx + 6, lines.length); i++) {
110
+ if (lines[i].startsWith('#'))
111
+ break;
112
+ if (lines[i].trim())
113
+ result.push(lines[i]);
114
+ }
115
+ }
116
+ const index = result.join('\n');
117
+ const outPath = path_1.default.join(projectPath, CM_DIR, 'skeleton-index.md');
118
+ try {
119
+ fs_1.default.writeFileSync(outPath, index, 'utf-8');
120
+ }
121
+ catch ( /* non-fatal */_b) { /* non-fatal */ }
122
+ return index;
123
+ }
124
+ // ─── Continuity Abstract ────────────────────────────────────────────────────
125
+ function generateContinuityAbstract(projectPath) {
126
+ const contPath = path_1.default.join(projectPath, CM_DIR, 'CONTINUITY.md');
127
+ if (!fs_1.default.existsSync(contPath)) {
128
+ return '> No session active.';
129
+ }
130
+ const content = fs_1.default.readFileSync(contPath, 'utf-8');
131
+ // Extract key fields
132
+ const phaseMatch = content.match(/Current Phase:\s*(.+)/);
133
+ const iterMatch = content.match(/Current Iteration:\s*(\d+)/);
134
+ const goalMatch = content.match(/## Active Goal\s*\n([^\n#]+)/);
135
+ const taskMatch = content.match(/- Title:\s*(.+)/);
136
+ const nextMatch = content.match(/## Next Actions.*?\n1\.\s*(.+)/);
137
+ const phase = phaseMatch ? phaseMatch[1].trim() : 'idle';
138
+ const iter = iterMatch ? iterMatch[1] : '0';
139
+ const goal = goalMatch ? goalMatch[1].trim() : 'No active goal';
140
+ const task = taskMatch ? taskMatch[1].trim() : null;
141
+ const next = nextMatch ? nextMatch[1].trim() : null;
142
+ const parts = [
143
+ `**Phase:** ${phase} (iter ${iter}) | **Goal:** ${goal}`,
144
+ ];
145
+ if (task)
146
+ parts.push(`**Task:** ${task}`);
147
+ if (next)
148
+ parts.push(`**Next:** ${next}`);
149
+ return parts.join('\n');
150
+ }
151
+ // ─── Refresh All ────────────────────────────────────────────────────────────
152
+ function refreshAllIndexes(projectPath) {
153
+ return {
154
+ learnings: generateLearningsIndex(projectPath),
155
+ skeleton: generateSkeletonIndex(projectPath),
156
+ continuity: generateContinuityAbstract(projectPath),
157
+ };
158
+ }