@applica-software-guru/sdd 1.0.3 → 1.3.3

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":"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"}
@@ -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,CA2InD"}
@@ -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,40 @@ 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
- const agentChoice = await (0, prompts_1.select)({
76
- message: 'Which agent do you use?',
77
- choices: [
78
- { value: 'claude', name: 'Claude Code' },
79
- { value: 'codex', name: 'Codex' },
80
- { value: 'opencode', name: 'OpenCode' },
81
- { value: 'other', name: 'Other' },
82
- ],
83
- theme: promptTheme,
84
- });
85
- let agentName = agentChoice;
86
- let customCommand;
87
- if (agentChoice === 'other') {
88
- agentName = await (0, prompts_1.input)({
89
- message: 'Agent name:',
90
- theme: promptTheme,
91
- });
92
- customCommand = await (0, prompts_1.input)({
93
- message: 'Agent command (use $PROMPT_FILE for the prompt file path):',
94
- theme: promptTheme,
95
- });
96
- }
97
75
  const bootstrapMode = await (0, prompts_1.select)({
98
- message: 'How do you want to start?',
76
+ message: "How do you want to start?",
99
77
  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' },
78
+ { value: "skip", name: "Write docs manually" },
79
+ {
80
+ value: "prompt",
81
+ name: "Generate bootstrap prompt (copy to clipboard)",
82
+ },
83
+ { value: "auto", name: "Generate and apply bootstrap automatically" },
103
84
  ],
104
85
  theme: promptTheme,
105
86
  });
@@ -107,85 +88,79 @@ function registerInit(program) {
107
88
  (0, node_fs_1.mkdirSync)(projectDir, { recursive: true });
108
89
  }
109
90
  const spinner = (0, ora_1.default)({
110
- text: 'Creating project structure...',
111
- color: 'cyan',
91
+ text: "Creating project structure...",
92
+ color: "cyan",
112
93
  }).start();
113
94
  const sdd = new sdd_core_1.SDD({ root: projectDir });
114
95
  const files = await sdd.init({ description: description.trim() });
115
- // Save agent config
116
- const config = await sdd.config();
117
- config.agent = agentName;
118
- if (customCommand) {
119
- config.agents = { [agentName]: customCommand };
120
- }
121
- await (0, sdd_core_1.writeConfig)(projectDir, config);
122
96
  spinner.stop();
123
97
  // Project created
124
98
  console.log(chalk_1.default.cyan.bold(`\n ${chalk_1.default.white(projectName)} is ready!\n`));
125
99
  // Show what was created
126
- console.log(chalk_1.default.dim(' Created:'));
100
+ console.log(chalk_1.default.dim(" Created:"));
127
101
  for (const f of files) {
128
102
  console.log((0, format_js_1.success)(f));
129
103
  }
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') {
104
+ console.log((0, format_js_1.success)("product/"));
105
+ console.log((0, format_js_1.success)("product/features/"));
106
+ console.log((0, format_js_1.success)("system/"));
107
+ console.log((0, format_js_1.success)("code/"));
108
+ console.log((0, format_js_1.success)(".claude/skills/"));
109
+ if (bootstrapMode === "auto") {
110
+ const agentName = "claude";
135
111
  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'));
112
+ console.log(chalk_1.default.dim("".repeat(30)));
113
+ console.log((0, format_js_1.heading)("Agent Prompt"));
138
114
  console.log((0, markdown_js_1.renderMarkdown)(prompt));
139
- console.log(chalk_1.default.dim(''.repeat(30)));
140
- 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'));
115
+ console.log(chalk_1.default.dim("".repeat(30)));
116
+ console.log((0, format_js_1.info)(`Using agent: ${chalk_1.default.cyan(agentName)} (default)`));
117
+ console.log((0, format_js_1.info)("Starting agent...\n"));
142
118
  const exitCode = await (0, sdd_core_1.runAgent)({
143
119
  root: projectDir,
144
120
  prompt,
145
121
  agent: agentName,
146
- agents: customCommand ? { [agentName]: customCommand } : undefined,
147
122
  });
148
123
  if (exitCode !== 0) {
149
124
  console.log(chalk_1.default.red(`\n Agent exited with code ${exitCode}`));
150
125
  process.exit(exitCode);
151
126
  }
152
- console.log(chalk_1.default.green('\n Agent completed successfully.'));
127
+ console.log(chalk_1.default.green("\n Agent completed successfully."));
153
128
  return;
154
129
  }
155
- if (bootstrapMode === 'prompt') {
130
+ if (bootstrapMode === "prompt") {
156
131
  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`);
132
+ console.log(chalk_1.default.cyan.bold("\n Next steps:\n"));
133
+ console.log(` ${chalk_1.default.white("1.")} Enter the project folder:\n`);
159
134
  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.`);
135
+ console.log(` ${chalk_1.default.white("2.")} Open your AI agent and paste the prompt below.`);
161
136
  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'));
137
+ console.log(chalk_1.default.dim("".repeat(30)));
138
+ console.log((0, format_js_1.heading)("Agent Prompt"));
164
139
  console.log((0, markdown_js_1.renderMarkdown)(prompt));
165
140
  try {
166
141
  await clipboardy_1.default.write(prompt);
167
- console.log((0, format_js_1.success)('Copied to clipboard — paste it into your agent.\n'));
142
+ console.log((0, format_js_1.success)("Copied to clipboard — paste it into your agent.\n"));
168
143
  }
169
144
  catch {
170
- console.log((0, format_js_1.info)('Copy the prompt above into your agent.\n'));
145
+ console.log((0, format_js_1.info)("Copy the prompt above into your agent.\n"));
171
146
  }
172
147
  return;
173
148
  }
174
149
  // 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`);
150
+ console.log(chalk_1.default.cyan.bold("\n Next steps:\n"));
151
+ console.log(` ${chalk_1.default.white("1.")} Enter the project folder:\n`);
177
152
  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`);
153
+ console.log(` ${chalk_1.default.white("2.")} Start writing your documentation in ${chalk_1.default.cyan("product/")} and ${chalk_1.default.cyan("system/")}.`);
154
+ console.log(` Check ${chalk_1.default.cyan(".sdd/skill/sdd/SKILL.md")} for the workflow.\n`);
155
+ console.log(` ${chalk_1.default.white("3.")} When ready, let your AI agent run:\n`);
156
+ console.log(` ${chalk_1.default.green("sdd sync")}\n`);
182
157
  const prompt = START_PROMPT;
183
158
  try {
184
159
  await clipboardy_1.default.write(prompt);
185
- console.log((0, format_js_1.success)('Copied to clipboard — paste it into your agent.\n'));
160
+ console.log((0, format_js_1.success)("Copied to clipboard — paste it into your agent.\n"));
186
161
  }
187
162
  catch {
188
- console.log((0, format_js_1.info)('Copy the prompt above into your agent.\n'));
163
+ console.log((0, format_js_1.info)("Copy the prompt above into your agent.\n"));
189
164
  }
190
165
  });
191
166
  }
@@ -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"}