@mycodemap/mycodemap 0.4.0 → 0.4.2

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 (246) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +214 -221
  3. package/dist/cli/commands/analyze-options.d.ts +36 -0
  4. package/dist/cli/commands/analyze-options.d.ts.map +1 -0
  5. package/dist/cli/commands/analyze-options.js +147 -0
  6. package/dist/cli/commands/analyze-options.js.map +1 -0
  7. package/dist/cli/commands/analyze.d.ts +93 -4
  8. package/dist/cli/commands/analyze.d.ts.map +1 -1
  9. package/dist/cli/commands/analyze.js +592 -176
  10. package/dist/cli/commands/analyze.js.map +1 -1
  11. package/dist/cli/commands/ci.d.ts +47 -1
  12. package/dist/cli/commands/ci.d.ts.map +1 -1
  13. package/dist/cli/commands/ci.js +208 -1
  14. package/dist/cli/commands/ci.js.map +1 -1
  15. package/dist/cli/commands/export.d.ts.map +1 -1
  16. package/dist/cli/commands/export.js +2 -2
  17. package/dist/cli/commands/export.js.map +1 -1
  18. package/dist/cli/commands/generate.d.ts +8 -2
  19. package/dist/cli/commands/generate.d.ts.map +1 -1
  20. package/dist/cli/commands/generate.js +151 -22
  21. package/dist/cli/commands/generate.js.map +1 -1
  22. package/dist/cli/commands/init.d.ts.map +1 -1
  23. package/dist/cli/commands/init.js +2 -13
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/ship/analyzer.d.ts +1 -1
  26. package/dist/cli/commands/ship/analyzer.d.ts.map +1 -1
  27. package/dist/cli/commands/ship/analyzer.js +8 -1
  28. package/dist/cli/commands/ship/analyzer.js.map +1 -1
  29. package/dist/cli/commands/ship/checker.d.ts +1 -1
  30. package/dist/cli/commands/ship/checker.d.ts.map +1 -1
  31. package/dist/cli/commands/ship/checker.js +17 -6
  32. package/dist/cli/commands/ship/checker.js.map +1 -1
  33. package/dist/cli/commands/ship/index.js +2 -2
  34. package/dist/cli/commands/ship/index.js.map +1 -1
  35. package/dist/cli/commands/ship/monitor.d.ts +17 -2
  36. package/dist/cli/commands/ship/monitor.d.ts.map +1 -1
  37. package/dist/cli/commands/ship/monitor.js +116 -29
  38. package/dist/cli/commands/ship/monitor.js.map +1 -1
  39. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  40. package/dist/cli/commands/ship/pipeline.js +97 -18
  41. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  42. package/dist/cli/commands/ship/publisher.d.ts +12 -2
  43. package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
  44. package/dist/cli/commands/ship/publisher.js +217 -37
  45. package/dist/cli/commands/ship/publisher.js.map +1 -1
  46. package/dist/cli/commands/ship/rules/quality-rules.d.ts +2 -2
  47. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -1
  48. package/dist/cli/commands/ship/rules/quality-rules.js +53 -54
  49. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -1
  50. package/dist/cli/commands/ship/versioner.d.ts +1 -1
  51. package/dist/cli/commands/ship/versioner.d.ts.map +1 -1
  52. package/dist/cli/commands/ship/versioner.js +4 -2
  53. package/dist/cli/commands/ship/versioner.js.map +1 -1
  54. package/dist/cli/commands/workflow.js +4 -4
  55. package/dist/cli/commands/workflow.js.map +1 -1
  56. package/dist/cli/config-loader.d.ts +31 -0
  57. package/dist/cli/config-loader.d.ts.map +1 -0
  58. package/dist/cli/config-loader.js +235 -0
  59. package/dist/cli/config-loader.js.map +1 -0
  60. package/dist/cli/index.js +19 -64
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/removed-commands.d.ts +9 -0
  63. package/dist/cli/removed-commands.d.ts.map +1 -0
  64. package/dist/cli/removed-commands.js +48 -0
  65. package/dist/cli/removed-commands.js.map +1 -0
  66. package/dist/cli/storage-runtime.d.ts +8 -0
  67. package/dist/cli/storage-runtime.d.ts.map +1 -0
  68. package/dist/cli/storage-runtime.js +14 -0
  69. package/dist/cli/storage-runtime.js.map +1 -0
  70. package/dist/cli/tree-sitter-check.d.ts.map +1 -1
  71. package/dist/cli/tree-sitter-check.js +0 -1
  72. package/dist/cli/tree-sitter-check.js.map +1 -1
  73. package/dist/cli-new/commands/export.d.ts.map +1 -1
  74. package/dist/cli-new/commands/export.js +2 -2
  75. package/dist/cli-new/commands/export.js.map +1 -1
  76. package/dist/cli-new/commands/query.d.ts.map +1 -1
  77. package/dist/cli-new/commands/query.js +5 -4
  78. package/dist/cli-new/commands/query.js.map +1 -1
  79. package/dist/cli-new/index.d.ts.map +1 -1
  80. package/dist/cli-new/index.js +0 -2
  81. package/dist/cli-new/index.js.map +1 -1
  82. package/dist/core/analyzer.d.ts.map +1 -1
  83. package/dist/core/analyzer.js +7 -39
  84. package/dist/core/analyzer.js.map +1 -1
  85. package/dist/core/file-discovery.d.ts +17 -0
  86. package/dist/core/file-discovery.d.ts.map +1 -0
  87. package/dist/core/file-discovery.js +75 -0
  88. package/dist/core/file-discovery.js.map +1 -0
  89. package/dist/core/global-index.d.ts +5 -0
  90. package/dist/core/global-index.d.ts.map +1 -1
  91. package/dist/core/global-index.js +71 -21
  92. package/dist/core/global-index.js.map +1 -1
  93. package/dist/generator/index.d.ts.map +1 -1
  94. package/dist/generator/index.js +8 -0
  95. package/dist/generator/index.js.map +1 -1
  96. package/dist/infrastructure/parser/implementations/GoParser.d.ts +2 -5
  97. package/dist/infrastructure/parser/implementations/GoParser.d.ts.map +1 -1
  98. package/dist/infrastructure/parser/implementations/GoParser.js +2 -5
  99. package/dist/infrastructure/parser/implementations/GoParser.js.map +1 -1
  100. package/dist/infrastructure/parser/implementations/PythonParser.d.ts +1 -5
  101. package/dist/infrastructure/parser/implementations/PythonParser.d.ts.map +1 -1
  102. package/dist/infrastructure/parser/implementations/PythonParser.js +1 -5
  103. package/dist/infrastructure/parser/implementations/PythonParser.js.map +1 -1
  104. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts +1 -5
  105. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts.map +1 -1
  106. package/dist/infrastructure/parser/implementations/TypeScriptParser.js +1 -5
  107. package/dist/infrastructure/parser/implementations/TypeScriptParser.js.map +1 -1
  108. package/dist/infrastructure/storage/StorageFactory.d.ts +0 -1
  109. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  110. package/dist/infrastructure/storage/StorageFactory.js +4 -29
  111. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  112. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
  113. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +24 -137
  114. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
  115. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +10 -18
  116. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
  117. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +103 -146
  118. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
  119. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +0 -1
  120. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
  121. package/dist/infrastructure/storage/adapters/MemoryStorage.js +16 -136
  122. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
  123. package/dist/infrastructure/storage/graph-helpers.d.ts +16 -0
  124. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -0
  125. package/dist/infrastructure/storage/graph-helpers.js +161 -0
  126. package/dist/infrastructure/storage/graph-helpers.js.map +1 -0
  127. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  128. package/dist/interface/config/index.d.ts +10 -1
  129. package/dist/interface/config/index.d.ts.map +1 -1
  130. package/dist/interface/types/index.d.ts +13 -0
  131. package/dist/interface/types/index.d.ts.map +1 -1
  132. package/dist/interface/types/storage.d.ts +1 -4
  133. package/dist/interface/types/storage.d.ts.map +1 -1
  134. package/dist/orchestrator/confidence.d.ts +9 -9
  135. package/dist/orchestrator/confidence.d.ts.map +1 -1
  136. package/dist/orchestrator/confidence.js +44 -67
  137. package/dist/orchestrator/confidence.js.map +1 -1
  138. package/dist/orchestrator/file-header-scanner.d.ts.map +1 -1
  139. package/dist/orchestrator/file-header-scanner.js +22 -31
  140. package/dist/orchestrator/file-header-scanner.js.map +1 -1
  141. package/dist/orchestrator/intent-router.d.ts +2 -11
  142. package/dist/orchestrator/intent-router.d.ts.map +1 -1
  143. package/dist/orchestrator/intent-router.js +58 -49
  144. package/dist/orchestrator/intent-router.js.map +1 -1
  145. package/dist/orchestrator/tool-orchestrator.d.ts.map +1 -1
  146. package/dist/orchestrator/tool-orchestrator.js +6 -4
  147. package/dist/orchestrator/tool-orchestrator.js.map +1 -1
  148. package/dist/orchestrator/types.d.ts +113 -2
  149. package/dist/orchestrator/types.d.ts.map +1 -1
  150. package/dist/orchestrator/types.js +29 -0
  151. package/dist/orchestrator/types.js.map +1 -1
  152. package/dist/orchestrator/workflow/config.d.ts +4 -12
  153. package/dist/orchestrator/workflow/config.d.ts.map +1 -1
  154. package/dist/orchestrator/workflow/config.js +4 -6
  155. package/dist/orchestrator/workflow/config.js.map +1 -1
  156. package/dist/orchestrator/workflow/git-analyzer.d.ts.map +1 -1
  157. package/dist/orchestrator/workflow/git-analyzer.js +9 -19
  158. package/dist/orchestrator/workflow/git-analyzer.js.map +1 -1
  159. package/dist/orchestrator/workflow/phase-inheritance.d.ts.map +1 -1
  160. package/dist/orchestrator/workflow/phase-inheritance.js +14 -23
  161. package/dist/orchestrator/workflow/phase-inheritance.js.map +1 -1
  162. package/dist/orchestrator/workflow/result-fusion.d.ts.map +1 -1
  163. package/dist/orchestrator/workflow/result-fusion.js +9 -11
  164. package/dist/orchestrator/workflow/result-fusion.js.map +1 -1
  165. package/dist/orchestrator/workflow/templates.d.ts +4 -1
  166. package/dist/orchestrator/workflow/templates.d.ts.map +1 -1
  167. package/dist/orchestrator/workflow/templates.js +49 -207
  168. package/dist/orchestrator/workflow/templates.js.map +1 -1
  169. package/dist/orchestrator/workflow/test-linker.d.ts.map +1 -1
  170. package/dist/orchestrator/workflow/test-linker.js +12 -24
  171. package/dist/orchestrator/workflow/test-linker.js.map +1 -1
  172. package/dist/orchestrator/workflow/types.d.ts +11 -8
  173. package/dist/orchestrator/workflow/types.d.ts.map +1 -1
  174. package/dist/orchestrator/workflow/types.js +8 -1
  175. package/dist/orchestrator/workflow/types.js.map +1 -1
  176. package/dist/orchestrator/workflow/visualizer.d.ts.map +1 -1
  177. package/dist/orchestrator/workflow/visualizer.js +7 -9
  178. package/dist/orchestrator/workflow/visualizer.js.map +1 -1
  179. package/dist/orchestrator/workflow/workflow-context.d.ts.map +1 -1
  180. package/dist/orchestrator/workflow/workflow-context.js +3 -5
  181. package/dist/orchestrator/workflow/workflow-context.js.map +1 -1
  182. package/dist/orchestrator/workflow/workflow-orchestrator.d.ts +0 -4
  183. package/dist/orchestrator/workflow/workflow-orchestrator.d.ts.map +1 -1
  184. package/dist/orchestrator/workflow/workflow-orchestrator.js +7 -99
  185. package/dist/orchestrator/workflow/workflow-orchestrator.js.map +1 -1
  186. package/dist/parser/index.d.ts.map +1 -1
  187. package/dist/parser/index.js +2 -2
  188. package/dist/parser/index.js.map +1 -1
  189. package/dist/plugins/index.d.ts +5 -3
  190. package/dist/plugins/index.d.ts.map +1 -1
  191. package/dist/plugins/index.js +19 -8
  192. package/dist/plugins/index.js.map +1 -1
  193. package/dist/plugins/plugin-loader.d.ts +21 -6
  194. package/dist/plugins/plugin-loader.d.ts.map +1 -1
  195. package/dist/plugins/plugin-loader.js +170 -54
  196. package/dist/plugins/plugin-loader.js.map +1 -1
  197. package/dist/plugins/plugin-registry.d.ts +7 -4
  198. package/dist/plugins/plugin-registry.d.ts.map +1 -1
  199. package/dist/plugins/plugin-registry.js +62 -14
  200. package/dist/plugins/plugin-registry.js.map +1 -1
  201. package/dist/plugins/types.d.ts +16 -6
  202. package/dist/plugins/types.d.ts.map +1 -1
  203. package/dist/plugins/types.js +2 -0
  204. package/dist/plugins/types.js.map +1 -1
  205. package/dist/server/handlers/AnalysisHandler.d.ts +16 -2
  206. package/dist/server/handlers/AnalysisHandler.d.ts.map +1 -1
  207. package/dist/server/handlers/AnalysisHandler.js +31 -47
  208. package/dist/server/handlers/AnalysisHandler.js.map +1 -1
  209. package/dist/server/routes/api.d.ts.map +1 -1
  210. package/dist/server/routes/api.js +31 -12
  211. package/dist/server/routes/api.js.map +1 -1
  212. package/docs/AI_ASSISTANT_SETUP.md +3 -1
  213. package/docs/PUBLISHING.md +18 -4
  214. package/docs/SETUP_GUIDE.md +41 -17
  215. package/docs/ai-guide/COMMANDS.md +107 -103
  216. package/docs/ai-guide/INTEGRATION.md +23 -21
  217. package/docs/ai-guide/OUTPUT.md +206 -10
  218. package/docs/ai-guide/PATTERNS.md +64 -15
  219. package/docs/ai-guide/PROMPTS.md +50 -12
  220. package/docs/ai-guide/QUICKSTART.md +35 -19
  221. package/docs/ai-guide/README.md +22 -4
  222. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +159 -434
  223. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +169 -261
  224. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +201 -1259
  225. package/docs/product-specs/README.md +8 -1
  226. package/docs/rules/architecture-guardrails.md +1 -2
  227. package/docs/rules/engineering-with-codex-openai.md +15 -9
  228. package/docs/rules/validation.md +26 -4
  229. package/mycodemap.config.schema.json +76 -5
  230. package/package.json +1 -1
  231. package/scripts/pre-release-check.js +21 -3
  232. package/scripts/sync-analyze-docs.js +500 -0
  233. package/scripts/validate-ai-docs.js +54 -1
  234. package/scripts/validate-docs.js +746 -26
  235. package/dist/cli/commands/server.d.ts +0 -9
  236. package/dist/cli/commands/server.d.ts.map +0 -1
  237. package/dist/cli/commands/server.js +0 -68
  238. package/dist/cli/commands/server.js.map +0 -1
  239. package/dist/cli-new/commands/server.d.ts +0 -13
  240. package/dist/cli-new/commands/server.d.ts.map +0 -1
  241. package/dist/cli-new/commands/server.js +0 -94
  242. package/dist/cli-new/commands/server.js.map +0 -1
  243. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +0 -49
  244. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +0 -1
  245. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +0 -222
  246. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +0 -1
@@ -1,33 +1,204 @@
1
1
  // [META] since:2026-03 | owner:cli-team | stable:false
2
- // [WHY] Step 4: 执行发布操作,npm publish + git tag
2
+ // [WHY] Step 4: 创建发布提交和 git tag,并通过 push 触发 GitHub Actions 发布
3
3
  import chalk from 'chalk';
4
4
  import { execSync } from 'child_process';
5
- import { readFileSync, writeFileSync } from 'fs';
5
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
6
+ const CHANGELOG_HEADER = '# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n';
7
+ const COMMAND_MAX_BUFFER = 20 * 1024 * 1024;
8
+ function updateFileByRules(rules) {
9
+ for (const rule of rules) {
10
+ if (!existsSync(rule.file)) {
11
+ throw new Error(`缺少版本同步文件: ${rule.file}`);
12
+ }
13
+ const content = readFileSync(rule.file, 'utf-8');
14
+ if (!rule.pattern.test(content)) {
15
+ throw new Error(`无法在 ${rule.file} 中定位版本占位符`);
16
+ }
17
+ const updated = content.replace(rule.pattern, rule.replacement);
18
+ writeFileSync(rule.file, updated, 'utf-8');
19
+ }
20
+ }
6
21
  function syncAIDocsVersion(version) {
7
- const files = ['AI_GUIDE.md', 'llms.txt', 'ai-document-index.yaml'];
8
22
  const versionStr = version.replace(/^v/, '');
9
- for (const file of files) {
10
- try {
11
- const content = readFileSync(file, 'utf-8');
12
- const updated = content.replace(/0\.\d+\.\d+/g, versionStr);
13
- writeFileSync(file, updated);
23
+ const quotedVersion = `$1${versionStr}$3`;
24
+ updateFileByRules([
25
+ {
26
+ file: 'AI_GUIDE.md',
27
+ pattern: /(> 版本:\s*)\d+\.\d+\.\d+(?:-[\w.]+)?/m,
28
+ replacement: `$1${versionStr}`
29
+ },
30
+ {
31
+ file: 'llms.txt',
32
+ pattern: /(> 版本:\s*)\d+\.\d+\.\d+(?:-[\w.]+)?/m,
33
+ replacement: `$1${versionStr}`
34
+ },
35
+ {
36
+ file: 'AI_DISCOVERY.md',
37
+ pattern: /("version"\s*:\s*")(\d+\.\d+\.\d+(?:-[\w.]+)?)(")/,
38
+ replacement: quotedVersion
39
+ },
40
+ {
41
+ file: 'ai-document-index.yaml',
42
+ pattern: /(version:\s*")(\d+\.\d+\.\d+(?:-[\w.]+)?)(")/,
43
+ replacement: quotedVersion
44
+ },
45
+ {
46
+ file: 'ai-document-index.yaml',
47
+ pattern: /(current:\s*")(\d+\.\d+\.\d+(?:-[\w.]+)?)(")/,
48
+ replacement: quotedVersion
49
+ },
50
+ {
51
+ file: 'ai-document-index.yaml',
52
+ pattern: /(min_supported:\s*")(\d+\.\d+\.\d+(?:-[\w.]+)?)(")/,
53
+ replacement: quotedVersion
14
54
  }
15
- catch {
16
- // 文件不存在或读取失败,跳过
55
+ ]);
56
+ }
57
+ function classifyCommitSection(type) {
58
+ const normalized = type.toLowerCase();
59
+ if (['feat', 'feature', 'enhance', 'improvement'].some(item => normalized.includes(item))) {
60
+ return '### 🚀 New Features';
61
+ }
62
+ if (['fix', 'bugfix', 'hotfix'].some(item => normalized.includes(item))) {
63
+ return '### 🐛 Bug Fixes';
64
+ }
65
+ if (normalized.includes('docs')) {
66
+ return '### 📚 Documentation';
67
+ }
68
+ if (normalized.includes('refactor')) {
69
+ return '### ♻️ Refactors';
70
+ }
71
+ return '### 🔧 Maintenance';
72
+ }
73
+ function buildReleaseTitle(analyzeResult) {
74
+ if (!analyzeResult) {
75
+ return 'Automated Ship Release';
76
+ }
77
+ if (analyzeResult.summary.features > 0) {
78
+ return 'Ship Workflow Release';
79
+ }
80
+ if (analyzeResult.summary.bugfixes > 0) {
81
+ return 'Ship Workflow Fixes';
82
+ }
83
+ if (analyzeResult.summary.docs > 0) {
84
+ return 'Documentation Sync';
85
+ }
86
+ return 'Automated Ship Release';
87
+ }
88
+ function formatCommitLine(commit) {
89
+ if (commit.scope) {
90
+ return `- **${commit.scope}**: ${commit.message}`;
91
+ }
92
+ return `- ${commit.message}`;
93
+ }
94
+ function buildChangelogSections(analyzeResult) {
95
+ if (!analyzeResult || analyzeResult.commits.length === 0) {
96
+ return [
97
+ '### 🔧 Maintenance',
98
+ '',
99
+ '- Automated release triggered by `codemap ship`'
100
+ ];
101
+ }
102
+ const groups = new Map();
103
+ for (const commit of analyzeResult.commits) {
104
+ const section = classifyCommitSection(commit.type);
105
+ const lines = groups.get(section) ?? [];
106
+ lines.push(formatCommitLine(commit));
107
+ groups.set(section, lines);
108
+ }
109
+ return Array.from(groups.entries()).flatMap(([section, lines]) => [section, '', ...lines, '']);
110
+ }
111
+ function ensureChangelogEntry(version, analyzeResult) {
112
+ const versionStr = version.replace(/^v/, '');
113
+ const existing = existsSync('CHANGELOG.md')
114
+ ? readFileSync('CHANGELOG.md', 'utf-8')
115
+ : CHANGELOG_HEADER;
116
+ if (new RegExp(`^## \\[${versionStr.replace(/\./g, '\\.')}]`, 'm').test(existing)) {
117
+ return;
118
+ }
119
+ const date = new Date().toISOString().slice(0, 10);
120
+ const title = buildReleaseTitle(analyzeResult);
121
+ const sections = buildChangelogSections(analyzeResult).join('\n').trimEnd();
122
+ const entry = `## [${versionStr}] - ${date} - ${title}\n\n${sections}\n\n`;
123
+ const content = existing.startsWith('# Changelog')
124
+ ? existing
125
+ : `${CHANGELOG_HEADER}${existing.trimStart()}\n`;
126
+ const prefix = content.startsWith(CHANGELOG_HEADER)
127
+ ? CHANGELOG_HEADER
128
+ : '# Changelog\n\n';
129
+ const remainder = content.startsWith(prefix) ? content.slice(prefix.length) : content;
130
+ writeFileSync('CHANGELOG.md', `${prefix}${entry}${remainder.replace(/^\n+/, '')}`, 'utf-8');
131
+ }
132
+ function resolveRepoSlug() {
133
+ try {
134
+ return execSync('git remote get-url origin', { encoding: 'utf-8' })
135
+ .trim()
136
+ .replace(/.*github\.com[/:]/, '')
137
+ .replace(/\.git$/, '');
138
+ }
139
+ catch {
140
+ return undefined;
141
+ }
142
+ }
143
+ function extractCommandError(error) {
144
+ if (!error || typeof error !== 'object') {
145
+ return String(error);
146
+ }
147
+ const stderr = 'stderr' in error && typeof error.stderr === 'string'
148
+ ? error.stderr
149
+ : 'stderr' in error && Buffer.isBuffer(error.stderr)
150
+ ? error.stderr.toString('utf-8')
151
+ : '';
152
+ const stdout = 'stdout' in error && typeof error.stdout === 'string'
153
+ ? error.stdout
154
+ : 'stdout' in error && Buffer.isBuffer(error.stdout)
155
+ ? error.stdout.toString('utf-8')
156
+ : '';
157
+ const message = error instanceof Error ? error.message : String(error);
158
+ return [message, stderr.trim(), stdout.trim()].filter(Boolean).join('\n');
159
+ }
160
+ function shouldFallbackToHttps(errorText) {
161
+ return /port 22|Connection timed out|Could not read from remote repository/i.test(errorText);
162
+ }
163
+ function pushReleaseRefs(tagName, repo) {
164
+ const baseOptions = {
165
+ stdio: 'pipe',
166
+ encoding: 'utf-8',
167
+ maxBuffer: COMMAND_MAX_BUFFER
168
+ };
169
+ try {
170
+ execSync(`git push origin HEAD tag ${tagName}`, baseOptions);
171
+ return;
172
+ }
173
+ catch (error) {
174
+ const errorText = extractCommandError(error);
175
+ if (!repo || !shouldFallbackToHttps(errorText)) {
176
+ throw error;
17
177
  }
178
+ console.log(chalk.yellow(' SSH push 失败,回退到 HTTPS token push...'));
179
+ execSync(`TOKEN=$(gh auth token) && BASIC=$(printf 'x-access-token:%s' "$TOKEN" | base64 | tr -d '\\n') && git -c http.extraheader="AUTHORIZATION: basic $BASIC" push https://github.com/${repo}.git HEAD tag ${tagName}`, baseOptions);
18
180
  }
19
181
  }
20
- export async function publish(version, dryRun = false) {
182
+ export async function publish(version, options = {}) {
183
+ const dryRun = options.dryRun ?? false;
184
+ const tagName = `v${version.replace(/^v/, '')}`;
21
185
  const result = {
22
186
  success: false,
23
187
  version,
24
- npmPublished: false,
188
+ tagName,
189
+ versionCommitted: false,
25
190
  tagCreated: false,
26
191
  pushed: false
27
192
  };
28
193
  if (dryRun) {
29
194
  console.log(chalk.gray(' [dry-run] 跳过实际发布'));
30
- return { ...result, success: true, npmPublished: true, tagCreated: true, pushed: true };
195
+ return {
196
+ ...result,
197
+ success: true,
198
+ versionCommitted: true,
199
+ tagCreated: true,
200
+ pushed: true
201
+ };
31
202
  }
32
203
  try {
33
204
  // 1. 更新 package.json 版本
@@ -36,32 +207,38 @@ export async function publish(version, dryRun = false) {
36
207
  // 2. 同步 AI 文档版本
37
208
  console.log(chalk.gray(' 同步 AI 文档版本...'));
38
209
  syncAIDocsVersion(version);
39
- // 3. 提交版本更新(必须在创建 tag 之前)
210
+ // 3. 生成 CHANGELOG 条目
211
+ console.log(chalk.gray(' 生成 CHANGELOG 条目...'));
212
+ ensureChangelogEntry(version, options.analyzeResult);
213
+ // 4. 提交版本更新(必须在创建 tag 之前)
40
214
  console.log(chalk.gray(' 提交版本更新...'));
41
- execSync('git add package.json AI_GUIDE.md llms.txt ai-document-index.yaml CHANGELOG.md', { stdio: 'pipe' });
215
+ const filesToAdd = [
216
+ 'package.json',
217
+ 'package-lock.json',
218
+ 'AI_GUIDE.md',
219
+ 'AI_DISCOVERY.md',
220
+ 'llms.txt',
221
+ 'ai-document-index.yaml',
222
+ 'CHANGELOG.md'
223
+ ].filter(file => existsSync(file));
224
+ execSync(`git add ${filesToAdd.join(' ')}`, { stdio: 'pipe' });
42
225
  execSync(`git commit -m "[CONFIG] version: bump to v${version}"`, { stdio: 'pipe' });
43
- // 4. 创建 git tag(在 commit 之后)
226
+ result.versionCommitted = true;
227
+ result.headSha = execSync('git rev-parse HEAD', { encoding: 'utf-8' }).trim();
228
+ result.repo = resolveRepoSlug();
229
+ if (result.repo) {
230
+ result.releaseUrl = `https://github.com/${result.repo}/releases/tag/${tagName}`;
231
+ }
232
+ // 5. 创建 git tag(在 commit 之后)
44
233
  console.log(chalk.gray(' 创建 git tag...'));
45
- execSync(`git tag v${version}`, { stdio: 'pipe' });
234
+ execSync(`git tag ${tagName}`, { stdio: 'pipe' });
46
235
  result.tagCreated = true;
47
- // 4. npm publish (使用 OIDC,不需要 OTP)
48
- console.log(chalk.gray(' 发布到 npm...'));
49
- try {
50
- execSync('npm publish --access public', { stdio: 'pipe' });
51
- result.npmPublished = true;
52
- }
53
- catch (publishError) {
54
- // npm publish 失败,tag 已经创建,可能需要手动处理
55
- const errorMsg = publishError instanceof Error ? publishError.message : String(publishError);
56
- console.log(chalk.yellow(` ⚠️ npm publish 失败: ${errorMsg}`));
57
- result.error = `npm publish 失败: ${errorMsg}`;
58
- // 不立即返回,继续尝试 push
59
- }
60
- // 5. 推送所有到远程
61
- console.log(chalk.gray(' 推送到远程...'));
62
- execSync('git push origin HEAD --tags', { stdio: 'pipe' });
236
+ // 6. 推送版本提交和 tag,由 GitHub Actions 执行实际 npm 发布
237
+ console.log(chalk.gray(' 推送发布提交与 tag...'));
238
+ pushReleaseRefs(tagName, result.repo);
63
239
  result.pushed = true;
64
- result.success = result.npmPublished && result.tagCreated && result.pushed;
240
+ result.pushedAtMs = Date.now();
241
+ result.success = result.versionCommitted && result.tagCreated && result.pushed;
65
242
  return result;
66
243
  }
67
244
  catch (error) {
@@ -74,20 +251,23 @@ export function formatPublishOutput(result) {
74
251
  if (result.success) {
75
252
  lines.push('发布成功!');
76
253
  lines.push(` 版本: v${result.version}`);
77
- lines.push(` ✅ NPM 发布成功`);
254
+ lines.push(` ✅ 版本提交已创建`);
78
255
  lines.push(` ✅ Git tag 已创建`);
79
- lines.push(` ✅ 已推送到远程`);
256
+ lines.push(` ✅ 已推送到远程,等待 GitHub Actions 发布`);
80
257
  }
81
258
  else {
82
259
  lines.push('发布部分成功:');
83
260
  lines.push(` 版本: v${result.version}`);
84
- lines.push(` ${result.npmPublished ? '✅' : '❌'} NPM 发布`);
261
+ lines.push(` ${result.versionCommitted ? '✅' : '❌'} 版本提交`);
85
262
  lines.push(` ${result.tagCreated ? '✅' : '❌'} Git tag 已创建`);
86
263
  lines.push(` ${result.pushed ? '✅' : '❌'} 已推送到远程`);
87
264
  if (result.error) {
88
265
  lines.push(` 错误: ${result.error}`);
89
266
  }
90
267
  }
268
+ if (result.releaseUrl) {
269
+ lines.push(` 预期 Release: ${result.releaseUrl}`);
270
+ }
91
271
  return lines.join('\n');
92
272
  }
93
273
  //# sourceMappingURL=publisher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../../src/cli/commands/ship/publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../../src/cli/commands/ship/publisher.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { CommitAnalysis } from './version-rules.js';
1
+ import { CommitAnalysis, VersionType } from './version-rules.js';
2
2
  export interface CheckContext {
3
3
  commits: CommitAnalysis[];
4
4
  changedFiles: string[];
5
5
  currentVersion: string;
6
- branch: string;
6
+ versionType: VersionType;
7
7
  }
8
8
  export interface CheckResult {
9
9
  passed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"quality-rules.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/ship/rules/quality-rules.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,eAAO,MAAM,aAAa,EAAE,WAAW,EAiDtC,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,WAAW,EAoExC,CAAC;AAEF,wBAAsB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC;IAC1D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC7C,CAAC,CAiBD"}
1
+ {"version":3,"file":"quality-rules.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/ship/rules/quality-rules.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAgCD,eAAO,MAAM,aAAa,EAAE,WAAW,EAoCtC,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,WAAW,EAsDxC,CAAC;AAEF,wBAAsB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC;IAC1D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC7C,CAAC,CAiBD"}
@@ -1,52 +1,63 @@
1
1
  // [META] since:2026-03 | owner:cli-team | stable:false
2
2
  // [WHY] 定义质量检查规则,包括 mustPass 和 shouldPass 检查项
3
- import { execSync } from 'child_process';
4
3
  import fs from 'fs/promises';
5
4
  import path from 'path';
5
+ import { runWorkingTreeCheck, runBranchCheck, runScriptsCheck } from '../../ci.js';
6
+ async function readCoveragePercentage() {
7
+ const coveragePath = path.join(process.cwd(), 'coverage', 'lcov.info');
8
+ try {
9
+ await fs.access(coveragePath);
10
+ const content = await fs.readFile(coveragePath, 'utf-8');
11
+ const recordPattern = /LF:(\d+)[\s\S]*?LH:(\d+)/g;
12
+ let totalLines = 0;
13
+ let coveredLines = 0;
14
+ let match;
15
+ match = recordPattern.exec(content);
16
+ while (match) {
17
+ totalLines += parseInt(match[1], 10) || 0;
18
+ coveredLines += parseInt(match[2], 10) || 0;
19
+ match = recordPattern.exec(content);
20
+ }
21
+ if (totalLines === 0) {
22
+ return null;
23
+ }
24
+ return Math.round((coveredLines / totalLines) * 10000) / 100;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
6
30
  // mustPass 检查(失败即停止)
7
31
  export const mustPassRules = [
8
32
  {
9
33
  name: 'workingTreeClean',
10
34
  message: '工作区有未提交的变更',
11
35
  blocking: true,
12
- check: () => {
13
- const status = execSync('git status --porcelain', { encoding: 'utf-8' }).trim();
14
- const isClean = status === '';
15
- return {
16
- passed: isClean,
17
- message: isClean ? undefined : '工作区有未提交的变更',
18
- details: isClean ? undefined : status
19
- };
20
- }
36
+ check: () => runWorkingTreeCheck()
21
37
  },
22
38
  {
23
39
  name: 'correctBranch',
24
40
  message: '只能在 main/master 分支发布',
25
41
  blocking: true,
26
- check: (ctx) => {
27
- const allowedBranches = ['main', 'master'];
28
- const isCorrect = allowedBranches.includes(ctx.branch);
29
- return {
30
- passed: isCorrect,
31
- message: isCorrect ? undefined : `当前分支 "${ctx.branch}" 不能发布`,
32
- details: isCorrect ? undefined : `允许的分支: ${allowedBranches.join(', ')}`
33
- };
34
- }
42
+ check: () => runBranchCheck()
43
+ },
44
+ {
45
+ name: 'allChecksPass',
46
+ message: '发布前检查必须全部通过',
47
+ blocking: true,
48
+ check: () => runScriptsCheck()
35
49
  },
36
50
  {
37
51
  name: 'noBreakingWithoutMajor',
38
52
  message: '检测到破坏性变更,必须使用 major 版本',
39
53
  blocking: true,
40
54
  check: (ctx) => {
41
- const hasBreaking = ctx.commits.some(c => c.isBreaking);
42
- // 检查 message 中是否包含破坏性变更标记
43
- const breakingInMessage = ctx.commits.some(c => /breaking[_-]change|BREAKING/i.test(c.message));
44
- const hasBreakingChange = hasBreaking || breakingInMessage;
45
- // 如果有破坏性变更,不阻止(让 versioner 决定 bump 到 major)
46
- // 这里只检查是否在 non-master 分支有破坏性变更
55
+ const hasBreakingChange = ctx.commits.some(c => c.isBreaking || /breaking[_-]change|BREAKING/i.test(c.message));
47
56
  return {
48
- passed: true, // 让发布流程继续,版本计算会处理
49
- message: undefined
57
+ passed: !hasBreakingChange || ctx.versionType === 'major',
58
+ message: !hasBreakingChange || ctx.versionType === 'major'
59
+ ? undefined
60
+ : '检测到 breaking change,但建议版本不是 major'
50
61
  };
51
62
  }
52
63
  }
@@ -58,25 +69,17 @@ export const shouldPassRules = [
58
69
  message: '测试覆盖率应该 > 80%',
59
70
  blocking: false,
60
71
  check: async () => {
61
- try {
62
- // 尝试读取 coverage/lcov.info
63
- const coveragePath = path.join(process.cwd(), 'coverage', 'lcov.info');
64
- await fs.access(coveragePath);
65
- const content = await fs.readFile(coveragePath, 'utf-8');
66
- const lineCoverageMatch = content.match(/LF:\d+\s+LH:\d+\s+BRF:\d+\s+BRH:\d+/g);
67
- if (lineCoverageMatch) {
68
- // 简单的覆盖率估算
69
- const hasGoodCoverage = lineCoverageMatch.length > 0;
70
- return {
71
- passed: hasGoodCoverage,
72
- message: hasGoodCoverage ? undefined : '测试覆盖率可能不足'
73
- };
74
- }
75
- }
76
- catch {
77
- // coverage 文件不存在,跳过此检查
72
+ const percentage = await readCoveragePercentage();
73
+ if (percentage === null) {
74
+ return {
75
+ passed: false,
76
+ message: '未找到 coverage/lcov.info,无法验证覆盖率'
77
+ };
78
78
  }
79
- return { passed: true, message: undefined }; // 跳过,不影响
79
+ return {
80
+ passed: percentage >= 80,
81
+ message: percentage >= 80 ? undefined : `测试覆盖率仅 ${percentage}%`
82
+ };
80
83
  }
81
84
  },
82
85
  {
@@ -86,19 +89,15 @@ export const shouldPassRules = [
86
89
  check: async (ctx) => {
87
90
  try {
88
91
  const changelogPath = path.join(process.cwd(), 'CHANGELOG.md');
89
- const changelogStat = await fs.stat(changelogPath);
90
- const changelogModified = changelogStat.mtime;
91
- // 获取最新 commit 的时间
92
- const latestCommitTime = execSync('git log -1 --format=%ct', { encoding: 'utf-8' }).trim();
93
- const commitTime = new Date(parseInt(latestCommitTime) * 1000);
94
- const isUpdated = changelogModified >= commitTime;
92
+ await fs.access(changelogPath);
93
+ const isUpdated = ctx.changedFiles.includes('CHANGELOG.md');
95
94
  return {
96
95
  passed: isUpdated,
97
- message: isUpdated ? undefined : 'CHANGELOG.md 自上次提交后未更新'
96
+ message: isUpdated ? undefined : '自上次 tag 以来未检测到 CHANGELOG.md 变更'
98
97
  };
99
98
  }
100
99
  catch {
101
- return { passed: true, message: undefined }; // 文件不存在,跳过
100
+ return { passed: false, message: '缺少 CHANGELOG.md' };
102
101
  }
103
102
  }
104
103
  },
@@ -107,7 +106,7 @@ export const shouldPassRules = [
107
106
  message: 'Commit 消息应该遵循 conventional commits 规范',
108
107
  blocking: false,
109
108
  check: (ctx) => {
110
- const conventionalPattern = /^(feat|fix|docs|style|refactor|test|chore|ci|perf|breaking)(\(.+\))?:/;
109
+ const conventionalPattern = /^(feat|fix|docs|style|refactor|test|chore|ci|perf|breaking|feature|bugfix|hotfix|config|infra|enhance|improvement)(\(.+\))?:/i;
111
110
  const allFollowConvention = ctx.commits.every(c => conventionalPattern.test(c.type + ':' + c.message));
112
111
  return {
113
112
  passed: allFollowConvention,
@@ -1 +1 @@
1
- {"version":3,"file":"quality-rules.js","sourceRoot":"","sources":["../../../../../src/cli/commands/ship/rules/quality-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-rules.js","sourceRoot":"","sources":["../../../../../src/cli/commands/ship/rules/quality-rules.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,5 @@ export interface VersionResult {
8
8
  shouldRelease: boolean;
9
9
  }
10
10
  export declare function calculateVersion(analyzeResult: AnalyzeResult): Promise<VersionResult>;
11
- export declare function formatVersionOutput(result: VersionResult): string;
11
+ export declare function formatVersionOutput(result: VersionResult, verbose?: boolean): string;
12
12
  //# sourceMappingURL=versioner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"versioner.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ship/versioner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAqB,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAuDD,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAwB3F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAajE"}
1
+ {"version":3,"file":"versioner.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ship/versioner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAqB,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAuDD,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAwB3F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,OAAe,GAAG,MAAM,CAe3F"}
@@ -76,16 +76,18 @@ export async function calculateVersion(analyzeResult) {
76
76
  shouldRelease
77
77
  };
78
78
  }
79
- export function formatVersionOutput(result) {
79
+ export function formatVersionOutput(result, verbose = false) {
80
80
  const lines = [];
81
81
  if (!result.shouldRelease) {
82
82
  lines.push(`推荐版本: 无需发布`);
83
83
  lines.push(` 原因: ${result.reason}`);
84
84
  }
85
85
  else {
86
- const typeLabel = result.versionType.toUpperCase();
87
86
  lines.push(`推荐版本: v${result.suggestedVersion} (${result.versionType})`);
88
87
  lines.push(` 原因: ${result.reason}`);
88
+ if (verbose) {
89
+ lines.push(` 当前版本: v${result.currentVersion}`);
90
+ }
89
91
  }
90
92
  return lines.join('\n');
91
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"versioner.js","sourceRoot":"","sources":["../../../../src/cli/commands/ship/versioner.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,oCAAoC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAe,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAU1E,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,+CAA+C,EAAE;YACpE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,2CAA2C,EAAE;gBACjE,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,IAAiB;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAiB,EAAE,MAAqB;IAChE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,6BAA6B,CAAC;QACvC,KAAK,OAAO;YACV,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,WAAW,CAAC;QAClD,KAAK,MAAM,CAAC;QACZ;YACE,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,mBAAmB,CAAC;YAC7B,CAAC;YACD,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,aAA4B;IACjE,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;IAC9C,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAE3F,IAAI,gBAAgB,GAAG,cAAc,CAAC;IACtC,IAAI,gBAAgB,GAAgB,MAAM,CAAC;IAE3C,oBAAoB;IACpB,IAAI,aAAa,CAAC,eAAe,EAAE,CAAC;QAClC,gBAAgB,GAAG,OAAO,CAAC;QAC3B,gBAAgB,GAAG,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,gBAAgB,GAAG,WAAW,CAAC;QAC/B,gBAAgB,GAAG,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,cAAc;QACd,gBAAgB;QAChB,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,CAAC;QACzD,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,gBAAgB,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"versioner.js","sourceRoot":"","sources":["../../../../src/cli/commands/ship/versioner.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // [META] since:2026-03-02 | owner:orchestrator-team | stable:true
2
- // [WHY] Workflow CLI commands for managing refactoring workflows with error code support
2
+ // [WHY] Workflow CLI commands for managing analysis-only workflows with error code support
3
3
  /**
4
4
  * Workflow CLI 命令
5
5
  * 工作流管理命令:start, status, proceed, resume, checkpoint, visualize, template
@@ -43,12 +43,12 @@ function createError(code, message) {
43
43
  return error;
44
44
  }
45
45
  const workflow = new Command('workflow');
46
- workflow.description('Workflow management - manage development workflow across multiple phases');
46
+ workflow.description('Workflow management - analysis-only workflow across find/read/link/show');
47
47
  /**
48
48
  * 启动新工作流
49
49
  */
50
50
  workflow.command('start')
51
- .description('Start a new development workflow')
51
+ .description('Start a new analysis workflow')
52
52
  .argument('<task>', 'Task description')
53
53
  .option('-t, --template <name>', 'Use workflow template (refactoring|bugfix|feature|hotfix)')
54
54
  .action(async (task, options) => {
@@ -89,7 +89,7 @@ Phase: ${context.currentPhase}${templateNote}
89
89
  Next steps:
90
90
  1. codemap workflow status # 查看当前状态
91
91
  2. codemap workflow visualize # 可视化工作流
92
- 3. codemap analyze --intent reference --keywords ...
92
+ 3. codemap analyze --intent find --keywords ...
93
93
  4. codemap workflow proceed # 进入下一阶段
94
94
  `);
95
95
  }