@mycodemap/mycodemap 0.4.2 → 0.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 (288) hide show
  1. package/CHANGELOG.md +105 -3
  2. package/README.md +192 -53
  3. package/dist/ai/claude.d.ts +38 -0
  4. package/dist/ai/claude.d.ts.map +1 -0
  5. package/dist/ai/claude.js +169 -0
  6. package/dist/ai/claude.js.map +1 -0
  7. package/dist/ai/codex.d.ts +38 -0
  8. package/dist/ai/codex.d.ts.map +1 -0
  9. package/dist/ai/codex.js +169 -0
  10. package/dist/ai/codex.js.map +1 -0
  11. package/dist/ai/factory.d.ts +48 -0
  12. package/dist/ai/factory.d.ts.map +1 -0
  13. package/dist/ai/factory.js +95 -0
  14. package/dist/ai/factory.js.map +1 -0
  15. package/dist/ai/index.d.ts +12 -0
  16. package/dist/ai/index.d.ts.map +1 -0
  17. package/dist/ai/index.js +29 -0
  18. package/dist/ai/index.js.map +1 -0
  19. package/dist/ai/provider.d.ts +70 -0
  20. package/dist/ai/provider.d.ts.map +1 -0
  21. package/dist/ai/provider.js +31 -0
  22. package/dist/ai/provider.js.map +1 -0
  23. package/dist/ai/subagent-caller.d.ts +90 -0
  24. package/dist/ai/subagent-caller.d.ts.map +1 -0
  25. package/dist/ai/subagent-caller.js +280 -0
  26. package/dist/ai/subagent-caller.js.map +1 -0
  27. package/dist/ai/types.d.ts +70 -0
  28. package/dist/ai/types.d.ts.map +1 -0
  29. package/dist/ai/types.js +5 -0
  30. package/dist/ai/types.js.map +1 -0
  31. package/dist/cli/commands/analyze.d.ts +18 -0
  32. package/dist/cli/commands/analyze.d.ts.map +1 -1
  33. package/dist/cli/commands/analyze.js +239 -6
  34. package/dist/cli/commands/analyze.js.map +1 -1
  35. package/dist/cli/commands/check.d.ts +22 -0
  36. package/dist/cli/commands/check.d.ts.map +1 -0
  37. package/dist/cli/commands/check.js +168 -0
  38. package/dist/cli/commands/check.js.map +1 -0
  39. package/dist/cli/commands/ci.d.ts +25 -0
  40. package/dist/cli/commands/ci.d.ts.map +1 -1
  41. package/dist/cli/commands/ci.js +139 -36
  42. package/dist/cli/commands/ci.js.map +1 -1
  43. package/dist/cli/commands/complexity.d.ts.map +1 -1
  44. package/dist/cli/commands/complexity.js +6 -0
  45. package/dist/cli/commands/complexity.js.map +1 -1
  46. package/dist/cli/commands/design.d.ts +52 -0
  47. package/dist/cli/commands/design.d.ts.map +1 -0
  48. package/dist/cli/commands/design.js +274 -0
  49. package/dist/cli/commands/design.js.map +1 -0
  50. package/dist/cli/commands/generate.d.ts +1 -0
  51. package/dist/cli/commands/generate.d.ts.map +1 -1
  52. package/dist/cli/commands/generate.js +121 -8
  53. package/dist/cli/commands/generate.js.map +1 -1
  54. package/dist/cli/commands/history.d.ts +26 -0
  55. package/dist/cli/commands/history.d.ts.map +1 -0
  56. package/dist/cli/commands/history.js +92 -0
  57. package/dist/cli/commands/history.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +13 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +108 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/server.d.ts +9 -0
  63. package/dist/cli/commands/server.d.ts.map +1 -0
  64. package/dist/cli/commands/server.js +65 -0
  65. package/dist/cli/commands/server.js.map +1 -0
  66. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  67. package/dist/cli/commands/ship/pipeline.js +8 -1
  68. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  69. package/dist/cli/commands/ship/publisher.d.ts +9 -1
  70. package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
  71. package/dist/cli/commands/ship/publisher.js +149 -6
  72. package/dist/cli/commands/ship/publisher.js.map +1 -1
  73. package/dist/cli/commands/workflow.d.ts.map +1 -1
  74. package/dist/cli/commands/workflow.js +22 -2
  75. package/dist/cli/commands/workflow.js.map +1 -1
  76. package/dist/cli/config-loader.d.ts.map +1 -1
  77. package/dist/cli/config-loader.js +3 -2
  78. package/dist/cli/config-loader.js.map +1 -1
  79. package/dist/cli/contract-checker.d.ts +33 -0
  80. package/dist/cli/contract-checker.d.ts.map +1 -0
  81. package/dist/cli/contract-checker.js +719 -0
  82. package/dist/cli/contract-checker.js.map +1 -0
  83. package/dist/cli/contract-diff-scope.d.ts +14 -0
  84. package/dist/cli/contract-diff-scope.d.ts.map +1 -0
  85. package/dist/cli/contract-diff-scope.js +127 -0
  86. package/dist/cli/contract-diff-scope.js.map +1 -0
  87. package/dist/cli/contract-gate-thresholds.d.ts +14 -0
  88. package/dist/cli/contract-gate-thresholds.d.ts.map +1 -0
  89. package/dist/cli/contract-gate-thresholds.js +19 -0
  90. package/dist/cli/contract-gate-thresholds.js.map +1 -0
  91. package/dist/cli/design-contract-loader.d.ts +15 -0
  92. package/dist/cli/design-contract-loader.d.ts.map +1 -0
  93. package/dist/cli/design-contract-loader.js +527 -0
  94. package/dist/cli/design-contract-loader.js.map +1 -0
  95. package/dist/cli/design-contract-schema.d.ts +11 -0
  96. package/dist/cli/design-contract-schema.d.ts.map +1 -0
  97. package/dist/cli/design-contract-schema.js +75 -0
  98. package/dist/cli/design-contract-schema.js.map +1 -0
  99. package/dist/cli/design-handoff-builder.d.ts +15 -0
  100. package/dist/cli/design-handoff-builder.d.ts.map +1 -0
  101. package/dist/cli/design-handoff-builder.js +345 -0
  102. package/dist/cli/design-handoff-builder.js.map +1 -0
  103. package/dist/cli/design-scope-resolver.d.ts +8 -0
  104. package/dist/cli/design-scope-resolver.d.ts.map +1 -0
  105. package/dist/cli/design-scope-resolver.js +760 -0
  106. package/dist/cli/design-scope-resolver.js.map +1 -0
  107. package/dist/cli/design-verification-builder.d.ts +8 -0
  108. package/dist/cli/design-verification-builder.d.ts.map +1 -0
  109. package/dist/cli/design-verification-builder.js +369 -0
  110. package/dist/cli/design-verification-builder.js.map +1 -0
  111. package/dist/cli/index.js +20 -6
  112. package/dist/cli/index.js.map +1 -1
  113. package/dist/cli/paths.d.ts.map +1 -1
  114. package/dist/cli/paths.js +30 -7
  115. package/dist/cli/paths.js.map +1 -1
  116. package/dist/cli-new/commands/server.d.ts +13 -0
  117. package/dist/cli-new/commands/server.d.ts.map +1 -0
  118. package/dist/cli-new/commands/server.js +90 -0
  119. package/dist/cli-new/commands/server.js.map +1 -0
  120. package/dist/core/analyzer.d.ts.map +1 -1
  121. package/dist/core/analyzer.js +16 -0
  122. package/dist/core/analyzer.js.map +1 -1
  123. package/dist/domain/entities/CodeGraph.d.ts +5 -1
  124. package/dist/domain/entities/CodeGraph.d.ts.map +1 -1
  125. package/dist/domain/entities/CodeGraph.js +29 -12
  126. package/dist/domain/entities/CodeGraph.js.map +1 -1
  127. package/dist/domain/entities/Dependency.d.ts +8 -1
  128. package/dist/domain/entities/Dependency.d.ts.map +1 -1
  129. package/dist/domain/entities/Dependency.js +19 -4
  130. package/dist/domain/entities/Dependency.js.map +1 -1
  131. package/dist/domain/entities/Symbol.d.ts +2 -1
  132. package/dist/domain/entities/Symbol.d.ts.map +1 -1
  133. package/dist/domain/entities/Symbol.js +6 -3
  134. package/dist/domain/entities/Symbol.js.map +1 -1
  135. package/dist/generator/ai-overview.d.ts +51 -0
  136. package/dist/generator/ai-overview.d.ts.map +1 -0
  137. package/dist/generator/ai-overview.js +160 -0
  138. package/dist/generator/ai-overview.js.map +1 -0
  139. package/dist/infrastructure/storage/StorageFactory.d.ts +13 -5
  140. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  141. package/dist/infrastructure/storage/StorageFactory.js +62 -16
  142. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  143. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts +3 -1
  144. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
  145. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +10 -2
  146. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
  147. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +3 -1
  148. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
  149. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +9 -1
  150. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
  151. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +3 -1
  152. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
  153. package/dist/infrastructure/storage/adapters/MemoryStorage.js +9 -1
  154. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
  155. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
  156. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
  157. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
  158. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
  159. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts +53 -0
  160. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -0
  161. package/dist/infrastructure/storage/adapters/SQLiteStorage.js +879 -0
  162. package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -0
  163. package/dist/infrastructure/storage/graph-helpers.d.ts +3 -1
  164. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -1
  165. package/dist/infrastructure/storage/graph-helpers.js +90 -0
  166. package/dist/infrastructure/storage/graph-helpers.js.map +1 -1
  167. package/dist/infrastructure/storage/index.d.ts +1 -1
  168. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  169. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +3 -1
  170. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -1
  171. package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -1
  172. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts +27 -0
  173. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts.map +1 -0
  174. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js +246 -0
  175. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js.map +1 -0
  176. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts +25 -0
  177. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts.map +1 -0
  178. package/dist/infrastructure/storage/sqlite/perf-thresholds.js +25 -0
  179. package/dist/infrastructure/storage/sqlite/perf-thresholds.js.map +1 -0
  180. package/dist/infrastructure/storage/sqlite/schema.d.ts +4 -0
  181. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
  182. package/dist/infrastructure/storage/sqlite/schema.js +111 -0
  183. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
  184. package/dist/interface/types/design-check.d.ts +73 -0
  185. package/dist/interface/types/design-check.d.ts.map +1 -0
  186. package/dist/interface/types/design-check.js +4 -0
  187. package/dist/interface/types/design-check.js.map +1 -0
  188. package/dist/interface/types/design-contract.d.ts +123 -0
  189. package/dist/interface/types/design-contract.d.ts.map +1 -0
  190. package/dist/interface/types/design-contract.js +7 -0
  191. package/dist/interface/types/design-contract.js.map +1 -0
  192. package/dist/interface/types/design-handoff.d.ts +68 -0
  193. package/dist/interface/types/design-handoff.d.ts.map +1 -0
  194. package/dist/interface/types/design-handoff.js +4 -0
  195. package/dist/interface/types/design-handoff.js.map +1 -0
  196. package/dist/interface/types/design-mapping.d.ts +51 -0
  197. package/dist/interface/types/design-mapping.d.ts.map +1 -0
  198. package/dist/interface/types/design-mapping.js +4 -0
  199. package/dist/interface/types/design-mapping.js.map +1 -0
  200. package/dist/interface/types/design-verification.d.ts +49 -0
  201. package/dist/interface/types/design-verification.d.ts.map +1 -0
  202. package/dist/interface/types/design-verification.js +4 -0
  203. package/dist/interface/types/design-verification.js.map +1 -0
  204. package/dist/interface/types/history-risk.d.ts +90 -0
  205. package/dist/interface/types/history-risk.d.ts.map +1 -0
  206. package/dist/interface/types/history-risk.js +4 -0
  207. package/dist/interface/types/history-risk.js.map +1 -0
  208. package/dist/interface/types/index.d.ts +20 -1
  209. package/dist/interface/types/index.d.ts.map +1 -1
  210. package/dist/interface/types/storage.d.ts +28 -1
  211. package/dist/interface/types/storage.d.ts.map +1 -1
  212. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts +10 -0
  213. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts.map +1 -1
  214. package/dist/orchestrator/adapters/ast-grep-adapter.js +46 -17
  215. package/dist/orchestrator/adapters/ast-grep-adapter.js.map +1 -1
  216. package/dist/orchestrator/adapters/codemap-adapter.d.ts.map +1 -1
  217. package/dist/orchestrator/adapters/codemap-adapter.js +2 -22
  218. package/dist/orchestrator/adapters/codemap-adapter.js.map +1 -1
  219. package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
  220. package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
  221. package/dist/orchestrator/ai-feed-generator.js +377 -0
  222. package/dist/orchestrator/ai-feed-generator.js.map +1 -0
  223. package/dist/orchestrator/history-risk-service.d.ts +55 -0
  224. package/dist/orchestrator/history-risk-service.d.ts.map +1 -0
  225. package/dist/orchestrator/history-risk-service.js +680 -0
  226. package/dist/orchestrator/history-risk-service.js.map +1 -0
  227. package/dist/orchestrator/types.d.ts +19 -1
  228. package/dist/orchestrator/types.d.ts.map +1 -1
  229. package/dist/orchestrator/types.js +19 -0
  230. package/dist/orchestrator/types.js.map +1 -1
  231. package/dist/server/mcp/index.d.ts +4 -0
  232. package/dist/server/mcp/index.d.ts.map +1 -0
  233. package/dist/server/mcp/index.js +5 -0
  234. package/dist/server/mcp/index.js.map +1 -0
  235. package/dist/server/mcp/server.d.ts +17 -0
  236. package/dist/server/mcp/server.d.ts.map +1 -0
  237. package/dist/server/mcp/server.js +84 -0
  238. package/dist/server/mcp/server.js.map +1 -0
  239. package/dist/server/mcp/service.d.ts +22 -0
  240. package/dist/server/mcp/service.d.ts.map +1 -0
  241. package/dist/server/mcp/service.js +177 -0
  242. package/dist/server/mcp/service.js.map +1 -0
  243. package/dist/server/mcp/types.d.ts +56 -0
  244. package/dist/server/mcp/types.d.ts.map +1 -0
  245. package/dist/server/mcp/types.js +4 -0
  246. package/dist/server/mcp/types.js.map +1 -0
  247. package/docs/AI_ASSISTANT_SETUP.md +1 -1
  248. package/docs/SETUP_GUIDE.md +6 -6
  249. package/docs/ai-guide/COMMANDS.md +171 -4
  250. package/docs/ai-guide/INTEGRATION.md +137 -433
  251. package/docs/ai-guide/OUTPUT.md +890 -5
  252. package/docs/ai-guide/PATTERNS.md +54 -14
  253. package/docs/ai-guide/PROMPTS.md +17 -6
  254. package/docs/archive/test-report-symbol-search.md +384 -0
  255. package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
  256. package/docs/archive/test_report_scenario5.md +615 -0
  257. package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
  258. package/docs/backlog.md +177 -0
  259. package/docs/eatdogfood-reports/2026-04-17-eatdogfood-agent-experience.md +231 -0
  260. package/docs/exec-plans/completed/2026-04-17-eatdogfood-codemap-cli.md +103 -0
  261. package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +102 -0
  262. package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +126 -0
  263. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +11 -10
  264. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +10 -10
  265. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +17 -12
  266. package/docs/product-specs/README.md +2 -1
  267. package/docs/rules/README.md +16 -11
  268. package/docs/rules/architecture-guardrails.md +24 -336
  269. package/docs/rules/code-quality-redlines.md +25 -311
  270. package/docs/rules/engineering-with-codex-openai.md +20 -3
  271. package/docs/rules/validation.md +90 -37
  272. package/mycodemap.config.schema.json +3 -3
  273. package/package.json +7 -2
  274. package/scripts/benchmark-governance-graph.mjs +132 -0
  275. package/scripts/calibrate-contract-gate.mjs +221 -0
  276. package/scripts/capability-report.py +255 -0
  277. package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
  278. package/scripts/qa-rule-control.sh +254 -0
  279. package/scripts/report-high-risk-files.mjs +395 -0
  280. package/scripts/rule-context.mjs +155 -0
  281. package/scripts/smoke-sqlite-impact.mjs +85 -0
  282. package/scripts/sync-analyze-docs.js +1 -0
  283. package/scripts/tests/test_capability_report.py +89 -0
  284. package/scripts/tests/test_rule_control_workflow.py +51 -0
  285. package/scripts/tests/test_validate_rules.py +81 -0
  286. package/scripts/validate-ai-docs.js +283 -1
  287. package/scripts/validate-docs.js +479 -25
  288. package/scripts/validate-rules.py +254 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * [META] since:2026-04-15 | owner:cli-team | stable:false
3
+ * [WHY] Expose symbol-first git history as a public machine-first CLI command backed by the canonical history risk service
4
+ */
5
+ import { Command } from 'commander';
6
+ import { cwd } from 'node:process';
7
+ import { GitHistoryService } from '../../orchestrator/history-risk-service.js';
8
+ import { createConfiguredStorage } from '../storage-runtime.js';
9
+ function toHistoryCommandResult(result) {
10
+ return {
11
+ query: result.query,
12
+ status: result.diagnostics.status,
13
+ symbol: result.symbol,
14
+ candidates: result.candidates,
15
+ files: result.files,
16
+ timeline: result.timeline,
17
+ risk: result.risk,
18
+ warnings: [...result.diagnostics.reasons],
19
+ diagnostics: result.diagnostics,
20
+ };
21
+ }
22
+ export function renderHistoryResult(result) {
23
+ const lines = [
24
+ `History status: ${result.status}`,
25
+ `Query: ${result.query}`,
26
+ `Confidence: ${result.diagnostics.confidence}`,
27
+ `Freshness: ${result.diagnostics.freshness}`,
28
+ ];
29
+ if (result.symbol) {
30
+ lines.push(`Symbol: ${result.symbol.name} (${result.symbol.kind}) @ ${result.symbol.file}:${result.symbol.line}`);
31
+ }
32
+ if (result.candidates.length > 1) {
33
+ lines.push('Candidates:');
34
+ for (const candidate of result.candidates) {
35
+ lines.push(`- ${candidate.symbolId} ${candidate.name} ${candidate.kind} ${candidate.file}:${candidate.line}`);
36
+ }
37
+ }
38
+ lines.push(`Risk: ${result.risk.level}`);
39
+ if (result.risk.riskFactors.length > 0) {
40
+ lines.push(`Risk Factors: ${result.risk.riskFactors.join(', ')}`);
41
+ }
42
+ lines.push('Timeline:');
43
+ if (result.timeline.length === 0) {
44
+ lines.push('- none');
45
+ }
46
+ else {
47
+ for (const entry of result.timeline) {
48
+ lines.push(`- ${entry.date} [${entry.tagType}] ${entry.author}: ${entry.subject}`);
49
+ }
50
+ }
51
+ lines.push('Warnings:');
52
+ if (result.warnings.length === 0) {
53
+ lines.push('- none');
54
+ }
55
+ else {
56
+ for (const warning of result.warnings) {
57
+ lines.push(`- ${warning}`);
58
+ }
59
+ }
60
+ return lines.join('\n');
61
+ }
62
+ export async function executeHistoryCommand(options) {
63
+ const { storage } = await createConfiguredStorage(cwd());
64
+ try {
65
+ const service = new GitHistoryService({
66
+ projectRoot: cwd(),
67
+ storage,
68
+ });
69
+ const result = await service.analyzeSymbol(options.symbol, { persist: true });
70
+ return toHistoryCommandResult(result);
71
+ }
72
+ finally {
73
+ await storage.close();
74
+ }
75
+ }
76
+ async function handleHistoryCommand(options) {
77
+ const result = await executeHistoryCommand(options);
78
+ if (options.human) {
79
+ console.log(renderHistoryResult(result));
80
+ return;
81
+ }
82
+ console.log(JSON.stringify(result, null, 2));
83
+ }
84
+ export function createHistoryCommand() {
85
+ return new Command('history')
86
+ .description('查询符号级 git history 与 risk 摘要(默认 JSON)')
87
+ .requiredOption('--symbol <name>', '目标符号名或 symbol id')
88
+ .option('--human', '使用人类可读输出(默认 JSON)')
89
+ .action(handleHistoryCommand);
90
+ }
91
+ export const historyCommand = createHistoryCommand();
92
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/cli/commands/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ export declare const DEFAULT_MCP_SERVER_NAME = "mycodemap-experimental";
3
+ export declare function isMcpStartInvocation(argv: string[]): boolean;
4
+ export declare function installMcpServer(rootDir?: string): Promise<{
5
+ serverName: string;
6
+ configPath: string;
7
+ updated: boolean;
8
+ }>;
9
+ export declare function handleMcpStart(): Promise<void>;
10
+ export declare function handleMcpInstall(): Promise<void>;
11
+ export declare function createMcpCommand(): Command;
12
+ export declare const mcpCommand: Command;
13
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;AA4BhE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAE5D;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CA2CD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAetD;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAe1C;AAED,eAAO,MAAM,UAAU,SAAqB,CAAC"}
@@ -0,0 +1,108 @@
1
+ // [META] since:2026-04-19 | owner:cli-team | stable:false
2
+ // [WHY] Expose the experimental local-only MCP stdio surface without polluting stdout during server startup
3
+ import { cwd } from 'node:process';
4
+ import { readFile, writeFile } from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import { Command } from 'commander';
7
+ import { startCodeMapMcpServer } from '../../server/mcp/index.js';
8
+ export const DEFAULT_MCP_SERVER_NAME = 'mycodemap-experimental';
9
+ function isRecord(value) {
10
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
11
+ }
12
+ function createDefaultConfig() {
13
+ return {
14
+ mcpServers: {},
15
+ };
16
+ }
17
+ function createExperimentalServerEntry(rootDir) {
18
+ return {
19
+ command: 'node',
20
+ args: ['dist/cli/index.js', 'mcp', 'start'],
21
+ cwd: rootDir,
22
+ env: {
23
+ MYCODEMAP_RUNTIME_LOG_ENABLED: 'false',
24
+ },
25
+ };
26
+ }
27
+ export function isMcpStartInvocation(argv) {
28
+ return argv[0] === 'mcp' && argv[1] === 'start';
29
+ }
30
+ export async function installMcpServer(rootDir = cwd()) {
31
+ const configPath = path.join(rootDir, '.mcp.json');
32
+ const nextEntry = createExperimentalServerEntry(rootDir);
33
+ let existingConfig = createDefaultConfig();
34
+ try {
35
+ const rawConfig = await readFile(configPath, 'utf8');
36
+ const parsedConfig = JSON.parse(rawConfig);
37
+ if (!isRecord(parsedConfig)) {
38
+ throw new Error('`.mcp.json` 必须是 JSON 对象');
39
+ }
40
+ existingConfig = {
41
+ ...parsedConfig,
42
+ mcpServers: isRecord(parsedConfig.mcpServers)
43
+ ? { ...parsedConfig.mcpServers }
44
+ : {},
45
+ };
46
+ }
47
+ catch (error) {
48
+ if (error instanceof SyntaxError) {
49
+ throw new Error(`无法解析 ${configPath}: ${error.message}`);
50
+ }
51
+ const nodeError = error;
52
+ if (nodeError.code !== 'ENOENT') {
53
+ throw error;
54
+ }
55
+ }
56
+ const currentEntry = existingConfig.mcpServers?.[DEFAULT_MCP_SERVER_NAME];
57
+ const updated = JSON.stringify(currentEntry) !== JSON.stringify(nextEntry);
58
+ existingConfig.mcpServers = {
59
+ ...(existingConfig.mcpServers ?? {}),
60
+ [DEFAULT_MCP_SERVER_NAME]: nextEntry,
61
+ };
62
+ await writeFile(configPath, `${JSON.stringify(existingConfig, null, 2)}\n`, 'utf8');
63
+ return {
64
+ serverName: DEFAULT_MCP_SERVER_NAME,
65
+ configPath,
66
+ updated,
67
+ };
68
+ }
69
+ export async function handleMcpStart() {
70
+ try {
71
+ await startCodeMapMcpServer();
72
+ }
73
+ catch (error) {
74
+ console.error(error instanceof Error ? error.message : String(error));
75
+ process.exit(1);
76
+ }
77
+ }
78
+ export async function handleMcpInstall() {
79
+ try {
80
+ const result = await installMcpServer();
81
+ const statusText = result.updated ? 'installed' : 'already-installed';
82
+ console.log([
83
+ `Experimental MCP server ${statusText}: ${result.serverName}`,
84
+ `Config: ${result.configPath}`,
85
+ 'Surface: local-only stdio, read-only, experimental',
86
+ 'Run `mycodemap generate --symbol-level` before invoking MCP tools.',
87
+ ].join('\n'));
88
+ }
89
+ catch (error) {
90
+ console.error(error instanceof Error ? error.message : String(error));
91
+ process.exit(1);
92
+ }
93
+ }
94
+ export function createMcpCommand() {
95
+ const command = new Command('mcp');
96
+ command.description('Experimental MCP integration (local-only, read-only, stdio first)');
97
+ command
98
+ .command('start')
99
+ .description('Start the experimental local MCP stdio server')
100
+ .action(handleMcpStart);
101
+ command
102
+ .command('install')
103
+ .description('Install the experimental local MCP server into the current repo `.mcp.json`')
104
+ .action(handleMcpInstall);
105
+ return command;
106
+ }
107
+ export const mcpCommand = createMcpCommand();
108
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,4GAA4G;AAE5G,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAOhE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;QACL,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAe;IACpD,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC;QAC3C,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE;YACH,6BAA6B,EAAE,OAAO;SACvC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB,GAAG,EAAE;IAK5D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,cAAc,GAAmB,mBAAmB,EAAE,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAY,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,cAAc,GAAG;YACf,GAAG,YAAY;YACf,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC;gBAC3C,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE;gBAChC,CAAC,CAAC,EAAE;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,SAAS,GAAG,KAA8B,CAAC;QACjD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC,uBAAuB,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE3E,cAAc,CAAC,UAAU,GAAG;QAC1B,GAAG,CAAC,cAAc,CAAC,UAAU,IAAI,EAAE,CAAC;QACpC,CAAC,uBAAuB,CAAC,EAAE,SAAS;KACrC,CAAC;IAEF,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEpF,OAAO;QACL,UAAU,EAAE,uBAAuB;QACnC,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,qBAAqB,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAEtE,OAAO,CAAC,GAAG,CAAC;YACV,2BAA2B,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE;YAC7D,WAAW,MAAM,CAAC,UAAU,EAAE;YAC9B,oDAAoD;YACpD,oEAAoE;SACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,CAAC,WAAW,CAAC,mEAAmE,CAAC,CAAC;IAEzF,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface ServerOptions {
2
+ port?: string;
3
+ host?: string;
4
+ cors?: boolean;
5
+ open?: boolean;
6
+ }
7
+ export declare function serverCommand(options: ServerOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEzE"}
@@ -0,0 +1,65 @@
1
+ // [META] since:2026-03 | owner:architecture-team | stable:true
2
+ // [WHY] Server command - starts the CodeMap HTTP API server (MVP3 architecture)
3
+ // ============================================
4
+ import chalk from 'chalk';
5
+ import { CodeGraphBuilder } from '../../domain/services/CodeGraphBuilder.js';
6
+ import { CodeMapServer } from '../../server/CodeMapServer.js';
7
+ import { createConfiguredStorage } from '../storage-runtime.js';
8
+ export async function serverCommand(options) {
9
+ try {
10
+ const port = parseInt(options.port ?? '3000', 10);
11
+ const host = options.host ?? '0.0.0.0';
12
+ console.log(chalk.blue('🔧 初始化 CodeMap 服务器...\n'));
13
+ // 创建存储实例
14
+ const { storage } = await createConfiguredStorage(process.cwd());
15
+ // 创建代码图构建器
16
+ const builder = CodeGraphBuilder.create({
17
+ mode: 'fast',
18
+ rootDir: process.cwd(),
19
+ });
20
+ // 创建并启动服务器
21
+ const server = CodeMapServer.create(storage, builder, {
22
+ port,
23
+ host,
24
+ cors: options.cors ? { origin: '*', credentials: true } : undefined,
25
+ });
26
+ const { url } = await server.start();
27
+ console.log(chalk.green(`\n✅ 服务器已启动!\n`));
28
+ console.log(chalk.white(`📡 API 地址: ${chalk.cyan(`${url}/api/v1`)}`));
29
+ console.log(chalk.white(`🏥 健康检查: ${chalk.cyan(`${url}/api/v1/health`)}`));
30
+ console.log(chalk.white(`📊 项目统计: ${chalk.cyan(`${url}/api/v1/stats`)}`));
31
+ console.log(chalk.white(`🔍 符号搜索: ${chalk.cyan(`${url}/api/v1/search/symbols?q=`)}`));
32
+ console.log();
33
+ // 自动打开浏览器
34
+ if (options.open) {
35
+ try {
36
+ const { exec } = await import('child_process');
37
+ const platform = process.platform;
38
+ const cmd = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
39
+ exec(`${cmd} ${url}`);
40
+ }
41
+ catch {
42
+ // 忽略打开浏览器失败
43
+ }
44
+ }
45
+ // 优雅关闭
46
+ process.on('SIGINT', async () => {
47
+ console.log(chalk.yellow('\n\n🛑 正在关闭服务器...'));
48
+ await server.stop();
49
+ await storage.close();
50
+ process.exit(0);
51
+ });
52
+ process.on('SIGTERM', async () => {
53
+ await server.stop();
54
+ await storage.close();
55
+ process.exit(0);
56
+ });
57
+ // 保持进程运行
58
+ await new Promise(() => { });
59
+ }
60
+ catch (error) {
61
+ console.error(chalk.red('\n❌ 服务器启动失败:'), error);
62
+ process.exit(1);
63
+ }
64
+ }
65
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ship/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAuC,aAAa,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAyC,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAA2D,WAAW,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EAAgC,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAkC,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8DD,wBAAsB,eAAe,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAqMvF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAKlE"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ship/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAuC,aAAa,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAyC,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAA2D,WAAW,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EAAgC,aAAa,EAA6C,MAAM,gBAAgB,CAAC;AACxH,OAAO,EAAkC,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8DD,wBAAsB,eAAe,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6MvF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAKlE"}
@@ -6,7 +6,7 @@ import chalk from 'chalk';
6
6
  import { analyzeCommits, formatAnalyzeOutput } from './analyzer.js';
7
7
  import { calculateVersion, formatVersionOutput } from './versioner.js';
8
8
  import { runQualityChecks, formatCheckOutput, shouldBlockRelease } from './checker.js';
9
- import { publish, formatPublishOutput } from './publisher.js';
9
+ import { publish, formatPublishOutput, isLargeRelease, formatLargeReleaseWarning } from './publisher.js';
10
10
  import { monitorCI, formatMonitorOutput } from './monitor.js';
11
11
  const SEPARATOR = '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━';
12
12
  const CONFIRM_TIMEOUT_MS = 30_000;
@@ -71,6 +71,13 @@ export async function runShipPipeline(ctx) {
71
71
  if (!analyzeStep || !analyzeResult) {
72
72
  return { ...result, blocked: true, blockReason: '变更分析失败' };
73
73
  }
74
+ // 检测大规模发布并显示警告
75
+ if (isLargeRelease(analyzeResult.commits)) {
76
+ const warningLines = formatLargeReleaseWarning(analyzeResult.commits);
77
+ for (const line of warningLines) {
78
+ console.log(line);
79
+ }
80
+ }
74
81
  // Step 2: VERSION
75
82
  const versionStep = await runStep('版本计算', async () => {
76
83
  versionResult = await calculateVersion(analyzeResult);
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../../src/cli/commands/ship/pipeline.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,wBAAwB;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAiB,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAiB,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAe,MAAM,cAAc,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAiB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAiB,MAAM,cAAc,CAAC;AAmB7E,MAAM,SAAS,GAAG,iCAAiC,CAAC;AACpD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,KAAK,UAAU,OAAO,CACpB,IAAY,EACZ,EAAuB,EACvB,MAAoB;IAEpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,OAAe,EACf,WAAwB;IAExB,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,WAAW,CAAC,UAAU,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO;SAC5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACvF,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACvD,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAwB;IAC5D,MAAM,MAAM,GAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,aAAwC,CAAC;IAC7C,IAAI,aAAwC,CAAC;IAC7C,IAAI,WAAoC,CAAC;IAEzC,kBAAkB;IAClB,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,MAAM,EACN,KAAK,IAAI,EAAE;QACT,aAAa,GAAG,MAAM,cAAc,EAAE,CAAC;IACzC,CAAC,EACD,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;IAEF,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,kBAAkB;IAClB,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,MAAM,EACN,KAAK,IAAI,EAAE;QACT,aAAa,GAAG,MAAM,gBAAgB,CAAC,aAAc,CAAC,CAAC;IACzD,CAAC,EACD,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;IAEF,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,0CAA0C;IAC1C,IAAI,aAAa,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,gBAAgB;IAChB,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,MAAM,EACN,KAAK,IAAI,EAAE;QACT,WAAW,GAAG,MAAM,gBAAgB,CAAC,aAAc,EAAE,aAAc,CAAC,CAAC;IACvE,CAAC,EACD,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;IAEF,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,aAAa;IACb,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,WAAW,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;iBAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;iBAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa;YACb,aAAa;YACb,WAAW;YACX,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACtE,MAAM,aAAa,GAAG,MAAM,4BAA4B,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACtG,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;gBACX,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,QAAQ;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,aAAwC,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAEvC,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE;YAC5D,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa;SACd,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;gBACX,aAAa;gBACb,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,MAAM;aACpB,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,WAAW,EAAE,aAAa,CAAC,UAAU;SACtC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAE9F,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;gBACX,aAAa;gBACb,aAAa;gBACb,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,aAAa,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB;aACpF,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAEtC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa;YACb,aAAa;YACb,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;IACP,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,gBAAgB,MAAM,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,aAAa;QACb,aAAa;QACb,WAAW;QACX,aAAa;QACb,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,UAAU,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../../src/cli/commands/ship/pipeline.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,wBAAwB;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAiB,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAiB,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAe,MAAM,cAAc,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAiB,cAAc,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAiB,MAAM,cAAc,CAAC;AAmB7E,MAAM,SAAS,GAAG,iCAAiC,CAAC;AACpD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,KAAK,UAAU,OAAO,CACpB,IAAY,EACZ,EAAuB,EACvB,MAAoB;IAEpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,OAAe,EACf,WAAwB;IAExB,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,WAAW,CAAC,UAAU,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO;SAC5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACvF,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACvD,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAwB;IAC5D,MAAM,MAAM,GAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,aAAwC,CAAC;IAC7C,IAAI,aAAwC,CAAC;IAC7C,IAAI,WAAoC,CAAC;IAEzC,kBAAkB;IAClB,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,MAAM,EACN,KAAK,IAAI,EAAE;QACT,aAAa,GAAG,MAAM,cAAc,EAAE,CAAC;IACzC,CAAC,EACD,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;IAEF,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,eAAe;IACf,IAAI,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,yBAAyB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,MAAM,EACN,KAAK,IAAI,EAAE;QACT,aAAa,GAAG,MAAM,gBAAgB,CAAC,aAAc,CAAC,CAAC;IACzD,CAAC,EACD,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;IAEF,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,0CAA0C;IAC1C,IAAI,aAAa,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,gBAAgB;IAChB,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,MAAM,EACN,KAAK,IAAI,EAAE;QACT,WAAW,GAAG,MAAM,gBAAgB,CAAC,aAAc,EAAE,aAAc,CAAC,CAAC;IACvE,CAAC,EACD,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;IAEF,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,aAAa;IACb,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,WAAW,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;iBAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;iBAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa;YACb,aAAa;YACb,WAAW;YACX,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACtE,MAAM,aAAa,GAAG,MAAM,4BAA4B,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACtG,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;gBACX,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,QAAQ;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,aAAwC,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAEvC,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE;YAC5D,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa;SACd,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;gBACX,aAAa;gBACb,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,MAAM;aACpB,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,WAAW,EAAE,aAAa,CAAC,UAAU;SACtC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAE9F,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;gBACX,aAAa;gBACb,aAAa;gBACb,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,aAAa,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB;aACpF,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAEtC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa;YACb,aAAa;YACb,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;IACP,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,gBAAgB,MAAM,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,aAAa;QACb,aAAa;QACb,WAAW;QACX,aAAa;QACb,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,UAAU,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,8 +1,16 @@
1
- import { AnalyzeResult } from './analyzer.js';
1
+ import { AnalyzeResult, GitCommit } from './analyzer.js';
2
2
  export interface PublishOptions {
3
3
  dryRun?: boolean;
4
4
  analyzeResult?: AnalyzeResult;
5
5
  }
6
+ /**
7
+ * 检查是否为大规模发布,需要额外注意
8
+ */
9
+ export declare function isLargeRelease(commits: GitCommit[]): boolean;
10
+ /**
11
+ * 生成大规模发布警告
12
+ */
13
+ export declare function formatLargeReleaseWarning(commits: GitCommit[]): string[];
6
14
  export interface PublishResult {
7
15
  success: boolean;
8
16
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ship/publisher.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAa,MAAM,eAAe,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAwND,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CA2EnG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAyBjE"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ship/publisher.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAgGD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAwBxE;AAkQD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CA2EnG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAyBjE"}
@@ -5,6 +5,104 @@ import { execSync } from 'child_process';
5
5
  import { existsSync, readFileSync, writeFileSync } from 'fs';
6
6
  const CHANGELOG_HEADER = '# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n';
7
7
  const COMMAND_MAX_BUFFER = 20 * 1024 * 1024;
8
+ // Commit 数量警告阈值
9
+ const LARGE_RELEASE_COMMIT_THRESHOLD = 20;
10
+ /**
11
+ * 检测 commit 是否属于 milestone 相关
12
+ * 基于 commit message 中的关键词识别 milestone/phase 变更
13
+ */
14
+ function detectMilestoneKeywords(message) {
15
+ const lowerMsg = message.toLowerCase();
16
+ // Phase 相关
17
+ const phaseMatch = message.match(/phase\s*(\d+)/i);
18
+ const phase = phaseMatch ? `Phase ${phaseMatch[1]}` : undefined;
19
+ // 检测 milestone 生命周期
20
+ if (/\bstart\s+(v?\d+\.\d+|milestone)/i.test(message) || /启动.*milestone/i.test(message)) {
21
+ return { isMilestone: true, phase, type: 'start' };
22
+ }
23
+ if (/\b(close|complete|finish)\s+(v?\d+\.\d+|milestone)/i.test(message) || /完成.*milestone/i.test(message)) {
24
+ return { isMilestone: true, phase, type: 'close' };
25
+ }
26
+ if (/\barchive\b/i.test(message) || /归档/i.test(message)) {
27
+ return { isMilestone: true, phase, type: 'archive' };
28
+ }
29
+ // 检测 planning 文档变更
30
+ if (/planning:/i.test(message) || /\.planning\//i.test(message)) {
31
+ return { isMilestone: true, phase, type: 'progress' };
32
+ }
33
+ return { isMilestone: false };
34
+ }
35
+ /**
36
+ * 从 commits 中提取 milestone 信息
37
+ */
38
+ function extractMilestoneInfo(commits) {
39
+ // 查找 milestone close/start 的 commit
40
+ for (const commit of commits) {
41
+ const milestoneMatch = commit.message.match(/v?(\d+\.\d+)\s*milestone/i);
42
+ if (milestoneMatch) {
43
+ const closeMatch = /\b(close|complete|finish)\b/i.test(commit.message);
44
+ return {
45
+ milestoneName: `v${milestoneMatch[1]}`,
46
+ hasCompleteMilestone: closeMatch
47
+ };
48
+ }
49
+ }
50
+ return { hasCompleteMilestone: false };
51
+ }
52
+ /**
53
+ * 按 milestone/phase 分组 commits
54
+ */
55
+ function groupCommitsByMilestone(commits) {
56
+ const groups = new Map();
57
+ for (const commit of commits) {
58
+ const milestoneInfo = detectMilestoneKeywords(commit.message);
59
+ if (milestoneInfo.isMilestone && milestoneInfo.phase) {
60
+ const key = milestoneInfo.phase;
61
+ const existing = groups.get(key);
62
+ if (existing) {
63
+ existing.commits.push(commit);
64
+ }
65
+ else {
66
+ groups.set(key, {
67
+ name: key,
68
+ description: `${key} Delivery`,
69
+ commits: [commit]
70
+ });
71
+ }
72
+ }
73
+ }
74
+ return groups;
75
+ }
76
+ /**
77
+ * 检查是否为大规模发布,需要额外注意
78
+ */
79
+ export function isLargeRelease(commits) {
80
+ return commits.length > LARGE_RELEASE_COMMIT_THRESHOLD;
81
+ }
82
+ /**
83
+ * 生成大规模发布警告
84
+ */
85
+ export function formatLargeReleaseWarning(commits) {
86
+ const lines = [];
87
+ lines.push('');
88
+ lines.push(chalk.yellow('⚠️ 检测到大规模发布'));
89
+ lines.push(chalk.gray(` 本次发布包含 ${commits.length} 个 commits,超过阈值 ${LARGE_RELEASE_COMMIT_THRESHOLD}`));
90
+ // 分析 milestone 分布
91
+ const milestoneGroups = groupCommitsByMilestone(commits);
92
+ if (milestoneGroups.size > 0) {
93
+ lines.push(chalk.gray(' 发现以下 Phase/Milestone 分组:'));
94
+ for (const [name, group] of milestoneGroups) {
95
+ lines.push(chalk.gray(` - ${name}: ${group.commits.length} commits`));
96
+ }
97
+ }
98
+ const { milestoneName, hasCompleteMilestone } = extractMilestoneInfo(commits);
99
+ if (milestoneName) {
100
+ lines.push(chalk.gray(` Milestone: ${milestoneName} ${hasCompleteMilestone ? '(已完成)' : '(进行中)'}`));
101
+ }
102
+ lines.push(chalk.gray(' 建议: 请仔细 review 生成的 CHANGELOG,确保 milestone 变更已完整记录'));
103
+ lines.push('');
104
+ return lines;
105
+ }
8
106
  function updateFileByRules(rules) {
9
107
  for (const rule of rules) {
10
108
  if (!existsSync(rule.file)) {
@@ -99,14 +197,59 @@ function buildChangelogSections(analyzeResult) {
99
197
  '- Automated release triggered by `codemap ship`'
100
198
  ];
101
199
  }
102
- const groups = new Map();
103
- for (const commit of analyzeResult.commits) {
200
+ const { commits } = analyzeResult;
201
+ const lines = [];
202
+ // 1. 检查是否为大规模发布,添加 milestone 摘要
203
+ const { milestoneName, hasCompleteMilestone } = extractMilestoneInfo(commits);
204
+ if (milestoneName && hasCompleteMilestone) {
205
+ lines.push(`### 🏗️ ${milestoneName} Milestone`);
206
+ lines.push('');
207
+ lines.push(`${milestoneName} milestone 完成。`);
208
+ lines.push('');
209
+ }
210
+ // 2. 按 Phase 分组(如果存在)
211
+ const phaseGroups = groupCommitsByMilestone(commits);
212
+ if (phaseGroups.size > 0) {
213
+ // 按 Phase 编号排序
214
+ const sortedPhases = Array.from(phaseGroups.entries())
215
+ .sort((a, b) => {
216
+ const numA = parseInt(a[0].match(/\d+/)?.[0] || '0', 10);
217
+ const numB = parseInt(b[0].match(/\d+/)?.[0] || '0', 10);
218
+ return numA - numB;
219
+ });
220
+ for (const [phaseName, group] of sortedPhases) {
221
+ lines.push(`#### ${group.description}`);
222
+ lines.push('');
223
+ for (const commit of group.commits.slice(0, 10)) { // 限制每个 phase 显示 10 条
224
+ lines.push(formatCommitLine(commit));
225
+ }
226
+ if (group.commits.length > 10) {
227
+ lines.push(`- ... and ${group.commits.length - 10} more commits`);
228
+ }
229
+ lines.push('');
230
+ }
231
+ }
232
+ // 3. 剩余 commits 按类型分组
233
+ const remainingCommits = commits.filter(c => !detectMilestoneKeywords(c.message).isMilestone);
234
+ const typeGroups = new Map();
235
+ for (const commit of remainingCommits) {
104
236
  const section = classifyCommitSection(commit.type);
105
- const lines = groups.get(section) ?? [];
106
- lines.push(formatCommitLine(commit));
107
- groups.set(section, lines);
237
+ const sectionLines = typeGroups.get(section) ?? [];
238
+ sectionLines.push(formatCommitLine(commit));
239
+ typeGroups.set(section, sectionLines);
240
+ }
241
+ // 4. 按优先级输出类型分组
242
+ const priority = ['### 🚀 New Features', '### 🐛 Bug Fixes', '### 📚 Documentation', '### ♻️ Refactors', '### 🔧 Maintenance'];
243
+ for (const section of priority) {
244
+ const sectionLines = typeGroups.get(section);
245
+ if (sectionLines && sectionLines.length > 0) {
246
+ lines.push(section);
247
+ lines.push('');
248
+ lines.push(...sectionLines);
249
+ lines.push('');
250
+ }
108
251
  }
109
- return Array.from(groups.entries()).flatMap(([section, lines]) => [section, '', ...lines, '']);
252
+ return lines;
110
253
  }
111
254
  function ensureChangelogEntry(version, analyzeResult) {
112
255
  const versionStr = version.replace(/^v/, '');