@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,290 @@
1
+ // [META] since:2026-04-30 | owner:server-team | stable:false
2
+ // [WHY] Adapt CLI interface contract schema to MCP tool definitions with zero handwritten maintenance
3
+ import { z } from 'zod';
4
+ /**
5
+ * Convert a single contract flag definition into a Zod schema.
6
+ * Handles type mapping, arrays, defaults, optionality, and descriptions.
7
+ */
8
+ export function convertFlagTypeToZod(flag) {
9
+ let schema;
10
+ switch (flag.type) {
11
+ case 'string': {
12
+ schema = z.string();
13
+ break;
14
+ }
15
+ case 'boolean': {
16
+ schema = z.boolean();
17
+ break;
18
+ }
19
+ case 'number': {
20
+ schema = z.number();
21
+ break;
22
+ }
23
+ default: {
24
+ // Graceful degradation for unknown flag types
25
+ schema = z.string();
26
+ }
27
+ }
28
+ if (flag.multiple) {
29
+ schema = z.array(schema);
30
+ }
31
+ if (flag.defaultValue !== undefined) {
32
+ schema = schema.default(flag.defaultValue);
33
+ }
34
+ else if (!flag.required) {
35
+ schema = schema.optional();
36
+ }
37
+ if (flag.description) {
38
+ schema = schema.describe(flag.description);
39
+ }
40
+ return schema;
41
+ }
42
+ /**
43
+ * Convert an array of flag definitions into a Zod raw shape object
44
+ * suitable for the MCP SDK's `inputSchema` field.
45
+ */
46
+ export function convertFlagsToZodShape(flags) {
47
+ const shape = {};
48
+ for (const flag of flags) {
49
+ shape[flag.name] = convertFlagTypeToZod(flag);
50
+ }
51
+ return shape;
52
+ }
53
+ /**
54
+ * Recursively convert an OutputProperty into a JSON Schema fragment.
55
+ * Falls back to permissive schemas on unexpected depth or complexity.
56
+ */
57
+ function convertOutputPropertyToJsonSchema(prop, depth = 0) {
58
+ // Prevent runaway recursion on deeply nested or circular schemas
59
+ if (depth > 10) {
60
+ return { type: 'object', description: 'Nested structure (depth limit reached)' };
61
+ }
62
+ const schema = {};
63
+ if (prop.description) {
64
+ schema.description = prop.description;
65
+ }
66
+ if (prop.nullable) {
67
+ schema.type = [prop.type, 'null'];
68
+ }
69
+ else {
70
+ schema.type = prop.type;
71
+ }
72
+ if (prop.items) {
73
+ schema.items = convertOutputPropertyToJsonSchema(prop.items, depth + 1);
74
+ }
75
+ if (prop.properties && prop.properties.length > 0) {
76
+ schema.properties = Object.fromEntries(prop.properties.map(p => [p.name, convertOutputPropertyToJsonSchema(p, depth + 1)]));
77
+ }
78
+ return schema;
79
+ }
80
+ /**
81
+ * Convert an OutputShape into a JSON Schema object.
82
+ * Degrades gracefully to a permissive object schema on failure.
83
+ */
84
+ export function convertOutputShapeToJsonSchema(outputShape) {
85
+ try {
86
+ const properties = {};
87
+ const required = [];
88
+ for (const prop of outputShape.properties) {
89
+ properties[prop.name] = convertOutputPropertyToJsonSchema(prop);
90
+ if (!prop.nullable) {
91
+ required.push(prop.name);
92
+ }
93
+ }
94
+ const schema = {
95
+ type: outputShape.type,
96
+ properties,
97
+ };
98
+ if (required.length > 0) {
99
+ schema.required = required;
100
+ }
101
+ if (outputShape.description) {
102
+ schema.description = outputShape.description;
103
+ }
104
+ return schema;
105
+ }
106
+ catch {
107
+ return {
108
+ type: 'object',
109
+ description: outputShape.description ?? 'Command output',
110
+ };
111
+ }
112
+ }
113
+ /**
114
+ * Convert an OutputProperty into a Zod schema.
115
+ * Degrades to z.any() for complex or unsupported structures.
116
+ */
117
+ function outputPropertyToZodSchema(prop, depth = 0) {
118
+ if (depth > 10) {
119
+ return z.any().describe(prop.description ?? 'Nested structure');
120
+ }
121
+ let schema;
122
+ switch (prop.type) {
123
+ case 'string': {
124
+ schema = z.string();
125
+ break;
126
+ }
127
+ case 'number': {
128
+ schema = z.number();
129
+ break;
130
+ }
131
+ case 'boolean': {
132
+ schema = z.boolean();
133
+ break;
134
+ }
135
+ case 'null': {
136
+ schema = z.null();
137
+ break;
138
+ }
139
+ case 'array': {
140
+ schema = prop.items
141
+ ? z.array(outputPropertyToZodSchema(prop.items, depth + 1))
142
+ : z.array(z.any());
143
+ break;
144
+ }
145
+ case 'object': {
146
+ if (prop.properties && prop.properties.length > 0) {
147
+ const shape = {};
148
+ for (const p of prop.properties) {
149
+ shape[p.name] = outputPropertyToZodSchema(p, depth + 1);
150
+ }
151
+ schema = z.object(shape);
152
+ }
153
+ else {
154
+ schema = z.record(z.string(), z.any());
155
+ }
156
+ break;
157
+ }
158
+ default: {
159
+ schema = z.any();
160
+ }
161
+ }
162
+ if (prop.nullable) {
163
+ schema = schema.nullable();
164
+ }
165
+ if (prop.description) {
166
+ schema = schema.describe(prop.description);
167
+ }
168
+ return schema;
169
+ }
170
+ /**
171
+ * Convert an OutputShape into a Zod schema suitable for the MCP SDK's `outputSchema` field.
172
+ * Degrades gracefully to z.any() on failure.
173
+ */
174
+ export function convertOutputShapeToZodSchema(outputShape) {
175
+ try {
176
+ if (outputShape.type === 'array') {
177
+ const itemSchema = outputShape.properties.length === 1
178
+ ? outputPropertyToZodSchema(outputShape.properties[0])
179
+ : z.any();
180
+ let schema = z.array(itemSchema);
181
+ if (outputShape.description) {
182
+ schema = schema.describe(outputShape.description);
183
+ }
184
+ return schema;
185
+ }
186
+ const shape = {};
187
+ for (const prop of outputShape.properties) {
188
+ shape[prop.name] = outputPropertyToZodSchema(prop);
189
+ }
190
+ let schema = z.object(shape);
191
+ if (outputShape.description) {
192
+ schema = schema.describe(outputShape.description);
193
+ }
194
+ return schema;
195
+ }
196
+ catch {
197
+ return z.any().describe(outputShape.description ?? 'Command output');
198
+ }
199
+ }
200
+ function shellQuote(value) {
201
+ if (/^[A-Za-z0-9@+_./:-]+$/.test(value)) {
202
+ return value;
203
+ }
204
+ return `'${value.replace(/'/g, "'\\''")}'`;
205
+ }
206
+ function buildCliCommandLine(contract, args, programName = 'codemap') {
207
+ const flagArgs = Object.entries(args)
208
+ .filter(([, v]) => v !== undefined && v !== '' && v !== false && !(Array.isArray(v) && v.length === 0))
209
+ .map(([k, v]) => {
210
+ if (Array.isArray(v)) {
211
+ return v.map(item => `--${k} ${shellQuote(String(item))}`).join(' ');
212
+ }
213
+ if (typeof v === 'boolean') {
214
+ return `--${k}`;
215
+ }
216
+ return `--${k} ${shellQuote(String(v))}`;
217
+ })
218
+ .join(' ');
219
+ return `${programName} ${contract.name}${flagArgs ? ` ${flagArgs}` : ''}`;
220
+ }
221
+ function createCliAvailabilityHandler(contract, programName) {
222
+ return async (args) => {
223
+ const commandLine = buildCliCommandLine(contract, args, programName);
224
+ return {
225
+ content: [{
226
+ type: 'text',
227
+ text: `Command available via CLI: ${commandLine}`,
228
+ }],
229
+ structuredContent: {
230
+ status: 'cli_redirect',
231
+ command: contract.name,
232
+ args,
233
+ cliCommand: commandLine,
234
+ description: contract.description,
235
+ examples: contract.examples,
236
+ errorCodes: contract.errorCodes.map(e => e.code),
237
+ },
238
+ isError: false,
239
+ };
240
+ };
241
+ }
242
+ /**
243
+ * Zod schema matching the structured content returned by cli_redirect handlers.
244
+ * Used as the output schema for contract tools until handlers return real command output.
245
+ *
246
+ * NOTE: `z.unknown()` is used for `args` instead of `z.record(z.unknown())` because
247
+ * Zod v4's `z.record()` triggers a crash in `z4mini.toJSONSchema` when the SDK
248
+ * serializes the schema for `listTools()` discovery.
249
+ */
250
+ const cliRedirectOutputSchema = z.object({
251
+ status: z.literal('cli_redirect'),
252
+ command: z.string(),
253
+ args: z.unknown(),
254
+ cliCommand: z.string(),
255
+ description: z.string(),
256
+ examples: z.array(z.string()),
257
+ errorCodes: z.array(z.string()),
258
+ });
259
+ /**
260
+ * Convert a CommandContract into one or more MCP tool definitions.
261
+ * The primary command and any aliases each get their own tool name.
262
+ */
263
+ export function convertContractToMcpTools(contract, programName = 'codemap') {
264
+ const definitions = [];
265
+ const inputSchema = convertFlagsToZodShape(contract.flags);
266
+ definitions.push({
267
+ name: `codemap_${contract.name}`,
268
+ config: {
269
+ title: `CodeMap ${contract.name}`,
270
+ description: `${contract.description}\n\nExamples:\n${contract.examples.join('\n')}`,
271
+ inputSchema,
272
+ outputSchema: cliRedirectOutputSchema,
273
+ },
274
+ handler: createCliAvailabilityHandler(contract, programName),
275
+ });
276
+ for (const alias of contract.aliases ?? []) {
277
+ definitions.push({
278
+ name: `codemap_${alias}`,
279
+ config: {
280
+ title: `CodeMap ${alias}`,
281
+ description: `${contract.description} (alias for ${contract.name})\n\nExamples:\n${contract.examples.join('\n')}`,
282
+ inputSchema,
283
+ outputSchema: cliRedirectOutputSchema,
284
+ },
285
+ handler: createCliAvailabilityHandler({ ...contract, name: alias }, programName),
286
+ });
287
+ }
288
+ return definitions;
289
+ }
290
+ //# sourceMappingURL=schema-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-adapter.js","sourceRoot":"","sources":["../../../src/server/mcp/schema-adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAuDD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAUnE;AAED,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC,CAiBD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAUjE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAqFD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAanE;AAED,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC,CAiBD"}
@@ -5,13 +5,15 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
5
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
6
  import { z } from 'zod';
7
7
  import { createConfiguredStorage } from '../../cli/storage-runtime.js';
8
+ import { getFullContract } from '../../cli/interface-contract/index.js';
8
9
  import { CodeMapMcpService } from './service.js';
10
+ import { convertContractToMcpTools } from './schema-adapter.js';
9
11
  const MCP_SERVER_NAME = 'mycodemap-experimental';
10
12
  const MCP_SERVER_VERSION = process.env.npm_package_version ?? '0.5.0';
11
13
  function renderStructuredContent(result) {
12
14
  return JSON.stringify(result, null, 2);
13
15
  }
14
- function registerTools(server, service) {
16
+ function registerNativeTools(server, service) {
15
17
  server.registerTool('codemap_query', {
16
18
  title: 'CodeMap Query',
17
19
  description: 'Experimental: query a symbol definition plus callers and callees from the local CodeMap graph.',
@@ -56,13 +58,41 @@ function registerTools(server, service) {
56
58
  };
57
59
  });
58
60
  }
61
+ function registerContractTools(server, contract, reservedNames) {
62
+ const registeredNames = new Set(reservedNames);
63
+ for (const command of contract.commands) {
64
+ const definitions = convertContractToMcpTools(command, contract.programName);
65
+ for (const def of definitions) {
66
+ let toolName = def.name;
67
+ // If a native tool occupies this name, register under a stable alternative
68
+ if (registeredNames.has(toolName)) {
69
+ const altName = `${toolName}_contract`;
70
+ if (registeredNames.has(altName)) {
71
+ console.warn(`Contract tool "${def.name}" skipped — name reserved by native tool and alternative "${altName}" also taken`);
72
+ continue;
73
+ }
74
+ console.warn(`Contract tool "${def.name}" renamed to "${altName}" — name reserved by native tool`);
75
+ toolName = altName;
76
+ }
77
+ registeredNames.add(toolName);
78
+ server.registerTool(toolName, {
79
+ title: def.config.title,
80
+ description: def.config.description,
81
+ inputSchema: def.config.inputSchema,
82
+ outputSchema: def.config.outputSchema,
83
+ }, async (args) => def.handler(args));
84
+ }
85
+ }
86
+ }
59
87
  export function createCodeMapMcpServer(storage) {
60
88
  const server = new McpServer({
61
89
  name: MCP_SERVER_NAME,
62
90
  version: MCP_SERVER_VERSION,
63
91
  });
64
92
  const service = new CodeMapMcpService(storage);
65
- registerTools(server, service);
93
+ const reservedNames = new Set(['codemap_query', 'codemap_impact']);
94
+ registerNativeTools(server, service);
95
+ registerContractTools(server, getFullContract(), reservedNames);
66
96
  return server;
67
97
  }
68
98
  export async function startCodeMapMcpServer(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@ MyCodeMap 可以与多种 AI 编程助手集成,让 AI 能够:
24
24
  - 📊 **依赖分析** - 理解项目结构和模块关系
25
25
  - ⚡ **影响评估** - 分析代码变更的影响范围
26
26
  - 🛡️ **质量门禁** - 自动执行 CI 检查
27
+ - 🩺 **持续健康诊断** (`doctor`) - 安装 / 配置 / 运行时 / Agent 四类健康检查
28
+ - 🧬 **WASM 回退** - 当 Native 依赖不可用时自动切换 WASM 实现
29
+ - 📜 **接口契约自省** (`--schema`) - 输出完整 CLI 契约 JSON,供 Agent 动态发现能力
30
+ - 🔌 **MCP 自动网关** - 所有 Schema 定义的 CLI 命令自动暴露为 MCP tools,动态注册
27
31
 
28
32
  ### 快速选择
29
33
 
@@ -53,7 +57,7 @@ MyCodeMap 可以与多种 AI 编程助手集成,让 AI 能够:
53
57
  - 也可以通过 `mycodemap ci check-docs-sync` 走统一的 CI 子命令入口
54
58
  - 当前仓库的 agent 工程规则以 `docs/rules/engineering-with-codex-openai.md` 为准
55
59
  - 若文档或提示词仍把 `server`、`watch`、`report`、`logs` 当成当前 public CLI,必须同步改成 removed-command 迁移说明
56
- - 若项目启用了 `mycodemap.config.json.storage` `sqlite`,先确认 `better-sqlite3` 已安装且 Node.js `>=20`;若仍看到 `kuzudb` / `neo4j` 配置,应先迁移再让 AI 判断 graph backend 失败原因
60
+ - 若项目启用了 `.mycodemap/config.json` `storage.type = "sqlite"`,先确认 `better-sqlite3` 已安装且 Node.js `>=20`;若仍看到 `kuzudb` / `neo4j` 配置,应先迁移再让 AI 判断 graph backend 失败原因
57
61
 
58
62
  ---
59
63
 
@@ -138,23 +142,20 @@ $CODEMAP_CMD complexity -f "<file-path>"
138
142
 
139
143
  ### 统一分析入口(analyze)
140
144
  ```bash
141
- # 影响分析
142
- $CODEMAP_CMD analyze -i impact -t "<file-path>"
145
+ # 符号查找
146
+ $CODEMAP_CMD analyze -i find -s "<symbol-name>"
143
147
 
144
- # 依赖分析
145
- $CODEMAP_CMD analyze -i dependency -t "<module-path>"
146
-
147
- # 复杂度分析
148
- $CODEMAP_CMD analyze -i complexity -t "<path>"
148
+ # 代码读取(含上下文)
149
+ $CODEMAP_CMD analyze -i read -t "<file-path>" --scope transitive
149
150
 
150
- # 搜索分析
151
- $CODEMAP_CMD analyze -i search -k "<keyword>"
151
+ # 依赖链接分析
152
+ $CODEMAP_CMD analyze -i link -t "<module-path>"
152
153
 
153
- # 项目概览
154
- $CODEMAP_CMD analyze -i overview -t "<path>"
154
+ # 项目概览展示
155
+ $CODEMAP_CMD analyze -i show -t "<path>"
155
156
 
156
157
  # JSON 输出
157
- $CODEMAP_CMD analyze -i impact -t "<file>" --json
158
+ $CODEMAP_CMD analyze -i find -s "<symbol>" --json
158
159
  ```
159
160
 
160
161
  ### CI 门禁(ci)
@@ -422,7 +423,9 @@ mycodemap impact -f "src/file.ts"
422
423
 
423
424
  ## 关键文件
424
425
 
425
- - `mycodemap.config.json` - CodeMap 配置文件
426
+ - `.mycodemap/config.json` - CodeMap canonical 配置文件
427
+ - `.mycodemap/status/init-last.json` - init receipt / managed asset ledger
428
+ - `.mycodemap/rules/` - 通用 AI guardrails rules bundle(需手动引用到 `CLAUDE.md` / `AGENTS.md`)
426
429
  - `.mycodemap/AI_MAP.md` - 项目全局概览
427
430
 
428
431
  ## 开发规范
@@ -806,6 +809,162 @@ npm install --save-dev @mycodemap/mycodemap
806
809
 
807
810
  ---
808
811
 
812
+ ## AI CLI 一键安装引导
813
+
814
+ > 本章节面向 AI CLI 工具(Claude Code、Codex CLI 等),提供结构化安装引导。
815
+ > 当用户说"帮我安装 mycodemap"时,AI CLI 应按照以下步骤引导。
816
+
817
+ ### Step 1: 前置条件检查 [CONFIRM]
818
+
819
+ 在开始安装前,确认以下条件:
820
+
821
+ - Node.js >= 18 是否已安装(`node --version`)
822
+ - 当前项目是否有 package.json(`ls package.json`)
823
+ - 向用户确认:是项目级别安装还是全局安装
824
+
825
+ ### Step 2: 安装依赖 [CONFIRM]
826
+
827
+ ```bash
828
+ # 项目级别安装(推荐)
829
+ npm install @mycodemap/mycodemap
830
+
831
+ # 或全局安装
832
+ npm install -g @mycodemap/mycodemap
833
+ ```
834
+
835
+ ### Step 3: 初始化 [CONFIRM]
836
+
837
+ ```bash
838
+ # 先预览配置(不写入文件)
839
+ mycodemap init
840
+
841
+ # 确认后写入
842
+ mycodemap init -y
843
+ ```
844
+
845
+ ### Step 4: 生成代码地图
846
+
847
+ ```bash
848
+ mycodemap generate
849
+ ```
850
+
851
+ 安装完成后会生成:
852
+ - `.mycodemap/AI_MAP.md` — 项目全局概览
853
+ - `.mycodemap/codemap.json` — 结构化数据
854
+ - `.mycodemap/CONTEXT.md` — 上下文入口
855
+
856
+ ### Step 5: 环境健康诊断 [CONFIRM]
857
+
858
+ 运行 `codemap doctor` 验证环境健康状态:
859
+
860
+ ```bash
861
+ # 运行全部诊断(安装 / 配置 / 运行时 / Agent)
862
+ codemap doctor
863
+
864
+ # 或按类别诊断
865
+ codemap doctor --category install
866
+ codemap doctor --category config
867
+ codemap doctor --category runtime
868
+ codemap doctor --category agent
869
+ ```
870
+
871
+ 诊断输出为结构化 JSON,包含 `rootCause` + `remediationPlan` + `confidence` + `nextCommand`。修复所有 HIGH 级别问题后再继续。
872
+
873
+ ### Step 6: 查看接口契约 [CONFIRM]
874
+
875
+ 运行 `codemap --schema` 查看完整 CLI 接口契约,供 Agent 自省:
876
+
877
+ ```bash
878
+ # 输出完整契约 JSON
879
+ codemap --schema
880
+
881
+ # 或保存到文件供 skill 引用
882
+ codemap --schema > .mycodemap/interface-contract.json
883
+ ```
884
+
885
+ 契约包含所有命令、参数、输出格式的结构化定义,是 MCP Gateway 动态暴露 tools 的单一数据源。
886
+
887
+ ### Step 7: 配置 AI 助手 skill [CONFIRM]
888
+
889
+ 根据使用的 AI 助手,拷贝对应的 skill 文件:
890
+
891
+ **Claude Code:**
892
+ ```bash
893
+ mkdir -p .claude/skills/codemap
894
+ cp node_modules/@mycodemap/mycodemap/examples/claude/codemap-skill.md .claude/skills/codemap/SKILL.md
895
+
896
+ # 可选:安装架构分析技能(Phase 48 已交付)
897
+ mkdir -p .claude/skills/mycodemap-repo-analyzer
898
+ cp node_modules/@mycodemap/mycodemap/examples/claude/skills/mycodemap-repo-analyzer/SKILL.md .claude/skills/mycodemap-repo-analyzer/SKILL.md
899
+ cp -r node_modules/@mycodemap/mycodemap/examples/claude/skills/mycodemap-repo-analyzer/references .claude/skills/mycodemap-repo-analyzer/
900
+ ```
901
+
902
+ **Codex CLI:**
903
+ ```bash
904
+ mkdir -p .agents/skills/codemap
905
+ cp node_modules/@mycodemap/mycodemap/examples/codex/codemap-agent.md .agents/skills/codemap/SKILL.md
906
+ ```
907
+
908
+ ### Step 8: 更新项目 rules [CONFIRM]
909
+
910
+ 在项目的 `CLAUDE.md` 和 `AGENTS.md` 中追加以下内容:
911
+
912
+ ```markdown
913
+ ## CodeMap Skill
914
+
915
+ ### 何时使用
916
+ - 需要理解项目整体结构或模块关系
917
+ - 分析代码变更的影响范围
918
+ - 查询符号定义、调用关系、依赖链
919
+ - 评估代码复杂度或检测循环依赖
920
+
921
+ ### 何时不用
922
+ - 简单的单文件修改或调试
923
+ - 非代码文件操作(文档、配置等)
924
+ - 已有明确上下文的局部改动
925
+
926
+ ### 如何使用
927
+ - 参考 .claude/skills/codemap/ 中的 skill 指令
928
+ - 使用 mycodemap CLI 命令(generate/query/impact/deps/cycles/complexity)
929
+
930
+ ### 索引维护
931
+ - 代码变更后需运行 `mycodemap generate` 更新索引
932
+ - 在重大功能开发/重构完成后,主动更新一次
933
+ - 如发现 mycodemap 查询结果与代码不一致,先更新索引再使用
934
+ ```
935
+
936
+ ### Step 9: 验证安装
937
+
938
+ ```bash
939
+ # 验证 CLI 可用
940
+ mycodemap query --help
941
+
942
+ # 验证 doctor 可用
943
+ codemap doctor --help
944
+
945
+ # 验证 schema 输出
946
+ codemap --schema | head -20
947
+
948
+ # 验证 skill 文件已就位
949
+ ls .claude/skills/codemap/SKILL.md
950
+ ```
951
+
952
+ ### 可选:MCP 服务器配置
953
+
954
+ CodeMap v2.0 采用 **CLI-as-MCP 自动网关**:所有 Schema 定义的 CLI 命令自动暴露为 MCP tools,无需手动维护 tool 列表。
955
+
956
+ ```bash
957
+ # 安装 MCP 适配器(一次性)
958
+ codemap mcp install
959
+
960
+ # 验证动态 tool 注册(应列出 20+ 个 tools)
961
+ codemap mcp list-tools
962
+ ```
963
+
964
+ 配置完成后,AI 助手可通过 MCP 调用任意 `codemap` 命令(如 `doctor`、`benchmark`、`analyze`、`query` 等),Gateway 会根据 Interface Contract Schema 动态生成 tool 定义。无需再使用实验性的 2-tool 限制模式。
965
+
966
+ ---
967
+
809
968
  ## 参考
810
969
 
811
970
  - [SETUP_GUIDE.md](./SETUP_GUIDE.md) - 人类用户安装指南