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