codymaster 4.4.4 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) 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 +7 -1
  16. package/skills/_shared/helpers.md +50 -14
  17. package/skills/cm-autopilot/SKILL.md +29 -0
  18. package/skills/cm-autopilot/scripts/autopilot.py +190 -0
  19. package/skills/cm-continuity/SKILL.md +90 -28
  20. package/skills/cm-quality-gate/SKILL.md +11 -1
  21. package/skills/cm-safe-deploy/SKILL.md +38 -2
  22. package/skills/cm-security-gate/SKILL.md +158 -34
  23. package/skills/cm-skill-chain/SKILL.md +47 -1
  24. package/skills/cm-start/SKILL.md +11 -2
  25. package/skills/cm-test-gate/SKILL.md +3 -0
  26. package/skills/boxme-git-config/SKILL.md +0 -56
  27. package/skills/boxme-local-dev/SKILL.md +0 -66
  28. package/skills/jobs-to-be-done/SKILL.md +0 -266
  29. package/skills/jobs-to-be-done/references/case-studies.md +0 -154
  30. package/skills/jobs-to-be-done/references/competitive-strategy.md +0 -280
  31. package/skills/jobs-to-be-done/references/diagnostics.md +0 -158
  32. package/skills/jobs-to-be-done/references/innovation-process.md +0 -392
  33. package/skills/jobs-to-be-done/references/organizational-change.md +0 -328
  34. package/skills/marketplace-report-crawler/SKILL.md +0 -176
  35. package/skills/marketplace-report-crawler/config/accounts.json +0 -41
  36. package/skills/marketplace-report-crawler/config/report-types.json +0 -422
  37. package/skills/marketplace-report-crawler/config/sessions.json +0 -3
  38. package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +0 -102
  39. package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +0 -114
  40. package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +0 -94
  41. package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +0 -272
  42. package/skills/marketplace-report-crawler/scripts/crawl-runner.js +0 -281
  43. package/skills/marketplace-report-crawler/scripts/session-check.sh +0 -72
  44. package/skills/marketplace-report-crawler/scripts/session-manager.sh +0 -349
  45. package/skills/marketplace-report-crawler/scripts/setup-folders.sh +0 -83
  46. package/skills/medical-research/SKILL.md +0 -194
  47. package/skills/medical-research/scripts/evidence_checker.py +0 -288
  48. package/skills/mom-test/SKILL.md +0 -267
  49. package/skills/mom-test/references/avoiding-bad-data.md +0 -221
  50. package/skills/mom-test/references/case-studies.md +0 -306
  51. package/skills/mom-test/references/commitment-advancement.md +0 -219
  52. package/skills/mom-test/references/finding-conversations.md +0 -251
  53. package/skills/mom-test/references/processing-learning.md +0 -256
  54. package/skills/mom-test/references/question-patterns.md +0 -198
  55. package/skills/pandasai-analytics/SKILL.md +0 -251
  56. package/skills/release-it/SKILL.md +0 -235
  57. package/skills/release-it/references/anti-patterns.md +0 -279
  58. package/skills/release-it/references/capacity-planning.md +0 -285
  59. package/skills/release-it/references/chaos-engineering.md +0 -325
  60. package/skills/release-it/references/deployment-strategies.md +0 -331
  61. package/skills/release-it/references/observability.md +0 -301
  62. package/skills/release-it/references/stability-patterns.md +0 -355
  63. package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +0 -37
  64. package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +0 -34
  65. package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +0 -51
  66. package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +0 -39
  67. package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +0 -52
  68. package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +0 -25
  69. package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +0 -31
  70. package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +0 -25
  71. package/skills/skill-creator-ultra/README.md +0 -1242
  72. package/skills/skill-creator-ultra/SKILL.md +0 -388
  73. package/skills/skill-creator-ultra/agents/analyzer.md +0 -274
  74. package/skills/skill-creator-ultra/agents/comparator.md +0 -202
  75. package/skills/skill-creator-ultra/agents/grader.md +0 -223
  76. package/skills/skill-creator-ultra/assets/eval_review.html +0 -146
  77. package/skills/skill-creator-ultra/eval-viewer/generate_review.py +0 -471
  78. package/skills/skill-creator-ultra/eval-viewer/viewer.html +0 -1325
  79. package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +0 -109
  80. package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +0 -116
  81. package/skills/skill-creator-ultra/examples/example_api_docs.md +0 -189
  82. package/skills/skill-creator-ultra/examples/example_db_migration.md +0 -253
  83. package/skills/skill-creator-ultra/examples/example_git_commit.md +0 -111
  84. package/skills/skill-creator-ultra/install.ps1 +0 -289
  85. package/skills/skill-creator-ultra/install.sh +0 -313
  86. package/skills/skill-creator-ultra/phases/phase1_interview.md +0 -202
  87. package/skills/skill-creator-ultra/phases/phase2_extract.md +0 -55
  88. package/skills/skill-creator-ultra/phases/phase3_detect.md +0 -57
  89. package/skills/skill-creator-ultra/phases/phase4_generate.md +0 -543
  90. package/skills/skill-creator-ultra/phases/phase5_test.md +0 -319
  91. package/skills/skill-creator-ultra/phases/phase6_eval.md +0 -301
  92. package/skills/skill-creator-ultra/phases/phase7_iterate.md +0 -103
  93. package/skills/skill-creator-ultra/phases/phase8_optimize.md +0 -113
  94. package/skills/skill-creator-ultra/resources/advanced_patterns.md +0 -499
  95. package/skills/skill-creator-ultra/resources/anti_patterns.md +0 -376
  96. package/skills/skill-creator-ultra/resources/blueprints.md +0 -498
  97. package/skills/skill-creator-ultra/resources/checklist.md +0 -243
  98. package/skills/skill-creator-ultra/resources/composition_cookbook.md +0 -291
  99. package/skills/skill-creator-ultra/resources/description_optimization.md +0 -90
  100. package/skills/skill-creator-ultra/resources/eval_guide.md +0 -133
  101. package/skills/skill-creator-ultra/resources/industry_questions.md +0 -189
  102. package/skills/skill-creator-ultra/resources/interview_questions.md +0 -200
  103. package/skills/skill-creator-ultra/resources/pattern_detection.md +0 -200
  104. package/skills/skill-creator-ultra/resources/prompt_engineering.md +0 -531
  105. package/skills/skill-creator-ultra/resources/schemas.md +0 -430
  106. package/skills/skill-creator-ultra/resources/script_integration.md +0 -593
  107. package/skills/skill-creator-ultra/resources/scripts_guide.md +0 -339
  108. package/skills/skill-creator-ultra/resources/skill_template.md +0 -124
  109. package/skills/skill-creator-ultra/resources/skill_writing_guide.md +0 -634
  110. package/skills/skill-creator-ultra/resources/versioning_guide.md +0 -193
  111. package/skills/skill-creator-ultra/scripts/ci_eval.py +0 -200
  112. package/skills/skill-creator-ultra/scripts/package_skill.py +0 -165
  113. package/skills/skill-creator-ultra/scripts/simulate_skill.py +0 -398
  114. package/skills/skill-creator-ultra/scripts/skill_audit.py +0 -611
  115. package/skills/skill-creator-ultra/scripts/skill_compare.py +0 -265
  116. package/skills/skill-creator-ultra/scripts/skill_export.py +0 -334
  117. package/skills/skill-creator-ultra/scripts/skill_scaffold.py +0 -403
  118. package/skills/skill-creator-ultra/scripts/skill_stats.py +0 -339
  119. package/skills/skill-creator-ultra/scripts/validate_skill.py +0 -411
  120. package/skills/tailwind-mastery/SKILL.md +0 -229
  121. package/skills/vercel-react-best-practices/AGENTS.md +0 -3373
  122. package/skills/vercel-react-best-practices/README.md +0 -123
  123. package/skills/vercel-react-best-practices/SKILL.md +0 -143
  124. package/skills/vercel-react-best-practices/rules/_sections.md +0 -46
  125. package/skills/vercel-react-best-practices/rules/_template.md +0 -28
  126. package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  127. package/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  128. package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  129. package/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  130. package/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  131. package/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  132. package/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  133. package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  134. package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  135. package/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  136. package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  137. package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  138. package/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  139. package/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  140. package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  141. package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  142. package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  143. package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  144. package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  145. package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  146. package/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  147. package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  148. package/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  149. package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  150. package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  151. package/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  152. package/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  153. package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  154. package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  155. package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  156. package/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  157. package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  158. package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  159. package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  160. package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  161. package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  162. package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  163. package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  164. package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  165. package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  166. package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  167. package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  168. package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  169. package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  170. package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  171. package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  172. package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  173. package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  174. package/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  175. package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  176. package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  177. package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  178. package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  179. package/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  180. package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  181. package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  182. package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  183. package/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  184. package/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  185. package/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  186. package/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  187. package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
  188. package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  189. package/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  190. 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
+ }