specweave 3.0.23 → 3.1.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 (101) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/README.md +31 -16
  3. package/bin/specweave.js +35 -0
  4. package/dist/src/cli/commands/create-increment.js +1 -1
  5. package/dist/src/cli/commands/create-increment.js.map +1 -1
  6. package/dist/src/cli/commands/glossary.d.ts +16 -0
  7. package/dist/src/cli/commands/glossary.d.ts.map +1 -0
  8. package/dist/src/cli/commands/glossary.js +55 -0
  9. package/dist/src/cli/commands/glossary.js.map +1 -0
  10. package/dist/src/cli/commands/init.d.ts +1 -1
  11. package/dist/src/cli/commands/init.d.ts.map +1 -1
  12. package/dist/src/cli/commands/init.js +7 -6
  13. package/dist/src/cli/commands/init.js.map +1 -1
  14. package/dist/src/cli/commands/jev-helpers.d.ts.map +1 -1
  15. package/dist/src/cli/commands/jev-helpers.js +5 -10
  16. package/dist/src/cli/commands/jev-helpers.js.map +1 -1
  17. package/dist/src/cli/commands/project.d.ts.map +1 -1
  18. package/dist/src/cli/commands/project.js +4 -2
  19. package/dist/src/cli/commands/project.js.map +1 -1
  20. package/dist/src/cli/commands/refresh-plugins.d.ts.map +1 -1
  21. package/dist/src/cli/commands/refresh-plugins.js +7 -1
  22. package/dist/src/cli/commands/refresh-plugins.js.map +1 -1
  23. package/dist/src/cli/commands/review.d.ts +24 -0
  24. package/dist/src/cli/commands/review.d.ts.map +1 -0
  25. package/dist/src/cli/commands/review.js +124 -0
  26. package/dist/src/cli/commands/review.js.map +1 -0
  27. package/dist/src/cli/commands/skills.d.ts +18 -0
  28. package/dist/src/cli/commands/skills.d.ts.map +1 -0
  29. package/dist/src/cli/commands/skills.js +130 -0
  30. package/dist/src/cli/commands/skills.js.map +1 -0
  31. package/dist/src/cli/commands/update.d.ts.map +1 -1
  32. package/dist/src/cli/commands/update.js +10 -3
  33. package/dist/src/cli/commands/update.js.map +1 -1
  34. package/dist/src/cli/helpers/init/instruction-file-writer.d.ts.map +1 -1
  35. package/dist/src/cli/helpers/init/instruction-file-writer.js +4 -3
  36. package/dist/src/cli/helpers/init/instruction-file-writer.js.map +1 -1
  37. package/dist/src/cli/helpers/init/plugin-installer.js +1 -1
  38. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  39. package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
  40. package/dist/src/core/config/types.d.ts +39 -6
  41. package/dist/src/core/config/types.d.ts.map +1 -1
  42. package/dist/src/core/config/types.js +2 -0
  43. package/dist/src/core/config/types.js.map +1 -1
  44. package/dist/src/core/glossary/check.d.ts +44 -0
  45. package/dist/src/core/glossary/check.d.ts.map +1 -0
  46. package/dist/src/core/glossary/check.js +203 -0
  47. package/dist/src/core/glossary/check.js.map +1 -0
  48. package/dist/src/core/glossary/parse.d.ts +40 -0
  49. package/dist/src/core/glossary/parse.d.ts.map +1 -0
  50. package/dist/src/core/glossary/parse.js +112 -0
  51. package/dist/src/core/glossary/parse.js.map +1 -0
  52. package/dist/src/core/hooks/handlers/stop.js +1 -1
  53. package/dist/src/core/hooks/handlers/stop.js.map +1 -1
  54. package/dist/src/core/increment/template-creator.js +1 -1
  55. package/dist/src/core/increment/template-creator.js.map +1 -1
  56. package/dist/src/core/review/brief.d.ts +46 -0
  57. package/dist/src/core/review/brief.d.ts.map +1 -0
  58. package/dist/src/core/review/brief.js +151 -0
  59. package/dist/src/core/review/brief.js.map +1 -0
  60. package/dist/src/core/review/reviewer.d.ts +62 -0
  61. package/dist/src/core/review/reviewer.d.ts.map +1 -0
  62. package/dist/src/core/review/reviewer.js +166 -0
  63. package/dist/src/core/review/reviewer.js.map +1 -0
  64. package/dist/src/core/skills/catalog.d.ts +49 -0
  65. package/dist/src/core/skills/catalog.d.ts.map +1 -0
  66. package/dist/src/core/skills/catalog.js +95 -0
  67. package/dist/src/core/skills/catalog.js.map +1 -0
  68. package/dist/src/core/skills/legacy-skill-hashes.d.ts +11 -0
  69. package/dist/src/core/skills/legacy-skill-hashes.d.ts.map +1 -0
  70. package/dist/src/core/skills/legacy-skill-hashes.js +83 -0
  71. package/dist/src/core/skills/legacy-skill-hashes.js.map +1 -0
  72. package/dist/src/core/skills/project-skills.d.ts +58 -16
  73. package/dist/src/core/skills/project-skills.d.ts.map +1 -1
  74. package/dist/src/core/skills/project-skills.js +169 -32
  75. package/dist/src/core/skills/project-skills.js.map +1 -1
  76. package/dist/src/core/tasks/closure-gate.d.ts +2 -1
  77. package/dist/src/core/tasks/closure-gate.d.ts.map +1 -1
  78. package/dist/src/core/tasks/closure-gate.js +36 -4
  79. package/dist/src/core/tasks/closure-gate.js.map +1 -1
  80. package/package.json +1 -1
  81. package/plugins/PLUGINS-INDEX.md +14 -12
  82. package/plugins/specweave/.claude-plugin/plugin.json +2 -2
  83. package/plugins/specweave/PLUGIN.md +24 -16
  84. package/plugins/specweave/marketplace.json +57 -38
  85. package/plugins/specweave/skills/auto/SKILL.md +8 -38
  86. package/plugins/specweave/skills/auto/agents/openai.yaml +5 -0
  87. package/plugins/specweave/skills/do/SKILL.md +46 -10
  88. package/plugins/specweave/skills/done/SKILL.md +6 -3
  89. package/plugins/specweave/skills/increment/SKILL.md +20 -11
  90. package/plugins/specweave/skills/review/SKILL.md +23 -4
  91. package/plugins/specweave/skills-catalog.json +32 -0
  92. package/plugins/specweave/skills-optional/glossary/SKILL.md +90 -0
  93. package/plugins/specweave/skills-optional/glossary/references/credits.md +33 -0
  94. package/plugins/specweave/skills-optional/grill-me/SKILL.md +99 -0
  95. package/plugins/specweave/{skills/brainstorm → skills-optional/grill-me}/references/credits.md +3 -3
  96. package/src/templates/AGENTS.md.template +7 -1
  97. package/plugins/specweave/skills/brainstorm/SKILL.md +0 -100
  98. package/plugins/specweave/skills/team/SKILL.md +0 -70
  99. /package/plugins/specweave/{skills → skills-optional}/jev/SKILL.md +0 -0
  100. /package/plugins/specweave/{skills → skills-optional}/project/SKILL.md +0 -0
  101. /package/plugins/specweave/{skills → skills-optional}/sync/SKILL.md +0 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * SHA-256 of every file SpecWeave 3.0.0 to 3.0.23 installed into `.claude/skills/sw-<name>/` and
3
+ * `.agents/skills/sw-<name>/` (the project form of each plugin skill file, at every
4
+ * 3.0.x tag). Those versions wrote no install manifest, so a folder whose every file
5
+ * is listed here is SpecWeave's unmodified copy; anything else is the user's.
6
+ * Generated once from the release tags; 3.1 and later record a manifest instead.
7
+ *
8
+ * @module core/skills/legacy-skill-hashes
9
+ */
10
+ export const LEGACY_SKILL_HASHES = {
11
+ auto: {
12
+ 'SKILL.md': [
13
+ '49992bd0df4c0c22839294ef592f622e566904b39add3746cad82b04e44d4384',
14
+ '52dd05b2c0ce79e031901fe3e33236f6c048c5a1c55f60b6249c29e7eb812b5c',
15
+ ],
16
+ },
17
+ brainstorm: {
18
+ 'SKILL.md': [
19
+ '336ee144201a850254cccef8ab7581a10017ccde4211618eb32c5e9060857fbd',
20
+ 'fa70e9ecf859b24014a0de42fd866e8078f2777b241b4ea1d3268715d4bef273',
21
+ ],
22
+ 'references/credits.md': [
23
+ '1b242664dd3764db5f5549dc33b01016658b8464140c765ada62683f2c020f8f',
24
+ ],
25
+ },
26
+ do: {
27
+ 'SKILL.md': [
28
+ '8ffcc20df2c167941fee13a27a955fe73358d85e3f61740307b7aea8f87f48d5',
29
+ 'a53d47d1acb834653a61ecfd49150252e973f56eb38aba814fb2f5dd5419592c',
30
+ ],
31
+ },
32
+ done: {
33
+ 'SKILL.md': [
34
+ '79d657717035cf0a5aaba6c221ba7efe14f4b13c69ad9c0e69dd4f9d20c6e995',
35
+ ],
36
+ },
37
+ handoff: {
38
+ 'SKILL.md': [
39
+ '0b1ed137dca176c066a2157ee7b590d91e6a1f8a9f9e3331f5ccb19df3de23b0',
40
+ '44cb707de587a69f356a714da0386add7052db75dd394b79aac6ab690f3f08a1',
41
+ '4745a333b22e06f714561c8f594985ace26fa4ce88f4ee1cf5e07b32163ee73e',
42
+ '54498e7842cb4892f7742a4a62b473eb0411c0653444d5833250c4bf4abec093',
43
+ '807d8db53317bffb1f89aa9aaf85dcd65d9e166bb00b400382dfd28bb01af566',
44
+ 'be7c199efefae385abac0121367f39969373a6d1c9af7bcb3df6048e1f026d2d',
45
+ 'ec6ef3e21fed4be38aae37ea702680cd503eb3abc4d70c60f2b489fffb4d0320',
46
+ ],
47
+ },
48
+ increment: {
49
+ 'SKILL.md': [
50
+ '1ae7d50cfc733df5144a8c8a414758e8fa1c586fa60dd3a6c7ce668b6788cfe6',
51
+ '52acee9e475c171aac02148adf26ddfe6b1c30c6e3fc8bee6eb64a93278178cb',
52
+ 'd8bd25aa978f0f4737b66292da0061bcceafa8c9b5008c6921243d5ebad92201',
53
+ ],
54
+ },
55
+ jev: {
56
+ 'SKILL.md': [
57
+ '64b89a36f9c40b32dd3ed8155b3136d4bb3ad5f46e2c5aa41cd7979af00c30bb',
58
+ 'ecceb1a592ad003810f984ae991a5f4e9e226c4212ae771507eebdb4b6c3272f',
59
+ ],
60
+ },
61
+ project: {
62
+ 'SKILL.md': [
63
+ '4c4a569cb5b440ef9a8af9324446a8b162ec1fe200e7ed46762c9a0cb4bb0b12',
64
+ ],
65
+ },
66
+ review: {
67
+ 'SKILL.md': [
68
+ '4ea6d9b3c0b4d271a3de864a765e02b998363a246930ab8418afe351aee2d5c0',
69
+ '7ce84b4b2106151d3f0d486cfc3079d8e9a60da74694ea8cfbc7f6b5796d830c',
70
+ ],
71
+ },
72
+ sync: {
73
+ 'SKILL.md': [
74
+ '5fb4394e2a55aa36b379ef2b0533439d7e13583e411ae6c269c9312ebc39b64e',
75
+ ],
76
+ },
77
+ team: {
78
+ 'SKILL.md': [
79
+ 'fda8a4ce74db12c343e27e036d54428553f639295d1ebb9f0c3b8c6ec5475709',
80
+ ],
81
+ },
82
+ };
83
+ //# sourceMappingURL=legacy-skill-hashes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-skill-hashes.js","sourceRoot":"","sources":["../../../../src/core/skills/legacy-skill-hashes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAA0E;IACxG,IAAI,EAAE;QACJ,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;SACnE;KACF;IACD,UAAU,EAAE;QACV,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;SACnE;QACD,uBAAuB,EAAE;YACvB,kEAAkE;SACnE;KACF;IACD,EAAE,EAAE;QACF,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;SACnE;KACF;IACD,IAAI,EAAE;QACJ,UAAU,EAAE;YACV,kEAAkE;SACnE;KACF;IACD,OAAO,EAAE;QACP,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;SACnE;KACF;IACD,SAAS,EAAE;QACT,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;SACnE;KACF;IACD,GAAG,EAAE;QACH,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;SACnE;KACF;IACD,OAAO,EAAE;QACP,UAAU,EAAE;YACV,kEAAkE;SACnE;KACF;IACD,MAAM,EAAE;QACN,UAAU,EAAE;YACV,kEAAkE;YAClE,kEAAkE;SACnE;KACF;IACD,IAAI,EAAE;QACJ,UAAU,EAAE;YACV,kEAAkE;SACnE;KACF;IACD,IAAI,EAAE;QACJ,UAAU,EAAE;YACV,kEAAkE;SACnE;KACF;CACF,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Project skills: the 11 SpecWeave skills installed into a project, namespaced
3
- * as `sw-<name>`, in both places AI tools look for them:
2
+ * Project skills: the SpecWeave skills a project has turned on (the core ones
3
+ * plus any enabled or detected optional ones, see ./catalog.ts), namespaced as
4
+ * `sw-<name>`, in both places AI tools look for them:
4
5
  *
5
6
  * .claude/skills/sw-<name>/ Claude Code, including cloud sessions where
6
7
  * plugins do not load
@@ -13,14 +14,15 @@
13
14
  * frontmatter `name:` (tools that require it get `sw-<name>`) and the removal
14
15
  * of the "generated" marker line.
15
16
  *
16
- * `removeLegacySkillCopies` deletes the unnamespaced copies (`do`, `review`,
17
- * ...) that SpecWeave 2.x put into those folders, only when their content
18
- * identifies them as SpecWeave's own.
17
+ * `installProjectSkills` also removes the copies of optional skills that are now
18
+ * off. `removeLegacySkillCopies` deletes the unnamespaced copies (`do`, `review`,
19
+ * ...) that SpecWeave 2.x put into those folders and the retired `sw-<name>`
20
+ * folders, only when their content identifies them as SpecWeave's own.
19
21
  *
20
22
  * @module core/skills/project-skills
21
23
  */
22
- /** The skills SpecWeave ships (the same list as scripts/build/generate-skills.mjs). */
23
- export declare const SPECWEAVE_SKILLS: readonly ["increment", "do", "auto", "team", "review", "done", "sync", "handoff", "project", "brainstorm", "jev"];
24
+ import { LEGACY_SKILL_HASHES } from './legacy-skill-hashes.js';
25
+ import { type SkillCatalog, type SkillState } from './catalog.js';
24
26
  /** Where the project copies go, relative to the project root. */
25
27
  export declare const PROJECT_SKILL_DIRS: readonly [".claude/skills", ".agents/skills"];
26
28
  /**
@@ -29,15 +31,24 @@ export declare const PROJECT_SKILL_DIRS: readonly [".claude/skills", ".agents/sk
29
31
  */
30
32
  export declare const LEGACY_SKILL_NAMES: readonly ["auto", "brainstorm", "do", "done", "handoff", "increment", "jev", "project", "qa", "review", "sync", "team"];
31
33
  /**
32
- * Skills SpecWeave once installed as `sw-<name>` and no longer ships. Only these
33
- * names are candidates; any other `sw-*` folder belongs to the user.
34
- * qa 2.x Codex adapter wrote every plugin skill as `.agents/skills/sw-<name>`; qa was dropped in 3.0
35
- * task standalone `skills/sw-task` (vskill-installable, 2.0.0 to 2.3.0), folded into sw-do in 3.0
34
+ * Skills SpecWeave once installed as `sw-<name>` and no longer ships; the same
35
+ * list as the catalog's `retired` (a test keeps them equal). Only these names are
36
+ * candidates; any other `sw-*` folder belongs to the user.
37
+ * qa 2.x Codex adapter wrote every plugin skill as `.agents/skills/sw-<name>`; qa was dropped in 3.0
38
+ * task standalone `skills/sw-task` (vskill-installable, 2.0.0 to 2.3.0), folded into sw-do in 3.0
39
+ * brainstorm its Decide step became sw-increment's and sw-grill-me's (3.1)
40
+ * team folded into sw-do's "Parallel lanes" (3.1)
36
41
  */
37
- export declare const RETIRED_SKILL_NAMES: readonly ["qa", "task"];
42
+ export declare const RETIRED_SKILL_NAMES: readonly ["qa", "task", "brainstorm", "team"];
38
43
  export declare function projectSkillName(name: string): string;
39
44
  /** Project copy of a plugin SKILL.md: `name: sw-<name>` first, no generated marker. */
40
45
  export declare function toProjectSkill(pluginContent: string, name: string): string;
46
+ /** The catalog shipped next to a plugin skills folder (`plugins/specweave/skills-catalog.json`). */
47
+ export declare function catalogFor(sourceDir: string): SkillCatalog;
48
+ /** Every catalog skill and whether this project has it on. */
49
+ export declare function projectSkillStates(projectRoot: string, options?: {
50
+ sourceDir?: string;
51
+ }): SkillState[];
41
52
  /** The plugin skills folder shipped with this package (`plugins/specweave/skills`). */
42
53
  export declare function defaultPluginSkillsDir(): string;
43
54
  export interface InstallProjectSkillsOptions {
@@ -53,21 +64,52 @@ export interface InstallProjectSkillsResult {
53
64
  unchanged: string[];
54
65
  /** Project-relative files removed from an `sw-<name>` folder because the skill no longer ships them. */
55
66
  removed: string[];
67
+ /** Skills installed (short names, catalog order). */
68
+ installed: string[];
69
+ /** Project-relative `sw-<name>` folders removed because that optional skill is now off. */
70
+ removedSkills: string[];
71
+ /** Folders of optional skills that are off but were left alone: changed by hand, or not SpecWeave's copy. */
72
+ keptSkills: string[];
56
73
  }
57
- /** Install the 11 skills as `sw-<name>` into `.claude/skills/` and `.agents/skills/`. */
74
+ /** File SpecWeave writes into every `sw-<name>` folder it installs: the skill and each file's SHA-256. */
75
+ export declare const INSTALL_MANIFEST = ".specweave-install.json";
76
+ /**
77
+ * Who a `sw-<name>` folder belongs to.
78
+ * absent nothing there
79
+ * pristine SpecWeave's copy, unchanged: every file matches its install manifest,
80
+ * or (3.0.x wrote no manifest) is a file some 3.0.x release installed
81
+ * edited SpecWeave's manifest is there but a file was changed, added or removed
82
+ * foreign anything else: the user's own skill, a vskill install, a symlink
83
+ */
84
+ export type SkillFolderOwner = 'absent' | 'pristine' | 'edited' | 'foreign';
85
+ export declare function skillFolderOwner(dir: string, name: string, legacy?: Readonly<Record<string, Readonly<Record<string, readonly string[]>>>>): SkillFolderOwner;
86
+ /**
87
+ * Install the project's skills as `sw-<name>` into `.claude/skills/` and
88
+ * `.agents/skills/`: every core skill, plus each optional skill that
89
+ * `.specweave/config.json` enables or the project's files detect.
90
+ *
91
+ * Core folders are SpecWeave's and always rewritten. An optional skill is written
92
+ * only into an empty place or SpecWeave's unchanged copy, and an optional skill
93
+ * that is off is removed only when its folder is SpecWeave's unchanged copy;
94
+ * everything else is left alone and listed in `keptSkills`.
95
+ */
58
96
  export declare function installProjectSkills(projectRoot: string, options?: InstallProjectSkillsOptions): InstallProjectSkillsResult;
59
97
  /**
60
98
  * True when a legacy skill folder is a copy SpecWeave installed: only SKILL.md
61
- * (plus team's old agents/*.md), and the SKILL.md drives the specweave CLI or
62
- * names a `sw:` skill. A user's own `review` skill is left alone.
99
+ * (plus team's old agents/*.md and brainstorm's references/credits.md), and the
100
+ * SKILL.md drives the specweave CLI or names a `sw:` skill. A user's own
101
+ * `review` skill is left alone.
63
102
  */
64
103
  export declare function isSpecweaveOwnedCopy(dir: string, name: string): boolean;
65
104
  /**
66
105
  * Remove SpecWeave's own stale skill copies from `.claude/skills/` and
67
106
  * `.agents/skills/`: the unnamespaced 2.x folders and the `sw-<name>` folders
68
- * of RETIRED_SKILL_NAMES. Skips a skills folder reached through a symlink.
107
+ * of RETIRED_SKILL_NAMES. A retired skill 3.0 shipped (team, brainstorm) is
108
+ * removed only when every file is one a 3.0.x release installed; 2.x leftovers
109
+ * (qa, task) are recognised by their content. Skips a symlinked skills folder.
69
110
  */
70
111
  export declare function removeLegacySkillCopies(projectRoot: string, options?: {
71
112
  dryRun?: boolean;
113
+ legacyHashes?: typeof LEGACY_SKILL_HASHES;
72
114
  }): string[];
73
115
  //# sourceMappingURL=project-skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-skills.d.ts","sourceRoot":"","sources":["../../../../src/core/skills/project-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,mHAGnB,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,+CAAgD,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,yHAGrB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,yBAA0B,CAAC;AAI3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,IAAI,MAAM,CAU/C;AAkCD,MAAM,WAAW,2BAA2B;IAC1C,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,uEAAuE;IACvE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wGAAwG;IACxG,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,yFAAyF;AACzF,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,2BAAgC,GACxC,0BAA0B,CA6C5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAcvE;AAgBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,EAAE,CAyBzG"}
1
+ {"version":3,"file":"project-skills.d.ts","sourceRoot":"","sources":["../../../../src/core/skills/project-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAmC,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnG,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,+CAAgD,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,yHAGrB,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,+CAAgD,CAAC;AAIjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAE1D;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,UAAU,EAAE,CAE1G;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,IAAI,MAAM,CAU/C;AAkCD,MAAM,WAAW,2BAA2B;IAC1C,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,uEAAuE;IACvE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wGAAwG;IACxG,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2FAA2F;IAC3F,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,6GAA6G;IAC7G,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,0GAA0G;AAC1G,eAAO,MAAM,gBAAgB,4BAA4B,CAAC;AAyB1D;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAuB,GAClG,gBAAgB,CAiClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,2BAAgC,GACxC,0BAA0B,CAsE5B;AAqBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAevE;AAgBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,mBAAmB,CAAA;CAAO,GAC5E,MAAM,EAAE,CA2BV"}
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Project skills: the 11 SpecWeave skills installed into a project, namespaced
3
- * as `sw-<name>`, in both places AI tools look for them:
2
+ * Project skills: the SpecWeave skills a project has turned on (the core ones
3
+ * plus any enabled or detected optional ones, see ./catalog.ts), namespaced as
4
+ * `sw-<name>`, in both places AI tools look for them:
4
5
  *
5
6
  * .claude/skills/sw-<name>/ Claude Code, including cloud sessions where
6
7
  * plugins do not load
@@ -13,20 +14,19 @@
13
14
  * frontmatter `name:` (tools that require it get `sw-<name>`) and the removal
14
15
  * of the "generated" marker line.
15
16
  *
16
- * `removeLegacySkillCopies` deletes the unnamespaced copies (`do`, `review`,
17
- * ...) that SpecWeave 2.x put into those folders, only when their content
18
- * identifies them as SpecWeave's own.
17
+ * `installProjectSkills` also removes the copies of optional skills that are now
18
+ * off. `removeLegacySkillCopies` deletes the unnamespaced copies (`do`, `review`,
19
+ * ...) that SpecWeave 2.x put into those folders and the retired `sw-<name>`
20
+ * folders, only when their content identifies them as SpecWeave's own.
19
21
  *
20
22
  * @module core/skills/project-skills
21
23
  */
22
24
  import * as fs from 'fs';
23
25
  import * as path from 'path';
24
26
  import { fileURLToPath } from 'url';
25
- /** The skills SpecWeave ships (the same list as scripts/build/generate-skills.mjs). */
26
- export const SPECWEAVE_SKILLS = [
27
- 'increment', 'do', 'auto', 'team', 'review', 'done',
28
- 'sync', 'handoff', 'project', 'brainstorm', 'jev',
29
- ];
27
+ import { createHash } from 'crypto';
28
+ import { LEGACY_SKILL_HASHES } from './legacy-skill-hashes.js';
29
+ import { readSkillCatalog, resolveSkills } from './catalog.js';
30
30
  /** Where the project copies go, relative to the project root. */
31
31
  export const PROJECT_SKILL_DIRS = ['.claude/skills', '.agents/skills'];
32
32
  /**
@@ -38,12 +38,15 @@ export const LEGACY_SKILL_NAMES = [
38
38
  'jev', 'project', 'qa', 'review', 'sync', 'team',
39
39
  ];
40
40
  /**
41
- * Skills SpecWeave once installed as `sw-<name>` and no longer ships. Only these
42
- * names are candidates; any other `sw-*` folder belongs to the user.
43
- * qa 2.x Codex adapter wrote every plugin skill as `.agents/skills/sw-<name>`; qa was dropped in 3.0
44
- * task standalone `skills/sw-task` (vskill-installable, 2.0.0 to 2.3.0), folded into sw-do in 3.0
41
+ * Skills SpecWeave once installed as `sw-<name>` and no longer ships; the same
42
+ * list as the catalog's `retired` (a test keeps them equal). Only these names are
43
+ * candidates; any other `sw-*` folder belongs to the user.
44
+ * qa 2.x Codex adapter wrote every plugin skill as `.agents/skills/sw-<name>`; qa was dropped in 3.0
45
+ * task standalone `skills/sw-task` (vskill-installable, 2.0.0 to 2.3.0), folded into sw-do in 3.0
46
+ * brainstorm its Decide step became sw-increment's and sw-grill-me's (3.1)
47
+ * team folded into sw-do's "Parallel lanes" (3.1)
45
48
  */
46
- export const RETIRED_SKILL_NAMES = ['qa', 'task'];
49
+ export const RETIRED_SKILL_NAMES = ['qa', 'task', 'brainstorm', 'team'];
47
50
  const GENERATED_MARKER = /^<!-- Generated from skills\/sw-[a-z-]+\/SKILL\.md[^\n]*-->\n/m;
48
51
  export function projectSkillName(name) {
49
52
  return `sw-${name}`;
@@ -58,6 +61,14 @@ export function toProjectSkill(pluginContent, name) {
58
61
  const body = fm[1].split('\n').filter((line) => !/^name\s*:/.test(line)).join('\n');
59
62
  return `---\nname: ${skillName}\n${body}\n---\n${text.slice(fm[0].length)}`;
60
63
  }
64
+ /** The catalog shipped next to a plugin skills folder (`plugins/specweave/skills-catalog.json`). */
65
+ export function catalogFor(sourceDir) {
66
+ return readSkillCatalog(path.dirname(sourceDir));
67
+ }
68
+ /** Every catalog skill and whether this project has it on. */
69
+ export function projectSkillStates(projectRoot, options = {}) {
70
+ return resolveSkills(path.resolve(projectRoot), catalogFor(options.sourceDir ?? defaultPluginSkillsDir()));
71
+ }
61
72
  /** The plugin skills folder shipped with this package (`plugins/specweave/skills`). */
62
73
  export function defaultPluginSkillsDir() {
63
74
  let dir = path.dirname(fileURLToPath(import.meta.url));
@@ -108,31 +119,127 @@ function listFiles(dir, prefix = '') {
108
119
  }
109
120
  return out.sort();
110
121
  }
111
- /** Install the 11 skills as `sw-<name>` into `.claude/skills/` and `.agents/skills/`. */
122
+ /** File SpecWeave writes into every `sw-<name>` folder it installs: the skill and each file's SHA-256. */
123
+ export const INSTALL_MANIFEST = '.specweave-install.json';
124
+ const sha256 = (bytes) => createHash('sha256').update(bytes).digest('hex');
125
+ /**
126
+ * Every entry under `dir` that is not a folder (posix-relative, sorted), never
127
+ * following a symlink. `regular` is false for symlinks, FIFOs, sockets and devices,
128
+ * which are never read.
129
+ */
130
+ function listEntries(dir, prefix = '') {
131
+ const out = [];
132
+ let entries;
133
+ try {
134
+ entries = fs.readdirSync(dir, { withFileTypes: true });
135
+ }
136
+ catch {
137
+ return out;
138
+ }
139
+ for (const e of entries) {
140
+ const rel = prefix ? `${prefix}/${e.name}` : e.name;
141
+ if (e.isDirectory())
142
+ out.push(...listEntries(path.join(dir, e.name), rel));
143
+ else
144
+ out.push({ rel, regular: e.isFile() });
145
+ }
146
+ return out.sort((a, b) => a.rel.localeCompare(b.rel));
147
+ }
148
+ export function skillFolderOwner(dir, name, legacy = LEGACY_SKILL_HASHES) {
149
+ let stat;
150
+ try {
151
+ stat = fs.lstatSync(dir);
152
+ }
153
+ catch {
154
+ return 'absent';
155
+ }
156
+ if (!stat.isDirectory())
157
+ return 'foreign';
158
+ const entries = listEntries(dir);
159
+ const manifestFile = path.join(dir, INSTALL_MANIFEST);
160
+ let manifest;
161
+ if (entries.some((e) => e.rel === INSTALL_MANIFEST && e.regular)) {
162
+ try {
163
+ manifest = JSON.parse(fs.readFileSync(manifestFile, 'utf8'));
164
+ }
165
+ catch {
166
+ return 'foreign';
167
+ }
168
+ if (manifest?.skill !== name || !manifest.files || typeof manifest.files !== 'object')
169
+ return 'foreign';
170
+ }
171
+ const files = entries.filter((e) => e.rel !== INSTALL_MANIFEST || !e.regular);
172
+ const special = files.some((e) => !e.regular);
173
+ if (manifest) {
174
+ const recorded = manifest.files;
175
+ const same = !special &&
176
+ files.length === Object.keys(recorded).length &&
177
+ files.every((e) => recorded[e.rel] === sha256(fs.readFileSync(path.join(dir, e.rel))));
178
+ return same ? 'pristine' : 'edited';
179
+ }
180
+ const known = legacy[name];
181
+ if (!known || !files.length || special)
182
+ return 'foreign';
183
+ const pristine = files.every((e) => (known[e.rel] ?? []).includes(sha256(fs.readFileSync(path.join(dir, e.rel)))));
184
+ return pristine ? 'pristine' : 'foreign';
185
+ }
186
+ /**
187
+ * Install the project's skills as `sw-<name>` into `.claude/skills/` and
188
+ * `.agents/skills/`: every core skill, plus each optional skill that
189
+ * `.specweave/config.json` enables or the project's files detect.
190
+ *
191
+ * Core folders are SpecWeave's and always rewritten. An optional skill is written
192
+ * only into an empty place or SpecWeave's unchanged copy, and an optional skill
193
+ * that is off is removed only when its folder is SpecWeave's unchanged copy;
194
+ * everything else is left alone and listed in `keptSkills`.
195
+ */
112
196
  export function installProjectSkills(projectRoot, options = {}) {
113
197
  const root = path.resolve(projectRoot);
114
198
  const sourceDir = options.sourceDir ?? defaultPluginSkillsDir();
115
- const result = { written: [], unchanged: [], removed: [] };
199
+ const optionalDir = path.join(path.dirname(sourceDir), 'skills-optional');
200
+ const states = resolveSkills(root, catalogFor(sourceDir));
201
+ const result = { written: [], unchanged: [], removed: [], installed: [], removedSkills: [], keptSkills: [] };
116
202
  // Plan everything before touching the disk.
117
203
  const plan = [];
118
204
  const owned = [];
119
- for (const name of SPECWEAVE_SKILLS) {
120
- const src = path.join(sourceDir, name);
121
- const files = listFiles(src);
122
- if (!files.includes('SKILL.md'))
123
- throw new Error(`Skill source missing: ${path.join(src, 'SKILL.md')}`);
205
+ for (const state of states.filter((s) => s.on)) {
206
+ const name = state.name;
207
+ result.installed.push(name);
208
+ const files = shippedCopy(state.tier === 'core' ? sourceDir : optionalDir, name);
124
209
  for (const base of PROJECT_SKILL_DIRS) {
125
210
  const skillDir = path.posix.join(base, projectSkillName(name));
126
- owned.push(skillDir);
127
- for (const file of files) {
128
- const raw = fs.readFileSync(path.join(src, file));
129
- const bytes = file === 'SKILL.md' ? Buffer.from(toProjectSkill(raw.toString('utf8'), name), 'utf8') : raw;
130
- plan.push({ rel: path.posix.join(skillDir, file.split(path.sep).join('/')), bytes });
211
+ if (state.tier === 'optional' && !hasSymlinkSegment(root, base)) {
212
+ const owner = skillFolderOwner(path.join(root, skillDir), name);
213
+ if (owner === 'edited' || owner === 'foreign') {
214
+ result.keptSkills.push(skillDir);
215
+ continue;
216
+ }
131
217
  }
218
+ owned.push(skillDir);
219
+ for (const [file, bytes] of files)
220
+ plan.push({ rel: path.posix.join(skillDir, file), bytes });
132
221
  }
133
222
  }
134
223
  for (const { rel } of plan)
135
224
  assertNoSymlink(root, rel);
225
+ // Optional skills that are off: remove only SpecWeave's unchanged copy.
226
+ for (const state of states.filter((s) => !s.on)) {
227
+ for (const base of PROJECT_SKILL_DIRS) {
228
+ const rel = path.posix.join(base, projectSkillName(state.name));
229
+ if (hasSymlinkSegment(root, base))
230
+ continue;
231
+ const owner = skillFolderOwner(path.join(root, rel), state.name);
232
+ if (owner === 'absent')
233
+ continue;
234
+ if (owner !== 'pristine') {
235
+ result.keptSkills.push(rel);
236
+ continue;
237
+ }
238
+ result.removedSkills.push(rel);
239
+ if (!options.dryRun)
240
+ fs.rmSync(path.join(root, rel), { recursive: true, force: true });
241
+ }
242
+ }
136
243
  const planned = new Set(plan.map((p) => p.rel));
137
244
  for (const skillDir of owned) {
138
245
  for (const file of listFiles(path.join(root, skillDir))) {
@@ -144,6 +251,11 @@ export function installProjectSkills(projectRoot, options = {}) {
144
251
  fs.rmSync(path.join(root, rel), { force: true });
145
252
  }
146
253
  }
254
+ for (const { rel } of plan) {
255
+ const stat = fs.lstatSync(path.join(root, rel), { throwIfNoEntry: false });
256
+ if (stat && !stat.isFile())
257
+ throw new Error(`Refusing to write a skill file over something that is not a file: ${path.join(root, rel)}`);
258
+ }
147
259
  for (const { rel, bytes } of plan) {
148
260
  const dest = path.join(root, rel);
149
261
  if (fs.existsSync(dest) && fs.readFileSync(dest).equals(bytes)) {
@@ -158,16 +270,37 @@ export function installProjectSkills(projectRoot, options = {}) {
158
270
  }
159
271
  return result;
160
272
  }
273
+ /**
274
+ * The files a skill installs (posix-relative path → bytes): its SKILL.md in project
275
+ * form, the rest as shipped, and the install manifest recording their hashes.
276
+ */
277
+ function shippedCopy(skillsDir, name) {
278
+ const src = path.join(skillsDir, name);
279
+ const files = listFiles(src);
280
+ if (!files.includes('SKILL.md'))
281
+ throw new Error(`Skill source missing: ${path.join(src, 'SKILL.md')}`);
282
+ const out = new Map();
283
+ for (const file of files) {
284
+ const raw = fs.readFileSync(path.join(src, file));
285
+ out.set(file.split(path.sep).join('/'), file === 'SKILL.md' ? Buffer.from(toProjectSkill(raw.toString('utf8'), name), 'utf8') : raw);
286
+ }
287
+ const hashes = {};
288
+ for (const [file, bytes] of [...out].sort(([a], [b]) => a.localeCompare(b)))
289
+ hashes[file] = sha256(bytes);
290
+ out.set(INSTALL_MANIFEST, Buffer.from(JSON.stringify({ skill: name, files: hashes }, null, 2) + '\n', 'utf8'));
291
+ return out;
292
+ }
161
293
  /**
162
294
  * True when a legacy skill folder is a copy SpecWeave installed: only SKILL.md
163
- * (plus team's old agents/*.md), and the SKILL.md drives the specweave CLI or
164
- * names a `sw:` skill. A user's own `review` skill is left alone.
295
+ * (plus team's old agents/*.md and brainstorm's references/credits.md), and the
296
+ * SKILL.md drives the specweave CLI or names a `sw:` skill. A user's own
297
+ * `review` skill is left alone.
165
298
  */
166
299
  export function isSpecweaveOwnedCopy(dir, name) {
167
300
  const files = listFiles(dir).map((f) => f.split(path.sep).join('/'));
168
301
  if (!files.includes('SKILL.md'))
169
302
  return false;
170
- const extraAllowed = (f) => name === 'team' && /^agents\/[\w-]+\.md$/.test(f);
303
+ const extraAllowed = (f) => (name === 'team' && /^agents\/[\w-]+\.md$/.test(f)) || (name === 'brainstorm' && f === 'references/credits.md');
171
304
  if (files.some((f) => f !== 'SKILL.md' && !extraAllowed(f)))
172
305
  return false;
173
306
  let content;
@@ -199,9 +332,12 @@ function hasSymlinkSegment(root, rel) {
199
332
  /**
200
333
  * Remove SpecWeave's own stale skill copies from `.claude/skills/` and
201
334
  * `.agents/skills/`: the unnamespaced 2.x folders and the `sw-<name>` folders
202
- * of RETIRED_SKILL_NAMES. Skips a skills folder reached through a symlink.
335
+ * of RETIRED_SKILL_NAMES. A retired skill 3.0 shipped (team, brainstorm) is
336
+ * removed only when every file is one a 3.0.x release installed; 2.x leftovers
337
+ * (qa, task) are recognised by their content. Skips a symlinked skills folder.
203
338
  */
204
339
  export function removeLegacySkillCopies(projectRoot, options = {}) {
340
+ const legacy = options.legacyHashes ?? LEGACY_SKILL_HASHES;
205
341
  const root = path.resolve(projectRoot);
206
342
  const removed = [];
207
343
  for (const base of PROJECT_SKILL_DIRS) {
@@ -223,7 +359,8 @@ export function removeLegacySkillCopies(projectRoot, options = {}) {
223
359
  catch {
224
360
  continue;
225
361
  }
226
- if (!isSpecweaveOwnedCopy(dir, name))
362
+ const shippedIn3 = folder.startsWith('sw-') && legacy[name] !== undefined;
363
+ if (shippedIn3 ? skillFolderOwner(dir, name, legacy) !== 'pristine' : !isSpecweaveOwnedCopy(dir, name))
227
364
  continue;
228
365
  removed.push(rel);
229
366
  if (!options.dryRun)
@@ -1 +1 @@
1
- {"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../../../../src/core/skills/project-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../../../../src/core/skills/project-skills.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * The ONLY blocking check: `reports/verify.json` must exist with `ok: true`,
5
5
  * unless the caller supplies `--reason` (stored as metadata.closeReason).
6
6
  * Grill / code-review / judge-llm / rubric reports are optional evidence and
7
- * never block. A missing `reports/review.md` produces a one-line notice.
7
+ * never block. A missing review, or a `fix first` verdict in the newest one,
8
+ * produces a one-line notice.
8
9
  *
9
10
  * @module core/tasks/closure-gate
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"closure-gate.d.ts","sourceRoot":"","sources":["../../../../src/core/tasks/closure-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,iBAAiB,CAkD7H"}
1
+ {"version":3,"file":"closure-gate.d.ts","sourceRoot":"","sources":["../../../../src/core/tasks/closure-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,iBAAiB,CAgD7H"}