cgraphx 2.0.0 → 2.0.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.en.md +1 -1
- package/README.md +1 -1
- package/dist/.claude-template/FLOW-MAP.md +7 -5
- package/dist/.claude-template/commands/end.md +1 -1
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +3 -2
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +6 -4
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +7 -4
- package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
- package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
- package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
- package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
- package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
- package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
- package/dist/cli/index.js +45 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installer/claude-assets.d.ts +1 -1
- package/dist/cli/installer/claude-assets.js +1 -1
- package/dist/cli/installer/index.d.ts +9 -11
- package/dist/cli/installer/index.d.ts.map +1 -1
- package/dist/cli/installer/index.js +14 -36
- package/dist/cli/installer/index.js.map +1 -1
- package/dist/cli/installer/targets/claude.d.ts +4 -20
- package/dist/cli/installer/targets/claude.d.ts.map +1 -1
- package/dist/cli/installer/targets/claude.js +42 -125
- package/dist/cli/installer/targets/claude.js.map +1 -1
- package/dist/cli/installer/targets/types.d.ts +9 -10
- package/dist/cli/installer/targets/types.d.ts.map +1 -1
- package/dist/cli/installer/targets/types.js +3 -4
- package/dist/cli/installer/targets/types.js.map +1 -1
- package/dist/cli/upgrade/index.d.ts +73 -5
- package/dist/cli/upgrade/index.d.ts.map +1 -1
- package/dist/cli/upgrade/index.js +178 -40
- package/dist/cli/upgrade/index.js.map +1 -1
- package/dist/core/features/scanner.d.ts +2 -0
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +27 -6
- package/dist/core/features/scanner.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/upgrade/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/upgrade/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* `cgraphx upgrade` — npm-only self-update.
|
|
3
|
+
* `cgraphx upgrade` — npm-only self-update + project refresh.
|
|
4
4
|
*
|
|
5
5
|
* cgraphx ships as an npm package, so the single supported download channel is
|
|
6
6
|
* the npm registry: upgrading shells out to `npm install -g cgraphx@<ver>`.
|
|
@@ -11,8 +11,17 @@
|
|
|
11
11
|
* Detection (`detectInstallMethod`) only distinguishes what matters here:
|
|
12
12
|
* - **npm** — installed via `npm i -g cgraphx` (or a local `npm i`); the
|
|
13
13
|
* upgrade performs `npm install -g cgraphx@<ver>`.
|
|
14
|
-
* - **npx** — ephemeral; nothing to
|
|
14
|
+
* - **npx** — ephemeral; nothing to pull (next `npx` fetches latest).
|
|
15
15
|
* - **other** — source checkout / anything else; guided back to npm.
|
|
16
|
+
*
|
|
17
|
+
* Since 2.0.x, `upgrade` is meant to be run INSIDE a project directory: after
|
|
18
|
+
* the package pull it automatically refreshes the project by running `install`
|
|
19
|
+
* with the freshly-installed CLI (`node <fresh-entry> install -y`), so one
|
|
20
|
+
* command brings both the CLI and the current project up to date. Guards:
|
|
21
|
+
* unsafe roots ($HOME / filesystem root) skip the install with a warning; a
|
|
22
|
+
* directory with no `.cgraphx/` / `.claude/` asks for confirmation first
|
|
23
|
+
* (non-interactive stdin declines); `--no-install` restores the old
|
|
24
|
+
* package-only behavior.
|
|
16
25
|
*/
|
|
17
26
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
27
|
if (k2 === undefined) k2 = k;
|
|
@@ -56,9 +65,11 @@ exports.isUpdateAvailable = isUpdateAvailable;
|
|
|
56
65
|
exports.normalizeVersion = normalizeVersion;
|
|
57
66
|
exports.stripV = stripV;
|
|
58
67
|
exports.resolveLatestVersion = resolveLatestVersion;
|
|
59
|
-
exports.
|
|
68
|
+
exports.resolveNpmGlobalRoot = resolveNpmGlobalRoot;
|
|
69
|
+
exports.planProjectInstall = planProjectInstall;
|
|
60
70
|
exports.runUpgrade = runUpgrade;
|
|
61
71
|
exports.defaultRun = defaultRun;
|
|
72
|
+
exports.defaultRunInstall = defaultRunInstall;
|
|
62
73
|
const path = __importStar(require("path"));
|
|
63
74
|
const child_process_1 = require("child_process");
|
|
64
75
|
exports.NPM_PACKAGE = 'cgraphx';
|
|
@@ -136,6 +147,19 @@ function stripV(v) {
|
|
|
136
147
|
return t.startsWith('v') ? t.slice(1) : t;
|
|
137
148
|
}
|
|
138
149
|
// ---------------------------------------------------------------------------
|
|
150
|
+
// Windows spawn quirk
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
/**
|
|
153
|
+
* Since the April-2024 security fix (CVE-2024-27980, Node ≥ 20.12), spawning
|
|
154
|
+
* a `.bat`/`.cmd` file WITHOUT `shell: true` throws EINVAL on Windows.
|
|
155
|
+
* `npm` / `npx` resolve to `npm.cmd` / `npx.cmd` there, so every spawn of
|
|
156
|
+
* them needs the shell. All arg vectors involved are hard-coded (no user
|
|
157
|
+
* input), so `shell: true` carries no injection risk here.
|
|
158
|
+
*/
|
|
159
|
+
function needsShell(cmd) {
|
|
160
|
+
return process.platform === 'win32' && /\.(cmd|bat)$/i.test(cmd);
|
|
161
|
+
}
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
139
163
|
// Latest-version resolution (npm registry)
|
|
140
164
|
// ---------------------------------------------------------------------------
|
|
141
165
|
/**
|
|
@@ -146,13 +170,66 @@ function stripV(v) {
|
|
|
146
170
|
*/
|
|
147
171
|
async function resolveLatestVersion() {
|
|
148
172
|
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
149
|
-
const r = (0, child_process_1.spawnSync)(npm, ['view', exports.NPM_PACKAGE, 'version'], {
|
|
173
|
+
const r = (0, child_process_1.spawnSync)(npm, ['view', exports.NPM_PACKAGE, 'version'], {
|
|
174
|
+
encoding: 'utf-8',
|
|
175
|
+
shell: needsShell(npm),
|
|
176
|
+
});
|
|
150
177
|
const version = (r.stdout ?? '').trim();
|
|
151
178
|
if (r.status !== 0 || !/^\d+\.\d+\.\d+/.test(version)) {
|
|
152
179
|
throw new Error('could not resolve the latest version from npm. Check your network / registry, or pin a version: `cgraphx upgrade <version>`.');
|
|
153
180
|
}
|
|
154
181
|
return normalizeVersion(version);
|
|
155
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* The global npm `node_modules` root (`npm root -g`) — where a global
|
|
185
|
+
* `npm install -g cgraphx@…` puts the fresh package. Returns null when npm
|
|
186
|
+
* can't answer (non-zero exit / blank output); callers degrade to a
|
|
187
|
+
* "run `cgraphx install` yourself" hint rather than guessing.
|
|
188
|
+
*/
|
|
189
|
+
function resolveNpmGlobalRoot(platform) {
|
|
190
|
+
const npm = platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
191
|
+
const r = (0, child_process_1.spawnSync)(npm, ['root', '-g'], {
|
|
192
|
+
encoding: 'utf-8',
|
|
193
|
+
shell: platform === 'win32' && needsShell(npm),
|
|
194
|
+
});
|
|
195
|
+
if (r.status !== 0)
|
|
196
|
+
return null;
|
|
197
|
+
const root = (r.stdout ?? '').split(/\r?\n/).find((l) => l.trim().length > 0)?.trim();
|
|
198
|
+
return root ? root : null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Decide how to run the project `install` after the upgrade. The install must
|
|
202
|
+
* run from the FRESH package (its bundled `.claude-template/` assets are what
|
|
203
|
+
* we're refreshing to), so after a pull we point at the just-installed entry:
|
|
204
|
+
*
|
|
205
|
+
* - npm global → `<npm root -g>/cgraphx/dist/cli/index.js`
|
|
206
|
+
* - npm local → `<projectRoot>/node_modules/cgraphx/dist/cli/index.js`
|
|
207
|
+
*
|
|
208
|
+
* When no pull happened (already up to date) — and always for npx, whose
|
|
209
|
+
* running process IS the fetched package — the current entry is the right one.
|
|
210
|
+
* `other` (source checkout) has no supported automatic path.
|
|
211
|
+
*/
|
|
212
|
+
function planProjectInstall(input) {
|
|
213
|
+
const { method } = input;
|
|
214
|
+
if (method.kind === 'other') {
|
|
215
|
+
return { unavailable: method.reason };
|
|
216
|
+
}
|
|
217
|
+
if (!input.pulled || method.kind === 'npx') {
|
|
218
|
+
return {
|
|
219
|
+
cmd: input.nodeExecPath,
|
|
220
|
+
args: [input.currentCliEntry, 'install', '-y'],
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
if (method.scope === 'local') {
|
|
224
|
+
const entry = path.join(input.projectRoot, 'node_modules', exports.NPM_PACKAGE, 'dist', 'cli', 'index.js');
|
|
225
|
+
return { cmd: input.nodeExecPath, args: [entry, 'install', '-y'] };
|
|
226
|
+
}
|
|
227
|
+
if (!input.npmGlobalRoot) {
|
|
228
|
+
return { unavailable: 'could not resolve the npm global root (`npm root -g` failed)' };
|
|
229
|
+
}
|
|
230
|
+
const entry = path.join(input.npmGlobalRoot, exports.NPM_PACKAGE, 'dist', 'cli', 'index.js');
|
|
231
|
+
return { cmd: input.nodeExecPath, args: [entry, 'install', '-y'] };
|
|
232
|
+
}
|
|
156
233
|
const c = {
|
|
157
234
|
bold: (s) => `\x1b[1m${s}\x1b[0m`,
|
|
158
235
|
dim: (s) => `\x1b[2m${s}\x1b[0m`,
|
|
@@ -160,17 +237,6 @@ const c = {
|
|
|
160
237
|
yellow: (s) => `\x1b[33m${s}\x1b[0m`,
|
|
161
238
|
cyan: (s) => `\x1b[36m${s}\x1b[0m`,
|
|
162
239
|
};
|
|
163
|
-
/** The honest, additive reminder shown after a successful upgrade. */
|
|
164
|
-
function reindexAdvisory() {
|
|
165
|
-
// upgrade is a pure binary swap — it touches no project's `.claude/` config
|
|
166
|
-
// or `.cgraphx/` data. To pick up this version's skills / hooks / workflow
|
|
167
|
-
// guidance (and any markdown-parser improvements), re-run install per project.
|
|
168
|
-
return [
|
|
169
|
-
c.dim('upgrade 只更新了 CLI 本体,没有改动任何项目的配置。'),
|
|
170
|
-
c.dim('要让各项目用上这一版的 skills / hooks / 工作方式与解析改进,请到项目内重跑:'),
|
|
171
|
-
` ${c.cyan('cgraphx install')} ${c.dim('# 刷新 .claude/ skills、配置与 .claude/CLAUDE.md')}`,
|
|
172
|
-
].join('\n');
|
|
173
|
-
}
|
|
174
240
|
/**
|
|
175
241
|
* Returns the process exit code (0 = success / nothing to do, 1 = failure).
|
|
176
242
|
*/
|
|
@@ -191,39 +257,98 @@ async function runUpgrade(opts, deps) {
|
|
|
191
257
|
if (opts.check) {
|
|
192
258
|
if (updateAvailable) {
|
|
193
259
|
deps.log(c.yellow(`An update is available: ${currentDisplay} → ${latest}`));
|
|
194
|
-
deps.log(c.dim('Run `cgraphx upgrade` to install it.'));
|
|
260
|
+
deps.log(c.dim('Run `cgraphx upgrade` inside a project directory to install it and refresh the project.'));
|
|
195
261
|
}
|
|
196
262
|
else {
|
|
197
263
|
deps.log(c.green(`You’re on the latest version (${currentDisplay}).`));
|
|
198
264
|
}
|
|
199
265
|
return 0;
|
|
200
266
|
}
|
|
267
|
+
// -------------------------------------------------------------------------
|
|
268
|
+
// Step 1: pull the package (unless already up to date and not forced/pinned).
|
|
269
|
+
// -------------------------------------------------------------------------
|
|
270
|
+
let pulled = false;
|
|
201
271
|
if (!updateAvailable && !opts.force && !opts.version) {
|
|
202
272
|
deps.log(c.green(`Already up to date (${currentDisplay}).`));
|
|
203
|
-
deps.log(c.dim('Use `--force` to reinstall, or `cgraphx upgrade <version>` to change versions.'));
|
|
204
|
-
return 0;
|
|
205
273
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
274
|
+
else {
|
|
275
|
+
switch (method.kind) {
|
|
276
|
+
case 'npm': {
|
|
277
|
+
// npm version specs have no leading "v" (`@0.9.8`, not `@v0.9.8` — the
|
|
278
|
+
// latter resolves as a nonexistent dist-tag).
|
|
279
|
+
const code = upgradeNpm(method, opts.version ? stripV(latest) : 'latest', deps);
|
|
280
|
+
if (code !== 0)
|
|
281
|
+
return code;
|
|
282
|
+
pulled = true;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
case 'npx':
|
|
286
|
+
// npx fetched this CLI on demand — there is nothing to pull; the
|
|
287
|
+
// running process is the version the project gets refreshed with.
|
|
288
|
+
deps.log(c.dim('npx fetches on demand — nothing to pull.'));
|
|
289
|
+
break;
|
|
290
|
+
default:
|
|
291
|
+
deps.warn(`This cgraphx isn't an npm install (${method.reason}).`);
|
|
292
|
+
deps.log(c.dim(`Install / upgrade via npm: npm install -g ${exports.NPM_PACKAGE}@latest`));
|
|
293
|
+
deps.log(c.dim('(Running from a source checkout? `git pull && npm run build`, then `cgraphx install` in each project.)'));
|
|
294
|
+
return 0;
|
|
216
295
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
296
|
+
}
|
|
297
|
+
// -------------------------------------------------------------------------
|
|
298
|
+
// Step 2: refresh the current project (`install -y` with the fresh CLI).
|
|
299
|
+
// -------------------------------------------------------------------------
|
|
300
|
+
if (opts.install === false) {
|
|
301
|
+
deps.log(c.dim('Skipped the project refresh (--no-install). Run `cgraphx install` inside each project to update its skills / hooks.'));
|
|
302
|
+
return 0;
|
|
303
|
+
}
|
|
304
|
+
return runProjectInstallStep(deps, pulled);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The project-refresh half of upgrade. Exit codes: 0 = refreshed, or skipped
|
|
308
|
+
* for an advisory reason (unsafe root / declined / unresolvable entry) — the
|
|
309
|
+
* CLI update itself succeeded either way; 1 = the install was attempted and
|
|
310
|
+
* failed.
|
|
311
|
+
*/
|
|
312
|
+
async function runProjectInstallStep(deps, pulled) {
|
|
313
|
+
const { projectRoot } = deps;
|
|
314
|
+
const unsafeReason = deps.unsafeRootReason(projectRoot);
|
|
315
|
+
if (unsafeReason) {
|
|
316
|
+
deps.warn(`Skipped the project refresh: the current directory looks like ${unsafeReason}.`);
|
|
317
|
+
deps.log(c.dim('Run `cgraphx install` inside a real project root to refresh its .claude/ skills and hooks.'));
|
|
318
|
+
return 0;
|
|
319
|
+
}
|
|
320
|
+
if (!deps.projectMarkerPresent(projectRoot)) {
|
|
321
|
+
const ok = await deps.confirmInstall('当前目录没有 .cgraphx/ 或 .claude/,不像是已接入 cgraphx 的项目根目录。install 会在此目录创建它们——确认继续?(建议 cd 到项目根目录再跑 `cgraphx upgrade`)');
|
|
322
|
+
if (!ok) {
|
|
323
|
+
deps.log(c.dim('Skipped the project refresh. Run `cgraphx install` inside your project when ready.'));
|
|
225
324
|
return 0;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const globalRoot = pulled && deps.method.kind === 'npm' && deps.method.scope === 'global'
|
|
328
|
+
? deps.npmGlobalRoot()
|
|
329
|
+
: null;
|
|
330
|
+
const plan = planProjectInstall({
|
|
331
|
+
method: deps.method,
|
|
332
|
+
pulled,
|
|
333
|
+
projectRoot,
|
|
334
|
+
currentCliEntry: deps.currentCliEntry,
|
|
335
|
+
nodeExecPath: deps.nodeExecPath,
|
|
336
|
+
npmGlobalRoot: globalRoot,
|
|
337
|
+
});
|
|
338
|
+
if ('unavailable' in plan) {
|
|
339
|
+
deps.warn(`Couldn't auto-run the project install (${plan.unavailable}).`);
|
|
340
|
+
deps.log(c.dim('Run `cgraphx install` inside the project to refresh it.'));
|
|
341
|
+
return 0;
|
|
342
|
+
}
|
|
343
|
+
deps.log('');
|
|
344
|
+
deps.log(c.bold(`Refreshing project install in ${projectRoot} ...`));
|
|
345
|
+
const code = deps.runInstall(plan.cmd, plan.args, projectRoot);
|
|
346
|
+
if (code !== 0) {
|
|
347
|
+
deps.error(`CLI 更新成功,但项目 install 失败(exit ${code})——请到项目内手动重跑 \`cgraphx install\`。`);
|
|
348
|
+
return 1;
|
|
226
349
|
}
|
|
350
|
+
deps.log(c.green('✓ 完成——CLI 与当前项目都已对齐到当前版本。重启 agent 以加载新技能。'));
|
|
351
|
+
return 0;
|
|
227
352
|
}
|
|
228
353
|
function upgradeNpm(method, versionSpec, deps) {
|
|
229
354
|
const npm = deps.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
@@ -240,16 +365,29 @@ function upgradeNpm(method, versionSpec, deps) {
|
|
|
240
365
|
}
|
|
241
366
|
return 1;
|
|
242
367
|
}
|
|
243
|
-
deps.log('');
|
|
244
|
-
deps.log(c.green('✓ Upgrade complete.'));
|
|
245
|
-
deps.log(reindexAdvisory());
|
|
368
|
+
deps.log(c.green('✓ Package updated.'));
|
|
246
369
|
return 0;
|
|
247
370
|
}
|
|
248
371
|
// ---------------------------------------------------------------------------
|
|
249
372
|
// Production deps wiring (used by the CLI)
|
|
250
373
|
// ---------------------------------------------------------------------------
|
|
251
374
|
function defaultRun(cmd, args, env) {
|
|
252
|
-
const r = (0, child_process_1.spawnSync)(cmd, args, {
|
|
375
|
+
const r = (0, child_process_1.spawnSync)(cmd, args, {
|
|
376
|
+
stdio: 'inherit',
|
|
377
|
+
env: env ?? process.env,
|
|
378
|
+
shell: needsShell(cmd),
|
|
379
|
+
});
|
|
380
|
+
if (r.error)
|
|
381
|
+
return -1;
|
|
382
|
+
return r.status ?? -1;
|
|
383
|
+
}
|
|
384
|
+
/** Like `defaultRun`, but pinned to the project directory being refreshed. */
|
|
385
|
+
function defaultRunInstall(cmd, args, cwd) {
|
|
386
|
+
const r = (0, child_process_1.spawnSync)(cmd, args, {
|
|
387
|
+
stdio: 'inherit',
|
|
388
|
+
cwd,
|
|
389
|
+
shell: needsShell(cmd),
|
|
390
|
+
});
|
|
253
391
|
if (r.error)
|
|
254
392
|
return -1;
|
|
255
393
|
return r.status ?? -1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/upgrade/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/upgrade/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 单一职责:把 <project>/docs/features/ 下的每个子目录解析成一个
|
|
5
5
|
* FeatureEntry。头部元数据(负责人/日期)优先级:spec 文件头部 > plan/index 头部 > 目录名。
|
|
6
|
+
* spec 候选按主 spec 优先(文件长度升序)遍历,取第一个头部读出负责人的——
|
|
7
|
+
* 避免派生 spec(api-spec/单元测试-spec)遮蔽主 spec 导致负责人丢失。
|
|
6
8
|
*
|
|
7
9
|
* 头部行约定(与 write-spec / write-plan 的产物头部一致):
|
|
8
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/core/features/scanner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/core/features/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAE1D,kBAAkB;AAClB,eAAO,MAAM,YAAY,QAAgC,CAAC;AAyH1D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAsChE"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* 单一职责:把 <project>/docs/features/ 下的每个子目录解析成一个
|
|
6
6
|
* FeatureEntry。头部元数据(负责人/日期)优先级:spec 文件头部 > plan/index 头部 > 目录名。
|
|
7
|
+
* spec 候选按主 spec 优先(文件长度升序)遍历,取第一个头部读出负责人的——
|
|
8
|
+
* 避免派生 spec(api-spec/单元测试-spec)遮蔽主 spec 导致负责人丢失。
|
|
7
9
|
*
|
|
8
10
|
* 头部行约定(与 write-spec / write-plan 的产物头部一致):
|
|
9
11
|
*
|
|
@@ -96,9 +98,21 @@ function hasPlanIndex(featureDir) {
|
|
|
96
98
|
return false;
|
|
97
99
|
}
|
|
98
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* spec 候选排序:主 spec 优先。主 spec `<前缀>-spec.md`(或 `spec.md`)恒短于
|
|
103
|
+
* 同前缀的派生 spec(`<前缀>-api-spec.md` / `<前缀>-单元测试-spec.md`,文件名多一段),
|
|
104
|
+
* 按「长度升序、同名再按字典序」排,主 spec 必排最前。
|
|
105
|
+
*/
|
|
106
|
+
function compareSpecCandidates(a, b) {
|
|
107
|
+
return a.length - b.length || a.localeCompare(b);
|
|
108
|
+
}
|
|
99
109
|
/**
|
|
100
110
|
* 在一个 feature 目录里找元数据文件(读 负责人/日期 用):先 *-spec.md(或 spec.md),
|
|
101
111
|
* 再 plan/*-index.md(或 plan/index.md)。都没有 → null(仅目录名可解析)。
|
|
112
|
+
*
|
|
113
|
+
* spec 候选按主 spec 优先遍历,取第一个头部读出负责人的——主 spec 头部残缺时
|
|
114
|
+
* 仍可能从其他候选读出,且派生 spec 不再遮蔽主 spec(api-spec 的 'a' 字典序
|
|
115
|
+
* 曾排在主 spec 的 's' 前,导致负责人恒丢失)。
|
|
102
116
|
*/
|
|
103
117
|
function findMetaFile(featureDir) {
|
|
104
118
|
let entries;
|
|
@@ -108,17 +122,24 @@ function findMetaFile(featureDir) {
|
|
|
108
122
|
catch {
|
|
109
123
|
return null;
|
|
110
124
|
}
|
|
111
|
-
const
|
|
125
|
+
const specs = entries
|
|
112
126
|
.filter((n) => n.endsWith('-spec.md') || n === 'spec.md')
|
|
113
|
-
.sort()
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
127
|
+
.sort(compareSpecCandidates);
|
|
128
|
+
let mainSpec = null;
|
|
129
|
+
for (const name of specs) {
|
|
130
|
+
const file = path.join(featureDir, name);
|
|
131
|
+
if (mainSpec === null)
|
|
132
|
+
mainSpec = file;
|
|
133
|
+
if (readHeaderMeta(file).owner !== null)
|
|
134
|
+
return file;
|
|
135
|
+
}
|
|
136
|
+
if (mainSpec !== null)
|
|
137
|
+
return mainSpec;
|
|
117
138
|
try {
|
|
118
139
|
const planEntries = fs.readdirSync(path.join(featureDir, 'plan'));
|
|
119
140
|
const index = planEntries
|
|
120
141
|
.filter((n) => n.endsWith('-index.md') || n === 'index.md')
|
|
121
|
-
.sort()[0];
|
|
142
|
+
.sort(compareSpecCandidates)[0];
|
|
122
143
|
if (index) {
|
|
123
144
|
return path.join(featureDir, 'plan', index);
|
|
124
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/core/features/scanner.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/core/features/scanner.ts"],"names":[],"mappings":"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"}
|