@mycodemap/mycodemap 0.5.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +84 -10
  3. package/dist/cli/commands/init.d.ts +7 -2
  4. package/dist/cli/commands/init.d.ts.map +1 -1
  5. package/dist/cli/commands/init.js +22 -34
  6. package/dist/cli/commands/init.js.map +1 -1
  7. package/dist/cli/commands/publish-status.d.ts +31 -0
  8. package/dist/cli/commands/publish-status.d.ts.map +1 -0
  9. package/dist/cli/commands/publish-status.js +101 -0
  10. package/dist/cli/commands/publish-status.js.map +1 -0
  11. package/dist/cli/commands/readiness-gate.d.ts +25 -0
  12. package/dist/cli/commands/readiness-gate.d.ts.map +1 -0
  13. package/dist/cli/commands/readiness-gate.js +197 -0
  14. package/dist/cli/commands/readiness-gate.js.map +1 -0
  15. package/dist/cli/commands/ship/checker.d.ts +4 -9
  16. package/dist/cli/commands/ship/checker.d.ts.map +1 -1
  17. package/dist/cli/commands/ship/checker.js +60 -22
  18. package/dist/cli/commands/ship/checker.js.map +1 -1
  19. package/dist/cli/commands/ship/monitor.d.ts +6 -1
  20. package/dist/cli/commands/ship/monitor.d.ts.map +1 -1
  21. package/dist/cli/commands/ship/monitor.js +223 -46
  22. package/dist/cli/commands/ship/monitor.js.map +1 -1
  23. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  24. package/dist/cli/commands/ship/pipeline.js +14 -5
  25. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  26. package/dist/cli/commands/ship/rules/quality-rules.d.ts +12 -8
  27. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -1
  28. package/dist/cli/commands/ship/rules/quality-rules.js +49 -34
  29. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -1
  30. package/dist/cli/config-loader.js +1 -1
  31. package/dist/cli/config-loader.js.map +1 -1
  32. package/dist/cli/first-run-guide.d.ts.map +1 -1
  33. package/dist/cli/first-run-guide.js +10 -12
  34. package/dist/cli/first-run-guide.js.map +1 -1
  35. package/dist/cli/index.js +8 -1
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/cli/init/hooks.d.ts +17 -0
  38. package/dist/cli/init/hooks.d.ts.map +1 -0
  39. package/dist/cli/init/hooks.js +220 -0
  40. package/dist/cli/init/hooks.js.map +1 -0
  41. package/dist/cli/init/receipt.d.ts +4 -0
  42. package/dist/cli/init/receipt.d.ts.map +1 -0
  43. package/dist/cli/init/receipt.js +117 -0
  44. package/dist/cli/init/receipt.js.map +1 -0
  45. package/dist/cli/init/reconciler.d.ts +44 -0
  46. package/dist/cli/init/reconciler.d.ts.map +1 -0
  47. package/dist/cli/init/reconciler.js +377 -0
  48. package/dist/cli/init/reconciler.js.map +1 -0
  49. package/dist/cli/init/rule-templates.d.ts +9 -0
  50. package/dist/cli/init/rule-templates.d.ts.map +1 -0
  51. package/dist/cli/init/rule-templates.js +105 -0
  52. package/dist/cli/init/rule-templates.js.map +1 -0
  53. package/dist/cli/init/rules.d.ts +13 -0
  54. package/dist/cli/init/rules.d.ts.map +1 -0
  55. package/dist/cli/init/rules.js +113 -0
  56. package/dist/cli/init/rules.js.map +1 -0
  57. package/dist/cli/paths.d.ts +4 -2
  58. package/dist/cli/paths.d.ts.map +1 -1
  59. package/dist/cli/paths.js +13 -5
  60. package/dist/cli/paths.js.map +1 -1
  61. package/dist/orchestrator/test-linker.d.ts.map +1 -1
  62. package/dist/orchestrator/test-linker.js +5 -36
  63. package/dist/orchestrator/test-linker.js.map +1 -1
  64. package/docs/AI_ASSISTANT_SETUP.md +4 -2
  65. package/docs/PUBLISHING.md +41 -12
  66. package/docs/SETUP_GUIDE.md +12 -12
  67. package/docs/agents/domain.md +36 -0
  68. package/docs/agents/issue-tracker.md +22 -0
  69. package/docs/agents/triage-labels.md +15 -0
  70. package/docs/ai-guide/COMMANDS.md +57 -3
  71. package/docs/ai-guide/INTEGRATION.md +1 -1
  72. package/docs/ai-guide/PATTERNS.md +3 -3
  73. package/docs/ai-guide/QUICKSTART.md +13 -4
  74. package/docs/ai-guide/README.md +7 -7
  75. package/docs/archive/ideation/2026-04-22-harness-rules-entry-docs-optimization-ideation.md +102 -0
  76. package/docs/archive/ideation/2026-04-22-rules-claude-agents-optimization-ideation.md +107 -0
  77. package/docs/brainstorms/2026-04-22-rules-entry-docs-phase1-structure-consolidation-requirements.md +110 -0
  78. package/docs/brainstorms/999.1-mycodemap-init-enhancements-requirements.md +166 -0
  79. package/docs/exec-plans/README.md +3 -0
  80. package/docs/ideation/2026-04-20-mycodemap-init-enhancements-ideation.md +96 -0
  81. package/docs/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation.md +119 -0
  82. package/docs/lesson-learn/2026-04-19-prerelease-trusted-publishing-fix.md +119 -0
  83. package/docs/lesson-learn/image.png +0 -0
  84. package/docs/rules/README.md +4 -1
  85. package/docs/rules/deployment.md +7 -0
  86. package/docs/rules/engineering-with-codex-openai.md +47 -8
  87. package/docs/rules/pre-release-checklist.md +53 -37
  88. package/docs/rules/release.md +303 -0
  89. package/docs/rules/testing.md +19 -0
  90. package/docs/rules/validation.md +18 -8
  91. package/mycodemap.config.schema.json +1 -1
  92. package/package.json +3 -3
  93. package/scripts/hooks/templates/commit-msg +38 -0
  94. package/scripts/hooks/templates/pre-commit +224 -0
  95. package/scripts/pre-release-check.js +6 -6
  96. package/scripts/release.sh +1 -1
  97. package/scripts/validate-docs.js +283 -14
  98. package/dist/ai/claude.d.ts +0 -38
  99. package/dist/ai/claude.d.ts.map +0 -1
  100. package/dist/ai/claude.js +0 -169
  101. package/dist/ai/claude.js.map +0 -1
  102. package/dist/ai/codex.d.ts +0 -38
  103. package/dist/ai/codex.d.ts.map +0 -1
  104. package/dist/ai/codex.js +0 -169
  105. package/dist/ai/codex.js.map +0 -1
  106. package/dist/ai/factory.d.ts +0 -48
  107. package/dist/ai/factory.d.ts.map +0 -1
  108. package/dist/ai/factory.js +0 -95
  109. package/dist/ai/factory.js.map +0 -1
  110. package/dist/ai/index.d.ts +0 -12
  111. package/dist/ai/index.d.ts.map +0 -1
  112. package/dist/ai/index.js +0 -29
  113. package/dist/ai/index.js.map +0 -1
  114. package/dist/ai/provider.d.ts +0 -70
  115. package/dist/ai/provider.d.ts.map +0 -1
  116. package/dist/ai/provider.js +0 -31
  117. package/dist/ai/provider.js.map +0 -1
  118. package/dist/ai/subagent-caller.d.ts +0 -90
  119. package/dist/ai/subagent-caller.d.ts.map +0 -1
  120. package/dist/ai/subagent-caller.js +0 -280
  121. package/dist/ai/subagent-caller.js.map +0 -1
  122. package/dist/ai/types.d.ts +0 -70
  123. package/dist/ai/types.d.ts.map +0 -1
  124. package/dist/ai/types.js +0 -5
  125. package/dist/ai/types.js.map +0 -1
  126. package/dist/cli/commands/server.d.ts +0 -9
  127. package/dist/cli/commands/server.d.ts.map +0 -1
  128. package/dist/cli/commands/server.js +0 -65
  129. package/dist/cli/commands/server.js.map +0 -1
  130. package/dist/cli-new/commands/server.d.ts +0 -13
  131. package/dist/cli-new/commands/server.d.ts.map +0 -1
  132. package/dist/cli-new/commands/server.js +0 -90
  133. package/dist/cli-new/commands/server.js.map +0 -1
  134. package/dist/generator/ai-overview.d.ts +0 -51
  135. package/dist/generator/ai-overview.d.ts.map +0 -1
  136. package/dist/generator/ai-overview.js +0 -160
  137. package/dist/generator/ai-overview.js.map +0 -1
  138. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +0 -41
  139. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +0 -1
  140. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +0 -162
  141. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +0 -1
  142. package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
  143. package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
  144. package/dist/orchestrator/ai-feed-generator.js +0 -377
  145. package/dist/orchestrator/ai-feed-generator.js.map +0 -1
  146. package/docs/archive/test-report-symbol-search.md +0 -384
  147. package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
  148. package/docs/archive/test_report_scenario5.md +0 -615
  149. package/docs/archive/test_scenario_3_impact_analysis_report.md +0 -520
@@ -0,0 +1,220 @@
1
+ // [META] since:2026-04-21 | owner:cli-team | stable:false
2
+ // [WHY] 为 init 提供 package-safe hook payload 同步、shim 安装与 .gitignore 收敛逻辑
3
+ import { chmod, mkdir, writeFile } from 'node:fs/promises';
4
+ import { existsSync, lstatSync, readFileSync } from 'node:fs';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ const MANAGED_SHIM_MARKER = '# mycodemap-managed hook shim';
8
+ const HOOK_NAMES = ['pre-commit', 'commit-msg'];
9
+ const LOGS_IGNORE_ENTRY = '.mycodemap/logs/';
10
+ function resolvePackageRoot() {
11
+ return fileURLToPath(new URL('../../../', import.meta.url));
12
+ }
13
+ function resolveTemplateRoot(templateRoot) {
14
+ return templateRoot ?? path.join(resolvePackageRoot(), 'scripts', 'hooks', 'templates');
15
+ }
16
+ function safeReadText(filePath) {
17
+ if (!existsSync(filePath)) {
18
+ return undefined;
19
+ }
20
+ try {
21
+ return readFileSync(filePath, 'utf8');
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ function makeHookAsset(key, label, status, ownership, origin, details, options = {}) {
28
+ return {
29
+ key,
30
+ label,
31
+ status,
32
+ ownership,
33
+ origin,
34
+ path: options.path,
35
+ details,
36
+ hash: options.hash,
37
+ versionHint: options.versionHint,
38
+ rollbackHint: options.rollbackHint,
39
+ manualAction: options.manualAction,
40
+ };
41
+ }
42
+ function hashText(text) {
43
+ return Buffer.from(text).toString('base64').slice(0, 12);
44
+ }
45
+ function resolveGitHooksDirectory(rootDir) {
46
+ const dotGitPath = path.join(rootDir, '.git');
47
+ if (!existsSync(dotGitPath)) {
48
+ return undefined;
49
+ }
50
+ const stat = lstatSync(dotGitPath);
51
+ if (stat.isDirectory()) {
52
+ return path.join(dotGitPath, 'hooks');
53
+ }
54
+ if (!stat.isFile()) {
55
+ return undefined;
56
+ }
57
+ const dotGitText = safeReadText(dotGitPath);
58
+ const match = dotGitText?.match(/^gitdir:\s*(.+)\s*$/mu);
59
+ if (!match) {
60
+ return undefined;
61
+ }
62
+ return path.resolve(rootDir, match[1], 'hooks');
63
+ }
64
+ function hookPayloadPath(rootDir, hookName) {
65
+ return path.join(rootDir, '.mycodemap', 'hooks', hookName);
66
+ }
67
+ function preservedHookPath(rootDir, hookName) {
68
+ return path.join(rootDir, '.mycodemap', 'hooks', `user-${hookName}.sh`);
69
+ }
70
+ function buildManagedShim(hookName) {
71
+ return `#!/bin/sh
72
+ ${MANAGED_SHIM_MARKER}: ${hookName}
73
+ set -eu
74
+
75
+ REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
76
+ USER_HOOK="$REPO_ROOT/.mycodemap/hooks/user-${hookName}.sh"
77
+ CODEMAP_HOOK="$REPO_ROOT/.mycodemap/hooks/${hookName}"
78
+
79
+ if [ -x "$USER_HOOK" ]; then
80
+ "$USER_HOOK" "$@"
81
+ fi
82
+
83
+ if [ ! -x "$CODEMAP_HOOK" ]; then
84
+ echo "WARNING: missing CodeMap hook payload: $CODEMAP_HOOK" >&2
85
+ exit 0
86
+ fi
87
+
88
+ "$CODEMAP_HOOK" "$@"
89
+ `;
90
+ }
91
+ function payloadAsset(rootDir, hookName, templateRoot, writes) {
92
+ const templatePath = path.join(templateRoot, hookName);
93
+ const targetPath = hookPayloadPath(rootDir, hookName);
94
+ const templateText = safeReadText(templatePath);
95
+ if (!templateText) {
96
+ return makeHookAsset(`hook-payload:${hookName}`, `hook payload: ${hookName}`, 'manual-action-needed', 'tool-owned', 'missing-packaged-template', [`未找到 package-safe hook template:\`${templatePath}\``], {
97
+ path: targetPath,
98
+ manualAction: `确认已发布 \`scripts/hooks/templates/${hookName}\` 后重新运行 init`,
99
+ });
100
+ }
101
+ const currentText = safeReadText(targetPath);
102
+ if (currentText === templateText) {
103
+ return makeHookAsset(`hook-payload:${hookName}`, `hook payload: ${hookName}`, 'already-synced', 'tool-owned', `scripts/hooks/templates/${hookName}`, ['CodeMap-managed hook payload 已同步'], {
104
+ path: targetPath,
105
+ hash: hashText(templateText),
106
+ });
107
+ }
108
+ writes.push({
109
+ targetPath,
110
+ content: templateText,
111
+ executable: true,
112
+ });
113
+ return makeHookAsset(`hook-payload:${hookName}`, `hook payload: ${hookName}`, 'installed', 'tool-owned', `scripts/hooks/templates/${hookName}`, ['将把 package-safe hook payload 同步到 `.mycodemap/hooks/`'], {
114
+ path: targetPath,
115
+ hash: hashText(templateText),
116
+ rollbackHint: `如需回退,可删除 \`.mycodemap/hooks/${hookName}\``,
117
+ });
118
+ }
119
+ function shimAsset(rootDir, hookName, gitHooksDir, writes) {
120
+ const targetPath = gitHooksDir ? path.join(gitHooksDir, hookName) : undefined;
121
+ if (!gitHooksDir || !targetPath) {
122
+ return makeHookAsset(`hook-shim:${hookName}`, `hook shim: ${hookName}`, 'skipped', 'user-owned', 'not-a-git-repo', ['当前项目不是 Git 仓库,跳过 `.git/hooks/` shim 安装'], {
123
+ manualAction: '如需 hooks,请先初始化 Git 仓库后重新运行 init',
124
+ });
125
+ }
126
+ const expectedShim = buildManagedShim(hookName);
127
+ const currentShim = safeReadText(targetPath);
128
+ if (currentShim === expectedShim) {
129
+ return makeHookAsset(`hook-shim:${hookName}`, `hook shim: ${hookName}`, 'already-synced', 'user-owned', 'mycodemap-managed-shim', ['`.git/hooks/` shim 已指向 `.mycodemap/hooks/` payload'], {
130
+ path: targetPath,
131
+ hash: hashText(expectedShim),
132
+ });
133
+ }
134
+ const backupPath = preservedHookPath(rootDir, hookName);
135
+ const backupText = safeReadText(backupPath);
136
+ if (currentShim && !currentShim.includes(MANAGED_SHIM_MARKER) && backupText && backupText !== currentShim) {
137
+ return makeHookAsset(`hook-shim:${hookName}`, `hook shim: ${hookName}`, 'conflict', 'user-owned', 'existing-user-hook-with-backup-drift', ['检测到已有用户 hook,且 `.mycodemap/hooks/` 下的备份与当前 hook 内容不一致,无法安全覆盖'], {
138
+ path: targetPath,
139
+ manualAction: `手动整理 \`.git/hooks/${hookName}\` 与 \`.mycodemap/hooks/user-${hookName}.sh\` 后再重试`,
140
+ });
141
+ }
142
+ if (currentShim && !currentShim.includes(MANAGED_SHIM_MARKER) && !backupText) {
143
+ writes.push({
144
+ targetPath: backupPath,
145
+ content: currentShim,
146
+ executable: true,
147
+ });
148
+ }
149
+ if (currentShim !== expectedShim) {
150
+ writes.push({
151
+ targetPath,
152
+ content: expectedShim,
153
+ executable: true,
154
+ });
155
+ }
156
+ const preservedDetail = currentShim && !currentShim.includes(MANAGED_SHIM_MARKER)
157
+ ? [`已保留原有 hook 逻辑到 \`.mycodemap/hooks/user-${hookName}.sh\``]
158
+ : ['将安装 CodeMap-managed shim 到 `.git/hooks/`'];
159
+ return makeHookAsset(`hook-shim:${hookName}`, `hook shim: ${hookName}`, 'installed', 'user-owned', currentShim && !currentShim.includes(MANAGED_SHIM_MARKER) ? 'preserved-user-hook' : 'fresh-shim-install', [...preservedDetail, 'shim 会先执行保留的用户 hook,再执行 `.mycodemap/hooks/` payload'], {
160
+ path: targetPath,
161
+ hash: hashText(expectedShim),
162
+ rollbackHint: `如需回退,可恢复 \`.mycodemap/hooks/user-${hookName}.sh\` 中的旧逻辑并删除当前 shim`,
163
+ });
164
+ }
165
+ function gitignoreAsset(rootDir, gitHooksDir, writes) {
166
+ const gitignorePath = path.join(rootDir, '.gitignore');
167
+ const currentText = safeReadText(gitignorePath);
168
+ if (!gitHooksDir) {
169
+ return makeHookAsset('gitignore-logs', '.gitignore logs entry', 'skipped', 'user-owned', 'not-a-git-repo', ['当前项目不是 Git 仓库,跳过 `.gitignore` 日志条目收敛'], {
170
+ path: gitignorePath,
171
+ });
172
+ }
173
+ if (currentText?.split(/\r?\n/u).map((line) => line.trim()).includes(LOGS_IGNORE_ENTRY)) {
174
+ return makeHookAsset('gitignore-logs', '.gitignore logs entry', 'already-synced', 'user-owned', 'existing-gitignore-entry', ['`.gitignore` 已包含 `.mycodemap/logs/`'], {
175
+ path: gitignorePath,
176
+ });
177
+ }
178
+ const nextText = currentText && currentText.length > 0
179
+ ? `${currentText.endsWith('\n') ? currentText : `${currentText}\n`}${LOGS_IGNORE_ENTRY}\n`
180
+ : `${LOGS_IGNORE_ENTRY}\n`;
181
+ writes.push({
182
+ targetPath: gitignorePath,
183
+ content: nextText,
184
+ executable: false,
185
+ });
186
+ return makeHookAsset('gitignore-logs', '.gitignore logs entry', 'installed', 'user-owned', 'mycodemap-init', ['将向 `.gitignore` 追加 `.mycodemap/logs/`,避免本地日志进入版本控制'], {
187
+ path: gitignorePath,
188
+ rollbackHint: '如需回退,可从 `.gitignore` 中删除 `.mycodemap/logs/` 这一行',
189
+ });
190
+ }
191
+ export function createHookPlan(rootDir, options = {}) {
192
+ const writes = [];
193
+ const templateRoot = resolveTemplateRoot(options.templateRoot);
194
+ const gitHooksDir = resolveGitHooksDirectory(rootDir);
195
+ const assets = [];
196
+ for (const hookName of HOOK_NAMES) {
197
+ assets.push(payloadAsset(rootDir, hookName, templateRoot, writes));
198
+ }
199
+ for (const hookName of HOOK_NAMES) {
200
+ assets.push(shimAsset(rootDir, hookName, gitHooksDir, writes));
201
+ }
202
+ assets.push(gitignoreAsset(rootDir, gitHooksDir, writes));
203
+ return {
204
+ assets,
205
+ writes,
206
+ };
207
+ }
208
+ async function applyWrite(action) {
209
+ await mkdir(path.dirname(action.targetPath), { recursive: true });
210
+ await writeFile(action.targetPath, action.content, 'utf8');
211
+ if (action.executable) {
212
+ await chmod(action.targetPath, 0o755);
213
+ }
214
+ }
215
+ export async function applyHookPlan(plan) {
216
+ for (const writeAction of plan.writes) {
217
+ await applyWrite(writeAction);
218
+ }
219
+ }
220
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/init/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { InitReceipt } from './reconciler.js';
2
+ export declare function renderInitPreview(receipt: InitReceipt): void;
3
+ export declare function renderInitReceipt(receipt: InitReceipt): void;
4
+ //# sourceMappingURL=receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../src/cli/init/receipt.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgH9D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAS5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAU5D"}
@@ -0,0 +1,117 @@
1
+ // [META] since:2026-04-21 | owner:cli-team | stable:false
2
+ // [WHY] 统一 init 预览与执行后 receipt 的终端呈现,确保状态解释一致
3
+ import chalk from 'chalk';
4
+ import path from 'node:path';
5
+ function relativePath(rootDir, targetPath) {
6
+ if (!targetPath) {
7
+ return undefined;
8
+ }
9
+ const relative = path.relative(rootDir, targetPath);
10
+ return relative.length > 0 ? relative : '.';
11
+ }
12
+ function statusIcon(status) {
13
+ switch (status) {
14
+ case 'already-synced':
15
+ case 'installed':
16
+ case 'migrated':
17
+ return '✅';
18
+ case 'manual-action-needed':
19
+ return '⚠️';
20
+ case 'conflict':
21
+ case 'missing':
22
+ return '❌';
23
+ case 'skipped':
24
+ return '⏭';
25
+ }
26
+ }
27
+ function statusLabel(status) {
28
+ switch (status) {
29
+ case 'already-synced':
30
+ return 'already-synced';
31
+ case 'installed':
32
+ return 'installed';
33
+ case 'migrated':
34
+ return 'migrated';
35
+ case 'manual-action-needed':
36
+ return 'manual action';
37
+ case 'conflict':
38
+ return 'conflict';
39
+ case 'missing':
40
+ return 'missing';
41
+ case 'skipped':
42
+ return 'skipped';
43
+ }
44
+ }
45
+ function renderAsset(receipt, asset) {
46
+ const targetPath = relativePath(receipt.rootDir, asset.path);
47
+ const labelSuffix = targetPath ? chalk.gray(` (${targetPath})`) : '';
48
+ console.log(`${statusIcon(asset.status)} ${asset.label} [${statusLabel(asset.status)}]${labelSuffix}`);
49
+ for (const detail of asset.details) {
50
+ console.log(chalk.gray(` - ${detail}`));
51
+ }
52
+ if (asset.rollbackHint) {
53
+ console.log(chalk.gray(` - 回退:${asset.rollbackHint}`));
54
+ }
55
+ }
56
+ function renderSection(receipt, title, assets) {
57
+ if (assets.length === 0) {
58
+ return;
59
+ }
60
+ console.log('');
61
+ console.log(chalk.white(title));
62
+ for (const asset of assets) {
63
+ renderAsset(receipt, asset);
64
+ }
65
+ }
66
+ function renderNotes(receipt) {
67
+ if (receipt.notes.length === 0) {
68
+ return;
69
+ }
70
+ console.log('');
71
+ console.log(chalk.white('关系说明'));
72
+ for (const note of receipt.notes) {
73
+ console.log(chalk.gray(`- ${note}`));
74
+ }
75
+ }
76
+ function renderNextSteps(receipt) {
77
+ if (receipt.nextSteps.length === 0) {
78
+ return;
79
+ }
80
+ console.log('');
81
+ console.log(chalk.white('下一步'));
82
+ for (const step of receipt.nextSteps) {
83
+ console.log(chalk.cyan(`- ${step}`));
84
+ }
85
+ }
86
+ function doneAssets(receipt) {
87
+ return receipt.assets.filter((asset) => ['already-synced', 'installed', 'migrated'].includes(asset.status));
88
+ }
89
+ function manualAssets(receipt) {
90
+ return receipt.assets.filter((asset) => asset.status === 'manual-action-needed');
91
+ }
92
+ function conflictAssets(receipt) {
93
+ return receipt.assets.filter((asset) => asset.status === 'conflict' || asset.status === 'missing');
94
+ }
95
+ function skippedAssets(receipt) {
96
+ return receipt.assets.filter((asset) => asset.status === 'skipped');
97
+ }
98
+ export function renderInitPreview(receipt) {
99
+ console.log(chalk.blue('🔎 CodeMap init 预览(未写入)'));
100
+ console.log(chalk.gray('当前 CLI 尚未内置交互选择器;请确认以下收敛计划后使用 `mycodemap init --yes` 应用默认动作。'));
101
+ renderSection(receipt, '将完成或已同步', doneAssets(receipt));
102
+ renderSection(receipt, '仍需人工处理', manualAssets(receipt));
103
+ renderSection(receipt, '暂不处理', skippedAssets(receipt));
104
+ renderNotes(receipt);
105
+ renderNextSteps(receipt);
106
+ }
107
+ export function renderInitReceipt(receipt) {
108
+ console.log(chalk.blue('🧭 CodeMap init 收敛结果'));
109
+ console.log(chalk.gray(`状态台账: ${relativePath(receipt.rootDir, receipt.receiptPath)}`));
110
+ renderSection(receipt, '已完成 / 已同步', doneAssets(receipt));
111
+ renderSection(receipt, '仍需人工处理', manualAssets(receipt));
112
+ renderSection(receipt, '冲突 / 阻塞', conflictAssets(receipt));
113
+ renderSection(receipt, '已跳过', skippedAssets(receipt));
114
+ renderNotes(receipt);
115
+ renderNextSteps(receipt);
116
+ }
117
+ //# sourceMappingURL=receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../src/cli/init/receipt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type HookPlan } from './hooks.js';
2
+ import { type RulesPlan } from './rules.js';
3
+ export type InitAssetStatus = 'missing' | 'already-synced' | 'migrated' | 'installed' | 'conflict' | 'manual-action-needed' | 'skipped';
4
+ export type InitAssetOwnership = 'tool-owned' | 'team-owned' | 'user-owned';
5
+ export interface InitAsset {
6
+ key: string;
7
+ label: string;
8
+ status: InitAssetStatus;
9
+ ownership: InitAssetOwnership;
10
+ origin: string;
11
+ path?: string;
12
+ details: string[];
13
+ hash?: string;
14
+ versionHint?: string;
15
+ rollbackHint?: string;
16
+ manualAction?: string;
17
+ }
18
+ export interface InitReceipt {
19
+ version: 1;
20
+ generatedAt: string;
21
+ mode: 'preview' | 'apply';
22
+ rootDir: string;
23
+ receiptPath: string;
24
+ canonicalConfigPath: string;
25
+ assets: InitAsset[];
26
+ summary: Record<InitAssetStatus, number>;
27
+ notes: string[];
28
+ nextSteps: string[];
29
+ }
30
+ export interface InitPlan {
31
+ receipt: InitReceipt;
32
+ actions: {
33
+ ensureWorkspace: boolean;
34
+ writeCanonicalConfig: boolean;
35
+ canonicalConfigText?: string;
36
+ hookPlan: HookPlan;
37
+ rulesPlan: RulesPlan;
38
+ };
39
+ }
40
+ export declare function createInitPlan(rootDir: string, mode: 'preview' | 'apply'): InitPlan;
41
+ export declare function applyInitPlan(plan: InitPlan): Promise<InitReceipt>;
42
+ export declare function writeInitReceipt(receipt: InitReceipt): Promise<void>;
43
+ export declare function readReceiptConfigPath(receiptPath: string): string | undefined;
44
+ //# sourceMappingURL=reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciler.d.ts","sourceRoot":"","sources":["../../../src/cli/init/reconciler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAS7E,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,UAAU,GACV,sBAAsB,GACtB,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAE5E,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE;QACP,eAAe,EAAE,OAAO,CAAC;QACzB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,SAAS,CAAC;KACtB,CAAC;CACH;AAmdD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CA6CnF;AAqBD,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAOxE;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7E"}