@mycodemap/mycodemap 0.5.2-beta.1 → 2.0.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 (272) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +138 -854
  3. package/README.zh-CN.md +1096 -0
  4. package/dist/cli/commands/analyze-options.d.ts.map +1 -1
  5. package/dist/cli/commands/analyze-options.js +8 -0
  6. package/dist/cli/commands/analyze-options.js.map +1 -1
  7. package/dist/cli/commands/analyze.d.ts.map +1 -1
  8. package/dist/cli/commands/analyze.js +60 -41
  9. package/dist/cli/commands/analyze.js.map +1 -1
  10. package/dist/cli/commands/benchmark.d.ts +8 -0
  11. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  12. package/dist/cli/commands/benchmark.js +150 -0
  13. package/dist/cli/commands/benchmark.js.map +1 -0
  14. package/dist/cli/commands/deps.d.ts +2 -1
  15. package/dist/cli/commands/deps.d.ts.map +1 -1
  16. package/dist/cli/commands/deps.js +107 -78
  17. package/dist/cli/commands/deps.js.map +1 -1
  18. package/dist/cli/commands/doctor.d.ts +3 -0
  19. package/dist/cli/commands/doctor.d.ts.map +1 -0
  20. package/dist/cli/commands/doctor.js +34 -0
  21. package/dist/cli/commands/doctor.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +7 -2
  23. package/dist/cli/commands/init.d.ts.map +1 -1
  24. package/dist/cli/commands/init.js +22 -34
  25. package/dist/cli/commands/init.js.map +1 -1
  26. package/dist/cli/commands/publish-status.d.ts +31 -0
  27. package/dist/cli/commands/publish-status.d.ts.map +1 -0
  28. package/dist/cli/commands/publish-status.js +101 -0
  29. package/dist/cli/commands/publish-status.js.map +1 -0
  30. package/dist/cli/commands/query.d.ts +1 -0
  31. package/dist/cli/commands/query.d.ts.map +1 -1
  32. package/dist/cli/commands/query.js +123 -140
  33. package/dist/cli/commands/query.js.map +1 -1
  34. package/dist/cli/commands/readiness-gate.d.ts +25 -0
  35. package/dist/cli/commands/readiness-gate.d.ts.map +1 -0
  36. package/dist/cli/commands/readiness-gate.js +197 -0
  37. package/dist/cli/commands/readiness-gate.js.map +1 -0
  38. package/dist/cli/commands/ship/checker.d.ts +4 -9
  39. package/dist/cli/commands/ship/checker.d.ts.map +1 -1
  40. package/dist/cli/commands/ship/checker.js +60 -22
  41. package/dist/cli/commands/ship/checker.js.map +1 -1
  42. package/dist/cli/commands/ship/monitor.d.ts +6 -1
  43. package/dist/cli/commands/ship/monitor.d.ts.map +1 -1
  44. package/dist/cli/commands/ship/monitor.js +223 -46
  45. package/dist/cli/commands/ship/monitor.js.map +1 -1
  46. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  47. package/dist/cli/commands/ship/pipeline.js +14 -5
  48. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  49. package/dist/cli/commands/ship/rules/quality-rules.d.ts +12 -8
  50. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -1
  51. package/dist/cli/commands/ship/rules/quality-rules.js +49 -34
  52. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -1
  53. package/dist/cli/config-loader.js +1 -1
  54. package/dist/cli/config-loader.js.map +1 -1
  55. package/dist/cli/doctor/check-agent.d.ts +3 -0
  56. package/dist/cli/doctor/check-agent.d.ts.map +1 -0
  57. package/dist/cli/doctor/check-agent.js +60 -0
  58. package/dist/cli/doctor/check-agent.js.map +1 -0
  59. package/dist/cli/doctor/check-ghost-commands.d.ts +3 -0
  60. package/dist/cli/doctor/check-ghost-commands.d.ts.map +1 -0
  61. package/dist/cli/doctor/check-ghost-commands.js +86 -0
  62. package/dist/cli/doctor/check-ghost-commands.js.map +1 -0
  63. package/dist/cli/doctor/check-native-deps.d.ts +3 -0
  64. package/dist/cli/doctor/check-native-deps.d.ts.map +1 -0
  65. package/dist/cli/doctor/check-native-deps.js +54 -0
  66. package/dist/cli/doctor/check-native-deps.js.map +1 -0
  67. package/dist/cli/doctor/check-workspace-drift.d.ts +3 -0
  68. package/dist/cli/doctor/check-workspace-drift.d.ts.map +1 -0
  69. package/dist/cli/doctor/check-workspace-drift.js +83 -0
  70. package/dist/cli/doctor/check-workspace-drift.js.map +1 -0
  71. package/dist/cli/doctor/formatter.d.ts +20 -0
  72. package/dist/cli/doctor/formatter.d.ts.map +1 -0
  73. package/dist/cli/doctor/formatter.js +91 -0
  74. package/dist/cli/doctor/formatter.js.map +1 -0
  75. package/dist/cli/doctor/index.d.ts +8 -0
  76. package/dist/cli/doctor/index.d.ts.map +1 -0
  77. package/dist/cli/doctor/index.js +9 -0
  78. package/dist/cli/doctor/index.js.map +1 -0
  79. package/dist/cli/doctor/orchestrator.d.ts +3 -0
  80. package/dist/cli/doctor/orchestrator.d.ts.map +1 -0
  81. package/dist/cli/doctor/orchestrator.js +37 -0
  82. package/dist/cli/doctor/orchestrator.js.map +1 -0
  83. package/dist/cli/doctor/types.d.ts +19 -0
  84. package/dist/cli/doctor/types.d.ts.map +1 -0
  85. package/dist/cli/doctor/types.js +4 -0
  86. package/dist/cli/doctor/types.js.map +1 -0
  87. package/dist/cli/first-run-guide.d.ts.map +1 -1
  88. package/dist/cli/first-run-guide.js +10 -12
  89. package/dist/cli/first-run-guide.js.map +1 -1
  90. package/dist/cli/index.js +80 -21
  91. package/dist/cli/index.js.map +1 -1
  92. package/dist/cli/init/hooks.d.ts +17 -0
  93. package/dist/cli/init/hooks.d.ts.map +1 -0
  94. package/dist/cli/init/hooks.js +220 -0
  95. package/dist/cli/init/hooks.js.map +1 -0
  96. package/dist/cli/init/receipt.d.ts +4 -0
  97. package/dist/cli/init/receipt.d.ts.map +1 -0
  98. package/dist/cli/init/receipt.js +117 -0
  99. package/dist/cli/init/receipt.js.map +1 -0
  100. package/dist/cli/init/reconciler.d.ts +44 -0
  101. package/dist/cli/init/reconciler.d.ts.map +1 -0
  102. package/dist/cli/init/reconciler.js +377 -0
  103. package/dist/cli/init/reconciler.js.map +1 -0
  104. package/dist/cli/init/rule-templates.d.ts +9 -0
  105. package/dist/cli/init/rule-templates.d.ts.map +1 -0
  106. package/dist/cli/init/rule-templates.js +105 -0
  107. package/dist/cli/init/rule-templates.js.map +1 -0
  108. package/dist/cli/init/rules.d.ts +13 -0
  109. package/dist/cli/init/rules.d.ts.map +1 -0
  110. package/dist/cli/init/rules.js +113 -0
  111. package/dist/cli/init/rules.js.map +1 -0
  112. package/dist/cli/interface-contract/commands/analyze.d.ts +3 -0
  113. package/dist/cli/interface-contract/commands/analyze.d.ts.map +1 -0
  114. package/dist/cli/interface-contract/commands/analyze.js +138 -0
  115. package/dist/cli/interface-contract/commands/analyze.js.map +1 -0
  116. package/dist/cli/interface-contract/commands/benchmark.d.ts +3 -0
  117. package/dist/cli/interface-contract/commands/benchmark.d.ts.map +1 -0
  118. package/dist/cli/interface-contract/commands/benchmark.js +107 -0
  119. package/dist/cli/interface-contract/commands/benchmark.js.map +1 -0
  120. package/dist/cli/interface-contract/commands/deps.d.ts +3 -0
  121. package/dist/cli/interface-contract/commands/deps.d.ts.map +1 -0
  122. package/dist/cli/interface-contract/commands/deps.js +129 -0
  123. package/dist/cli/interface-contract/commands/deps.js.map +1 -0
  124. package/dist/cli/interface-contract/commands/doctor.d.ts +3 -0
  125. package/dist/cli/interface-contract/commands/doctor.d.ts.map +1 -0
  126. package/dist/cli/interface-contract/commands/doctor.js +59 -0
  127. package/dist/cli/interface-contract/commands/doctor.js.map +1 -0
  128. package/dist/cli/interface-contract/commands/index.d.ts +9 -0
  129. package/dist/cli/interface-contract/commands/index.d.ts.map +1 -0
  130. package/dist/cli/interface-contract/commands/index.js +18 -0
  131. package/dist/cli/interface-contract/commands/index.js.map +1 -0
  132. package/dist/cli/interface-contract/commands/init.d.ts +3 -0
  133. package/dist/cli/interface-contract/commands/init.d.ts.map +1 -0
  134. package/dist/cli/interface-contract/commands/init.js +87 -0
  135. package/dist/cli/interface-contract/commands/init.js.map +1 -0
  136. package/dist/cli/interface-contract/commands/query.d.ts +3 -0
  137. package/dist/cli/interface-contract/commands/query.d.ts.map +1 -0
  138. package/dist/cli/interface-contract/commands/query.js +185 -0
  139. package/dist/cli/interface-contract/commands/query.js.map +1 -0
  140. package/dist/cli/interface-contract/index.d.ts +22 -0
  141. package/dist/cli/interface-contract/index.d.ts.map +1 -0
  142. package/dist/cli/interface-contract/index.js +41 -0
  143. package/dist/cli/interface-contract/index.js.map +1 -0
  144. package/dist/cli/interface-contract/schema.d.ts +30 -0
  145. package/dist/cli/interface-contract/schema.d.ts.map +1 -0
  146. package/dist/cli/interface-contract/schema.js +72 -0
  147. package/dist/cli/interface-contract/schema.js.map +1 -0
  148. package/dist/cli/interface-contract/types.d.ts +76 -0
  149. package/dist/cli/interface-contract/types.d.ts.map +1 -0
  150. package/dist/cli/interface-contract/types.js +4 -0
  151. package/dist/cli/interface-contract/types.js.map +1 -0
  152. package/dist/cli/output/apply-suggestion.d.ts +12 -0
  153. package/dist/cli/output/apply-suggestion.d.ts.map +1 -0
  154. package/dist/cli/output/apply-suggestion.js +29 -0
  155. package/dist/cli/output/apply-suggestion.js.map +1 -0
  156. package/dist/cli/output/error-codes.d.ts +22 -0
  157. package/dist/cli/output/error-codes.d.ts.map +1 -0
  158. package/dist/cli/output/error-codes.js +82 -0
  159. package/dist/cli/output/error-codes.js.map +1 -0
  160. package/dist/cli/output/errors.d.ts +14 -0
  161. package/dist/cli/output/errors.d.ts.map +1 -0
  162. package/dist/cli/output/errors.js +170 -0
  163. package/dist/cli/output/errors.js.map +1 -0
  164. package/dist/cli/output/index.d.ts +13 -0
  165. package/dist/cli/output/index.d.ts.map +1 -0
  166. package/dist/cli/output/index.js +11 -0
  167. package/dist/cli/output/index.js.map +1 -0
  168. package/dist/cli/output/mode.d.ts +12 -0
  169. package/dist/cli/output/mode.d.ts.map +1 -0
  170. package/dist/cli/output/mode.js +23 -0
  171. package/dist/cli/output/mode.js.map +1 -0
  172. package/dist/cli/output/progress.d.ts +9 -0
  173. package/dist/cli/output/progress.d.ts.map +1 -0
  174. package/dist/cli/output/progress.js +65 -0
  175. package/dist/cli/output/progress.js.map +1 -0
  176. package/dist/cli/output/render.d.ts +11 -0
  177. package/dist/cli/output/render.d.ts.map +1 -0
  178. package/dist/cli/output/render.js +18 -0
  179. package/dist/cli/output/render.js.map +1 -0
  180. package/dist/cli/output/types.d.ts +53 -0
  181. package/dist/cli/output/types.d.ts.map +1 -0
  182. package/dist/cli/output/types.js +14 -0
  183. package/dist/cli/output/types.js.map +1 -0
  184. package/dist/cli/output/wasm-fallback.d.ts +13 -0
  185. package/dist/cli/output/wasm-fallback.d.ts.map +1 -0
  186. package/dist/cli/output/wasm-fallback.js +92 -0
  187. package/dist/cli/output/wasm-fallback.js.map +1 -0
  188. package/dist/cli/paths.d.ts +4 -2
  189. package/dist/cli/paths.d.ts.map +1 -1
  190. package/dist/cli/paths.js +13 -5
  191. package/dist/cli/paths.js.map +1 -1
  192. package/dist/cli/tree-sitter-check.d.ts +6 -1
  193. package/dist/cli/tree-sitter-check.d.ts.map +1 -1
  194. package/dist/cli/tree-sitter-check.js +23 -1
  195. package/dist/cli/tree-sitter-check.js.map +1 -1
  196. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -1
  197. package/dist/infrastructure/storage/adapters/SQLiteStorage.js +2 -2
  198. package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -1
  199. package/dist/infrastructure/storage/adapters/sqlite-loader.d.ts +23 -0
  200. package/dist/infrastructure/storage/adapters/sqlite-loader.d.ts.map +1 -0
  201. package/dist/infrastructure/storage/adapters/sqlite-loader.js +210 -0
  202. package/dist/infrastructure/storage/adapters/sqlite-loader.js.map +1 -0
  203. package/dist/orchestrator/test-linker.d.ts.map +1 -1
  204. package/dist/orchestrator/test-linker.js +5 -36
  205. package/dist/orchestrator/test-linker.js.map +1 -1
  206. package/dist/orchestrator/types.d.ts +2 -0
  207. package/dist/orchestrator/types.d.ts.map +1 -1
  208. package/dist/orchestrator/types.js.map +1 -1
  209. package/dist/parser/implementations/tree-sitter-loader.d.ts +16 -0
  210. package/dist/parser/implementations/tree-sitter-loader.d.ts.map +1 -0
  211. package/dist/parser/implementations/tree-sitter-loader.js +105 -0
  212. package/dist/parser/implementations/tree-sitter-loader.js.map +1 -0
  213. package/dist/parser/implementations/tree-sitter-parser.d.ts +3 -0
  214. package/dist/parser/implementations/tree-sitter-parser.d.ts.map +1 -1
  215. package/dist/parser/implementations/tree-sitter-parser.js +8 -3
  216. package/dist/parser/implementations/tree-sitter-parser.js.map +1 -1
  217. package/dist/server/mcp/schema-adapter.d.ts +45 -0
  218. package/dist/server/mcp/schema-adapter.d.ts.map +1 -0
  219. package/dist/server/mcp/schema-adapter.js +290 -0
  220. package/dist/server/mcp/schema-adapter.js.map +1 -0
  221. package/dist/server/mcp/server.d.ts.map +1 -1
  222. package/dist/server/mcp/server.js +32 -2
  223. package/dist/server/mcp/server.js.map +1 -1
  224. package/docs/AI_ASSISTANT_SETUP.md +173 -14
  225. package/docs/README.md +40 -1
  226. package/docs/SETUP_GUIDE.md +23 -26
  227. package/docs/agents/domain.md +36 -0
  228. package/docs/agents/issue-tracker.md +22 -0
  229. package/docs/agents/triage-labels.md +15 -0
  230. package/docs/ai-guide/COMMANDS.md +125 -13
  231. package/docs/ai-guide/INTEGRATION.md +78 -11
  232. package/docs/ai-guide/OUTPUT.md +295 -2
  233. package/docs/ai-guide/PATTERNS.md +3 -3
  234. package/docs/ai-guide/PROMPTS.md +2 -2
  235. package/docs/ai-guide/QUICKSTART.md +41 -5
  236. package/docs/ai-guide/README.md +9 -9
  237. package/docs/archive/ideation/2026-04-15-executable-architecture-constitution-ideation-archive.md +70 -0
  238. package/docs/archive/ideation/2026-04-20-mycodemap-init-enhancements-ideation-archive.md +109 -0
  239. package/docs/archive/ideation/2026-04-22-harness-rules-entry-docs-optimization-ideation.md +102 -0
  240. package/docs/archive/ideation/2026-04-22-rules-claude-agents-optimization-ideation.md +107 -0
  241. package/docs/archive/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation-archive.md +54 -0
  242. package/docs/brainstorms/2026-04-22-rules-entry-docs-phase1-structure-consolidation-requirements.md +110 -0
  243. package/docs/brainstorms/999.1-mycodemap-init-enhancements-requirements.md +166 -0
  244. package/docs/exec-plans/README.md +3 -0
  245. package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +10 -22
  246. package/docs/ideation/2026-04-20-mycodemap-init-enhancements-ideation.md +51 -0
  247. package/docs/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation.md +114 -0
  248. package/docs/ideation/2026-04-29-ux-install-agent-experience-ideation.md +256 -0
  249. package/docs/lesson-learn/2026-04-19-prerelease-trusted-publishing-fix.md +119 -0
  250. package/docs/lesson-learn/image.png +0 -0
  251. package/docs/plans/2026-04-30-install-guide-and-repo-analyzer-design.md +394 -0
  252. package/docs/rules/README.md +5 -1
  253. package/docs/rules/architecture-guardrails.md +2 -1
  254. package/docs/rules/deployment.md +7 -0
  255. package/docs/rules/engineering-with-codex-openai.md +48 -9
  256. package/docs/rules/harness.md +106 -0
  257. package/docs/rules/pre-release-checklist.md +72 -33
  258. package/docs/rules/release.md +303 -0
  259. package/docs/rules/testing.md +70 -0
  260. package/docs/rules/validation.md +16 -7
  261. package/examples/claude/skills/mycodemap-repo-analyzer/SKILL.md +294 -0
  262. package/examples/claude/skills/mycodemap-repo-analyzer/references/analysis-guide.md +166 -0
  263. package/examples/claude/skills/mycodemap-repo-analyzer/references/module-analysis-guide.md +150 -0
  264. package/mycodemap.config.schema.json +1 -1
  265. package/package.json +9 -6
  266. package/scripts/hooks/templates/commit-msg +38 -0
  267. package/scripts/hooks/templates/pre-commit +224 -0
  268. package/scripts/pre-release-check.js +4 -4
  269. package/scripts/release.sh +1 -1
  270. package/scripts/sync-analyze-docs.js +2 -2
  271. package/scripts/validate-docs.js +395 -29
  272. package/docs/references/tmp.md +0 -527
@@ -0,0 +1,14 @@
1
+ import type { OutputMode, ActionableError } from './types.js';
2
+ import { type ErrorCode } from './error-codes.js';
3
+ /**
4
+ * Format an error based on output mode.
5
+ *
6
+ * - JSON mode: returns JSON string of {type:"error", code, message, ...actionableFields}
7
+ * - Human mode: returns chalk-colored readable string
8
+ */
9
+ export declare function formatError(error: unknown, mode: OutputMode, attempted?: string): string;
10
+ /**
11
+ * Programmatically create an ActionableError with sensible defaults.
12
+ */
13
+ export declare function createActionableError(code: ErrorCode | string, message: string, attempted: string, overrides?: Partial<Pick<ActionableError, 'confidence' | 'nextCommand' | 'causes' | 'rootCause' | 'remediationPlan'>>): ActionableError;
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/cli/output/errors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAE/E,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAUhF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAwCxF;AA6GD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,GAAG,MAAM,EACxB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,iBAAiB,CAAC,CAAC,GACpH,eAAe,CAejB"}
@@ -0,0 +1,170 @@
1
+ // [META] since:2026-04-30 | owner:cli-team | stable:false
2
+ // [WHY] Mode-aware error formatting — structured JSON for machines, chalk-colored text for humans
3
+ import chalk from 'chalk';
4
+ import { isActionableError } from './types.js';
5
+ import { ErrorCodes, ErrorRemediation } from './error-codes.js';
6
+ /**
7
+ * Format an error based on output mode.
8
+ *
9
+ * - JSON mode: returns JSON string of {type:"error", code, message, ...actionableFields}
10
+ * - Human mode: returns chalk-colored readable string
11
+ */
12
+ export function formatError(error, mode, attempted) {
13
+ const normalized = normalizeError(error, attempted);
14
+ if (mode === 'json') {
15
+ const base = {
16
+ type: 'error',
17
+ code: normalized.code,
18
+ message: normalized.message,
19
+ ...(normalized.remediation ? { remediation: normalized.remediation } : {}),
20
+ };
21
+ if (isActionableError(normalized)) {
22
+ const json = {
23
+ ...base,
24
+ attempted: normalized.attempted,
25
+ rootCause: normalized.rootCause,
26
+ remediationPlan: normalized.remediationPlan,
27
+ confidence: normalized.confidence,
28
+ };
29
+ if (normalized.nextCommand)
30
+ json.nextCommand = normalized.nextCommand;
31
+ if (normalized.causes && normalized.causes.length > 0)
32
+ json.causes = normalized.causes;
33
+ return JSON.stringify(json);
34
+ }
35
+ return JSON.stringify(base);
36
+ }
37
+ // Human mode
38
+ let output = chalk.red('Error: ') + normalized.message;
39
+ if (normalized.code && normalized.code !== 'UNKNOWN') {
40
+ output = chalk.red('Error: ') + `[${normalized.code}] ${normalized.message}`;
41
+ }
42
+ output += '\n ' + chalk.cyan('Attempted: ') + normalized.attempted;
43
+ output += '\n ' + chalk.cyan('Root cause: ') + normalized.rootCause;
44
+ if (normalized.remediationPlan) {
45
+ const pct = Math.round(normalized.confidence * 100);
46
+ output += `\n ${chalk.yellow('Suggestion: ')}${normalized.remediationPlan} (${pct}% confidence)`;
47
+ }
48
+ if (normalized.nextCommand) {
49
+ output += '\n ' + chalk.green('Next: ') + normalized.nextCommand;
50
+ }
51
+ return output;
52
+ }
53
+ /**
54
+ * Normalize any thrown value into an ActionableError with auto-detected codes.
55
+ */
56
+ function normalizeError(error, attempted) {
57
+ if (error instanceof Error) {
58
+ const err = error;
59
+ const detected = detectErrorPattern(err);
60
+ return {
61
+ type: 'error',
62
+ code: detected.code,
63
+ message: err.message,
64
+ name: 'ActionableError',
65
+ attempted: attempted ?? 'unknown operation',
66
+ rootCause: detectRootCause(err),
67
+ remediationPlan: detected.remediation.message,
68
+ confidence: detected.remediation.confidence,
69
+ nextCommand: detected.remediation.nextCommand,
70
+ remediation: detected.remediation.nextCommand ?? detected.remediation.message,
71
+ causes: extractCauses(err),
72
+ };
73
+ }
74
+ return {
75
+ type: 'error',
76
+ code: ErrorCodes.RUN_COMMAND_FAILED,
77
+ message: String(error),
78
+ name: 'ActionableError',
79
+ attempted: attempted ?? 'unknown operation',
80
+ rootCause: String(error),
81
+ remediationPlan: ErrorRemediation.RUN_COMMAND_FAILED.message,
82
+ confidence: 0.1,
83
+ };
84
+ }
85
+ /**
86
+ * Map Node.js error codes and patterns to our error code registry.
87
+ */
88
+ function detectErrorPattern(err) {
89
+ const errCode = err.code ?? '';
90
+ const msg = err.message.toLowerCase();
91
+ // Node.js system error codes
92
+ if (errCode === 'MODULE_NOT_FOUND') {
93
+ return { code: ErrorCodes.DEP_MODULE_NOT_FOUND, remediation: ErrorRemediation.DEP_MODULE_NOT_FOUND };
94
+ }
95
+ if (errCode === 'EACCES' || errCode === 'EPERM') {
96
+ return { code: ErrorCodes.FS_PERMISSION_DENIED, remediation: ErrorRemediation.FS_PERMISSION_DENIED };
97
+ }
98
+ if (errCode === 'ENOENT') {
99
+ return { code: ErrorCodes.FS_FILE_NOT_FOUND, remediation: ErrorRemediation.FS_FILE_NOT_FOUND };
100
+ }
101
+ // Preserve custom error codes from callers (e.g., MISSING_TARGET, INDEX_NOT_FOUND)
102
+ if (errCode && !Object.values(ErrorCodes).includes(errCode)) {
103
+ const customRemediation = err.remediation
104
+ ? { message: err.remediation, confidence: 0.7 }
105
+ : { message: 'Check the error details and try again', confidence: 0.3 };
106
+ return { code: errCode, remediation: customRemediation };
107
+ }
108
+ // Content-based detection for native dependency failures
109
+ if (msg.includes('tree-sitter') || msg.includes('better-sqlite3')) {
110
+ return { code: ErrorCodes.DEP_NATIVE_MISSING, remediation: ErrorRemediation.DEP_NATIVE_MISSING };
111
+ }
112
+ if (msg.includes('config.json') || msg.includes('.mycodemap')) {
113
+ return { code: ErrorCodes.CFG_INVALID_CONFIG, remediation: ErrorRemediation.CFG_INVALID_CONFIG };
114
+ }
115
+ if (msg.includes('not initialized') || msg.includes('workspace not found')) {
116
+ return { code: ErrorCodes.CFG_WORKSPACE_NOT_INITIALIZED, remediation: ErrorRemediation.CFG_WORKSPACE_NOT_INITIALIZED };
117
+ }
118
+ return { code: ErrorCodes.RUN_COMMAND_FAILED, remediation: ErrorRemediation.RUN_COMMAND_FAILED };
119
+ }
120
+ /**
121
+ * Extract the deepest root cause from an error message or cause chain.
122
+ */
123
+ function detectRootCause(err) {
124
+ if (err.cause instanceof Error) {
125
+ return detectRootCause(err.cause);
126
+ }
127
+ return err.message;
128
+ }
129
+ /**
130
+ * Walk the error.cause chain and convert each to ActionableError.
131
+ */
132
+ function extractCauses(err) {
133
+ const causes = [];
134
+ let current = err.cause;
135
+ while (current instanceof Error) {
136
+ const causeErr = current;
137
+ causes.push({
138
+ type: 'error',
139
+ code: causeErr.code ?? 'UNKNOWN',
140
+ message: causeErr.message,
141
+ name: 'ActionableError',
142
+ attempted: 'nested error',
143
+ rootCause: causeErr.message,
144
+ remediationPlan: '',
145
+ confidence: 0,
146
+ });
147
+ current = causeErr.cause;
148
+ }
149
+ return causes;
150
+ }
151
+ /**
152
+ * Programmatically create an ActionableError with sensible defaults.
153
+ */
154
+ export function createActionableError(code, message, attempted, overrides) {
155
+ const remediation = ErrorRemediation[code] ?? { message: 'Check the error details', confidence: 0.3 };
156
+ return {
157
+ type: 'error',
158
+ code,
159
+ message,
160
+ name: 'ActionableError',
161
+ attempted,
162
+ rootCause: overrides?.rootCause ?? message,
163
+ remediationPlan: overrides?.remediationPlan ?? remediation.message,
164
+ confidence: overrides?.confidence ?? remediation.confidence,
165
+ nextCommand: overrides?.nextCommand ?? remediation.nextCommand,
166
+ remediation: overrides?.nextCommand ?? remediation.message,
167
+ ...(overrides?.causes ? { causes: overrides.causes } : {}),
168
+ };
169
+ }
170
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/cli/output/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export { resolveOutputMode } from './mode.js';
2
+ export { createProgressEmitter } from './progress.js';
3
+ export { formatError, createActionableError } from './errors.js';
4
+ export { renderOutput } from './render.js';
5
+ export type { OutputMode, OutputModeOptions, ProgressEmitter, StructuredError, ActionableError } from './types.js';
6
+ export { isActionableError, APPLY_SUGGESTION_CONFIDENCE_THRESHOLD } from './types.js';
7
+ export { ErrorCodes, ErrorRemediation } from './error-codes.js';
8
+ export type { ErrorCode } from './error-codes.js';
9
+ export { tryApplySuggestion } from './apply-suggestion.js';
10
+ export type { SuggestionResult } from './apply-suggestion.js';
11
+ export { checkAndActivateWasmFallback, createNativeDepError } from './wasm-fallback.js';
12
+ export type { WasmFallbackResult } from './wasm-fallback.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/output/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnH,OAAO,EAAE,iBAAiB,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // [META] since:2026-04-30 | owner:cli-team | stable:false
2
+ // [WHY] Barrel exports for output mode module — single import point for all commands
3
+ export { resolveOutputMode } from './mode.js';
4
+ export { createProgressEmitter } from './progress.js';
5
+ export { formatError, createActionableError } from './errors.js';
6
+ export { renderOutput } from './render.js';
7
+ export { isActionableError, APPLY_SUGGESTION_CONFIDENCE_THRESHOLD } from './types.js';
8
+ export { ErrorCodes, ErrorRemediation } from './error-codes.js';
9
+ export { tryApplySuggestion } from './apply-suggestion.js';
10
+ export { checkAndActivateWasmFallback, createNativeDepError } from './wasm-fallback.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/output/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,qFAAqF;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { OutputMode, OutputModeOptions } from './types.js';
2
+ /**
3
+ * Resolve output mode from CLI flags and TTY state.
4
+ *
5
+ * Priority: --json wins over --human (explicit machine-readable takes priority).
6
+ * No flags: TTY auto-detect (human in terminal, json when piped).
7
+ *
8
+ * @param options - CLI flags { json?, human? }
9
+ * @param ttyOverride - Override for process.stdout.isTTY (useful in tests). Defaults to process.stdout.isTTY.
10
+ */
11
+ export declare function resolveOutputMode(options?: OutputModeOptions, ttyOverride?: boolean): OutputMode;
12
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../../src/cli/output/mode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,iBAAsB,EAC/B,WAAW,CAAC,EAAE,OAAO,GACpB,UAAU,CAYZ"}
@@ -0,0 +1,23 @@
1
+ // [META] since:2026-04-30 | owner:cli-team | stable:false
2
+ // [WHY] Unified TTY/flag detection — single source of truth for output mode resolution
3
+ /**
4
+ * Resolve output mode from CLI flags and TTY state.
5
+ *
6
+ * Priority: --json wins over --human (explicit machine-readable takes priority).
7
+ * No flags: TTY auto-detect (human in terminal, json when piped).
8
+ *
9
+ * @param options - CLI flags { json?, human? }
10
+ * @param ttyOverride - Override for process.stdout.isTTY (useful in tests). Defaults to process.stdout.isTTY.
11
+ */
12
+ export function resolveOutputMode(options = {}, ttyOverride) {
13
+ if (options.json) {
14
+ return 'json';
15
+ }
16
+ if (options.human) {
17
+ return 'human';
18
+ }
19
+ // No explicit flag: auto-detect from TTY
20
+ const isTTY = ttyOverride ?? process.stdout.isTTY;
21
+ return isTTY ? 'human' : 'json';
22
+ }
23
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../../src/cli/output/mode.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,uFAAuF;AAIvF;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAA6B,EAAE,EAC/B,WAAqB;IAErB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,yCAAyC;IACzC,MAAM,KAAK,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAClD,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { OutputMode, ProgressEmitter } from './types.js';
2
+ /**
3
+ * Create a progress emitter appropriate for the output mode.
4
+ *
5
+ * - JSON mode: writes NDJSON lines {type:"progress", percent, message} to stderr
6
+ * - Human mode: uses ora spinner on stderr (no stdout pollution)
7
+ */
8
+ export declare function createProgressEmitter(mode: OutputMode, prefix?: string): ProgressEmitter;
9
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/cli/output/progress.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,CAKjB"}
@@ -0,0 +1,65 @@
1
+ // [META] since:2026-04-30 | owner:cli-team | stable:false
2
+ // [WHY] Progress emitter abstraction — NDJSON to stderr in JSON mode, ora spinner in human mode
3
+ import ora from 'ora';
4
+ /**
5
+ * Create a progress emitter appropriate for the output mode.
6
+ *
7
+ * - JSON mode: writes NDJSON lines {type:"progress", percent, message} to stderr
8
+ * - Human mode: uses ora spinner on stderr (no stdout pollution)
9
+ */
10
+ export function createProgressEmitter(mode, prefix) {
11
+ if (mode === 'json') {
12
+ return createJsonProgressEmitter();
13
+ }
14
+ return createHumanProgressEmitter(prefix);
15
+ }
16
+ /**
17
+ * JSON mode: structured NDJSON progress on stderr
18
+ */
19
+ function createJsonProgressEmitter() {
20
+ let lastPercent = -1;
21
+ return {
22
+ update(percent, message) {
23
+ // Rate-limit: only emit when percent changes by >= 5 or message changes
24
+ if (Math.abs(percent - lastPercent) < 5 && lastPercent >= 0) {
25
+ return;
26
+ }
27
+ lastPercent = percent;
28
+ const line = JSON.stringify({ type: 'progress', percent, message });
29
+ process.stderr.write(line + '\n');
30
+ },
31
+ complete() {
32
+ const line = JSON.stringify({ type: 'progress', percent: 100, message: 'complete' });
33
+ process.stderr.write(line + '\n');
34
+ },
35
+ fail(message) {
36
+ const line = JSON.stringify({ type: 'progress', percent: -1, message: message ?? 'failed' });
37
+ process.stderr.write(line + '\n');
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ * Human mode: ora spinner on stderr
43
+ */
44
+ function createHumanProgressEmitter(prefix) {
45
+ const spinner = ora({ spinner: 'dots', prefixText: prefix });
46
+ return {
47
+ update(_percent, message) {
48
+ if (!spinner.isSpinning) {
49
+ spinner.start();
50
+ }
51
+ spinner.text = message;
52
+ },
53
+ complete() {
54
+ if (spinner.isSpinning) {
55
+ spinner.succeed();
56
+ }
57
+ },
58
+ fail(message) {
59
+ if (spinner.isSpinning) {
60
+ spinner.fail(message);
61
+ }
62
+ },
63
+ };
64
+ }
65
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/cli/output/progress.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,gGAAgG;AAEhG,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAgB,EAChB,MAAe;IAEf,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IAErB,OAAO;QACL,MAAM,CAAC,OAAe,EAAE,OAAe;YACrC,wEAAwE;YACxE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,WAAW,GAAG,OAAO,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,QAAQ;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACrF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,OAAgB;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC7F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,MAAe;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7D,OAAO;QACL,MAAM,CAAC,QAAgB,EAAE,OAAe;YACtC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;QACzB,CAAC;QAED,QAAQ;YACN,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAgB;YACnB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { OutputMode } from './types.js';
2
+ /**
3
+ * Render data to stdout based on output mode.
4
+ *
5
+ * - JSON mode: writes JSON.stringify(data) + newline to stdout
6
+ * - Human mode: writes humanRenderer(data) + newline to stdout
7
+ *
8
+ * Uses process.stdout.write (not console.log) for predictable output formatting.
9
+ */
10
+ export declare function renderOutput<T>(data: T, humanRenderer: (data: T) => string, mode: OutputMode): void;
11
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cli/output/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,CAAC,EACP,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAClC,IAAI,EAAE,UAAU,GACf,IAAI,CAON"}
@@ -0,0 +1,18 @@
1
+ // [META] since:2026-04-30 | owner:cli-team | stable:false
2
+ // [WHY] Mode-aware stdout writer — JSON.stringify in json mode, human renderer in human mode
3
+ /**
4
+ * Render data to stdout based on output mode.
5
+ *
6
+ * - JSON mode: writes JSON.stringify(data) + newline to stdout
7
+ * - Human mode: writes humanRenderer(data) + newline to stdout
8
+ *
9
+ * Uses process.stdout.write (not console.log) for predictable output formatting.
10
+ */
11
+ export function renderOutput(data, humanRenderer, mode) {
12
+ if (mode === 'json') {
13
+ process.stdout.write(JSON.stringify(data) + '\n');
14
+ return;
15
+ }
16
+ process.stdout.write(humanRenderer(data) + '\n');
17
+ }
18
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/cli/output/render.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,6FAA6F;AAI7F;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAO,EACP,aAAkC,EAClC,IAAgB;IAEhB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Output mode: 'json' for non-TTY/CI/piped consumers, 'human' for interactive terminals
3
+ */
4
+ export type OutputMode = 'json' | 'human';
5
+ /**
6
+ * Options passed from CLI flags to resolveOutputMode
7
+ */
8
+ export interface OutputModeOptions {
9
+ json?: boolean;
10
+ human?: boolean;
11
+ }
12
+ /**
13
+ * Structured progress emitter — abstracts away NDJSON-vs-spinner differences
14
+ */
15
+ export interface ProgressEmitter {
16
+ update(percent: number, message: string): void;
17
+ complete(): void;
18
+ fail(message?: string): void;
19
+ }
20
+ /**
21
+ * Structured error shape for JSON mode output
22
+ */
23
+ export interface StructuredError {
24
+ type: 'error';
25
+ code: string;
26
+ message: string;
27
+ remediation?: string;
28
+ }
29
+ /**
30
+ * Actionable error with recovery context — extends StructuredError
31
+ * with fields that enable automated or guided remediation.
32
+ */
33
+ export interface ActionableError extends StructuredError {
34
+ type: 'error';
35
+ code: string;
36
+ name: string;
37
+ attempted: string;
38
+ rootCause: string;
39
+ remediationPlan: string;
40
+ confidence: number;
41
+ nextCommand?: string;
42
+ causes?: ActionableError[];
43
+ }
44
+ /**
45
+ * Type guard: checks if an error has actionable recovery fields
46
+ */
47
+ export declare function isActionableError(error: StructuredError | ActionableError): error is ActionableError;
48
+ /**
49
+ * Confidence threshold for --apply-suggestion auto-execution.
50
+ * Suggestions below this threshold are not auto-executed.
51
+ */
52
+ export declare const APPLY_SUGGESTION_CONFIDENCE_THRESHOLD = 0.8;
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/output/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,QAAQ,IAAI,IAAI,CAAC;IACjB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,GAAG,KAAK,IAAI,eAAe,CAEpG;AAED;;;GAGG;AACH,eAAO,MAAM,qCAAqC,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ // [META] since:2026-04-30 | owner:cli-team | stable:false
2
+ // [WHY] Shared types for AI-first output mode — single source of truth for mode, progress, error shapes
3
+ /**
4
+ * Type guard: checks if an error has actionable recovery fields
5
+ */
6
+ export function isActionableError(error) {
7
+ return 'attempted' in error && 'rootCause' in error && 'confidence' in error;
8
+ }
9
+ /**
10
+ * Confidence threshold for --apply-suggestion auto-execution.
11
+ * Suggestions below this threshold are not auto-executed.
12
+ */
13
+ export const APPLY_SUGGESTION_CONFIDENCE_THRESHOLD = 0.8;
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/output/types.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,wGAAwG;AAkDxG;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAwC;IACxE,OAAO,WAAW,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAG,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ActionableError } from './types.js';
2
+ export interface WasmFallbackResult {
3
+ nativeAvailable: boolean;
4
+ wasmAvailable: boolean;
5
+ fallbackActivated: boolean;
6
+ module: 'tree-sitter' | 'better-sqlite3';
7
+ message: string;
8
+ }
9
+ export declare function checkAndActivateWasmFallback(mod: 'tree-sitter' | 'better-sqlite3', options: {
10
+ wasmFallback?: boolean;
11
+ }): Promise<WasmFallbackResult>;
12
+ export declare function createNativeDepError(mod: 'tree-sitter' | 'better-sqlite3', nativeError: Error, wasmAvailable: boolean): ActionableError;
13
+ //# sourceMappingURL=wasm-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-fallback.d.ts","sourceRoot":"","sources":["../../../src/cli/output/wasm-fallback.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,aAAa,GAAG,gBAAgB,EACrC,OAAO,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA2C7B;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,aAAa,GAAG,gBAAgB,EACrC,WAAW,EAAE,KAAK,EAClB,aAAa,EAAE,OAAO,GACrB,eAAe,CAkBjB"}
@@ -0,0 +1,92 @@
1
+ // [META] since:2026-05-01 | owner:cli-team | stable:false
2
+ // [WHY] Reactive WASM fallback — intercepts native dep failures and switches to WASM loading paths
3
+ import { createActionableError } from './errors.js';
4
+ import { ErrorCodes } from './error-codes.js';
5
+ export async function checkAndActivateWasmFallback(mod, options) {
6
+ if (!options.wasmFallback) {
7
+ return {
8
+ nativeAvailable: await checkNativeModule(mod),
9
+ wasmAvailable: false,
10
+ fallbackActivated: false,
11
+ module: mod,
12
+ message: '--wasm-fallback not requested',
13
+ };
14
+ }
15
+ const nativeAvailable = await checkNativeModule(mod);
16
+ if (nativeAvailable) {
17
+ return {
18
+ nativeAvailable: true,
19
+ wasmAvailable: true,
20
+ fallbackActivated: false,
21
+ module: mod,
22
+ message: 'Native module available, WASM fallback not needed',
23
+ };
24
+ }
25
+ const wasmAvailable = await checkWasmModule(mod);
26
+ if (wasmAvailable) {
27
+ const envKey = `CODEMAP_USE_WASM_${mod.replace('-', '_').toUpperCase()}`;
28
+ process.env[envKey] = '1';
29
+ return {
30
+ nativeAvailable: false,
31
+ wasmAvailable: true,
32
+ fallbackActivated: true,
33
+ module: mod,
34
+ message: `Native ${mod} unavailable — activated WASM fallback`,
35
+ };
36
+ }
37
+ return {
38
+ nativeAvailable: false,
39
+ wasmAvailable: false,
40
+ fallbackActivated: false,
41
+ module: mod,
42
+ message: `Both native and WASM ${mod} unavailable — install build tools or check WASM module`,
43
+ };
44
+ }
45
+ export function createNativeDepError(mod, nativeError, wasmAvailable) {
46
+ const suggestions = ['--wasm-fallback'];
47
+ if (wasmAvailable) {
48
+ suggestions.push('WASM module detected — add --wasm-fallback to activate');
49
+ }
50
+ suggestions.push('npm rebuild (rebuild native modules)');
51
+ return createActionableError(wasmAvailable ? ErrorCodes.DEP_WASM_FALLBACK_AVAILABLE : ErrorCodes.DEP_NATIVE_MISSING, `${mod} cannot be loaded: ${nativeError.message}`, `loading ${mod}`, {
52
+ rootCause: nativeError.message,
53
+ remediationPlan: suggestions.join('; '),
54
+ confidence: wasmAvailable ? 0.95 : 0.9,
55
+ nextCommand: 'codemap --wasm-fallback',
56
+ });
57
+ }
58
+ async function checkNativeModule(mod) {
59
+ try {
60
+ if (mod === 'tree-sitter') {
61
+ const ts = await import('tree-sitter');
62
+ return !!ts.default || !!ts;
63
+ }
64
+ const sqlite = await import('better-sqlite3');
65
+ return !!sqlite.default || !!sqlite;
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ async function checkWasmModule(mod) {
72
+ try {
73
+ if (mod === 'tree-sitter') {
74
+ const wasmModule = 'web-tree-sitter';
75
+ await import(wasmModule);
76
+ return true;
77
+ }
78
+ const nodeVersion = process.versions.node.split('.').map(Number);
79
+ if (nodeVersion[0] >= 22) {
80
+ const sqliteModule = 'node:sqlite';
81
+ await import(sqliteModule);
82
+ return true;
83
+ }
84
+ const sqlJsModule = 'sql.js';
85
+ await import(sqlJsModule);
86
+ return true;
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ //# sourceMappingURL=wasm-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-fallback.js","sourceRoot":"","sources":["../../../src/cli/output/wasm-fallback.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export declare const DEFAULT_OUTPUT_DIR_NEW = ".mycodemap";
5
5
  export declare const DEFAULT_OUTPUT_DIR_OLD = ".codemap";
6
+ export declare const CONFIG_FILE_CANONICAL = "config.json";
6
7
  export declare const CONFIG_FILE_NEW = "mycodemap.config.json";
7
8
  export declare const CONFIG_FILE_OLD = "codemap.config.json";
8
9
  export declare const DATA_FILE = "codemap.json";
@@ -32,8 +33,9 @@ export interface ResolvePathsResult {
32
33
  export declare function resolveOutputDir(customOutput?: string, rootDir?: string): ResolvePathsResult;
33
34
  /**
34
35
  * 解析配置文件路径(读取时使用)
35
- * - 优先检查新配置 mycodemap.config.json
36
- * - 不存在则回退旧配置 codemap.config.json
36
+ * - 优先检查 canonical `.mycodemap/config.json`
37
+ * - 不存在则回退根目录 `mycodemap.config.json`
38
+ * - 再回退旧配置 `codemap.config.json`
37
39
  *
38
40
  * @param rootDir - 项目根目录(默认为 cwd)
39
41
  * @returns 配置文件路径和是否使用旧配置
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/cli/paths.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,sBAAsB,eAAe,CAAC;AACnD,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,eAAe,wBAAwB,CAAC;AACrD,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAyBD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,kBAAkB,CA8BnG;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAa9F;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAc,GAAG,MAAM,CAG7D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAErG;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAQ5C"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/cli/paths.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,sBAAsB,eAAe,CAAC;AACnD,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,eAAe,wBAAwB,CAAC;AACrD,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,kBAAkB,CA8BnG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAiB9F;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAc,GAAG,MAAM,CAG7D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAErG;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,MAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAQ5C"}