@specpow/framework 0.6.1 → 0.8.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 (46) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/builtin/skills/execution-sdd-orchestrator/SKILL.md +18 -18
  3. package/builtin/skills/execution-subagent-dispatch/SKILL.md +9 -9
  4. package/builtin/skills/planning-apply-change/SKILL.md +1 -1
  5. package/builtin/skills/planning-explore/SKILL.md +1 -1
  6. package/builtin/skills/using-specpow/SKILL.md +3 -3
  7. package/dist/cli/index.js +1 -1
  8. package/dist/commands/apply.d.ts.map +1 -1
  9. package/dist/commands/apply.js +7 -5
  10. package/dist/commands/apply.js.map +1 -1
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +64 -0
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/execute.d.ts.map +1 -1
  15. package/dist/commands/execute.js +3 -2
  16. package/dist/commands/execute.js.map +1 -1
  17. package/dist/commands/status.d.ts.map +1 -1
  18. package/dist/commands/status.js +2 -1
  19. package/dist/commands/status.js.map +1 -1
  20. package/dist/commands/workflow/index.d.ts.map +1 -1
  21. package/dist/commands/workflow/index.js +2 -1
  22. package/dist/commands/workflow/index.js.map +1 -1
  23. package/dist/core/archive/delta-merger.d.ts +6 -1
  24. package/dist/core/archive/delta-merger.d.ts.map +1 -1
  25. package/dist/core/archive/delta-merger.js +23 -10
  26. package/dist/core/archive/delta-merger.js.map +1 -1
  27. package/dist/core/archive/engine.d.ts.map +1 -1
  28. package/dist/core/archive/engine.js +53 -5
  29. package/dist/core/archive/engine.js.map +1 -1
  30. package/dist/core/config/config-schema.d.ts +96 -0
  31. package/dist/core/config/config-schema.d.ts.map +1 -1
  32. package/dist/core/config/config-schema.js +9 -1
  33. package/dist/core/config/config-schema.js.map +1 -1
  34. package/dist/core/migration/index.d.ts.map +1 -1
  35. package/dist/core/migration/index.js +128 -2
  36. package/dist/core/migration/index.js.map +1 -1
  37. package/dist/core/workspace/change-workspace.d.ts +59 -0
  38. package/dist/core/workspace/change-workspace.d.ts.map +1 -0
  39. package/dist/core/workspace/change-workspace.js +75 -0
  40. package/dist/core/workspace/change-workspace.js.map +1 -0
  41. package/dist/core/workspace/index.d.ts +6 -0
  42. package/dist/core/workspace/index.d.ts.map +1 -0
  43. package/dist/core/workspace/index.js +5 -0
  44. package/dist/core/workspace/index.js.map +1 -0
  45. package/dist/templates/claude-commands/specpow-mes.md +45 -0
  46. package/package.json +1 -1
@@ -0,0 +1,75 @@
1
+ /**
2
+ * ChangeWorkspace — 变更产物路径的唯一真相源
3
+ *
4
+ * ADR-001:一个变更 = 一个目录。
5
+ * SDD 工作区固定为变更目录下的子目录 `<changesDir>/<change>/<sddSubdir>/`,
6
+ * `sddSubdir` 由 `config.sdd.workspaceDir` 决定,默认 `sdd`。
7
+ *
8
+ * 归档 / 回滚 / 清理等操作一律通过 `artifacts()` 清单驱动,
9
+ * 新增产物类型只需在此注册,无需修改归档逻辑(ADR-002)。
10
+ */
11
+ import { existsSync } from 'fs';
12
+ import { join } from 'path';
13
+ /** 产物标识常量 */
14
+ export const CHANGE_ROOT_ARTIFACT = 'change-root';
15
+ export const LEGACY_SDD_ARTIFACT = 'legacy-sdd';
16
+ /** 遗留外部 SDD 账本根目录(相对项目根) */
17
+ export const LEGACY_SDD_ROOT = '.specpow/sdd';
18
+ /**
19
+ * 解析变更目录内的 SDD 子目录名。
20
+ *
21
+ * - 旧格式(以 `.specpow` 开头,如 `.specpow/changes`)→ 回退为 `sdd`(遗留兼容)
22
+ * - `.` → 表示 SDD 工件直接位于变更目录根部
23
+ * - 其它含路径分隔符的值无法作为子目录名 → 回退默认 `sdd`
24
+ * - 普通子目录名 → 原样使用
25
+ */
26
+ export function resolveSddSubdir(workspaceDir) {
27
+ const raw = (workspaceDir ?? '').trim();
28
+ if (!raw)
29
+ return 'sdd';
30
+ if (raw === '.')
31
+ return '.';
32
+ if (raw.startsWith('.specpow'))
33
+ return 'sdd';
34
+ if (raw.includes('/') || raw.includes('\\'))
35
+ return 'sdd';
36
+ return raw;
37
+ }
38
+ /**
39
+ * 创建变更工作区视图。
40
+ *
41
+ * @param projectRoot - 项目根目录(绝对路径)
42
+ * @param changeName - 变更名称
43
+ * @param config - 全局配置
44
+ */
45
+ export function createChangeWorkspace(projectRoot, changeName, config) {
46
+ const changesDir = config.paths.changesDir;
47
+ const root = join(projectRoot, changesDir, changeName);
48
+ const sddSubdir = resolveSddSubdir(config.sdd?.workspaceDir);
49
+ const sddDir = sddSubdir === '.' ? root : join(root, sddSubdir);
50
+ const ledgerPath = join(sddDir, 'progress.md');
51
+ const legacyDir = join(projectRoot, LEGACY_SDD_ROOT, changeName);
52
+ return {
53
+ changeName,
54
+ root,
55
+ sddSubdir,
56
+ sddDir,
57
+ ledgerPath,
58
+ artifacts() {
59
+ const list = [
60
+ { id: CHANGE_ROOT_ARTIFACT, path: root, required: true },
61
+ ];
62
+ if (existsSync(legacyDir)) {
63
+ list.push({ id: LEGACY_SDD_ARTIFACT, path: legacyDir, required: false });
64
+ }
65
+ return list;
66
+ },
67
+ hasLegacySdd() {
68
+ return existsSync(legacyDir);
69
+ },
70
+ legacySddDir() {
71
+ return legacyDir;
72
+ },
73
+ };
74
+ }
75
+ //# sourceMappingURL=change-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-workspace.js","sourceRoot":"","sources":["../../../src/core/workspace/change-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,aAAa;AACb,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEhD,4BAA4B;AAC5B,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AA6B9C;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAuC;IACtE,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,UAAkB,EAClB,MAAoB;IAEpB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAEjE,OAAO;QACL,UAAU;QACV,IAAI;QACJ,SAAS;QACT,MAAM;QACN,UAAU;QACV,SAAS;YACP,MAAM,IAAI,GAAqB;gBAC7B,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;aACzD,CAAC;YACF,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,YAAY;YACV,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,YAAY;YACV,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Workspace 模块 — 变更产物路径唯一真相源
3
+ */
4
+ export { createChangeWorkspace, resolveSddSubdir, CHANGE_ROOT_ARTIFACT, LEGACY_SDD_ARTIFACT, LEGACY_SDD_ROOT, } from './change-workspace.js';
5
+ export type { ChangeArtifact, ChangeWorkspace } from './change-workspace.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workspace/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Workspace 模块 — 变更产物路径唯一真相源
3
+ */
4
+ export { createChangeWorkspace, resolveSddSubdir, CHANGE_ROOT_ARTIFACT, LEGACY_SDD_ARTIFACT, LEGACY_SDD_ROOT, } from './change-workspace.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/workspace/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,45 @@
1
+ # MES 功能文档转代码
2
+
3
+ 使用 `mes-prd-to-code` schema 从功能文档生成代码。$ARGUMENTS 为功能文档路径。
4
+
5
+ ## 执行步骤
6
+
7
+ 1. 检查当前状态:
8
+ ```bash
9
+ specpow status
10
+ ```
11
+
12
+ 2. 确认执行参数:
13
+ - 从 $ARGUMENTS 中提取功能文档路径
14
+ - 从文档名推导变更名称(如 `订单管理.md` → `order-management`)
15
+ - 向用户展示即将执行的命令,等待确认:
16
+ ```
17
+ 即将执行:
18
+ 变更名称: <change-name>
19
+ Schema: mes-prd-to-code
20
+ 功能文档: <文档路径>
21
+ 命令: specpow propose "<change-name>" --schema mes-prd-to-code
22
+
23
+ 确认执行?(y/n)
24
+ ```
25
+ - 用户确认后执行,用户可修改变更名称
26
+
27
+ 3. 执行创建命令:
28
+ ```bash
29
+ specpow propose "<change-name>" --schema mes-prd-to-code
30
+ ```
31
+
32
+ 4. 按 schema 定义的工件顺序执行:
33
+ - parse: 读取功能文档,解析结构化信息
34
+ - confirm-scope: 苏格拉底式对话确认范围
35
+ - tech-design: 生成技术设计文档
36
+ - tasks: 拆分实施任务
37
+ - test-gen: 生成测试代码
38
+ - code: 生成完整代码
39
+
40
+ 5. 验证工件已创建:
41
+ ```bash
42
+ specpow status
43
+ ```
44
+
45
+ 6. 提示用户编辑生成的工件文件,然后运行 `/specpow-apply`。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specpow/framework",
3
- "version": "0.6.1",
3
+ "version": "0.8.0",
4
4
  "description": "Spec-Powered AI Development Framework - 融合 OpenSpec 规范驱动 + Superpowers 执行引擎的企业级 AI 辅助编程框架",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",