@applica-software-guru/sdd-core 1.0.1 → 1.3.4

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 (43) hide show
  1. package/dist/index.d.ts +10 -8
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/prompt/apply-prompt-generator.d.ts.map +1 -1
  6. package/dist/prompt/apply-prompt-generator.js +7 -26
  7. package/dist/prompt/apply-prompt-generator.js.map +1 -1
  8. package/dist/prompt/prompt-generator.d.ts.map +1 -1
  9. package/dist/prompt/prompt-generator.js +7 -11
  10. package/dist/prompt/prompt-generator.js.map +1 -1
  11. package/dist/scaffold/init.d.ts +1 -1
  12. package/dist/scaffold/init.d.ts.map +1 -1
  13. package/dist/scaffold/init.js +10 -29
  14. package/dist/scaffold/init.js.map +1 -1
  15. package/dist/scaffold/skill-adapters.d.ts +39 -0
  16. package/dist/scaffold/skill-adapters.d.ts.map +1 -0
  17. package/dist/scaffold/skill-adapters.js +224 -0
  18. package/dist/scaffold/skill-adapters.js.map +1 -0
  19. package/dist/scaffold/templates.d.ts +5 -1
  20. package/dist/scaffold/templates.d.ts.map +1 -1
  21. package/dist/scaffold/templates.js +203 -55
  22. package/dist/scaffold/templates.js.map +1 -1
  23. package/dist/sdd.d.ts +6 -3
  24. package/dist/sdd.d.ts.map +1 -1
  25. package/dist/sdd.js +26 -18
  26. package/dist/sdd.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/index.ts +17 -8
  29. package/src/prompt/apply-prompt-generator.ts +7 -31
  30. package/src/prompt/prompt-generator.ts +8 -18
  31. package/src/scaffold/init.ts +17 -38
  32. package/src/scaffold/skill-adapters.ts +322 -0
  33. package/src/scaffold/templates.ts +207 -54
  34. package/src/sdd.ts +47 -32
  35. package/tests/integration.test.ts +94 -51
  36. package/dist/delta/hasher.d.ts +0 -2
  37. package/dist/delta/hasher.d.ts.map +0 -1
  38. package/dist/delta/hasher.js +0 -8
  39. package/dist/delta/hasher.js.map +0 -1
  40. package/dist/lock/lock-manager.d.ts +0 -6
  41. package/dist/lock/lock-manager.d.ts.map +0 -1
  42. package/dist/lock/lock-manager.js +0 -39
  43. package/dist/lock/lock-manager.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
- export { SDD } from './sdd.js';
2
- export type { StoryFrontmatter, StoryFile, PendingItem, Delta, DeltaFile, ValidationResult, ValidationIssue, StoryStatus, StoryFileStatus, SDDConfig, ChangeRequest, ChangeRequestFrontmatter, ChangeRequestStatus, Bug, BugFrontmatter, BugStatus, } from './types.js';
3
- export { SDDError, LockFileNotFoundError, ParseError, ProjectNotInitializedError } from './errors.js';
4
- export type { ProjectInfo } from './scaffold/templates.js';
5
- export { isSDDProject, readConfig, writeConfig } from './config/config-manager.js';
6
- export { runAgent } from './agent/agent-runner.js';
7
- export type { AgentRunnerOptions } from './agent/agent-runner.js';
8
- export { DEFAULT_AGENTS, resolveAgentCommand } from './agent/agent-defaults.js';
1
+ export { SDD } from "./sdd.js";
2
+ export type { StoryFrontmatter, StoryFile, PendingItem, Delta, DeltaFile, ValidationResult, ValidationIssue, StoryStatus, StoryFileStatus, SDDConfig, ChangeRequest, ChangeRequestFrontmatter, ChangeRequestStatus, Bug, BugFrontmatter, BugStatus, } from "./types.js";
3
+ export { SDDError, LockFileNotFoundError, ParseError, ProjectNotInitializedError } from "./errors.js";
4
+ export type { ProjectInfo } from "./scaffold/templates.js";
5
+ export { isSDDProject, readConfig, writeConfig } from "./config/config-manager.js";
6
+ export { runAgent } from "./agent/agent-runner.js";
7
+ export type { AgentRunnerOptions } from "./agent/agent-runner.js";
8
+ export { DEFAULT_AGENTS, resolveAgentCommand } from "./agent/agent-defaults.js";
9
+ export { listSupportedAdapters, SKILL_ADAPTERS, syncSkillAdapters } from "./scaffold/skill-adapters.js";
10
+ export type { AdapterMode, SkillAdapterDefinition, SyncAdaptersOptions, AdapterFileAction, AdapterFileChange, SyncAdaptersResult, } from "./scaffold/skill-adapters.js";
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,GAAG,EACH,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACtG,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,GAAG,EACH,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACtG,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACxG,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveAgentCommand = exports.DEFAULT_AGENTS = exports.runAgent = exports.writeConfig = exports.readConfig = exports.isSDDProject = exports.ProjectNotInitializedError = exports.ParseError = exports.LockFileNotFoundError = exports.SDDError = exports.SDD = void 0;
3
+ exports.syncSkillAdapters = exports.SKILL_ADAPTERS = exports.listSupportedAdapters = exports.resolveAgentCommand = exports.DEFAULT_AGENTS = exports.runAgent = exports.writeConfig = exports.readConfig = exports.isSDDProject = exports.ProjectNotInitializedError = exports.ParseError = exports.LockFileNotFoundError = exports.SDDError = exports.SDD = void 0;
4
4
  var sdd_js_1 = require("./sdd.js");
5
5
  Object.defineProperty(exports, "SDD", { enumerable: true, get: function () { return sdd_js_1.SDD; } });
6
6
  var errors_js_1 = require("./errors.js");
@@ -17,4 +17,8 @@ Object.defineProperty(exports, "runAgent", { enumerable: true, get: function ()
17
17
  var agent_defaults_js_1 = require("./agent/agent-defaults.js");
18
18
  Object.defineProperty(exports, "DEFAULT_AGENTS", { enumerable: true, get: function () { return agent_defaults_js_1.DEFAULT_AGENTS; } });
19
19
  Object.defineProperty(exports, "resolveAgentCommand", { enumerable: true, get: function () { return agent_defaults_js_1.resolveAgentCommand; } });
20
+ var skill_adapters_js_1 = require("./scaffold/skill-adapters.js");
21
+ Object.defineProperty(exports, "listSupportedAdapters", { enumerable: true, get: function () { return skill_adapters_js_1.listSupportedAdapters; } });
22
+ Object.defineProperty(exports, "SKILL_ADAPTERS", { enumerable: true, get: function () { return skill_adapters_js_1.SKILL_ADAPTERS; } });
23
+ Object.defineProperty(exports, "syncSkillAdapters", { enumerable: true, get: function () { return skill_adapters_js_1.syncSkillAdapters; } });
20
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAAtB,6FAAA,GAAG,OAAA;AAmBZ,yCAAsG;AAA7F,qGAAA,QAAQ,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,uHAAA,0BAA0B,OAAA;AAEhF,gEAAmF;AAA1E,iHAAA,YAAY,OAAA;AAAE,+GAAA,UAAU,OAAA;AAAE,gHAAA,WAAW,OAAA;AAC9C,2DAAmD;AAA1C,2GAAA,QAAQ,OAAA;AAEjB,+DAAgF;AAAvE,mHAAA,cAAc,OAAA;AAAE,wHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAAtB,6FAAA,GAAG,OAAA;AAmBZ,yCAAsG;AAA7F,qGAAA,QAAQ,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,uHAAA,0BAA0B,OAAA;AAEhF,gEAAmF;AAA1E,iHAAA,YAAY,OAAA;AAAE,+GAAA,UAAU,OAAA;AAAE,gHAAA,WAAW,OAAA;AAC9C,2DAAmD;AAA1C,2GAAA,QAAQ,OAAA;AAEjB,+DAAgF;AAAvE,mHAAA,cAAc,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAC5C,kEAAwG;AAA/F,0HAAA,qBAAqB,OAAA;AAAE,mHAAA,cAAc,OAAA;AAAE,sHAAA,iBAAiB,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply-prompt-generator.d.ts","sourceRoot":"","sources":["../../src/prompt/apply-prompt-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGjE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,GAAG,EAAE,EACX,cAAc,EAAE,aAAa,EAAE,EAC/B,YAAY,EAAE,SAAS,EAAE,EACzB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAyEf"}
1
+ {"version":3,"file":"apply-prompt-generator.d.ts","sourceRoot":"","sources":["../../src/prompt/apply-prompt-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGjE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,GAAG,EAAE,EACX,cAAc,EAAE,aAAa,EAAE,EAC/B,YAAY,EAAE,SAAS,EAAE,EACzB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAiDf"}
@@ -7,10 +7,9 @@ function generateApplyPrompt(bugs, changeRequests, pendingFiles, root) {
7
7
  return null;
8
8
  }
9
9
  const sections = [];
10
- sections.push('# SDD Apply\n\nThis project uses Story Driven Development. Complete the tasks below in order.');
11
- // Bugs section
10
+ // Bugs
12
11
  if (bugs.length > 0) {
13
- const lines = [`## Open Bugs (${bugs.length})\n`];
12
+ const lines = [`## Open bugs (${bugs.length})\n`];
14
13
  for (const bug of bugs) {
15
14
  lines.push(`### \`${bug.relativePath}\` — ${bug.frontmatter.title}\n`);
16
15
  lines.push(bug.body.trim());
@@ -18,9 +17,9 @@ function generateApplyPrompt(bugs, changeRequests, pendingFiles, root) {
18
17
  }
19
18
  sections.push(lines.join('\n'));
20
19
  }
21
- // Change Requests section
20
+ // Change Requests
22
21
  if (changeRequests.length > 0) {
23
- const lines = [`## Pending Change Requests (${changeRequests.length})\n`];
22
+ const lines = [`## Pending change requests (${changeRequests.length})\n`];
24
23
  for (const cr of changeRequests) {
25
24
  lines.push(`### \`${cr.relativePath}\` — ${cr.frontmatter.title}\n`);
26
25
  lines.push(cr.body.trim());
@@ -28,40 +27,22 @@ function generateApplyPrompt(bugs, changeRequests, pendingFiles, root) {
28
27
  }
29
28
  sections.push(lines.join('\n'));
30
29
  }
31
- // Pending Files section
30
+ // Pending files
32
31
  if (pendingFiles.length > 0) {
33
- const lines = [`## Pending Files (${pendingFiles.length})\n`];
32
+ const lines = [`## Pending files (${pendingFiles.length})\n`];
34
33
  for (const f of pendingFiles) {
35
34
  lines.push(`- \`${f.relativePath}\` — **${f.frontmatter.status}**`);
36
35
  }
37
- lines.push('');
38
- lines.push('Read each file listed above before implementing.');
39
- // Show git diff for changed files
40
36
  const changed = pendingFiles.filter((f) => f.frontmatter.status === 'changed');
41
37
  for (const f of changed) {
42
38
  const diff = (0, git_js_1.getFileDiff)(root, f.relativePath);
43
39
  if (diff) {
44
40
  lines.push('');
45
- lines.push(`### Changes in \`${f.relativePath}\`\n\n\`\`\`diff\n${diff}\n\`\`\``);
41
+ lines.push(`### Diff: \`${f.relativePath}\`\n\n\`\`\`diff\n${diff}\n\`\`\``);
46
42
  }
47
43
  }
48
44
  sections.push(lines.join('\n'));
49
45
  }
50
- // Instructions
51
- const instructions = ['## Instructions\n'];
52
- if (bugs.length > 0) {
53
- instructions.push('1. Fix each open bug, then run `sdd mark-bug-resolved <file>` and commit');
54
- }
55
- if (changeRequests.length > 0) {
56
- instructions.push(`${bugs.length > 0 ? '2' : '1'}. Apply each CR to the documentation, then run \`sdd mark-cr-applied <file>\` and commit`);
57
- }
58
- if (pendingFiles.length > 0) {
59
- const step = (bugs.length > 0 ? 1 : 0) + (changeRequests.length > 0 ? 1 : 0) + 1;
60
- instructions.push(`${step}. Implement each pending file, then run \`sdd mark-synced <file>\` and commit`);
61
- }
62
- const lastStep = (bugs.length > 0 ? 1 : 0) + (changeRequests.length > 0 ? 1 : 0) + (pendingFiles.length > 0 ? 1 : 0) + 1;
63
- instructions.push(`${lastStep}. After each mark-* command, immediately commit: \`git add -A && git commit -m "sdd: <description>"\``);
64
- sections.push(instructions.join('\n'));
65
46
  return sections.join('\n\n');
66
47
  }
67
48
  //# sourceMappingURL=apply-prompt-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-prompt-generator.js","sourceRoot":"","sources":["../../src/prompt/apply-prompt-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-prompt-generator.js","sourceRoot":"","sources":["../../src/prompt/apply-prompt-generator.ts"],"names":[],"mappings":";;AAGA,kDAsDC;AAxDD,0CAA4C;AAE5C,SAAgB,mBAAmB,CACjC,IAAW,EACX,cAA+B,EAC/B,YAAyB,EACzB,IAAY;IAEZ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,OAAO;IACP,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,CAAC,iBAAiB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,YAAY,QAAQ,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,kBAAkB;IAClB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,+BAA+B,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;QAC1E,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB;IAChB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,qBAAqB,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,qBAAqB,IAAI,UAAU,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-generator.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CA6CxE"}
1
+ {"version":3,"file":"prompt-generator.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAmCxE"}
@@ -3,38 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generatePrompt = generatePrompt;
4
4
  const git_js_1 = require("../git/git.js");
5
5
  function generatePrompt(files, root) {
6
- const sections = [];
7
- sections.push('# SDD Sync Prompt\n\nThis project uses Story Driven Development. Implement the changes described below.');
8
6
  if (files.length === 0) {
9
- sections.push('Nothing to do — all files are synced.');
10
- return sections.join('\n\n');
7
+ return 'Nothing to do — all files are synced.';
11
8
  }
12
- const lines = [`## Files to process (${files.length})\n`];
9
+ const sections = [];
10
+ const lines = [`## Pending files (${files.length})\n`];
13
11
  for (const f of files) {
14
12
  lines.push(`- \`${f.relativePath}\` — **${f.frontmatter.status}**`);
15
13
  }
16
- lines.push('');
17
- lines.push('Read each file listed above before implementing.');
18
14
  sections.push(lines.join('\n'));
19
- // Show git diff for changed files so the agent knows what was modified
15
+ // Git diff for changed files
20
16
  if (root) {
21
17
  const changed = files.filter((f) => f.frontmatter.status === 'changed');
22
18
  for (const f of changed) {
23
19
  const diff = (0, git_js_1.getFileDiff)(root, f.relativePath);
24
20
  if (diff) {
25
- sections.push(`## Changes in \`${f.relativePath}\`\n\n\`\`\`diff\n${diff}\n\`\`\``);
21
+ sections.push(`## Diff: \`${f.relativePath}\`\n\n\`\`\`diff\n${diff}\n\`\`\``);
26
22
  }
27
23
  }
28
24
  }
25
+ // Deleted files
29
26
  const deleted = files.filter((f) => f.frontmatter.status === 'deleted');
30
27
  if (deleted.length > 0) {
31
28
  const delLines = ['## Files to remove\n'];
32
29
  for (const f of deleted) {
33
- delLines.push(`- \`${f.relativePath}\` — remove all related code in \`code/\``);
30
+ delLines.push(`- \`${f.relativePath}\``);
34
31
  }
35
32
  sections.push(delLines.join('\n'));
36
33
  }
37
- sections.push(`## Instructions\n\n1. Read each file listed above\n2. For **new** files: implement what the documentation describes\n3. For **changed** files: update the code to match the updated documentation (see diff above)\n4. For **deleted** files: remove the related code from \`code/\`\n5. If a file has a \`## Agent Notes\` section, respect those constraints\n6. All code goes inside \`code/\`\n7. After implementing each file, run \`sdd mark-synced <file>\`\n8. **Immediately after mark-synced, commit**: \`git add -A && git commit -m "sdd sync: <description>"\`\n9. When done with all files, list every file you created or modified`);
38
34
  return sections.join('\n\n');
39
35
  }
40
36
  //# sourceMappingURL=prompt-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-generator.js","sourceRoot":"","sources":["../../src/prompt/prompt-generator.ts"],"names":[],"mappings":";;AAGA,wCA6CC;AA/CD,0CAA4C;AAE5C,SAAgB,cAAc,CAAC,KAAkB,EAAE,IAAa;IAC9D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CACX,yGAAyG,CAC1G,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC/D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhC,uEAAuE;IACvE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,YAAY,qBAAqB,IAAI,UAAU,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,2CAA2C,CAAC,CAAC;QAClF,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,IAAI,CACX,mnBAAmnB,CACpnB,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"prompt-generator.js","sourceRoot":"","sources":["../../src/prompt/prompt-generator.ts"],"names":[],"mappings":";;AAGA,wCAmCC;AArCD,0CAA4C;AAE5C,SAAgB,cAAc,CAAC,KAAkB,EAAE,IAAa;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,uCAAuC,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,KAAK,GAAG,CAAC,qBAAqB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhC,6BAA6B;IAC7B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,YAAY,qBAAqB,IAAI,UAAU,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,3 +1,3 @@
1
- import { type ProjectInfo } from './templates.js';
1
+ import { type ProjectInfo } from "./templates.js";
2
2
  export declare function initProject(root: string, info?: ProjectInfo): Promise<string[]>;
3
3
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/scaffold/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKrE,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8DrF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/scaffold/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCrF"}
@@ -4,7 +4,7 @@ exports.initProject = initProject;
4
4
  const promises_1 = require("node:fs/promises");
5
5
  const node_fs_1 = require("node:fs");
6
6
  const node_path_1 = require("node:path");
7
- const templates_js_1 = require("./templates.js");
7
+ const skill_adapters_js_1 = require("./skill-adapters.js");
8
8
  const config_manager_js_1 = require("../config/config-manager.js");
9
9
  const git_js_1 = require("../git/git.js");
10
10
  async function initProject(root, info) {
@@ -13,7 +13,7 @@ async function initProject(root, info) {
13
13
  // Ensure git repo
14
14
  if (!(0, git_js_1.isGitRepo)(root)) {
15
15
  (0, git_js_1.gitInit)(root);
16
- createdFiles.push('.git');
16
+ createdFiles.push(".git");
17
17
  }
18
18
  // Create .sdd directory
19
19
  if (!(0, node_fs_1.existsSync)(sddDir)) {
@@ -21,43 +21,24 @@ async function initProject(root, info) {
21
21
  }
22
22
  // Write config
23
23
  const config = {
24
- description: info?.description ?? '',
24
+ description: info?.description ?? "",
25
25
  };
26
26
  await (0, config_manager_js_1.writeConfig)(root, config);
27
- createdFiles.push('.sdd/config.yaml');
27
+ createdFiles.push(".sdd/config.yaml");
28
28
  // Create directory structure
29
- const dirs = ['product', 'product/features', 'system', 'code', 'change-requests', 'bugs'];
29
+ const dirs = ["product", "product/features", "system", "code", "change-requests", "bugs"];
30
30
  for (const dir of dirs) {
31
31
  const absDir = (0, node_path_1.resolve)(root, dir);
32
32
  if (!(0, node_fs_1.existsSync)(absDir)) {
33
33
  await (0, promises_1.mkdir)(absDir, { recursive: true });
34
34
  }
35
35
  }
36
- // Create agent instructions
37
- const instructionsPath = (0, node_path_1.resolve)(root, 'INSTRUCTIONS.md');
38
- if (!(0, node_fs_1.existsSync)(instructionsPath)) {
39
- await (0, promises_1.writeFile)(instructionsPath, templates_js_1.AGENT_MD_TEMPLATE, 'utf-8');
40
- createdFiles.push('INSTRUCTIONS.md');
41
- }
42
- // Create agent instruction pointers
43
- const POINTER = 'Read INSTRUCTIONS.md in the project root for all instructions.\n';
44
- const agentFiles = [
45
- { path: '.claude/CLAUDE.md', dir: '.claude' },
46
- { path: '.github/copilot-instructions.md', dir: '.github' },
47
- { path: '.cursorrules' },
48
- ];
49
- for (const entry of agentFiles) {
50
- const absPath = (0, node_path_1.resolve)(root, entry.path);
51
- if ((0, node_fs_1.existsSync)(absPath))
52
- continue;
53
- if (entry.dir) {
54
- const absDir = (0, node_path_1.resolve)(root, entry.dir);
55
- if (!(0, node_fs_1.existsSync)(absDir)) {
56
- await (0, promises_1.mkdir)(absDir, { recursive: true });
57
- }
36
+ // Create canonical skill and agent adapters
37
+ const adapters = await (0, skill_adapters_js_1.syncSkillAdapters)(root);
38
+ for (const change of [...adapters.canonical, ...adapters.adapters]) {
39
+ if (change.action === "created") {
40
+ createdFiles.push(change.path);
58
41
  }
59
- await (0, promises_1.writeFile)(absPath, POINTER, 'utf-8');
60
- createdFiles.push(entry.path);
61
42
  }
62
43
  return createdFiles;
63
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/scaffold/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/scaffold/init.ts"],"names":[],"mappings":";;AASA,kCAwCC;AAjDD,+CAAyC;AACzC,qCAAqC;AACrC,yCAAoC;AAEpC,2DAAwD;AACxD,mEAAsE;AACtE,0CAAmD;AAG5C,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,IAAkB;IAChE,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAA,8BAAU,EAAC,IAAI,CAAC,CAAC;IAEhC,kBAAkB;IAClB,IAAI,CAAC,IAAA,kBAAS,EAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAA,gBAAO,EAAC,IAAI,CAAC,CAAC;QACd,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAA,gBAAK,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe;IACf,MAAM,MAAM,GAAc;QACxB,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;KACrC,CAAC;IACF,MAAM,IAAA,+BAAW,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEtC,6BAA6B;IAC7B,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC1F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,IAAA,gBAAK,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,MAAM,IAAA,qCAAiB,EAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,39 @@
1
+ export type AdapterMode = "pointer" | "mirror";
2
+ export interface SkillPathsDefinition {
3
+ skillId: string;
4
+ paths: string[];
5
+ }
6
+ export interface SkillAdapterDefinition {
7
+ id: string;
8
+ mode: AdapterMode;
9
+ skills: SkillPathsDefinition[];
10
+ }
11
+ export interface SyncAdaptersOptions {
12
+ agents?: string[];
13
+ force?: boolean;
14
+ dryRun?: boolean;
15
+ }
16
+ export type AdapterFileAction = "created" | "updated" | "skipped";
17
+ export interface AdapterFileChange {
18
+ path: string;
19
+ action: AdapterFileAction;
20
+ reason?: string;
21
+ }
22
+ export interface SyncAdaptersResult {
23
+ canonical: AdapterFileChange[];
24
+ adapters: AdapterFileChange[];
25
+ selectedAgents: string[];
26
+ }
27
+ export interface SkillPathsDefinition {
28
+ skillId: string;
29
+ paths: string[];
30
+ }
31
+ export interface SkillAdapterDefinition {
32
+ id: string;
33
+ mode: AdapterMode;
34
+ skills: SkillPathsDefinition[];
35
+ }
36
+ export declare const SKILL_ADAPTERS: SkillAdapterDefinition[];
37
+ export declare function listSupportedAdapters(): string[];
38
+ export declare function syncSkillAdapters(root: string, options?: SyncAdaptersOptions): Promise<SyncAdaptersResult>;
39
+ //# sourceMappingURL=skill-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-adapters.d.ts","sourceRoot":"","sources":["../../src/scaffold/skill-adapters.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AA2CD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,eAAO,MAAM,cAAc,EAAE,sBAAsB,EAuClD,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAqF7B"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SKILL_ADAPTERS = void 0;
4
+ exports.listSupportedAdapters = listSupportedAdapters;
5
+ exports.syncSkillAdapters = syncSkillAdapters;
6
+ const promises_1 = require("node:fs/promises");
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ const templates_js_1 = require("./templates.js");
10
+ const MANAGED_HEADER = "<!-- AUTO-GENERATED BY SDD. DO NOT EDIT MANUALLY. -->\n";
11
+ const CANONICAL_BASE_DIR = ".sdd/skill";
12
+ const CANONICAL_SKILLS = [
13
+ {
14
+ id: "sdd",
15
+ files: [
16
+ {
17
+ path: `${CANONICAL_BASE_DIR}/sdd/SKILL.md`,
18
+ content: templates_js_1.SKILL_MD_TEMPLATE,
19
+ },
20
+ {
21
+ path: `${CANONICAL_BASE_DIR}/sdd/references/file-format.md`,
22
+ content: templates_js_1.FILE_FORMAT_REFERENCE,
23
+ },
24
+ {
25
+ path: `${CANONICAL_BASE_DIR}/sdd/references/change-requests.md`,
26
+ content: templates_js_1.CHANGE_REQUESTS_REFERENCE,
27
+ },
28
+ {
29
+ path: `${CANONICAL_BASE_DIR}/sdd/references/bugs.md`,
30
+ content: templates_js_1.BUGS_REFERENCE,
31
+ },
32
+ ],
33
+ },
34
+ {
35
+ id: "sdd-ui",
36
+ files: [
37
+ {
38
+ path: `${CANONICAL_BASE_DIR}/sdd-ui/SKILL.md`,
39
+ content: templates_js_1.SKILL_UI_MD_TEMPLATE,
40
+ },
41
+ ],
42
+ },
43
+ ];
44
+ const CANONICAL_FILES = CANONICAL_SKILLS.flatMap((skill) => skill.files);
45
+ exports.SKILL_ADAPTERS = [
46
+ {
47
+ id: "claude",
48
+ mode: "mirror",
49
+ skills: [
50
+ {
51
+ skillId: "sdd",
52
+ paths: [
53
+ ".claude/skills/sdd/SKILL.md",
54
+ ".claude/skills/sdd/references/file-format.md",
55
+ ".claude/skills/sdd/references/change-requests.md",
56
+ ".claude/skills/sdd/references/bugs.md",
57
+ ],
58
+ },
59
+ {
60
+ skillId: "sdd-ui",
61
+ paths: [".claude/skills/sdd-ui/SKILL.md"],
62
+ },
63
+ ],
64
+ },
65
+ {
66
+ id: "universal",
67
+ mode: "mirror",
68
+ skills: [
69
+ {
70
+ skillId: "sdd",
71
+ paths: [
72
+ ".agents/skills/sdd/SKILL.md",
73
+ ".agents/skills/sdd/references/file-format.md",
74
+ ".agents/skills/sdd/references/change-requests.md",
75
+ ".agents/skills/sdd/references/bugs.md",
76
+ ],
77
+ },
78
+ {
79
+ skillId: "sdd-ui",
80
+ paths: [".agents/skills/sdd-ui/SKILL.md"],
81
+ },
82
+ ],
83
+ },
84
+ ];
85
+ function listSupportedAdapters() {
86
+ return exports.SKILL_ADAPTERS.map((adapter) => adapter.id);
87
+ }
88
+ async function syncSkillAdapters(root, options) {
89
+ const force = options?.force ?? false;
90
+ const dryRun = options?.dryRun ?? false;
91
+ const selected = resolveSelectedAdapters(options?.agents);
92
+ // Build a map of skillId → canonical files for quick lookup
93
+ const canonicalFilesBySkill = new Map();
94
+ for (const skill of CANONICAL_SKILLS) {
95
+ canonicalFilesBySkill.set(skill.id, skill.files);
96
+ }
97
+ const canonicalChanges = [];
98
+ for (const file of CANONICAL_FILES) {
99
+ const change = await upsertFile(root, file.path, file.content, {
100
+ force,
101
+ dryRun,
102
+ managed: false,
103
+ });
104
+ canonicalChanges.push(change);
105
+ }
106
+ const adapterChanges = [];
107
+ for (const adapter of selected) {
108
+ for (const skillDef of adapter.skills) {
109
+ const canonicalFiles = canonicalFilesBySkill.get(skillDef.skillId);
110
+ if (adapter.mode === "pointer") {
111
+ const content = buildPointerContent(adapter.id, skillDef.skillId);
112
+ for (const path of skillDef.paths) {
113
+ const change = await upsertFile(root, path, content, {
114
+ force,
115
+ dryRun,
116
+ managed: true,
117
+ });
118
+ adapterChanges.push(change);
119
+ }
120
+ continue;
121
+ }
122
+ // mirror mode: copy canonical content to adapter paths
123
+ if (!canonicalFiles) {
124
+ for (const path of skillDef.paths) {
125
+ adapterChanges.push({
126
+ path,
127
+ action: "skipped",
128
+ reason: `No canonical files found for skill "${skillDef.skillId}"`,
129
+ });
130
+ }
131
+ continue;
132
+ }
133
+ for (let i = 0; i < skillDef.paths.length; i += 1) {
134
+ const canonical = canonicalFiles[i];
135
+ if (!canonical) {
136
+ adapterChanges.push({
137
+ path: skillDef.paths[i],
138
+ action: "skipped",
139
+ reason: "No corresponding canonical source file",
140
+ });
141
+ continue;
142
+ }
143
+ const change = await upsertFile(root, skillDef.paths[i], canonical.content, {
144
+ force,
145
+ dryRun,
146
+ managed: false,
147
+ });
148
+ adapterChanges.push(change);
149
+ }
150
+ }
151
+ }
152
+ return {
153
+ canonical: canonicalChanges,
154
+ adapters: adapterChanges,
155
+ selectedAgents: selected.map((adapter) => adapter.id),
156
+ };
157
+ }
158
+ function resolveSelectedAdapters(agents) {
159
+ if (!agents || agents.length === 0) {
160
+ return exports.SKILL_ADAPTERS;
161
+ }
162
+ const normalized = new Set(agents.map((agent) => agent.trim().toLowerCase()).filter(Boolean));
163
+ const selected = exports.SKILL_ADAPTERS.filter((adapter) => normalized.has(adapter.id));
164
+ const missing = Array.from(normalized).filter((agent) => !exports.SKILL_ADAPTERS.some((adapter) => adapter.id === agent));
165
+ if (missing.length > 0) {
166
+ throw new Error(`Unsupported adapters: ${missing.join(", ")}`);
167
+ }
168
+ return selected;
169
+ }
170
+ function buildPointerContent(adapterId, skillId) {
171
+ if (adapterId === "cursor") {
172
+ return `---
173
+ description: SDD ${skillId} adapter
174
+ alwaysApply: false
175
+ ---
176
+
177
+ Read .sdd/skill/${skillId}/SKILL.md for the full SDD ${skillId} workflow.
178
+
179
+ If needed, also read the references in .sdd/skill/${skillId}/references/
180
+ `;
181
+ }
182
+ return `# SDD ${skillId} Adapter (${adapterId})
183
+
184
+ Primary instructions: .sdd/skill/${skillId}/SKILL.md
185
+
186
+ References:
187
+ - .sdd/skill/${skillId}/references/
188
+
189
+ Fallback (legacy): .claude/skills/${skillId}/SKILL.md
190
+ `;
191
+ }
192
+ async function upsertFile(root, relativePath, content, options) {
193
+ const absPath = (0, node_path_1.resolve)(root, relativePath);
194
+ const finalContent = options.managed
195
+ ? `${MANAGED_HEADER}${content}`
196
+ : content;
197
+ if (!(0, node_fs_1.existsSync)(absPath)) {
198
+ if (!options.dryRun) {
199
+ await (0, promises_1.mkdir)((0, node_path_1.dirname)(absPath), { recursive: true });
200
+ await (0, promises_1.writeFile)(absPath, finalContent, "utf-8");
201
+ }
202
+ return { path: relativePath, action: "created" };
203
+ }
204
+ const current = await (0, promises_1.readFile)(absPath, "utf-8");
205
+ if (current === finalContent) {
206
+ return {
207
+ path: relativePath,
208
+ action: "skipped",
209
+ reason: "Already up to date",
210
+ };
211
+ }
212
+ if (!options.force) {
213
+ return {
214
+ path: relativePath,
215
+ action: "skipped",
216
+ reason: "Exists (use --force to overwrite)",
217
+ };
218
+ }
219
+ if (!options.dryRun) {
220
+ await (0, promises_1.writeFile)(absPath, finalContent, "utf-8");
221
+ }
222
+ return { path: relativePath, action: "updated" };
223
+ }
224
+ //# sourceMappingURL=skill-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-adapters.js","sourceRoot":"","sources":["../../src/scaffold/skill-adapters.ts"],"names":[],"mappings":"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"}