speccore 8.3.231 → 8.3.232
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/.agents/skills/spec-ask/SKILL.md +2 -1
- package/.agents/skills/spec-unitize/SKILL.md +18 -0
- package/.agents/skills/speccore-router/SKILL.md +11 -1
- package/dist/commands/unitize.d.ts.map +1 -1
- package/dist/commands/unitize.js +6 -0
- package/dist/commands/unitize.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,8 @@ name: spec-ask
|
|
|
3
3
|
description: >
|
|
4
4
|
SpecCore CLI 执行引擎。仅在用户明确要求通过 speccore 命令行工具执行以下操作时触发:
|
|
5
5
|
- analyze --prompt:生成迭代级/全局级 Spec 分析文档(ANALYSIS.md、TECH.md 等),不是单纯解释代码
|
|
6
|
-
- split
|
|
6
|
+
- unitize:切分需求文档为功能单元(features/,原 doc2spec --split)
|
|
7
|
+
- taskify:将功能单元拆分为开发任务并写入迭代目录(原 split)
|
|
7
8
|
- plan --prompt:制定执行计划并写入 Task 目录
|
|
8
9
|
- execute --prompt:执行开发任务并生成代码
|
|
9
10
|
- doc2spec:导入 PRD/Word 文档到迭代目录
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-unitize
|
|
3
|
+
description: >
|
|
4
|
+
SpecCore 切分需求专属 Skill。仅在用户明确提到 speccore、迭代、期次、Spec、
|
|
5
|
+
/unitize 等关键词,或明确要求通过 speccore 切分需求文档为功能单元(unitize)时使用。
|
|
6
|
+
在调用 speccore ask 之前,执行参数提取、前置校验(输入文件格式:.md 可直接切、
|
|
7
|
+
.docx/.pdf 需先 doc2spec 转换;端名须与 CONSTITUTION.md 端列表一致;
|
|
8
|
+
features/ 已有同名单元时重切会覆盖旧切片;多文档可批量 --files "a.md=端1,b.md"),
|
|
9
|
+
参数缺失时输出交互式提示(参数说明 + 使用示例)。
|
|
10
|
+
不处理一般性的"切分/拆分"讨论(如"帮我切一下这段文本"),只处理 speccore 上下文中的切分。
|
|
11
|
+
与 spec-taskify 的区别:unitize 切需求(文档→功能单元 features/),taskify 拆任务(功能单元→开发任务 Task-*)。
|
|
12
|
+
allowed-tools: ["Bash", "Read"]
|
|
13
|
+
disable-model-invocation: false
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
直接执行: execute_command("speccore ask '用户原话'")
|
|
17
|
+
|
|
18
|
+
不要输出命令文本,不要分析意图,一切交给 speccore ask。
|
|
@@ -3,7 +3,7 @@ name: speccore-router
|
|
|
3
3
|
description: >
|
|
4
4
|
SpecCore CLI 命令路由器。仅在用户明确提到 speccore、迭代、期次、Spec 等关键词,
|
|
5
5
|
或明确要求通过 speccore 命令行工具执行操作,且意图涉及以下概念时使用:
|
|
6
|
-
迭代管理、需求文档导入(doc2spec)、Spec 分析生成(analyze --prompt)、
|
|
6
|
+
迭代管理、需求文档导入(doc2spec)、需求切分(unitize)、Spec 分析生成(analyze --prompt)、
|
|
7
7
|
任务拆分(taskify)、执行计划(plan --prompt)、代码执行(execute --prompt)、
|
|
8
8
|
任务归档(done)、PR 提交(pr)、状态查看(status/dashboard/doctor)、智能级联(dev)。
|
|
9
9
|
将用户意图映射为 speccore CLI 命令,通过 execute_command 执行。
|
|
@@ -176,6 +176,15 @@ allowed-tools: ["Bash", "Read", "Write", "Edit"]
|
|
|
176
176
|
| 分析这个 PRD 文档 | file | **激活 spec-doc2spec Skill → 完整AI+Pandoc流程** |
|
|
177
177
|
| 帮我看看这个需求文档 | file | **激活 spec-doc2spec Skill** |
|
|
178
178
|
|
|
179
|
+
### 功能单元切分(unitize — 需求文档→功能单元)
|
|
180
|
+
| 用户说法 | 提取参数 | CLI 命令 / 行为 |
|
|
181
|
+
| :--- | :--- | :--- |
|
|
182
|
+
| 切分功能单元 / 单元化 | file?, iter? | **激活 spec-unitize Skill** |
|
|
183
|
+
| 切分需求文档 {file} | file, iter? | `speccore unitize --file {file} --iter {iter}` |
|
|
184
|
+
| 切分 {file}(.md)到 {iter} | file, iter | `speccore unitize --file {file} --iter {iter}` |
|
|
185
|
+
| 批量切分 {files} | files="a.md=端1,b.md" | `speccore unitize --files "{files}" --iter {iter}` |
|
|
186
|
+
| 切分 {file}(.docx/.pdf) | file | 先 `speccore doc2spec -f {file}` 转换再 unitize |
|
|
187
|
+
|
|
179
188
|
### 文档导出(spec2doc — AI排版)
|
|
180
189
|
| 用户说法 | 提取参数 | CLI 命令 / 行为 |
|
|
181
190
|
| :--- | :--- | :--- |
|
|
@@ -428,6 +437,7 @@ allowed-tools: ["Bash", "Read", "Write", "Edit"]
|
|
|
428
437
|
| 用户意图 | --prompt 命令 | --apply/--response |
|
|
429
438
|
| :--- | :--- | :--- |
|
|
430
439
|
| 导入需求 {file} | `speccore doc2spec --prompt -f {file}` | `--response '...'` |
|
|
440
|
+
| 切分功能单元 {file} | `speccore unitize --file {file} -I {iter}` | 直接执行(本地规则+AI 双路) |
|
|
431
441
|
| 分析 {iter} | `speccore analyze --prompt -I {iter}` | `--apply '...'` |
|
|
432
442
|
| 拆分 {iter} | `speccore iteration taskify --prompt -I {iter}` | `--response '...'` |
|
|
433
443
|
| 生成计划 {iter} | `speccore plan --prompt -I {iter}` | `--response '...'` |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unitize.d.ts","sourceRoot":"","sources":["../../src/commands/unitize.ts"],"names":[],"mappings":"AAiBA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"unitize.d.ts","sourceRoot":"","sources":["../../src/commands/unitize.ts"],"names":[],"mappings":"AAiBA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgCD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC3E"}
|
package/dist/commands/unitize.js
CHANGED
|
@@ -32,6 +32,12 @@ async function unitizeSingle(file, platform, iterName) {
|
|
|
32
32
|
logger_1.logger.error(`文件不存在: ${file}`);
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
+
// v8.3.232+: 非 Markdown 直接报错指路(unitize 只切 .md;docx/pdf 需先 doc2spec 转换)
|
|
36
|
+
if (!/\.md$/i.test(file)) {
|
|
37
|
+
logger_1.logger.error(`unitize 只切分 Markdown: ${(0, path_1.basename)(file)}`);
|
|
38
|
+
logger_1.logger.info(` 💡 请先转换: speccore doc2spec --file=${file} --iter=${iterName}`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
35
41
|
const iterDir = `Iteration-${iterName.replace(/^Iteration-/, '')}`;
|
|
36
42
|
if (!(await (0, fs_extra_1.pathExists)(iterDir))) {
|
|
37
43
|
logger_1.logger.error(`迭代目录不存在: ${iterDir}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unitize.js","sourceRoot":"","sources":["../../src/commands/unitize.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"unitize.js","sourceRoot":"","sources":["../../src/commands/unitize.ts"],"names":[],"mappings":"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"}
|