@skrupellose/code-helper 0.1.1 → 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/README.md +33 -2
- package/dist/archive.d.ts +8 -1
- package/dist/archive.js +39 -6
- package/dist/archive.js.map +1 -1
- package/dist/checks.d.ts +4 -2
- package/dist/checks.js +69 -4
- package/dist/checks.js.map +1 -1
- package/dist/cli.js +83 -16
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +2 -1
- package/dist/completion.js +70 -7
- package/dist/completion.js.map +1 -1
- package/dist/hooks.d.ts +2 -1
- package/dist/hooks.js +2 -1
- package/dist/hooks.js.map +1 -1
- package/dist/skills.js +5 -0
- package/dist/skills.js.map +1 -1
- package/dist/templates.js +112 -1
- package/dist/templates.js.map +1 -1
- package/dist/workflows.js +20 -8
- package/dist/workflows.js.map +1 -1
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -39,12 +39,14 @@ npx @skrupellose/code-helper
|
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
41
|
npx @skrupellose/code-helper init
|
|
42
|
+
npx @skrupellose/code-helper sync-local
|
|
42
43
|
npx @skrupellose/code-helper check
|
|
43
44
|
npx @skrupellose/code-helper features list
|
|
44
45
|
npx @skrupellose/code-helper plan docs/订单管理需求.md 订单管理升级
|
|
45
46
|
npx @skrupellose/code-helper manual-test 订单管理升级
|
|
46
47
|
npx @skrupellose/code-helper finish 订单管理升级
|
|
47
48
|
npx @skrupellose/code-helper archive 订单管理升级
|
|
49
|
+
npx @skrupellose/code-helper archive 订单管理升级 --resolve-mixed
|
|
48
50
|
npx @skrupellose/code-helper tasks
|
|
49
51
|
npx @skrupellose/code-helper init codex
|
|
50
52
|
npx @skrupellose/code-helper skills register
|
|
@@ -54,7 +56,7 @@ npx @skrupellose/code-helper hooks list
|
|
|
54
56
|
|
|
55
57
|
在交互式“生成任务计划”里,可以直接把需求文档拖到终端;工具会识别引号、`file://`、反斜杠转义空格和项目内绝对路径。
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
生成项目计划时,会创建计划文档、实施记录和当前状态记录;`status-doc` 会同步生成当前执行入口,包含“当前执行节点”和“子计划队列”,用于让 agent 按计划逐步推进。手工测试文档由 `manual-test` 按需单独生成。
|
|
58
60
|
|
|
59
61
|
完成小节点、识别到功能变更、准备最终回复或切换任务前,可以运行 `code-helper finish <中文功能名> --check-only`。它只输出完成判断和后续建议,不会自动更新长期记忆、归档或提交。
|
|
60
62
|
|
|
@@ -91,7 +93,8 @@ npx @skrupellose/code-helper hooks list
|
|
|
91
93
|
- 功能完成后可以执行 `npx @skrupellose/code-helper archive <中文功能名>` 归档文档。
|
|
92
94
|
- 不带功能名执行 `manual-test`、`finish` 或 `archive` 时,TTY 终端会优先展示当前活动任务选择列表。
|
|
93
95
|
- 用户手动移动到 `archive/` 的任务会被识别为已结束任务。
|
|
94
|
-
-
|
|
96
|
+
- `check` 默认只输出检查结果;需要写入 `.code-helper/checks/latest.json` 时使用 `check --write-report`。
|
|
97
|
+
- init 不会自动安装 Git hook;Git hook 只在显式执行 `hooks install git` 时安装。`hooks install` / `hooks uninstall` 必须显式传入 `git`、`codex`、`claudecode`、`agent` 或 `all`,避免误安装全部 hooks。
|
|
95
98
|
|
|
96
99
|
## 功能管理
|
|
97
100
|
|
|
@@ -131,3 +134,31 @@ npx @skrupellose/code-helper hooks uninstall agent
|
|
|
131
134
|
- `hooks install` 会直接应用对应 hook,并同步内部状态。
|
|
132
135
|
- Agent hooks 只运行 `finish --check-only`,不会自动更新长期记忆、归档或提交。
|
|
133
136
|
- 卸载只移除 code-helper 管理的 hook,不删除用户自己的 hooks。
|
|
137
|
+
|
|
138
|
+
## 本地验证与发布检查
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm run sync:local
|
|
142
|
+
npm test
|
|
143
|
+
npm run check
|
|
144
|
+
npm pack --dry-run
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
开发 code-helper 本仓库时,修改 `src/templates.ts`、入口规则、内置 skills 或项目级 skills 相关逻辑后,先运行 `npm run sync:local`。它会构建当前代码,刷新 `AGENTS.md` 的 code-helper 受控区块、`.code-helper/skills/` 内置模板,并注册 Codex、Claude Code、GitHub Copilot 三类项目级 skills;不会额外创建 `CLAUDE.md`、`.github/copilot-instructions.md` 或安装 hooks。
|
|
148
|
+
|
|
149
|
+
`npm pack` 前会自动执行构建,避免发布包依赖本地残留的 `dist/`。
|
|
150
|
+
|
|
151
|
+
## GitHub Actions 与 npm 发布
|
|
152
|
+
|
|
153
|
+
仓库提供两个 GitHub Actions:
|
|
154
|
+
|
|
155
|
+
- `CI`:在 PR 和 `main` push 时运行 `npm ci`、`npm test`、`npm run check`、`npm pack --dry-run`,覆盖 Node.js 20 和 22。
|
|
156
|
+
- `Publish to npm`:只支持手动触发,发布当前 `package.json` 中的版本;触发时必须输入 `publish` 确认,并会先检查该版本是否已存在于 npm。
|
|
157
|
+
|
|
158
|
+
npm 发布建议使用 Trusted Publishing / OIDC,不在 GitHub Secrets 中保存长期 npm token。需要在 npm package 设置中添加 trusted publisher:
|
|
159
|
+
|
|
160
|
+
- Repository:当前 GitHub 仓库
|
|
161
|
+
- Workflow:`npm-publish.yml`
|
|
162
|
+
- Environment:`npm-publish`
|
|
163
|
+
|
|
164
|
+
发布前仍需先在代码中完成版本号更新并提交;workflow 不自动改版本、不自动创建 tag、不自动发布未确认的提交。
|
package/dist/archive.d.ts
CHANGED
|
@@ -14,11 +14,18 @@ export interface TaskRecord {
|
|
|
14
14
|
activeArtifacts: string[];
|
|
15
15
|
archivedArtifacts: string[];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* 归档命令选项。
|
|
19
|
+
* resolveMixed 只在用户显式要求时清理 active/archive 同名冲突,避免默认删除活动文档。
|
|
20
|
+
*/
|
|
21
|
+
export interface ArchiveFeatureOptions {
|
|
22
|
+
resolveMixed?: boolean;
|
|
23
|
+
}
|
|
17
24
|
/**
|
|
18
25
|
* 执行任务文档归档。
|
|
19
26
|
* 归档目标固定为各文档目录下的 archive 子目录,避免已结束任务继续影响当前任务判断。
|
|
20
27
|
*/
|
|
21
|
-
export declare function archiveFeature(projectRoot: string, rawFeatureName: string): Promise<OperationResult[]>;
|
|
28
|
+
export declare function archiveFeature(projectRoot: string, rawFeatureName: string, options?: ArchiveFeatureOptions): Promise<OperationResult[]>;
|
|
22
29
|
/**
|
|
23
30
|
* 扫描当前项目任务。
|
|
24
31
|
* 如果用户手动把文件移动到 archive 子目录,这里也会识别为 archived。
|
package/dist/archive.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readdir, rename, stat } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readdir, rename, rm, stat } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { loadConfig } from "./config.js";
|
|
4
4
|
import { ensureDirectory, portablePath, projectPath, writeText } from "./fs-utils.js";
|
|
@@ -7,7 +7,7 @@ import { normalizeDocumentName, normalizeFeatureName } from "./workflows.js";
|
|
|
7
7
|
* 执行任务文档归档。
|
|
8
8
|
* 归档目标固定为各文档目录下的 archive 子目录,避免已结束任务继续影响当前任务判断。
|
|
9
9
|
*/
|
|
10
|
-
export async function archiveFeature(projectRoot, rawFeatureName) {
|
|
10
|
+
export async function archiveFeature(projectRoot, rawFeatureName, options = {}) {
|
|
11
11
|
const config = await loadConfig(projectRoot);
|
|
12
12
|
if (!config.features.documentArchive.enabled) {
|
|
13
13
|
throw new Error("文档归档功能已关闭,请先执行 `code-helper features enable documentArchive`。");
|
|
@@ -16,8 +16,16 @@ export async function archiveFeature(projectRoot, rawFeatureName) {
|
|
|
16
16
|
const recordFeatureName = featureNames[0];
|
|
17
17
|
const operations = [];
|
|
18
18
|
const moves = featureNames.flatMap((featureName) => getArchiveMoves(config, featureName));
|
|
19
|
+
const conflicts = options.resolveMixed ? [] : await findArchiveConflicts(projectRoot, moves);
|
|
20
|
+
if (conflicts.length > 0) {
|
|
21
|
+
throw new Error([
|
|
22
|
+
`任务存在 active/archive 同名冲突:${rawFeatureName}`,
|
|
23
|
+
"如果确认归档目录中的版本应保留,请运行 `code-helper archive <中文功能名> --resolve-mixed` 清理活动副本。",
|
|
24
|
+
...conflicts.map((conflict) => `冲突路径:${conflict}`)
|
|
25
|
+
].join("\n"));
|
|
26
|
+
}
|
|
19
27
|
for (const move of moves) {
|
|
20
|
-
operations.push(await movePathIfExists(projectRoot, move.from, move.to));
|
|
28
|
+
operations.push(await movePathIfExists(projectRoot, move.from, move.to, options));
|
|
21
29
|
}
|
|
22
30
|
if (!operations.some((operation) => isKnownArchivedOperation(operation))) {
|
|
23
31
|
throw new Error(`未找到功能文档:${rawFeatureName}。请确认 plan-doc、result-doc 或 status-doc 中存在对应任务。`);
|
|
@@ -25,6 +33,21 @@ export async function archiveFeature(projectRoot, rawFeatureName) {
|
|
|
25
33
|
operations.push(await writeArchiveRecord(projectRoot, config, recordFeatureName, operations));
|
|
26
34
|
return operations;
|
|
27
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* 归档前预检查 active/archive 同名冲突。
|
|
38
|
+
* 这样默认模式下不会先移动部分文档再报错,保持归档动作可预期。
|
|
39
|
+
*/
|
|
40
|
+
async function findArchiveConflicts(projectRoot, moves) {
|
|
41
|
+
const conflicts = [];
|
|
42
|
+
for (const move of moves) {
|
|
43
|
+
const sourceExists = await pathExists(projectPath(projectRoot, move.from));
|
|
44
|
+
const targetExists = await pathExists(projectPath(projectRoot, move.to));
|
|
45
|
+
if (sourceExists && targetExists) {
|
|
46
|
+
conflicts.push(move.to);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return conflicts;
|
|
50
|
+
}
|
|
28
51
|
/**
|
|
29
52
|
* 生成归档任务名候选。
|
|
30
53
|
* 新文档强制中文命名;旧项目可能仍有英文 feature 文档,因此归档时保留旧英文兼容。
|
|
@@ -92,7 +115,7 @@ function getArchiveMoves(config, featureName) {
|
|
|
92
115
|
* 文件或目录存在时移动到 archive。
|
|
93
116
|
* 目标已存在时不覆盖,避免破坏用户手动归档后的内容。
|
|
94
117
|
*/
|
|
95
|
-
async function movePathIfExists(projectRoot, fromRelativePath, toRelativePath) {
|
|
118
|
+
async function movePathIfExists(projectRoot, fromRelativePath, toRelativePath, options) {
|
|
96
119
|
const fromPath = projectPath(projectRoot, fromRelativePath);
|
|
97
120
|
const toPath = projectPath(projectRoot, toRelativePath);
|
|
98
121
|
const sourceExists = await pathExists(fromPath);
|
|
@@ -112,10 +135,18 @@ async function movePathIfExists(projectRoot, fromRelativePath, toRelativePath) {
|
|
|
112
135
|
};
|
|
113
136
|
}
|
|
114
137
|
if (targetExists) {
|
|
138
|
+
if (options.resolveMixed) {
|
|
139
|
+
await rm(fromPath, { recursive: true, force: true });
|
|
140
|
+
return {
|
|
141
|
+
path: fromPath,
|
|
142
|
+
action: "updated",
|
|
143
|
+
message: "已清理活动副本,保留归档目录中的已结束任务"
|
|
144
|
+
};
|
|
145
|
+
}
|
|
115
146
|
return {
|
|
116
147
|
path: toPath,
|
|
117
148
|
action: "skipped",
|
|
118
|
-
message: "
|
|
149
|
+
message: "活动文档和归档文档同时存在,请人工确认后再处理"
|
|
119
150
|
};
|
|
120
151
|
}
|
|
121
152
|
await mkdir(dirname(toPath), { recursive: true });
|
|
@@ -154,7 +185,9 @@ async function writeArchiveRecord(projectRoot, config, featureName, operations)
|
|
|
154
185
|
* 源文档不存在不算已归档,避免生成空归档记录。
|
|
155
186
|
*/
|
|
156
187
|
function isKnownArchivedOperation(operation) {
|
|
157
|
-
return operation.message === "已移动到归档目录"
|
|
188
|
+
return operation.message === "已移动到归档目录"
|
|
189
|
+
|| operation.message === "已在归档目录中,识别为已结束任务"
|
|
190
|
+
|| operation.message === "已清理活动副本,保留归档目录中的已结束任务";
|
|
158
191
|
}
|
|
159
192
|
/**
|
|
160
193
|
* 收集 plan-doc 中的活动或归档计划文档。
|
package/dist/archive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"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"}
|
package/dist/checks.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { CheckIssue } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* 运行项目协作规则检查。
|
|
4
|
-
*
|
|
4
|
+
* 默认只读项目结构;需要持久化报告时由调用方显式传入 writeReport。
|
|
5
5
|
*/
|
|
6
|
-
export declare function runChecks(projectRoot: string
|
|
6
|
+
export declare function runChecks(projectRoot: string, options?: {
|
|
7
|
+
writeReport?: boolean;
|
|
8
|
+
}): Promise<CheckIssue[]>;
|
package/dist/checks.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { readdir } from "node:fs/promises";
|
|
2
2
|
import { ENTRY_BLOCK_END, ENTRY_BLOCK_START, FEATURE_KEYS } from "./constants.js";
|
|
3
3
|
import { listTasks } from "./archive.js";
|
|
4
|
-
import { loadConfig } from "./config.js";
|
|
4
|
+
import { getConfigRelativePath, loadConfig } from "./config.js";
|
|
5
5
|
import { portablePath, projectPath, readTextIfExists, writeText } from "./fs-utils.js";
|
|
6
6
|
/**
|
|
7
7
|
* 运行项目协作规则检查。
|
|
8
|
-
*
|
|
8
|
+
* 默认只读项目结构;需要持久化报告时由调用方显式传入 writeReport。
|
|
9
9
|
*/
|
|
10
|
-
export async function runChecks(projectRoot) {
|
|
10
|
+
export async function runChecks(projectRoot, options = {}) {
|
|
11
|
+
const rawConfigIssues = await checkRawConfig(projectRoot);
|
|
12
|
+
if (rawConfigIssues.some((issue) => issue.code === "invalid-config-json" || issue.code === "invalid-config-shape")) {
|
|
13
|
+
return rawConfigIssues;
|
|
14
|
+
}
|
|
11
15
|
const config = await loadConfig(projectRoot);
|
|
12
16
|
const issues = [];
|
|
13
17
|
if (!config.features.checks.enabled) {
|
|
14
18
|
return issues;
|
|
15
19
|
}
|
|
20
|
+
issues.push(...rawConfigIssues);
|
|
16
21
|
issues.push(...(await checkConfig(config)));
|
|
17
22
|
issues.push(...(await checkEntryDocuments(projectRoot, config)));
|
|
18
23
|
issues.push(...(await checkRuleDocuments(projectRoot, config)));
|
|
@@ -20,9 +25,69 @@ export async function runChecks(projectRoot) {
|
|
|
20
25
|
issues.push(...(await checkChineseWorkbenchDocuments(projectRoot, config)));
|
|
21
26
|
issues.push(...(await checkTestingPolicy(projectRoot, config)));
|
|
22
27
|
issues.push(...(await checkArchiveState(projectRoot, config)));
|
|
23
|
-
|
|
28
|
+
if (options.writeReport === true) {
|
|
29
|
+
await writeText(projectPath(projectRoot, `${config.directories.workspace}/checks/latest.json`), `${JSON.stringify({ checkedAt: new Date().toISOString(), issues }, null, 2)}\n`);
|
|
30
|
+
}
|
|
24
31
|
return issues;
|
|
25
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* 检查原始配置文件结构。
|
|
35
|
+
* loadConfig 会自动补默认值,因此缺失字段必须在合并前检查,否则会被默认配置掩盖。
|
|
36
|
+
*/
|
|
37
|
+
async function checkRawConfig(projectRoot) {
|
|
38
|
+
const configPath = getConfigRelativePath();
|
|
39
|
+
const raw = await readTextIfExists(projectPath(projectRoot, configPath));
|
|
40
|
+
if (raw === undefined) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = JSON.parse(raw);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return [
|
|
49
|
+
{
|
|
50
|
+
level: "error",
|
|
51
|
+
code: "invalid-config-json",
|
|
52
|
+
message: "code-helper 配置不是合法 JSON",
|
|
53
|
+
path: configPath,
|
|
54
|
+
suggestion: "修复 JSON 语法,或运行 `npx @skrupellose/code-helper init` 重新生成配置。"
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
59
|
+
return [
|
|
60
|
+
{
|
|
61
|
+
level: "error",
|
|
62
|
+
code: "invalid-config-shape",
|
|
63
|
+
message: "code-helper 配置必须是 JSON 对象",
|
|
64
|
+
path: configPath,
|
|
65
|
+
suggestion: "运行 `npx @skrupellose/code-helper init` 重新生成配置。"
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
const features = parsed.features;
|
|
70
|
+
if (typeof features !== "object" || features === null || Array.isArray(features)) {
|
|
71
|
+
return [
|
|
72
|
+
{
|
|
73
|
+
level: "error",
|
|
74
|
+
code: "missing-feature-toggles",
|
|
75
|
+
message: "配置缺少 features 功能开关对象",
|
|
76
|
+
path: configPath,
|
|
77
|
+
suggestion: "运行 `npx @skrupellose/code-helper init` 补齐默认功能开关。"
|
|
78
|
+
}
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
return FEATURE_KEYS
|
|
82
|
+
.filter((feature) => !(feature in features))
|
|
83
|
+
.map((feature) => ({
|
|
84
|
+
level: "error",
|
|
85
|
+
code: "missing-feature-toggle",
|
|
86
|
+
message: `配置缺少功能开关:${feature}`,
|
|
87
|
+
path: configPath,
|
|
88
|
+
suggestion: "运行 `npx @skrupellose/code-helper init`,让工具补齐默认配置。"
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
26
91
|
/**
|
|
27
92
|
* 检查计划、结果、状态和测试文档是否遵守中文命名规则。
|
|
28
93
|
* 生成端已经强制中文命名;检查端负责发现用户手动创建或旧文档残留。
|
package/dist/checks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -24,8 +24,10 @@ export async function runCli(argv, projectRoot = process.cwd()) {
|
|
|
24
24
|
return runInteractiveMenu(projectRoot);
|
|
25
25
|
case "init":
|
|
26
26
|
return runInit(projectRoot, args);
|
|
27
|
+
case "sync-local":
|
|
28
|
+
return runSyncLocal(projectRoot, args);
|
|
27
29
|
case "check":
|
|
28
|
-
return runCheck(projectRoot);
|
|
30
|
+
return runCheck(projectRoot, args);
|
|
29
31
|
case "features":
|
|
30
32
|
return runFeatures(projectRoot, args);
|
|
31
33
|
case "plan":
|
|
@@ -390,15 +392,41 @@ async function selectTaskFeatureNameForCommand(projectRoot, title, statuses) {
|
|
|
390
392
|
console.error("缺少功能名称,且当前没有发现可选择的活动任务。");
|
|
391
393
|
return undefined;
|
|
392
394
|
}
|
|
393
|
-
if (!
|
|
395
|
+
if (!input.isTTY || !output.isTTY) {
|
|
394
396
|
console.error("缺少功能名称。可用任务:");
|
|
395
397
|
for (const task of tasks) {
|
|
396
398
|
console.error(`- ${task.featureName}(${task.status})`);
|
|
397
399
|
}
|
|
398
400
|
return undefined;
|
|
399
401
|
}
|
|
400
|
-
|
|
402
|
+
if (!canUseInteractiveKeys(input, output)) {
|
|
403
|
+
const rl = createInterface({ input, output });
|
|
404
|
+
try {
|
|
405
|
+
const answer = await askTextTaskMenu(rl, title, tasks);
|
|
406
|
+
return resolveTaskSelectionForCommand(answer, tasks, rl);
|
|
407
|
+
}
|
|
408
|
+
finally {
|
|
409
|
+
rl.close();
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
const answer = await promptSelect(input, output, title, buildTaskSelectOptions(tasks, true));
|
|
413
|
+
const rl = createInterface({ input, output });
|
|
414
|
+
try {
|
|
415
|
+
return await resolveTaskSelectionForCommand(answer, tasks, rl);
|
|
416
|
+
}
|
|
417
|
+
finally {
|
|
418
|
+
rl.close();
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* 将任务选择菜单结果解析为功能名。
|
|
423
|
+
* 直接命令也保留手动输入入口,兼容旧文档或尚未生成完整任务记录的场景。
|
|
424
|
+
*/
|
|
425
|
+
async function resolveTaskSelectionForCommand(answer, tasks, rl) {
|
|
401
426
|
if (answer === "__return__" || answer === "__manual__") {
|
|
427
|
+
if (answer === "__manual__") {
|
|
428
|
+
return askRequiredMenuInput(rl, "请输入功能名称:");
|
|
429
|
+
}
|
|
402
430
|
return undefined;
|
|
403
431
|
}
|
|
404
432
|
return tasks[Number.parseInt(answer, 10)]?.featureName;
|
|
@@ -923,6 +951,27 @@ async function runInit(projectRoot, args = []) {
|
|
|
923
951
|
printOperations(result.operations);
|
|
924
952
|
return 0;
|
|
925
953
|
}
|
|
954
|
+
/**
|
|
955
|
+
* 本仓库开发后的本地刷新命令。
|
|
956
|
+
* 它先用空目标刷新受控入口、规则模板和 `.code-helper/skills`,避免顺带创建其他 agent 入口或安装 hooks;
|
|
957
|
+
* 再显式注册全部项目级 skills,保持 Codex、Claude Code 和 GitHub Copilot 看到的 skill 内容一致。
|
|
958
|
+
*/
|
|
959
|
+
async function runSyncLocal(projectRoot, args = []) {
|
|
960
|
+
if (args.length > 0) {
|
|
961
|
+
console.error("sync-local 不接受参数。用法:code-helper sync-local");
|
|
962
|
+
return 1;
|
|
963
|
+
}
|
|
964
|
+
const initializeResult = await initializeProject({ projectRoot, skillRegistrationTargets: [] });
|
|
965
|
+
await setFeatureEnabled(projectRoot, "skillRegistration", true);
|
|
966
|
+
const targets = listSupportedSkillRegistrationTargets();
|
|
967
|
+
const skillOperations = (await Promise.all(targets.map((target) => registerProjectSkills(projectRoot, target)))).flat();
|
|
968
|
+
const statuses = (await Promise.all(targets.map((target) => listProjectSkillRegistrations(projectRoot, target)))).flat();
|
|
969
|
+
const initializeOperations = initializeResult.operations.filter((operation) => !operation.message.includes("已跳过项目级 skills 注册")
|
|
970
|
+
&& !operation.message.includes("已跳过 Agent hooks 安装"));
|
|
971
|
+
printOperations([...initializeOperations, ...skillOperations]);
|
|
972
|
+
printSkillRegistrationStatus(statuses);
|
|
973
|
+
return 0;
|
|
974
|
+
}
|
|
926
975
|
/**
|
|
927
976
|
* 为 init 解析要应用的 agent 工具目标。
|
|
928
977
|
* 已有入口文件可以直接推断;完全无法判断时,交互终端让用户选择,非交互场景保守跳过。
|
|
@@ -934,10 +983,10 @@ async function resolveInitSkillRegistrationTargets(projectRoot) {
|
|
|
934
983
|
return inferredTargets;
|
|
935
984
|
}
|
|
936
985
|
if (canUseInteractiveKeys(input, output)) {
|
|
937
|
-
const result = await promptMultiSelect(input, output, "选择 init 要应用的 agent
|
|
986
|
+
const result = await promptMultiSelect(input, output, "选择 init 要应用的 agent 工具(默认选中 Codex,可用空格调整)", listSupportedSkillRegistrationTargets().map((target) => ({
|
|
938
987
|
value: target,
|
|
939
988
|
label: formatSkillRegistrationTargetName(target),
|
|
940
|
-
checked:
|
|
989
|
+
checked: target === "codex"
|
|
941
990
|
})));
|
|
942
991
|
const selectedTargets = result.cancelled
|
|
943
992
|
? []
|
|
@@ -1015,8 +1064,8 @@ function parseInitTargetSelection(value) {
|
|
|
1015
1064
|
* 检查命令实现。
|
|
1016
1065
|
* 存在 error 时返回 1,方便 CI 或 hook 使用。
|
|
1017
1066
|
*/
|
|
1018
|
-
async function runCheck(projectRoot) {
|
|
1019
|
-
const issues = await runChecks(projectRoot);
|
|
1067
|
+
async function runCheck(projectRoot, args = []) {
|
|
1068
|
+
const issues = await runChecks(projectRoot, { writeReport: args.includes("--write-report") });
|
|
1020
1069
|
if (issues.length === 0) {
|
|
1021
1070
|
console.log("code-helper check 通过:未发现协作文档结构问题。");
|
|
1022
1071
|
return 0;
|
|
@@ -1303,13 +1352,14 @@ async function runManualTest(projectRoot, args) {
|
|
|
1303
1352
|
* 参数:archive <功能名称>。
|
|
1304
1353
|
*/
|
|
1305
1354
|
async function runArchive(projectRoot, args) {
|
|
1306
|
-
const
|
|
1355
|
+
const flags = new Set(args.filter((arg) => arg.startsWith("--")));
|
|
1356
|
+
const rawFeatureName = args.find((arg) => !arg.startsWith("--"));
|
|
1307
1357
|
const featureName = rawFeatureName ?? await selectTaskFeatureNameForCommand(projectRoot, "选择要归档的任务", ["active", "mixed"]);
|
|
1308
1358
|
if (!featureName) {
|
|
1309
|
-
console.error("缺少功能名称。用法:code-helper archive <中文功能名>");
|
|
1359
|
+
console.error("缺少功能名称。用法:code-helper archive <中文功能名> [--resolve-mixed]");
|
|
1310
1360
|
return 1;
|
|
1311
1361
|
}
|
|
1312
|
-
printOperations(await archiveFeature(projectRoot, featureName));
|
|
1362
|
+
printOperations(await archiveFeature(projectRoot, featureName, { resolveMixed: flags.has("--resolve-mixed") }));
|
|
1313
1363
|
await runTasks(projectRoot, []);
|
|
1314
1364
|
return 0;
|
|
1315
1365
|
}
|
|
@@ -1463,6 +1513,11 @@ async function runHooks(projectRoot, args) {
|
|
|
1463
1513
|
return 0;
|
|
1464
1514
|
}
|
|
1465
1515
|
if (action === "install" || action === "uninstall") {
|
|
1516
|
+
if (rawTarget === undefined) {
|
|
1517
|
+
console.error(`缺少 hooks 目标。用法:code-helper hooks ${action} <git|codex|claudecode|agent|all>`);
|
|
1518
|
+
printHooksHelp();
|
|
1519
|
+
return 1;
|
|
1520
|
+
}
|
|
1466
1521
|
const targets = parseHookTargets(rawTarget);
|
|
1467
1522
|
const operations = [];
|
|
1468
1523
|
for (const target of targets) {
|
|
@@ -1521,6 +1576,16 @@ function printCompletionReview(review, checkOnly) {
|
|
|
1521
1576
|
console.log(`建议询问更新记忆:${review.shouldAskMemoryUpdate ? "是" : "否"}`);
|
|
1522
1577
|
console.log(`建议询问归档:${review.shouldAskArchive ? "是" : "否"}`);
|
|
1523
1578
|
console.log("");
|
|
1579
|
+
console.log("必须确认事项:");
|
|
1580
|
+
if (review.requiredConfirmations.length === 0) {
|
|
1581
|
+
console.log("- 无必须向用户确认的事项。");
|
|
1582
|
+
}
|
|
1583
|
+
else {
|
|
1584
|
+
review.requiredConfirmations.forEach((confirmation, index) => {
|
|
1585
|
+
console.log(`${index + 1}. ${confirmation}`);
|
|
1586
|
+
});
|
|
1587
|
+
}
|
|
1588
|
+
console.log("");
|
|
1524
1589
|
console.log("下一步建议:");
|
|
1525
1590
|
review.recommendations.forEach((recommendation, index) => {
|
|
1526
1591
|
console.log(`${index + 1}. ${recommendation}`);
|
|
@@ -1542,6 +1607,7 @@ function formatCompletionReviewStatus(status) {
|
|
|
1542
1607
|
blocked: "当前任务存在阻塞",
|
|
1543
1608
|
"node-review": "需要先补齐当前执行节点",
|
|
1544
1609
|
"ready-to-archive": "可在用户确认后归档",
|
|
1610
|
+
archived: "任务已归档,视为已结束",
|
|
1545
1611
|
"missing-docs": "缺少必要协作文档"
|
|
1546
1612
|
};
|
|
1547
1613
|
return labels[status];
|
|
@@ -1642,8 +1708,8 @@ function printSkillsHelp() {
|
|
|
1642
1708
|
function printHooksHelp() {
|
|
1643
1709
|
console.log("用法:");
|
|
1644
1710
|
console.log(" code-helper hooks list");
|
|
1645
|
-
console.log(" code-helper hooks install
|
|
1646
|
-
console.log(" code-helper hooks uninstall
|
|
1711
|
+
console.log(" code-helper hooks install <git|codex|claudecode|agent|all>");
|
|
1712
|
+
console.log(" code-helper hooks uninstall <git|codex|claudecode|agent|all>");
|
|
1647
1713
|
console.log("说明:hooks install 会直接应用对应 hook,并同步内部开关;init 只会安装选中 agent 对应的 Agent hooks,不会安装 Git hook。");
|
|
1648
1714
|
}
|
|
1649
1715
|
/**
|
|
@@ -1656,13 +1722,14 @@ function printHelp() {
|
|
|
1656
1722
|
用法:
|
|
1657
1723
|
code-helper 打开交互菜单
|
|
1658
1724
|
code-helper init [target] 初始化项目规则和工作区,可指定 all|codex|claudecode|githubcopilot
|
|
1659
|
-
code-helper
|
|
1725
|
+
code-helper sync-local 刷新本仓库本地模板并注册全部项目级 skills
|
|
1726
|
+
code-helper check [--write-report] 检查协作文档结构
|
|
1660
1727
|
code-helper features list 查看高级功能配置
|
|
1661
1728
|
code-helper features enable <key> 启用高级功能配置
|
|
1662
1729
|
code-helper features disable <key> 关闭高级功能配置
|
|
1663
1730
|
code-helper plan <需求文档> [中文功能名] 生成项目计划文档
|
|
1664
1731
|
code-helper manual-test <中文功能名> [标题] 生成页面手工测试文档
|
|
1665
|
-
code-helper archive <中文功能名>
|
|
1732
|
+
code-helper archive <中文功能名> [--resolve-mixed] 将功能文档移动到 archive 并识别为已结束
|
|
1666
1733
|
code-helper finish [中文功能名] 检查当前功能是否完成并提示后续动作
|
|
1667
1734
|
code-helper tasks [--json] 查看 active / archived / mixed 任务
|
|
1668
1735
|
code-helper skills list 查看项目级 skills 注册状态
|
|
@@ -1671,8 +1738,8 @@ function printHelp() {
|
|
|
1671
1738
|
code-helper skills doctor 检查项目级 skills 结构和质量
|
|
1672
1739
|
code-helper skills audit 根据项目状态给出 skills 建议
|
|
1673
1740
|
code-helper hooks list 查看 Git / Agent hooks 安装状态
|
|
1674
|
-
code-helper hooks install
|
|
1675
|
-
code-helper hooks uninstall
|
|
1741
|
+
code-helper hooks install <target> 安装 Git / Agent hooks
|
|
1742
|
+
code-helper hooks uninstall <target> 卸载 code-helper 管理的 hooks
|
|
1676
1743
|
`);
|
|
1677
1744
|
}
|
|
1678
1745
|
/**
|