@specpow/framework 0.6.1 → 0.7.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 (45) 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/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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specpow/framework",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "Spec-Powered AI Development Framework - 融合 OpenSpec 规范驱动 + Superpowers 执行引擎的企业级 AI 辅助编程框架",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",