@skrupellose/code-helper 0.1.0 → 0.1.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.
package/dist/hooks.js ADDED
@@ -0,0 +1,401 @@
1
+ import { chmod, stat } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { loadConfig } from "./config.js";
4
+ import { ensureTrailingNewline, projectPath, readTextIfExists, writeText } from "./fs-utils.js";
5
+ /**
6
+ * code-helper 管理的 hook 标记。
7
+ * 卸载时只删除带该命令特征的配置,避免误删用户自定义 hook。
8
+ */
9
+ const CODE_HELPER_HOOK_COMMAND = "npx @skrupellose/code-helper finish --check-only";
10
+ const CODE_HELPER_HOOK_COMMAND_WINDOWS = "npx.cmd @skrupellose/code-helper finish --check-only";
11
+ const CODE_HELPER_HOOK_STATUS_MESSAGE = "运行 code-helper 完成检查";
12
+ const CODE_HELPER_GIT_HOOK_MARKER = "# code-helper:managed-pre-commit";
13
+ /**
14
+ * 查看所有 hook 安装状态。
15
+ */
16
+ export async function listHookInstallations(projectRoot) {
17
+ const config = await loadConfig(projectRoot);
18
+ return [
19
+ {
20
+ target: "git",
21
+ label: "Git pre-commit",
22
+ path: getGitHookPath(projectRoot),
23
+ enabled: config.features.gitHooks.enabled,
24
+ installed: await isGitHookInstalled(projectRoot)
25
+ },
26
+ {
27
+ target: "codex",
28
+ label: "Codex Stop hook",
29
+ path: getCodexHooksPath(projectRoot),
30
+ enabled: config.features.agentHooks.enabled,
31
+ installed: await isJsonHookInstalled(projectRoot, "codex")
32
+ },
33
+ {
34
+ target: "claudecode",
35
+ label: "Claude Code Stop hook",
36
+ path: getClaudeSettingsPath(projectRoot),
37
+ enabled: config.features.agentHooks.enabled,
38
+ installed: await isJsonHookInstalled(projectRoot, "claudecode")
39
+ }
40
+ ];
41
+ }
42
+ /**
43
+ * 安装指定 hook。
44
+ * 安装动作受对应功能开关控制,避免用户只想保留 sample 时被写入真实配置。
45
+ */
46
+ export async function installHook(projectRoot, target) {
47
+ if (target === "git") {
48
+ return installGitHook(projectRoot);
49
+ }
50
+ return installAgentHook(projectRoot, target);
51
+ }
52
+ /**
53
+ * 卸载指定 hook。
54
+ * 卸载不受功能开关限制,用户关闭开关后仍应能清理已安装配置。
55
+ */
56
+ export async function uninstallHook(projectRoot, target) {
57
+ if (target === "git") {
58
+ return uninstallGitHook(projectRoot);
59
+ }
60
+ return uninstallAgentHook(projectRoot, target);
61
+ }
62
+ /**
63
+ * 解析 hooks CLI 的目标参数。
64
+ * hooks 会真实写入 Git 或 agent 配置,因此不再把空目标解释成全部安装。
65
+ */
66
+ export function parseHookTargets(value) {
67
+ if (value === "all") {
68
+ return ["git", "codex", "claudecode"];
69
+ }
70
+ if (value === "agent" || value === "agents" || value === "agentHooks") {
71
+ return ["codex", "claudecode"];
72
+ }
73
+ if (value === "git" || value === "pre-commit") {
74
+ return ["git"];
75
+ }
76
+ if (value === "codex") {
77
+ return ["codex"];
78
+ }
79
+ if (value === "claudecode" || value === "claude-code" || value === "claude") {
80
+ return ["claudecode"];
81
+ }
82
+ throw new Error(`不支持的 hooks 目标:${value}。当前支持 git、codex、claudecode、agent 或 all。`);
83
+ }
84
+ /**
85
+ * 安装 Git pre-commit hook。
86
+ */
87
+ async function installGitHook(projectRoot) {
88
+ await assertGitRepository(projectRoot);
89
+ const targetPath = getGitHookPath(projectRoot);
90
+ const existing = await readTextIfExists(targetPath);
91
+ const content = renderGitHook();
92
+ if (existing === content) {
93
+ return {
94
+ path: targetPath,
95
+ action: "skipped",
96
+ message: "Git pre-commit hook 已是最新内容"
97
+ };
98
+ }
99
+ if (existing !== undefined && !existing.includes(CODE_HELPER_GIT_HOOK_MARKER)) {
100
+ throw new Error(`已存在非 code-helper 管理的 Git hook:${targetPath}。请手动合并后再安装。`);
101
+ }
102
+ await writeText(targetPath, content);
103
+ await chmod(targetPath, 0o755);
104
+ return {
105
+ path: targetPath,
106
+ action: existing === undefined ? "created" : "updated",
107
+ message: "已安装 Git pre-commit hook"
108
+ };
109
+ }
110
+ /**
111
+ * 确认当前目录是 Git 仓库。
112
+ * 不存在 .git 时不主动创建,避免把普通目录误改成半成品 Git 结构。
113
+ */
114
+ async function assertGitRepository(projectRoot) {
115
+ try {
116
+ const gitDirectory = await stat(projectPath(projectRoot, ".git"));
117
+ if (!gitDirectory.isDirectory()) {
118
+ throw new Error("当前项目的 .git 不是目录,无法安装 Git hook。");
119
+ }
120
+ }
121
+ catch (error) {
122
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
123
+ throw new Error("当前目录不是 Git 仓库,无法安装 Git hook。");
124
+ }
125
+ throw error;
126
+ }
127
+ }
128
+ /**
129
+ * 卸载 Git pre-commit hook。
130
+ */
131
+ async function uninstallGitHook(projectRoot) {
132
+ const targetPath = getGitHookPath(projectRoot);
133
+ const existing = await readTextIfExists(targetPath);
134
+ if (existing === undefined) {
135
+ return {
136
+ path: targetPath,
137
+ action: "skipped",
138
+ message: "Git pre-commit hook 不存在"
139
+ };
140
+ }
141
+ if (!existing.includes(CODE_HELPER_GIT_HOOK_MARKER)) {
142
+ return {
143
+ path: targetPath,
144
+ action: "skipped",
145
+ message: "现有 Git hook 不是 code-helper 管理,已跳过"
146
+ };
147
+ }
148
+ await writeText(targetPath, "");
149
+ return {
150
+ path: targetPath,
151
+ action: "updated",
152
+ message: "已清空 code-helper 管理的 Git pre-commit hook"
153
+ };
154
+ }
155
+ /**
156
+ * 安装 Codex 或 Claude Code 的 Stop hook。
157
+ */
158
+ async function installAgentHook(projectRoot, target) {
159
+ const targetPath = target === "codex" ? getCodexHooksPath(projectRoot) : getClaudeSettingsPath(projectRoot);
160
+ const existingConfig = await readJsonObject(targetPath);
161
+ const nextConfig = addCodeHelperStopHook(existingConfig, target);
162
+ const existing = await readTextIfExists(targetPath);
163
+ const nextContent = ensureTrailingNewline(JSON.stringify(nextConfig, null, 2));
164
+ if (existing === nextContent) {
165
+ return {
166
+ path: targetPath,
167
+ action: "skipped",
168
+ message: `${formatTargetName(target)} hook 已是最新内容`
169
+ };
170
+ }
171
+ await writeText(targetPath, nextContent);
172
+ return {
173
+ path: targetPath,
174
+ action: existing === undefined ? "created" : "updated",
175
+ message: `已安装 ${formatTargetName(target)} hook`
176
+ };
177
+ }
178
+ /**
179
+ * 卸载 Codex 或 Claude Code 的 Stop hook。
180
+ */
181
+ async function uninstallAgentHook(projectRoot, target) {
182
+ const targetPath = target === "codex" ? getCodexHooksPath(projectRoot) : getClaudeSettingsPath(projectRoot);
183
+ const existingConfig = await readJsonObject(targetPath);
184
+ const nextConfig = removeCodeHelperStopHook(existingConfig);
185
+ const existing = await readTextIfExists(targetPath);
186
+ if (existing === undefined) {
187
+ return {
188
+ path: targetPath,
189
+ action: "skipped",
190
+ message: `${formatTargetName(target)} hook 配置不存在`
191
+ };
192
+ }
193
+ const nextContent = ensureTrailingNewline(JSON.stringify(nextConfig, null, 2));
194
+ if (existing === nextContent) {
195
+ return {
196
+ path: targetPath,
197
+ action: "skipped",
198
+ message: `未发现 code-helper 管理的 ${formatTargetName(target)} hook`
199
+ };
200
+ }
201
+ await writeText(targetPath, nextContent);
202
+ return {
203
+ path: targetPath,
204
+ action: "updated",
205
+ message: `已卸载 code-helper 管理的 ${formatTargetName(target)} hook`
206
+ };
207
+ }
208
+ /**
209
+ * 判断 Git hook 是否已安装。
210
+ */
211
+ async function isGitHookInstalled(projectRoot) {
212
+ return (await readTextIfExists(getGitHookPath(projectRoot)))?.includes(CODE_HELPER_GIT_HOOK_MARKER) === true;
213
+ }
214
+ /**
215
+ * 判断 JSON 配置中是否存在 code-helper Stop hook。
216
+ */
217
+ async function isJsonHookInstalled(projectRoot, target) {
218
+ const targetPath = target === "codex" ? getCodexHooksPath(projectRoot) : getClaudeSettingsPath(projectRoot);
219
+ const config = await readJsonObject(targetPath);
220
+ return collectStopHandlers(config).some((handler) => isCodeHelperHookHandler(handler));
221
+ }
222
+ /**
223
+ * 读取 JSON 对象。
224
+ * 文件不存在时返回空对象;非对象 JSON 视为配置异常。
225
+ */
226
+ async function readJsonObject(path) {
227
+ const raw = await readTextIfExists(path);
228
+ if (raw === undefined || raw.trim() === "") {
229
+ return {};
230
+ }
231
+ const parsed = JSON.parse(raw);
232
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
233
+ throw new Error(`JSON 配置必须是对象:${path}`);
234
+ }
235
+ return parsed;
236
+ }
237
+ /**
238
+ * 给配置对象追加 code-helper Stop hook。
239
+ * 已存在时先移除再追加,保证命令内容升级后能稳定刷新。
240
+ */
241
+ function addCodeHelperStopHook(config, target) {
242
+ const nextConfig = removeCodeHelperStopHook(config);
243
+ const hooks = getOrCreateObject(nextConfig, "hooks");
244
+ const stopGroups = getOrCreateArray(hooks, "Stop");
245
+ const handler = target === "codex" ? renderCodexHookHandler() : renderClaudeHookHandler();
246
+ stopGroups.push({
247
+ hooks: [handler]
248
+ });
249
+ return nextConfig;
250
+ }
251
+ /**
252
+ * 从配置对象中移除 code-helper Stop hook。
253
+ */
254
+ function removeCodeHelperStopHook(config) {
255
+ const nextConfig = structuredClone(config);
256
+ const hooks = nextConfig.hooks;
257
+ if (!isRecord(hooks)) {
258
+ return nextConfig;
259
+ }
260
+ const stopGroups = hooks.Stop;
261
+ if (!Array.isArray(stopGroups)) {
262
+ return nextConfig;
263
+ }
264
+ hooks.Stop = stopGroups
265
+ .map((group) => removeCodeHelperHandlersFromGroup(group))
266
+ .filter((group) => group !== undefined);
267
+ return nextConfig;
268
+ }
269
+ /**
270
+ * 从单个 Stop matcher group 中移除 code-helper handler。
271
+ */
272
+ function removeCodeHelperHandlersFromGroup(group) {
273
+ if (!isRecord(group)) {
274
+ return group;
275
+ }
276
+ const handlers = group.hooks;
277
+ if (!Array.isArray(handlers)) {
278
+ return group;
279
+ }
280
+ const nextHandlers = handlers.filter((handler) => !isCodeHelperHookHandler(handler));
281
+ if (nextHandlers.length === 0) {
282
+ return undefined;
283
+ }
284
+ return {
285
+ ...group,
286
+ hooks: nextHandlers
287
+ };
288
+ }
289
+ /**
290
+ * 收集 Stop 事件下的所有 handler。
291
+ */
292
+ function collectStopHandlers(config) {
293
+ const hooks = config.hooks;
294
+ if (!isRecord(hooks) || !Array.isArray(hooks.Stop)) {
295
+ return [];
296
+ }
297
+ return hooks.Stop.flatMap((group) => {
298
+ if (!isRecord(group) || !Array.isArray(group.hooks)) {
299
+ return [];
300
+ }
301
+ return group.hooks;
302
+ });
303
+ }
304
+ /**
305
+ * 判断 handler 是否由 code-helper 管理。
306
+ */
307
+ function isCodeHelperHookHandler(handler) {
308
+ if (!isRecord(handler)) {
309
+ return false;
310
+ }
311
+ return typeof handler.command === "string"
312
+ && handler.command.includes("@skrupellose/code-helper")
313
+ && handler.command.includes("finish");
314
+ }
315
+ /**
316
+ * 返回或创建对象字段。
317
+ */
318
+ function getOrCreateObject(target, key) {
319
+ const existing = target[key];
320
+ if (isRecord(existing)) {
321
+ return existing;
322
+ }
323
+ const nextValue = {};
324
+ target[key] = nextValue;
325
+ return nextValue;
326
+ }
327
+ /**
328
+ * 返回或创建数组字段。
329
+ */
330
+ function getOrCreateArray(target, key) {
331
+ const existing = target[key];
332
+ if (Array.isArray(existing)) {
333
+ return existing;
334
+ }
335
+ const nextValue = [];
336
+ target[key] = nextValue;
337
+ return nextValue;
338
+ }
339
+ /**
340
+ * 判断未知值是否是普通对象。
341
+ */
342
+ function isRecord(value) {
343
+ return typeof value === "object" && value !== null && !Array.isArray(value);
344
+ }
345
+ /**
346
+ * 渲染 Git pre-commit hook 内容。
347
+ */
348
+ function renderGitHook() {
349
+ return `#!/bin/sh
350
+ ${CODE_HELPER_GIT_HOOK_MARKER}
351
+ npx @skrupellose/code-helper check
352
+ `;
353
+ }
354
+ /**
355
+ * 渲染 Codex hook handler。
356
+ */
357
+ function renderCodexHookHandler() {
358
+ return {
359
+ type: "command",
360
+ command: CODE_HELPER_HOOK_COMMAND,
361
+ commandWindows: CODE_HELPER_HOOK_COMMAND_WINDOWS,
362
+ timeout: 30,
363
+ statusMessage: CODE_HELPER_HOOK_STATUS_MESSAGE
364
+ };
365
+ }
366
+ /**
367
+ * 渲染 Claude Code hook handler。
368
+ */
369
+ function renderClaudeHookHandler() {
370
+ return {
371
+ type: "command",
372
+ command: CODE_HELPER_HOOK_COMMAND,
373
+ timeout: 30,
374
+ statusMessage: CODE_HELPER_HOOK_STATUS_MESSAGE
375
+ };
376
+ }
377
+ /**
378
+ * 格式化 hook 目标名称。
379
+ */
380
+ function formatTargetName(target) {
381
+ return target === "codex" ? "Codex" : "Claude Code";
382
+ }
383
+ /**
384
+ * Git hook 安装路径。
385
+ */
386
+ function getGitHookPath(projectRoot) {
387
+ return projectPath(projectRoot, ".git/hooks/pre-commit");
388
+ }
389
+ /**
390
+ * Codex 项目级 hooks 配置路径。
391
+ */
392
+ function getCodexHooksPath(projectRoot) {
393
+ return projectPath(projectRoot, ".codex/hooks.json");
394
+ }
395
+ /**
396
+ * Claude Code 项目级 settings 配置路径。
397
+ */
398
+ function getClaudeSettingsPath(projectRoot) {
399
+ return projectPath(projectRoot, join(".claude", "settings.json"));
400
+ }
401
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type SkillRegistrationTarget } from "./skills.js";
1
2
  import type { CodeHelperConfig, OperationResult } from "./types.js";
2
3
  /**
3
4
  * 初始化 code-helper 的入参。
@@ -5,6 +6,11 @@ import type { CodeHelperConfig, OperationResult } from "./types.js";
5
6
  */
6
7
  export interface InitializeOptions {
7
8
  projectRoot: string;
9
+ /**
10
+ * init 要应用的 agent 工具目标。
11
+ * 不传时仅根据初始化前已有入口文件推断;传空数组表示调用方已经确认应保守跳过项目级能力安装。
12
+ */
13
+ skillRegistrationTargets?: SkillRegistrationTarget[];
8
14
  }
9
15
  /**
10
16
  * 初始化结果。
package/dist/init.js CHANGED
@@ -3,6 +3,7 @@ import { dirname, join } from "node:path";
3
3
  import { FEATURE_KEYS } from "./constants.js";
4
4
  import { loadConfig, saveConfig } from "./config.js";
5
5
  import { ensureDirectory, projectPath, upsertManagedMarkdownBlock, upsertMarkdownSection, readTextIfExists, writeText } from "./fs-utils.js";
6
+ import { installHook } from "./hooks.js";
6
7
  import { listProjectSkillRegistrations, registerProjectSkills, resolveSkillRegistrationTargets } from "./skills.js";
7
8
  import { getHookTemplates, getRuleTemplates, getSkillTemplates, renderEntryBlock } from "./templates.js";
8
9
  /**
@@ -12,8 +13,13 @@ import { getHookTemplates, getRuleTemplates, getSkillTemplates, renderEntryBlock
12
13
  export async function initializeProject(options) {
13
14
  const config = await loadConfig(options.projectRoot);
14
15
  const operations = [];
15
- await detectEntryFiles(options.projectRoot, config);
16
- const skillRegistrationTargets = await resolveSkillRegistrationTargets(options.projectRoot);
16
+ const skillRegistrationTargets = options.skillRegistrationTargets
17
+ ?? await resolveSkillRegistrationTargets(options.projectRoot);
18
+ const agentHookTargets = resolveAgentHookTargets(skillRegistrationTargets);
19
+ await detectEntryFiles(options.projectRoot, config, skillRegistrationTargets);
20
+ if (agentHookTargets.length > 0) {
21
+ config.features.agentHooks.enabled = true;
22
+ }
17
23
  operations.push(...(await migrateLegacyAgentWorkspace(options.projectRoot, config)));
18
24
  await createDirectories(options.projectRoot, config, operations);
19
25
  await saveConfig(options.projectRoot, config);
@@ -26,6 +32,7 @@ export async function initializeProject(options) {
26
32
  operations.push(...(await installRuleTemplates(options.projectRoot, config)));
27
33
  operations.push(...(await installSkillTemplates(options.projectRoot, config)));
28
34
  operations.push(...(await installProjectSkillRegistrations(options.projectRoot, config, skillRegistrationTargets)));
35
+ operations.push(...(await installProjectAgentHooks(options.projectRoot, config, skillRegistrationTargets, agentHookTargets)));
29
36
  operations.push(...(await installHookTemplates(options.projectRoot, config)));
30
37
  operations.push(await writeStateFile(options.projectRoot, config));
31
38
  return { config, operations };
@@ -36,12 +43,21 @@ export async function initializeProject(options) {
36
43
  */
37
44
  async function installProjectSkillRegistrations(projectRoot, config, targets) {
38
45
  const operations = [];
46
+ if (targets.length === 0) {
47
+ return [
48
+ {
49
+ path: projectPath(projectRoot, `${config.directories.workspace}/skills`),
50
+ action: "skipped",
51
+ message: "未识别到明确的 agent 工具,已跳过项目级 skills 注册;请在交互式 init 中选择目标,或执行 `code-helper init codex|claudecode|githubcopilot|all`。"
52
+ }
53
+ ];
54
+ }
39
55
  if (!config.features.skillRegistration.enabled) {
40
56
  const statuses = (await Promise.all(targets.map((target) => listProjectSkillRegistrations(projectRoot, target)))).flat();
41
57
  return statuses.map((status) => ({
42
58
  path: status.path,
43
59
  action: "skipped",
44
- message: "Skills 管理功能已关闭,跳过项目级注册"
60
+ message: "管理项目 Skills 功能已关闭,跳过项目级注册"
45
61
  }));
46
62
  }
47
63
  for (const target of targets) {
@@ -49,6 +65,42 @@ async function installProjectSkillRegistrations(projectRoot, config, targets) {
49
65
  }
50
66
  return operations;
51
67
  }
68
+ /**
69
+ * 根据 init 确定的同一批 agent 目标安装对应 Agent hooks。
70
+ * 当前只有 Codex 和 Claude Code 有项目级 Agent hook 配置;GitHub Copilot skills 不触发 Git hook 或其他 hook。
71
+ */
72
+ async function installProjectAgentHooks(projectRoot, config, skillTargets, hookTargets) {
73
+ if (skillTargets.length === 0) {
74
+ return [
75
+ {
76
+ path: projectPath(projectRoot, `${config.directories.workspace}/hooks`),
77
+ action: "skipped",
78
+ message: "未识别到明确的 agent 工具,已跳过 Agent hooks 安装"
79
+ }
80
+ ];
81
+ }
82
+ if (hookTargets.length === 0) {
83
+ return [
84
+ {
85
+ path: projectPath(projectRoot, `${config.directories.workspace}/hooks`),
86
+ action: "skipped",
87
+ message: "当前选择的 agent 工具没有可安装的 Agent hook,已跳过;Git hook 不会在 init 中自动安装"
88
+ }
89
+ ];
90
+ }
91
+ const operations = [];
92
+ for (const target of hookTargets) {
93
+ operations.push(await installHook(projectRoot, target));
94
+ }
95
+ return operations;
96
+ }
97
+ /**
98
+ * 从 skills 目标映射出支持 Agent hook 的目标。
99
+ * GitHub Copilot 只支持项目级 skills 注册,不在这里映射为 Git hook。
100
+ */
101
+ function resolveAgentHookTargets(targets) {
102
+ return targets.filter((target) => target === "codex" || target === "claudecode");
103
+ }
52
104
  /**
53
105
  * 迁移旧版工作区到新版布局。
54
106
  * 内部状态保留在 `.code-helper`,可读协作文档迁移到 `code-helper-docs`。
@@ -168,7 +220,7 @@ async function createDirectories(projectRoot, config, operations) {
168
220
  }
169
221
  }
170
222
  /**
171
- * 安装或更新 AGENTS.md / CLAUDE.md 入口文档。
223
+ * 安装或更新各 agent 工具的入口记忆文档。
172
224
  * 已存在文档只替换 code-helper 管理区块,不触碰用户其他内容。
173
225
  */
174
226
  async function installEntryDocuments(projectRoot, config) {
@@ -180,6 +232,9 @@ async function installEntryDocuments(projectRoot, config) {
180
232
  if (config.entryFiles.claude) {
181
233
  operations.push(await upsertManagedMarkdownBlock(projectPath(projectRoot, "CLAUDE.md"), entryBlock));
182
234
  }
235
+ if (config.entryFiles.copilot) {
236
+ operations.push(await upsertManagedMarkdownBlock(projectPath(projectRoot, ".github/copilot-instructions.md"), entryBlock));
237
+ }
183
238
  return operations;
184
239
  }
185
240
  /**
@@ -195,20 +250,22 @@ async function installRuleTemplates(projectRoot, config) {
195
250
  return operations;
196
251
  }
197
252
  /**
198
- * 检测用户已经手动创建的入口文件。
199
- * 已有入口文件优先代表当前项目实际使用的 agent;完全没有入口文件的新项目才默认维护 AGENTS.md。
253
+ * 检测用户已经手动创建的入口文件,并按 init 目标补齐需要维护的入口。
254
+ * 完全没有入口文件且没有选择目标时,不创建 agent 入口,避免后续 init 误判项目工具。
200
255
  */
201
- async function detectEntryFiles(projectRoot, config) {
256
+ async function detectEntryFiles(projectRoot, config, targets) {
202
257
  const agentsExists = (await readTextIfExists(projectPath(projectRoot, "AGENTS.md"))) !== undefined;
203
258
  const claudeExists = (await readTextIfExists(projectPath(projectRoot, "CLAUDE.md"))) !== undefined;
204
- if (agentsExists || claudeExists) {
205
- config.entryFiles.agents = agentsExists;
206
- config.entryFiles.claude = claudeExists;
259
+ const copilotExists = (await readTextIfExists(projectPath(projectRoot, ".github/copilot-instructions.md"))) !== undefined;
260
+ if (agentsExists || claudeExists || copilotExists) {
261
+ config.entryFiles.agents = agentsExists || targets.includes("codex");
262
+ config.entryFiles.claude = claudeExists || targets.includes("claudecode");
263
+ config.entryFiles.copilot = copilotExists || targets.includes("githubcopilot");
207
264
  return;
208
265
  }
209
- if (!config.entryFiles.agents && !config.entryFiles.claude) {
210
- config.entryFiles.agents = true;
211
- }
266
+ config.entryFiles.agents = targets.includes("codex");
267
+ config.entryFiles.claude = targets.includes("claudecode");
268
+ config.entryFiles.copilot = targets.includes("githubcopilot");
212
269
  }
213
270
  /**
214
271
  * 渲染专题规则中的调用入口文件列表。
@@ -217,7 +274,8 @@ async function detectEntryFiles(projectRoot, config) {
217
274
  function renderEntryFileList(config) {
218
275
  const entries = [
219
276
  config.entryFiles.agents ? "- `AGENTS.md`" : undefined,
220
- config.entryFiles.claude ? "- `CLAUDE.md`" : undefined
277
+ config.entryFiles.claude ? "- `CLAUDE.md`" : undefined,
278
+ config.entryFiles.copilot ? "- `.github/copilot-instructions.md`" : undefined
221
279
  ].filter((entry) => entry !== undefined);
222
280
  return entries.join("\n");
223
281
  }
@@ -246,13 +304,14 @@ async function installHookTemplates(projectRoot, config) {
246
304
  const operations = [];
247
305
  for (const template of getHookTemplates()) {
248
306
  const targetPath = projectPath(projectRoot, join(config.directories.workspace, "hooks", template.fileName));
307
+ const enabled = config.features[template.feature].enabled;
249
308
  await writeText(targetPath, template.content);
250
309
  operations.push({
251
310
  path: targetPath,
252
- action: config.features.gitHooks.enabled ? "updated" : "skipped",
253
- message: config.features.gitHooks.enabled
254
- ? "已刷新可选 Git hook 模板"
255
- : "Git hooks 默认关闭,仅保留 sample 模板"
311
+ action: enabled ? "updated" : "skipped",
312
+ message: enabled
313
+ ? `已刷新可选 ${template.feature === "gitHooks" ? "Git hook" : "Agent hook"} 模板`
314
+ : `${template.feature === "gitHooks" ? "Git hooks" : "Agent hooks"} 默认关闭,仅保留 sample 模板`
256
315
  });
257
316
  }
258
317
  return operations;
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}