@applica-software-guru/sdd 1.0.3 → 1.3.1

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.
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAdapters(program: Command): void;
3
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/commands/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgGvD"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAdapters = registerAdapters;
4
+ const sdd_core_1 = require("@applica-software-guru/sdd-core");
5
+ const format_js_1 = require("../ui/format.js");
6
+ function parseAgents(value) {
7
+ return value
8
+ .split(",")
9
+ .map((v) => v.trim().toLowerCase())
10
+ .filter(Boolean);
11
+ }
12
+ function registerAdapters(program) {
13
+ const adapters = program
14
+ .command("adapters")
15
+ .description("Manage AI agent skill adapters");
16
+ adapters
17
+ .command("list")
18
+ .description("List supported adapters with mode and target file paths")
19
+ .action(() => {
20
+ console.log((0, format_js_1.heading)("Supported Adapters"));
21
+ for (const adapter of sdd_core_1.SKILL_ADAPTERS) {
22
+ console.log((0, format_js_1.info)(`${adapter.id} (${adapter.mode})`));
23
+ for (const skill of adapter.skills) {
24
+ console.log(` ${skill.skillId}:`);
25
+ for (const path of skill.paths) {
26
+ console.log(` - ${path}`);
27
+ }
28
+ }
29
+ }
30
+ console.log("");
31
+ });
32
+ adapters
33
+ .command("sync")
34
+ .description("Create or update skill adapters for supported agents")
35
+ .option("--agents <list>", "Comma-separated adapter ids (for example: claude,copilot,cursor)")
36
+ .option("--all", "Configure all supported adapters")
37
+ .option("--dry-run", "Show what would change without writing files")
38
+ .option("--force", "Overwrite existing adapter files when content differs")
39
+ .action(async (options) => {
40
+ const sdd = new sdd_core_1.SDD({ root: process.cwd() });
41
+ const supported = sdd.supportedAdapters();
42
+ const selectedAgents = options.all || !options.agents
43
+ ? undefined
44
+ : parseAgents(options.agents);
45
+ if (selectedAgents && selectedAgents.length === 0) {
46
+ console.log((0, format_js_1.warning)("No valid adapter id was provided."));
47
+ console.log((0, format_js_1.info)(`Supported adapters: ${supported.join(", ")}`));
48
+ return;
49
+ }
50
+ const result = await sdd.syncAdapters({
51
+ agents: selectedAgents,
52
+ dryRun: options.dryRun,
53
+ force: options.force,
54
+ });
55
+ const allChanges = [...result.canonical, ...result.adapters];
56
+ const created = allChanges.filter((c) => c.action === "created");
57
+ const updated = allChanges.filter((c) => c.action === "updated");
58
+ const skipped = allChanges.filter((c) => c.action === "skipped");
59
+ console.log((0, format_js_1.heading)("Adapters Sync"));
60
+ console.log((0, format_js_1.info)(`Selected: ${result.selectedAgents.join(", ")}`));
61
+ if (options.dryRun) {
62
+ console.log((0, format_js_1.info)("Dry run mode enabled. No files were written."));
63
+ }
64
+ console.log("");
65
+ for (const change of created) {
66
+ console.log((0, format_js_1.success)(change.path));
67
+ }
68
+ for (const change of updated) {
69
+ console.log((0, format_js_1.success)(`${change.path} (updated)`));
70
+ }
71
+ for (const change of skipped) {
72
+ const reason = change.reason ? ` — ${change.reason}` : "";
73
+ console.log((0, format_js_1.warning)(`${change.path}${reason}`));
74
+ }
75
+ console.log("");
76
+ console.log((0, format_js_1.info)(`Created: ${created.length} Updated: ${updated.length} Skipped: ${skipped.length}`));
77
+ console.log((0, format_js_1.info)(`Supported adapters: ${supported.join(", ")}`));
78
+ console.log((0, format_js_1.info)("Run `sdd adapters list` to inspect adapter modes and target paths."));
79
+ console.log("");
80
+ });
81
+ }
82
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/commands/adapters.ts"],"names":[],"mappings":";;AAWA,4CAgGC;AA1GD,8DAAsE;AACtE,+CAAkE;AAElE,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,gCAAgC,CAAC,CAAC;IAEjD,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,oBAAoB,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM,OAAO,IAAI,yBAAc,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,GAAG,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACrD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;gBACnC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CACL,iBAAiB,EACjB,kEAAkE,CACnE;SACA,MAAM,CAAC,OAAO,EAAE,kCAAkC,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;SACnE,MAAM,CAAC,SAAS,EAAE,uDAAuD,CAAC;SAC1E,MAAM,CACL,KAAK,EAAE,OAKN,EAAE,EAAE;QACH,MAAM,GAAG,GAAG,IAAI,cAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAC1C,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YAC5B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,mCAAmC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,uBAAuB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC;YACpC,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,eAAe,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,aAAa,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,8CAA8C,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,GAAG,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,IAAA,gBAAI,EACF,YAAY,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,MAAM,EAAE,CACrF,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,uBAAuB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CACT,IAAA,gBAAI,EACF,oEAAoE,CACrE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
1
+ import { Command } from "commander";
2
2
  export declare function registerInit(program: Command): void;
3
3
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsKnD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8LnD"}
@@ -14,10 +14,10 @@ const sdd_core_1 = require("@applica-software-guru/sdd-core");
14
14
  const banner_js_1 = require("../ui/banner.js");
15
15
  const format_js_1 = require("../ui/format.js");
16
16
  const markdown_js_1 = require("../ui/markdown.js");
17
- const START_PROMPT = `Read INSTRUCTIONS.md and the documentation in product/ and system/, then run \`sdd sync\` to start working.`;
17
+ const START_PROMPT = `Read .sdd/skill/sdd/SKILL.md (fallback: .claude/skills/sdd/SKILL.md) and the documentation in product/ and system/, then run \`sdd sync\` to start working.`;
18
18
  function buildBootstrapPrompt(description, auto) {
19
19
  if (auto) {
20
- return `Read INSTRUCTIONS.md first. This is a new SDD project.
20
+ return `Read .sdd/skill/sdd/SKILL.md first (fallback: .claude/skills/sdd/SKILL.md). This is a new SDD project.
21
21
 
22
22
  Project goal: "${description}"
23
23
 
@@ -31,9 +31,9 @@ Your task: generate the initial documentation for this project based on the desc
31
31
  - system/tech-stack.md — Technologies and frameworks
32
32
  - system/interfaces.md — API contracts
33
33
 
34
- Follow the file format described in INSTRUCTIONS.md for the YAML frontmatter. Do NOT write any code, only documentation. Commit all created files when done.`;
34
+ Follow the file format described in .sdd/skill/sdd/references/file-format.md for the YAML frontmatter. Do NOT write any code, only documentation. Commit all created files when done.`;
35
35
  }
36
- return `Read INSTRUCTIONS.md first. This is a new SDD project.
36
+ return `Read .sdd/skill/sdd/SKILL.md first (fallback: .claude/skills/sdd/SKILL.md). This is a new SDD project.
37
37
 
38
38
  Project goal: "${description}"
39
39
 
@@ -47,59 +47,62 @@ Your task: generate the initial documentation for this project. Ask me a few que
47
47
  - system/tech-stack.md — Technologies and frameworks
48
48
  - system/interfaces.md — API contracts
49
49
 
50
- Follow the file format described in INSTRUCTIONS.md for the YAML frontmatter. Do NOT write any code, only documentation.`;
50
+ Follow the file format described in .sdd/skill/sdd/references/file-format.md for the YAML frontmatter. Do NOT write any code, only documentation.`;
51
51
  }
52
52
  function registerInit(program) {
53
53
  program
54
- .command('init <project-name>')
55
- .description('Initialize a new SDD project')
54
+ .command("init <project-name>")
55
+ .description("Initialize a new SDD project")
56
56
  .action(async (projectName) => {
57
57
  (0, banner_js_1.printBanner)();
58
58
  const projectDir = (0, node_path_1.resolve)(process.cwd(), projectName);
59
- if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, '.sdd'))) {
59
+ if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectDir, ".sdd"))) {
60
60
  console.log(chalk_1.default.yellow(`\n SDD project already initialized at ${projectName}/\n`));
61
61
  return;
62
62
  }
63
63
  const promptTheme = {
64
- prefix: chalk_1.default.cyan('?'),
64
+ prefix: chalk_1.default.cyan("?"),
65
65
  style: { message: (text) => chalk_1.default.cyan.bold(text) },
66
66
  };
67
67
  const description = await (0, prompts_1.input)({
68
- message: 'What should your project do?',
68
+ message: "What should your project do?",
69
69
  theme: promptTheme,
70
70
  });
71
71
  if (!description.trim()) {
72
- console.log(chalk_1.default.yellow('\n No description provided. Aborting.\n'));
72
+ console.log(chalk_1.default.yellow("\n No description provided. Aborting.\n"));
73
73
  return;
74
74
  }
75
75
  const agentChoice = await (0, prompts_1.select)({
76
- message: 'Which agent do you use?',
76
+ message: "Which agent do you use?",
77
77
  choices: [
78
- { value: 'claude', name: 'Claude Code' },
79
- { value: 'codex', name: 'Codex' },
80
- { value: 'opencode', name: 'OpenCode' },
81
- { value: 'other', name: 'Other' },
78
+ { value: "claude", name: "Claude Code" },
79
+ { value: "codex", name: "Codex" },
80
+ { value: "opencode", name: "OpenCode" },
81
+ { value: "other", name: "Other" },
82
82
  ],
83
83
  theme: promptTheme,
84
84
  });
85
85
  let agentName = agentChoice;
86
86
  let customCommand;
87
- if (agentChoice === 'other') {
87
+ if (agentChoice === "other") {
88
88
  agentName = await (0, prompts_1.input)({
89
- message: 'Agent name:',
89
+ message: "Agent name:",
90
90
  theme: promptTheme,
91
91
  });
92
92
  customCommand = await (0, prompts_1.input)({
93
- message: 'Agent command (use $PROMPT_FILE for the prompt file path):',
93
+ message: "Agent command (use $PROMPT_FILE for the prompt file path):",
94
94
  theme: promptTheme,
95
95
  });
96
96
  }
97
97
  const bootstrapMode = await (0, prompts_1.select)({
98
- message: 'How do you want to start?',
98
+ message: "How do you want to start?",
99
99
  choices: [
100
- { value: 'skip', name: 'Write docs manually' },
101
- { value: 'prompt', name: 'Generate bootstrap prompt (copy to clipboard)' },
102
- { value: 'auto', name: 'Generate and apply bootstrap automatically' },
100
+ { value: "skip", name: "Write docs manually" },
101
+ {
102
+ value: "prompt",
103
+ name: "Generate bootstrap prompt (copy to clipboard)",
104
+ },
105
+ { value: "auto", name: "Generate and apply bootstrap automatically" },
103
106
  ],
104
107
  theme: promptTheme,
105
108
  });
@@ -107,8 +110,8 @@ function registerInit(program) {
107
110
  (0, node_fs_1.mkdirSync)(projectDir, { recursive: true });
108
111
  }
109
112
  const spinner = (0, ora_1.default)({
110
- text: 'Creating project structure...',
111
- color: 'cyan',
113
+ text: "Creating project structure...",
114
+ color: "cyan",
112
115
  }).start();
113
116
  const sdd = new sdd_core_1.SDD({ root: projectDir });
114
117
  const files = await sdd.init({ description: description.trim() });
@@ -123,22 +126,23 @@ function registerInit(program) {
123
126
  // Project created
124
127
  console.log(chalk_1.default.cyan.bold(`\n ${chalk_1.default.white(projectName)} is ready!\n`));
125
128
  // Show what was created
126
- console.log(chalk_1.default.dim(' Created:'));
129
+ console.log(chalk_1.default.dim(" Created:"));
127
130
  for (const f of files) {
128
131
  console.log((0, format_js_1.success)(f));
129
132
  }
130
- console.log((0, format_js_1.success)('product/'));
131
- console.log((0, format_js_1.success)('product/features/'));
132
- console.log((0, format_js_1.success)('system/'));
133
- console.log((0, format_js_1.success)('code/'));
134
- if (bootstrapMode === 'auto') {
133
+ console.log((0, format_js_1.success)("product/"));
134
+ console.log((0, format_js_1.success)("product/features/"));
135
+ console.log((0, format_js_1.success)("system/"));
136
+ console.log((0, format_js_1.success)("code/"));
137
+ console.log((0, format_js_1.success)(".claude/skills/"));
138
+ if (bootstrapMode === "auto") {
135
139
  const prompt = buildBootstrapPrompt(description.trim(), true);
136
- console.log(chalk_1.default.dim(''.repeat(30)));
137
- console.log((0, format_js_1.heading)('Agent Prompt'));
140
+ console.log(chalk_1.default.dim("".repeat(30)));
141
+ console.log((0, format_js_1.heading)("Agent Prompt"));
138
142
  console.log((0, markdown_js_1.renderMarkdown)(prompt));
139
- console.log(chalk_1.default.dim(''.repeat(30)));
143
+ console.log(chalk_1.default.dim("".repeat(30)));
140
144
  console.log((0, format_js_1.info)(`Using agent: ${chalk_1.default.cyan(agentName)}`));
141
- console.log((0, format_js_1.info)('Starting agent...\n'));
145
+ console.log((0, format_js_1.info)("Starting agent...\n"));
142
146
  const exitCode = await (0, sdd_core_1.runAgent)({
143
147
  root: projectDir,
144
148
  prompt,
@@ -149,43 +153,43 @@ function registerInit(program) {
149
153
  console.log(chalk_1.default.red(`\n Agent exited with code ${exitCode}`));
150
154
  process.exit(exitCode);
151
155
  }
152
- console.log(chalk_1.default.green('\n Agent completed successfully.'));
156
+ console.log(chalk_1.default.green("\n Agent completed successfully."));
153
157
  return;
154
158
  }
155
- if (bootstrapMode === 'prompt') {
159
+ if (bootstrapMode === "prompt") {
156
160
  const prompt = buildBootstrapPrompt(description.trim(), false);
157
- console.log(chalk_1.default.cyan.bold('\n Next steps:\n'));
158
- console.log(` ${chalk_1.default.white('1.')} Enter the project folder:\n`);
161
+ console.log(chalk_1.default.cyan.bold("\n Next steps:\n"));
162
+ console.log(` ${chalk_1.default.white("1.")} Enter the project folder:\n`);
159
163
  console.log(` ${chalk_1.default.green(`cd ${projectName}`)}\n`);
160
- console.log(` ${chalk_1.default.white('2.')} Open your AI agent and paste the prompt below.`);
164
+ console.log(` ${chalk_1.default.white("2.")} Open your AI agent and paste the prompt below.`);
161
165
  console.log(` It will ask you a few questions and generate the initial docs.\n`);
162
- console.log(chalk_1.default.dim(''.repeat(30)));
163
- console.log((0, format_js_1.heading)('Agent Prompt'));
166
+ console.log(chalk_1.default.dim("".repeat(30)));
167
+ console.log((0, format_js_1.heading)("Agent Prompt"));
164
168
  console.log((0, markdown_js_1.renderMarkdown)(prompt));
165
169
  try {
166
170
  await clipboardy_1.default.write(prompt);
167
- console.log((0, format_js_1.success)('Copied to clipboard — paste it into your agent.\n'));
171
+ console.log((0, format_js_1.success)("Copied to clipboard — paste it into your agent.\n"));
168
172
  }
169
173
  catch {
170
- console.log((0, format_js_1.info)('Copy the prompt above into your agent.\n'));
174
+ console.log((0, format_js_1.info)("Copy the prompt above into your agent.\n"));
171
175
  }
172
176
  return;
173
177
  }
174
178
  // skip — manual mode
175
- console.log(chalk_1.default.cyan.bold('\n Next steps:\n'));
176
- console.log(` ${chalk_1.default.white('1.')} Enter the project folder:\n`);
179
+ console.log(chalk_1.default.cyan.bold("\n Next steps:\n"));
180
+ console.log(` ${chalk_1.default.white("1.")} Enter the project folder:\n`);
177
181
  console.log(` ${chalk_1.default.green(`cd ${projectName}`)}\n`);
178
- console.log(` ${chalk_1.default.white('2.')} Start writing your documentation in ${chalk_1.default.cyan('product/')} and ${chalk_1.default.cyan('system/')}.`);
179
- console.log(` Check ${chalk_1.default.cyan('INSTRUCTIONS.md')} for the file format.\n`);
180
- console.log(` ${chalk_1.default.white('3.')} When ready, let your AI agent run:\n`);
181
- console.log(` ${chalk_1.default.green('sdd sync')}\n`);
182
+ console.log(` ${chalk_1.default.white("2.")} Start writing your documentation in ${chalk_1.default.cyan("product/")} and ${chalk_1.default.cyan("system/")}.`);
183
+ console.log(` Check ${chalk_1.default.cyan(".sdd/skill/sdd/SKILL.md")} for the workflow.\n`);
184
+ console.log(` ${chalk_1.default.white("3.")} When ready, let your AI agent run:\n`);
185
+ console.log(` ${chalk_1.default.green("sdd sync")}\n`);
182
186
  const prompt = START_PROMPT;
183
187
  try {
184
188
  await clipboardy_1.default.write(prompt);
185
- console.log((0, format_js_1.success)('Copied to clipboard — paste it into your agent.\n'));
189
+ console.log((0, format_js_1.success)("Copied to clipboard — paste it into your agent.\n"));
186
190
  }
187
191
  catch {
188
- console.log((0, format_js_1.info)('Copy the prompt above into your agent.\n'));
192
+ console.log((0, format_js_1.info)("Copy the prompt above into your agent.\n"));
189
193
  }
190
194
  });
191
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUI(program: Command): void;
3
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/commands/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwHjD"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerUI = registerUI;
7
+ const node_module_1 = require("node:module");
8
+ const node_path_1 = require("node:path");
9
+ const node_fs_1 = require("node:fs");
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_child_process_1 = require("node:child_process");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const format_js_1 = require("../ui/format.js");
14
+ const SCAFFOLD_TEMPLATE = (name) => `import React from 'react';
15
+
16
+ export default function ${name}() {
17
+ return (
18
+ <div style={{ padding: '2rem', fontFamily: 'system-ui, sans-serif' }}>
19
+ <h1>${name}</h1>
20
+ <p>Start editing this component to see changes live.</p>
21
+ </div>
22
+ );
23
+ }
24
+ `;
25
+ const PID_FILE = '.sdd/ui.pid';
26
+ function collect(value, prev) {
27
+ return [...prev, value];
28
+ }
29
+ function resolveSddUiDir() {
30
+ const pkgRequire = (0, node_module_1.createRequire)(__filename);
31
+ try {
32
+ return (0, node_path_1.dirname)(pkgRequire.resolve('@applica-software-guru/sdd-ui/package.json'));
33
+ }
34
+ catch {
35
+ console.error((0, format_js_1.error)('Package @applica-software-guru/sdd-ui not found.\n' +
36
+ ' Run: npm install @applica-software-guru/sdd-ui'));
37
+ process.exit(1);
38
+ }
39
+ }
40
+ function registerUI(program) {
41
+ const ui = program
42
+ .command('ui')
43
+ .description('UI Component Editor — visual development with live preview');
44
+ // launch-editor
45
+ ui
46
+ .command('launch-editor <component-name>')
47
+ .description('Launch the split-panel UI editor for a React component')
48
+ .option('--screenshot <path>', 'Screenshot to show in the spec panel (repeatable)', collect, [])
49
+ .option('--port <n>', 'Port for the UI editor', '5174')
50
+ .option('--detach', 'Run in background and return immediately')
51
+ .action(async (componentName, options) => {
52
+ const projectRoot = process.cwd();
53
+ const port = options.port;
54
+ const detach = Boolean(options.detach);
55
+ const screenshotArgs = options.screenshot;
56
+ // Resolve and validate screenshot paths
57
+ const screenshotPaths = screenshotArgs.map((p) => (0, node_path_1.resolve)(projectRoot, p));
58
+ for (const p of screenshotPaths) {
59
+ if (!(0, node_fs_1.existsSync)(p)) {
60
+ console.error((0, format_js_1.error)(`Screenshot not found: ${p}`));
61
+ process.exit(1);
62
+ }
63
+ }
64
+ // Resolve component path
65
+ const componentsDir = (0, node_path_1.join)(projectRoot, 'code', 'components');
66
+ const componentPath = (0, node_path_1.join)(componentsDir, `${componentName}.tsx`);
67
+ // Scaffold component if it doesn't exist
68
+ if (!(0, node_fs_1.existsSync)(componentPath)) {
69
+ if (!(0, node_fs_1.existsSync)(componentsDir)) {
70
+ (0, node_fs_1.mkdirSync)(componentsDir, { recursive: true });
71
+ }
72
+ (0, node_fs_1.writeFileSync)(componentPath, SCAFFOLD_TEMPLATE(componentName), 'utf-8');
73
+ console.log((0, format_js_1.info)(`Scaffolded component at ${chalk_1.default.cyan(componentPath)}`));
74
+ }
75
+ const sddUiDir = resolveSddUiDir();
76
+ // Write .env.local — screenshot paths are pipe-separated (| is not valid in fs paths)
77
+ const envLines = [
78
+ `VITE_COMPONENT_PATH=${componentPath}`,
79
+ `VITE_COMPONENT_NAME=${componentName}`,
80
+ `VITE_SCREENSHOT_PATHS=${screenshotPaths.join('|')}`,
81
+ ];
82
+ await (0, promises_1.writeFile)((0, node_path_1.join)(sddUiDir, '.env.local'), envLines.join('\n'), 'utf-8');
83
+ // Print launch info
84
+ console.log('');
85
+ console.log((0, format_js_1.success)(`sdd-ui starting on ${chalk_1.default.cyan(`http://localhost:${port}`)}`));
86
+ console.log((0, format_js_1.info)(`Component: ${chalk_1.default.cyan(componentPath)}`));
87
+ for (const p of screenshotPaths) {
88
+ console.log((0, format_js_1.info)(`Screenshot: ${chalk_1.default.cyan((0, node_path_1.basename)(p))} ${chalk_1.default.dim(p)}`));
89
+ }
90
+ if (detach) {
91
+ // Launch detached — process survives after sdd exits
92
+ const vite = (0, node_child_process_1.spawn)('npx', ['vite', '--port', port], {
93
+ cwd: sddUiDir,
94
+ stdio: 'ignore',
95
+ detached: true,
96
+ shell: false,
97
+ });
98
+ vite.unref();
99
+ // Save PID so `sdd ui stop` can kill it
100
+ const pidFile = (0, node_path_1.join)(projectRoot, PID_FILE);
101
+ (0, node_fs_1.writeFileSync)(pidFile, String(vite.pid), 'utf-8');
102
+ console.log((0, format_js_1.info)(`Running in background ${chalk_1.default.dim(`(PID ${vite.pid})`)}`));
103
+ console.log(chalk_1.default.dim(` Stop with: ${chalk_1.default.white('sdd ui stop')}\n`));
104
+ }
105
+ else {
106
+ console.log(chalk_1.default.dim(' Press Ctrl+C to stop.\n'));
107
+ const vite = (0, node_child_process_1.spawn)('npx', ['vite', '--port', port], {
108
+ cwd: sddUiDir,
109
+ stdio: 'inherit',
110
+ shell: false,
111
+ });
112
+ vite.on('error', (err) => {
113
+ console.error((0, format_js_1.error)(`Failed to start vite: ${err.message}`));
114
+ process.exit(1);
115
+ });
116
+ vite.on('close', (code) => process.exit(code ?? 0));
117
+ process.on('SIGINT', () => vite.kill('SIGINT'));
118
+ process.on('SIGTERM', () => vite.kill('SIGTERM'));
119
+ }
120
+ });
121
+ // stop
122
+ ui
123
+ .command('stop')
124
+ .description('Stop a detached UI editor started with --detach')
125
+ .action(() => {
126
+ const projectRoot = process.cwd();
127
+ const pidFile = (0, node_path_1.join)(projectRoot, PID_FILE);
128
+ if (!(0, node_fs_1.existsSync)(pidFile)) {
129
+ console.log((0, format_js_1.info)('No running sdd-ui process found.'));
130
+ return;
131
+ }
132
+ const pid = parseInt((0, node_fs_1.readFileSync)(pidFile, 'utf-8').trim(), 10);
133
+ try {
134
+ process.kill(pid, 'SIGTERM');
135
+ (0, node_fs_1.unlinkSync)(pidFile);
136
+ console.log((0, format_js_1.success)(`Stopped sdd-ui ${chalk_1.default.dim(`(PID ${pid})`)}`));
137
+ }
138
+ catch {
139
+ // Process already dead — clean up the stale pid file
140
+ (0, node_fs_1.unlinkSync)(pidFile);
141
+ console.log((0, format_js_1.info)('Process was already stopped. Cleaned up pid file.'));
142
+ }
143
+ });
144
+ }
145
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/commands/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUpgrade(program: Command): void;
3
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0CtD"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerUpgrade = registerUpgrade;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ const node_child_process_1 = require("node:child_process");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const format_js_1 = require("../ui/format.js");
12
+ const skills_js_1 = require("../skills.js");
13
+ function registerUpgrade(program) {
14
+ program
15
+ .command('upgrade')
16
+ .description('Upgrade sdd to the latest version and refresh skills in the current project')
17
+ .action(async () => {
18
+ console.log((0, format_js_1.heading)('SDD Upgrade'));
19
+ console.log((0, format_js_1.info)('Running: npm install -g @applica-software-guru/sdd@latest\n'));
20
+ const exitCode = await new Promise((resolve) => {
21
+ const child = (0, node_child_process_1.spawn)('npm', ['install', '-g', '@applica-software-guru/sdd@latest'], {
22
+ stdio: 'inherit',
23
+ shell: false,
24
+ });
25
+ child.on('close', (code) => resolve(code ?? 1));
26
+ child.on('error', () => resolve(1));
27
+ });
28
+ if (exitCode !== 0) {
29
+ console.error(chalk_1.default.red('\n Upgrade failed. Check the output above.'));
30
+ process.exit(exitCode);
31
+ }
32
+ console.log('');
33
+ console.log((0, format_js_1.success)('CLI upgraded.'));
34
+ // If run from inside an SDD project, refresh the skills too
35
+ const projectRoot = process.cwd();
36
+ const isSddProject = (0, node_fs_1.existsSync)((0, node_path_1.join)(projectRoot, '.sdd', 'config.yaml'));
37
+ if (isSddProject) {
38
+ const updated = (0, skills_js_1.installSkills)(projectRoot);
39
+ if (updated) {
40
+ console.log((0, format_js_1.success)(`Skills updated in ${chalk_1.default.cyan('.claude/skills/')}`));
41
+ }
42
+ }
43
+ else {
44
+ console.log(chalk_1.default.dim('\n Run this command from inside an SDD project to also refresh skill files.'));
45
+ }
46
+ });
47
+ }
48
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":";;;;;AAQA,0CA0CC;AAjDD,qCAAqC;AACrC,yCAAiC;AACjC,2DAA2C;AAC3C,kDAA0B;AAC1B,+CAAyD;AACzD,4CAA6C;AAE7C,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,aAAa,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,6DAA6D,CAAC,CAAC,CAAC;QAEjF,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrD,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,mCAAmC,CAAC,EAAE;gBACjF,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,eAAe,CAAC,CAAC,CAAC;QAEtC,4DAA4D;QAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QAE1E,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,IAAA,yBAAa,EAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAO,EAAC,qBAAqB,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,8EAA8E,CAC/E,CACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/index.js CHANGED
@@ -12,12 +12,15 @@ const mark_synced_js_1 = require("./commands/mark-synced.js");
12
12
  const cr_js_1 = require("./commands/cr.js");
13
13
  const bug_js_1 = require("./commands/bug.js");
14
14
  const apply_js_1 = require("./commands/apply.js");
15
+ const adapters_js_1 = require("./commands/adapters.js");
16
+ const ui_js_1 = require("./commands/ui.js");
17
+ const upgrade_js_1 = require("./commands/upgrade.js");
15
18
  const packageRequire = (0, node_module_1.createRequire)(__filename);
16
- const packageJson = packageRequire('../package.json');
19
+ const packageJson = packageRequire("../package.json");
17
20
  const program = new commander_1.Command();
18
21
  program
19
- .name('sdd')
20
- .description('Story Driven Development — manage apps through structured documentation')
22
+ .name("sdd")
23
+ .description("Story Driven Development — manage apps through structured documentation")
21
24
  .version(packageJson.version);
22
25
  (0, init_js_1.registerInit)(program);
23
26
  (0, status_js_1.registerStatus)(program);
@@ -28,6 +31,9 @@ program
28
31
  (0, cr_js_1.registerCR)(program);
29
32
  (0, bug_js_1.registerBug)(program);
30
33
  (0, apply_js_1.registerApply)(program);
34
+ (0, adapters_js_1.registerAdapters)(program);
35
+ (0, ui_js_1.registerUI)(program);
36
+ (0, upgrade_js_1.registerUpgrade)(program);
31
37
  program.parseAsync().catch((err) => {
32
38
  console.error(err.message);
33
39
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,6CAA4C;AAC5C,gDAAkD;AAClD,oDAAsD;AACtD,gDAAkD;AAClD,gDAAkD;AAClD,wDAA0D;AAC1D,8DAA+D;AAC/D,4CAA8C;AAC9C,8CAAgD;AAChD,kDAAoD;AAEpD,MAAM,cAAc,GAAG,IAAA,2BAAa,EAAC,UAAU,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,cAAc,CAAC,iBAAiB,CAAwB,CAAC;AAE7E,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,mCAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;AACpB,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;AACrB,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;AAEvB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,6CAA4C;AAC5C,gDAAkD;AAClD,oDAAsD;AACtD,gDAAkD;AAClD,gDAAkD;AAClD,wDAA0D;AAC1D,8DAA+D;AAC/D,4CAA8C;AAC9C,8CAAgD;AAChD,kDAAoD;AACpD,wDAA0D;AAC1D,4CAA8C;AAC9C,sDAAwD;AAExD,MAAM,cAAc,GAAG,IAAA,2BAAa,EAAC,UAAU,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,cAAc,CAAC,iBAAiB,CAAwB,CAAC;AAE7E,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,mCAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;AACpB,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;AACrB,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;AACvB,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;AACpB,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}