@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.
- package/dist/commands/adapters.d.ts +3 -0
- package/dist/commands/adapters.d.ts.map +1 -0
- package/dist/commands/adapters.js +82 -0
- package/dist/commands/adapters.js.map +1 -0
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +56 -52
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/ui.d.ts +3 -0
- package/dist/commands/ui.d.ts.map +1 -0
- package/dist/commands/ui.js +145 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/commands/upgrade.d.ts +3 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +48 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/skills.d.ts +11 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +28 -0
- package/dist/skills.js.map +1 -0
- package/package.json +3 -1
- package/skills/sdd/SKILL.md +97 -0
- package/skills/sdd/references/bugs.md +29 -0
- package/skills/sdd/references/change-requests.md +29 -0
- package/skills/sdd/references/file-format.md +65 -0
- package/skills/sdd-ui/SKILL.md +113 -0
- package/src/commands/adapters.ts +108 -0
- package/src/commands/init.ts +92 -68
- package/src/commands/ui.ts +161 -0
- package/src/commands/upgrade.ts +51 -0
- package/src/index.ts +20 -14
- package/src/skills.ts +25 -0
|
@@ -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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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
55
|
-
.description(
|
|
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,
|
|
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:
|
|
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(
|
|
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:
|
|
76
|
+
message: "Which agent do you use?",
|
|
77
77
|
choices: [
|
|
78
|
-
{ value:
|
|
79
|
-
{ value:
|
|
80
|
-
{ value:
|
|
81
|
-
{ value:
|
|
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 ===
|
|
87
|
+
if (agentChoice === "other") {
|
|
88
88
|
agentName = await (0, prompts_1.input)({
|
|
89
|
-
message:
|
|
89
|
+
message: "Agent name:",
|
|
90
90
|
theme: promptTheme,
|
|
91
91
|
});
|
|
92
92
|
customCommand = await (0, prompts_1.input)({
|
|
93
|
-
message:
|
|
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:
|
|
98
|
+
message: "How do you want to start?",
|
|
99
99
|
choices: [
|
|
100
|
-
{ value:
|
|
101
|
-
{
|
|
102
|
-
|
|
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:
|
|
111
|
-
color:
|
|
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(
|
|
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)(
|
|
131
|
-
console.log((0, format_js_1.success)(
|
|
132
|
-
console.log((0, format_js_1.success)(
|
|
133
|
-
console.log((0, format_js_1.success)(
|
|
134
|
-
|
|
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(
|
|
137
|
-
console.log((0, format_js_1.heading)(
|
|
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(
|
|
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)(
|
|
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(
|
|
156
|
+
console.log(chalk_1.default.green("\n Agent completed successfully."));
|
|
153
157
|
return;
|
|
154
158
|
}
|
|
155
|
-
if (bootstrapMode ===
|
|
159
|
+
if (bootstrapMode === "prompt") {
|
|
156
160
|
const prompt = buildBootstrapPrompt(description.trim(), false);
|
|
157
|
-
console.log(chalk_1.default.cyan.bold(
|
|
158
|
-
console.log(` ${chalk_1.default.white(
|
|
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(
|
|
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(
|
|
163
|
-
console.log((0, format_js_1.heading)(
|
|
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)(
|
|
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)(
|
|
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(
|
|
176
|
-
console.log(` ${chalk_1.default.white(
|
|
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(
|
|
179
|
-
console.log(` Check ${chalk_1.default.cyan(
|
|
180
|
-
console.log(` ${chalk_1.default.white(
|
|
181
|
-
console.log(` ${chalk_1.default.green(
|
|
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)(
|
|
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)(
|
|
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":";;;;;AAkDA,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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(
|
|
19
|
+
const packageJson = packageRequire("../package.json");
|
|
17
20
|
const program = new commander_1.Command();
|
|
18
21
|
program
|
|
19
|
-
.name(
|
|
20
|
-
.description(
|
|
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;
|
|
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"}
|