@mycodemap/mycodemap 0.5.2-beta.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 (96) hide show
  1. package/CHANGELOG.md +14 -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/SETUP_GUIDE.md +12 -12
  66. package/docs/agents/domain.md +36 -0
  67. package/docs/agents/issue-tracker.md +22 -0
  68. package/docs/agents/triage-labels.md +15 -0
  69. package/docs/ai-guide/COMMANDS.md +57 -3
  70. package/docs/ai-guide/INTEGRATION.md +1 -1
  71. package/docs/ai-guide/PATTERNS.md +3 -3
  72. package/docs/ai-guide/QUICKSTART.md +13 -4
  73. package/docs/ai-guide/README.md +7 -7
  74. package/docs/archive/ideation/2026-04-22-harness-rules-entry-docs-optimization-ideation.md +102 -0
  75. package/docs/archive/ideation/2026-04-22-rules-claude-agents-optimization-ideation.md +107 -0
  76. package/docs/brainstorms/2026-04-22-rules-entry-docs-phase1-structure-consolidation-requirements.md +110 -0
  77. package/docs/brainstorms/999.1-mycodemap-init-enhancements-requirements.md +166 -0
  78. package/docs/exec-plans/README.md +3 -0
  79. package/docs/ideation/2026-04-20-mycodemap-init-enhancements-ideation.md +96 -0
  80. package/docs/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation.md +119 -0
  81. package/docs/lesson-learn/2026-04-19-prerelease-trusted-publishing-fix.md +119 -0
  82. package/docs/lesson-learn/image.png +0 -0
  83. package/docs/rules/README.md +4 -1
  84. package/docs/rules/deployment.md +7 -0
  85. package/docs/rules/engineering-with-codex-openai.md +47 -8
  86. package/docs/rules/pre-release-checklist.md +44 -33
  87. package/docs/rules/release.md +303 -0
  88. package/docs/rules/testing.md +19 -0
  89. package/docs/rules/validation.md +16 -7
  90. package/mycodemap.config.schema.json +1 -1
  91. package/package.json +3 -3
  92. package/scripts/hooks/templates/commit-msg +38 -0
  93. package/scripts/hooks/templates/pre-commit +224 -0
  94. package/scripts/pre-release-check.js +4 -4
  95. package/scripts/release.sh +1 -1
  96. package/scripts/validate-docs.js +283 -14
@@ -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"}