@jakkrichm/create-nexus-devflow 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/bin/create-nexus-devflow.d.ts +2 -2
  2. package/dist/bin/create-nexus-devflow.js +130 -0
  3. package/dist/bin/create-nexus-devflow.js.map +1 -1
  4. package/dist/lib/doctor.js +40 -0
  5. package/dist/lib/doctor.js.map +1 -1
  6. package/dist/lib/skill-manager.d.ts +50 -0
  7. package/dist/lib/skill-manager.js +372 -0
  8. package/dist/lib/skill-manager.js.map +1 -0
  9. package/package.json +2 -2
  10. package/template/.agents/skills/devflow/SKILL.md +6 -1
  11. package/template/.agents/skills/discovery/SKILL.md +6 -1
  12. package/template/.claude/skills/devflow/SKILL.md +6 -1
  13. package/template/.claude/skills/discovery/SKILL.md +6 -1
  14. package/template/LICENSE +21 -21
  15. package/template/devflow/context/ai-interaction.md +25 -0
  16. package/dist/lib/antigravity-artifacts.d.ts +0 -52
  17. package/dist/lib/antigravity-artifacts.js +0 -170
  18. package/dist/lib/antigravity-artifacts.js.map +0 -1
  19. package/dist/lib/antigravity-hooks.d.ts +0 -31
  20. package/dist/lib/antigravity-hooks.js +0 -85
  21. package/dist/lib/antigravity-hooks.js.map +0 -1
  22. package/dist/lib/antigravity-plugin.d.ts +0 -51
  23. package/dist/lib/antigravity-plugin.js +0 -179
  24. package/dist/lib/antigravity-plugin.js.map +0 -1
  25. package/dist/lib/antigravity-scheduler.d.ts +0 -39
  26. package/dist/lib/antigravity-scheduler.js +0 -95
  27. package/dist/lib/antigravity-scheduler.js.map +0 -1
  28. package/dist/lib/openai-tools.d.ts +0 -34
  29. package/dist/lib/openai-tools.js +0 -57
  30. package/dist/lib/openai-tools.js.map +0 -1
  31. package/dist/lib/visual-subagent.d.ts +0 -32
  32. package/dist/lib/visual-subagent.js +0 -98
  33. package/dist/lib/visual-subagent.js.map +0 -1
  34. package/template/.agents/skills/convert-any-to-md/scripts/__pycache__/convert_any_to_md.cpython-314.pyc +0 -0
  35. package/template/.claude/skills/convert-any-to-md/scripts/__pycache__/convert_any_to_md.cpython-314.pyc +0 -0
@@ -0,0 +1,372 @@
1
+ import { execFile } from "node:child_process";
2
+ import fs from "node:fs/promises";
3
+ import fsSync from "node:fs";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { promisify } from "node:util";
7
+ import { loadCoreSkillInventory } from "./core-skill-inventory.js";
8
+ const execFileAsync = promisify(execFile);
9
+ const SKILL_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
10
+ const MANIFEST_PATH = path.join(".nexus", "nexus-devflow.json");
11
+ const AGENT_MANIFEST_PATH = "agent-bundle.manifest.json";
12
+ export function parseSkillFrontmatter(content) {
13
+ if (!content.startsWith("---"))
14
+ return {};
15
+ const parts = content.split("---");
16
+ if (parts.length < 3)
17
+ return {};
18
+ const lines = parts[1].split("\n");
19
+ let name;
20
+ let description;
21
+ let version;
22
+ for (const line of lines) {
23
+ const trimmed = line.trim();
24
+ if (trimmed.startsWith("name:")) {
25
+ name = trimmed.replace("name:", "").trim().replace(/^["']|["']$/g, "");
26
+ }
27
+ else if (trimmed.startsWith("description:")) {
28
+ description = trimmed.replace("description:", "").trim().replace(/^["']|["']$/g, "");
29
+ }
30
+ else if (trimmed.startsWith("version:")) {
31
+ version = trimmed.replace("version:", "").trim().replace(/^["']|["']$/g, "");
32
+ }
33
+ }
34
+ // Also check metadata: version block
35
+ const metaMatch = parts[1].match(/version:\s*["']?([^"'\r\n]+)["']?/);
36
+ if (!version && metaMatch) {
37
+ version = metaMatch[1].trim();
38
+ }
39
+ return { name, description, version };
40
+ }
41
+ export async function readDevflowManifest(projectRoot) {
42
+ const fullPath = path.join(projectRoot, MANIFEST_PATH);
43
+ try {
44
+ const raw = await fs.readFile(fullPath, "utf8");
45
+ return JSON.parse(raw);
46
+ }
47
+ catch (err) {
48
+ if (err.code === "ENOENT") {
49
+ return null;
50
+ }
51
+ throw err;
52
+ }
53
+ }
54
+ export async function writeDevflowManifest(projectRoot, manifest) {
55
+ const fullPath = path.join(projectRoot, MANIFEST_PATH);
56
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
57
+ await fs.writeFile(fullPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
58
+ }
59
+ export async function listInstalledSkills(projectRoot) {
60
+ let coreNameSet = new Set();
61
+ try {
62
+ const inventory = await loadCoreSkillInventory(path.join(projectRoot, AGENT_MANIFEST_PATH));
63
+ coreNameSet = inventory.nameSet;
64
+ }
65
+ catch {
66
+ // fallback if manifest not found
67
+ }
68
+ const manifest = await readDevflowManifest(projectRoot);
69
+ const recordedThirdParty = Array.isArray(manifest?.thirdPartySkills)
70
+ ? manifest.thirdPartySkills
71
+ : [];
72
+ const thirdPartyMap = new Map();
73
+ for (const record of recordedThirdParty) {
74
+ if (record?.name) {
75
+ thirdPartyMap.set(record.name, record);
76
+ }
77
+ }
78
+ const agentsDir = path.join(projectRoot, ".agents", "skills");
79
+ const claudeDir = path.join(projectRoot, ".claude", "skills");
80
+ const agentsSkills = new Set();
81
+ const claudeSkills = new Set();
82
+ try {
83
+ const entries = await fs.readdir(agentsDir, { withFileTypes: true });
84
+ for (const e of entries) {
85
+ if (e.isDirectory())
86
+ agentsSkills.add(e.name);
87
+ }
88
+ }
89
+ catch {
90
+ // ignore missing dir
91
+ }
92
+ try {
93
+ const entries = await fs.readdir(claudeDir, { withFileTypes: true });
94
+ for (const e of entries) {
95
+ if (e.isDirectory())
96
+ claudeSkills.add(e.name);
97
+ }
98
+ }
99
+ catch {
100
+ // ignore missing dir
101
+ }
102
+ const allNames = new Set([...agentsSkills, ...claudeSkills, ...thirdPartyMap.keys()]);
103
+ const coreSkills = [];
104
+ const thirdPartySkills = [];
105
+ for (const name of [...allNames].sort()) {
106
+ const inAgents = agentsSkills.has(name);
107
+ const inClaude = claudeSkills.has(name);
108
+ const adapters = [];
109
+ if (inAgents)
110
+ adapters.push(".agents");
111
+ if (inClaude)
112
+ adapters.push(".claude");
113
+ const skillFilePath = inAgents
114
+ ? path.join(agentsDir, name, "SKILL.md")
115
+ : path.join(claudeDir, name, "SKILL.md");
116
+ let description = "";
117
+ let version = "";
118
+ try {
119
+ const content = await fs.readFile(skillFilePath, "utf8");
120
+ const meta = parseSkillFrontmatter(content);
121
+ description = meta.description || "";
122
+ version = meta.version || "";
123
+ }
124
+ catch {
125
+ // no readable SKILL.md
126
+ }
127
+ const recorded = thirdPartyMap.get(name);
128
+ const isCore = coreNameSet.has(name);
129
+ let category = "local-extension";
130
+ if (isCore) {
131
+ category = "core";
132
+ }
133
+ else if (recorded) {
134
+ category = "third-party";
135
+ }
136
+ const detail = {
137
+ name,
138
+ category,
139
+ description: description || recorded?.description || "",
140
+ version: version || recorded?.version,
141
+ source: recorded?.source,
142
+ adapters,
143
+ synced: inAgents && inClaude,
144
+ path: inAgents ? `.agents/skills/${name}` : `.claude/skills/${name}`
145
+ };
146
+ if (isCore) {
147
+ coreSkills.push(detail);
148
+ }
149
+ else {
150
+ thirdPartySkills.push(detail);
151
+ }
152
+ }
153
+ return {
154
+ coreSkills,
155
+ thirdPartySkills,
156
+ totalCount: coreSkills.length + thirdPartySkills.length
157
+ };
158
+ }
159
+ export async function findSkillSourceDirectory(sourceDir, requestedName) {
160
+ // Check 1: If sourceDir itself has SKILL.md
161
+ const rootSkillMd = path.join(sourceDir, "SKILL.md");
162
+ if (fsSync.existsSync(rootSkillMd)) {
163
+ const content = await fs.readFile(rootSkillMd, "utf8");
164
+ const meta = parseSkillFrontmatter(content);
165
+ const skillName = requestedName || meta.name || path.basename(sourceDir);
166
+ return { sourceSkillPath: sourceDir, skillName, meta };
167
+ }
168
+ // Check 2: Check inside skills/ subfolder
169
+ const skillsSubDir = path.join(sourceDir, "skills");
170
+ if (fsSync.existsSync(skillsSubDir)) {
171
+ const entries = await fs.readdir(skillsSubDir, { withFileTypes: true });
172
+ const skillDirs = entries.filter((e) => e.isDirectory());
173
+ if (requestedName) {
174
+ const targetDir = path.join(skillsSubDir, requestedName);
175
+ if (fsSync.existsSync(path.join(targetDir, "SKILL.md"))) {
176
+ const content = await fs.readFile(path.join(targetDir, "SKILL.md"), "utf8");
177
+ const meta = parseSkillFrontmatter(content);
178
+ return { sourceSkillPath: targetDir, skillName: requestedName, meta };
179
+ }
180
+ }
181
+ if (skillDirs.length === 1) {
182
+ const onlyDir = skillDirs[0].name;
183
+ const targetDir = path.join(skillsSubDir, onlyDir);
184
+ if (fsSync.existsSync(path.join(targetDir, "SKILL.md"))) {
185
+ const content = await fs.readFile(path.join(targetDir, "SKILL.md"), "utf8");
186
+ const meta = parseSkillFrontmatter(content);
187
+ return { sourceSkillPath: targetDir, skillName: requestedName || meta.name || onlyDir, meta };
188
+ }
189
+ }
190
+ if (skillDirs.length > 1) {
191
+ // If one matches the requested name or base name of source
192
+ const baseName = path.basename(sourceDir);
193
+ for (const dir of skillDirs) {
194
+ if (dir.name === requestedName || dir.name === baseName) {
195
+ const targetDir = path.join(skillsSubDir, dir.name);
196
+ if (fsSync.existsSync(path.join(targetDir, "SKILL.md"))) {
197
+ const content = await fs.readFile(path.join(targetDir, "SKILL.md"), "utf8");
198
+ const meta = parseSkillFrontmatter(content);
199
+ return { sourceSkillPath: targetDir, skillName: dir.name, meta };
200
+ }
201
+ }
202
+ }
203
+ }
204
+ }
205
+ // Check 3: Check .agents/skills subfolder
206
+ const dotAgentsSkills = path.join(sourceDir, ".agents", "skills");
207
+ if (fsSync.existsSync(dotAgentsSkills)) {
208
+ const entries = await fs.readdir(dotAgentsSkills, { withFileTypes: true });
209
+ const skillDirs = entries.filter((e) => e.isDirectory());
210
+ if (requestedName) {
211
+ const targetDir = path.join(dotAgentsSkills, requestedName);
212
+ if (fsSync.existsSync(path.join(targetDir, "SKILL.md"))) {
213
+ const content = await fs.readFile(path.join(targetDir, "SKILL.md"), "utf8");
214
+ const meta = parseSkillFrontmatter(content);
215
+ return { sourceSkillPath: targetDir, skillName: requestedName, meta };
216
+ }
217
+ }
218
+ if (skillDirs.length === 1) {
219
+ const onlyDir = skillDirs[0].name;
220
+ const targetDir = path.join(dotAgentsSkills, onlyDir);
221
+ if (fsSync.existsSync(path.join(targetDir, "SKILL.md"))) {
222
+ const content = await fs.readFile(path.join(targetDir, "SKILL.md"), "utf8");
223
+ const meta = parseSkillFrontmatter(content);
224
+ return { sourceSkillPath: targetDir, skillName: requestedName || meta.name || onlyDir, meta };
225
+ }
226
+ }
227
+ }
228
+ throw new Error(`Could not find a valid skill with SKILL.md in source: ${sourceDir}`);
229
+ }
230
+ export async function installThirdPartySkill(projectRoot, source, options) {
231
+ const isGitUrl = /^https?:\/\/|^git@|^ssh:\/\/|\.git$/.test(source);
232
+ let tempCloneDir = null;
233
+ let sourceDirectory = source;
234
+ let coreNameSet = new Set();
235
+ try {
236
+ const inventory = await loadCoreSkillInventory(path.join(projectRoot, AGENT_MANIFEST_PATH));
237
+ coreNameSet = inventory.nameSet;
238
+ }
239
+ catch {
240
+ // ignore
241
+ }
242
+ try {
243
+ if (isGitUrl) {
244
+ tempCloneDir = await fs.mkdtemp(path.join(os.tmpdir(), "nexus-skill-"));
245
+ await execFileAsync("git", ["clone", "--depth", "1", source, tempCloneDir]);
246
+ sourceDirectory = tempCloneDir;
247
+ }
248
+ else {
249
+ sourceDirectory = path.isAbsolute(source) ? source : path.resolve(projectRoot, source);
250
+ if (!fsSync.existsSync(sourceDirectory)) {
251
+ throw new Error(`Source directory does not exist: ${source}`);
252
+ }
253
+ }
254
+ const { sourceSkillPath, skillName, meta } = await findSkillSourceDirectory(sourceDirectory, options?.name);
255
+ if (!SKILL_NAME_PATTERN.test(skillName)) {
256
+ throw new Error(`Invalid skill name: "${skillName}". Must use kebab-case (e.g. "diagram-design").`);
257
+ }
258
+ if (coreNameSet.has(skillName) && !options?.force) {
259
+ throw new Error(`Cannot install skill with name "${skillName}" as it conflicts with a Core DevFlow Skill.`);
260
+ }
261
+ const targetAgentsSkillDir = path.join(projectRoot, ".agents", "skills", skillName);
262
+ const targetClaudeSkillDir = path.join(projectRoot, ".claude", "skills", skillName);
263
+ await fs.rm(targetAgentsSkillDir, { recursive: true, force: true });
264
+ await fs.rm(targetClaudeSkillDir, { recursive: true, force: true });
265
+ await fs.mkdir(path.dirname(targetAgentsSkillDir), { recursive: true });
266
+ await fs.mkdir(path.dirname(targetClaudeSkillDir), { recursive: true });
267
+ // Copy verbatim to .agents/skills/<name>
268
+ await fs.cp(sourceSkillPath, targetAgentsSkillDir, { recursive: true });
269
+ // Copy verbatim to .claude/skills/<name>
270
+ await fs.cp(sourceSkillPath, targetClaudeSkillDir, { recursive: true });
271
+ // Update .nexus/nexus-devflow.json
272
+ const manifest = (await readDevflowManifest(projectRoot)) || {
273
+ schemaVersion: 1,
274
+ name: "nexus-devflow",
275
+ package: "@jakkrichm/create-nexus-devflow",
276
+ version: "2.9.0"
277
+ };
278
+ const existingThirdParty = Array.isArray(manifest.thirdPartySkills)
279
+ ? manifest.thirdPartySkills
280
+ : [];
281
+ const filtered = existingThirdParty.filter((s) => s.name !== skillName);
282
+ filtered.push({
283
+ name: skillName,
284
+ source,
285
+ version: meta.version || "1.0.0",
286
+ description: meta.description || "",
287
+ installedAt: new Date().toISOString(),
288
+ type: isGitUrl ? "git" : "local"
289
+ });
290
+ manifest.thirdPartySkills = filtered;
291
+ await writeDevflowManifest(projectRoot, manifest);
292
+ return {
293
+ name: skillName,
294
+ category: "third-party",
295
+ description: meta.description || "",
296
+ version: meta.version || "1.0.0",
297
+ source,
298
+ adapters: [".agents", ".claude"],
299
+ synced: true,
300
+ path: `.agents/skills/${skillName}`
301
+ };
302
+ }
303
+ finally {
304
+ if (tempCloneDir) {
305
+ try {
306
+ await fs.rm(tempCloneDir, { recursive: true, force: true });
307
+ }
308
+ catch {
309
+ // ignore cleanup error
310
+ }
311
+ }
312
+ }
313
+ }
314
+ export async function removeThirdPartySkill(projectRoot, name) {
315
+ let coreNameSet = new Set();
316
+ try {
317
+ const inventory = await loadCoreSkillInventory(path.join(projectRoot, AGENT_MANIFEST_PATH));
318
+ coreNameSet = inventory.nameSet;
319
+ }
320
+ catch {
321
+ // ignore
322
+ }
323
+ if (coreNameSet.has(name)) {
324
+ throw new Error(`Cannot remove Core Skill: "${name}". Core skills are managed by Nexus-DevFlow.`);
325
+ }
326
+ const targetAgentsSkillDir = path.join(projectRoot, ".agents", "skills", name);
327
+ const targetClaudeSkillDir = path.join(projectRoot, ".claude", "skills", name);
328
+ let removedAny = false;
329
+ if (fsSync.existsSync(targetAgentsSkillDir)) {
330
+ await fs.rm(targetAgentsSkillDir, { recursive: true, force: true });
331
+ removedAny = true;
332
+ }
333
+ if (fsSync.existsSync(targetClaudeSkillDir)) {
334
+ await fs.rm(targetClaudeSkillDir, { recursive: true, force: true });
335
+ removedAny = true;
336
+ }
337
+ const manifest = await readDevflowManifest(projectRoot);
338
+ if (manifest && Array.isArray(manifest.thirdPartySkills)) {
339
+ const prevList = manifest.thirdPartySkills;
340
+ const nextList = prevList.filter((s) => s.name !== name);
341
+ if (nextList.length !== prevList.length) {
342
+ manifest.thirdPartySkills = nextList;
343
+ await writeDevflowManifest(projectRoot, manifest);
344
+ removedAny = true;
345
+ }
346
+ }
347
+ return removedAny;
348
+ }
349
+ export async function syncSkills(projectRoot) {
350
+ const agentsDir = path.join(projectRoot, ".agents", "skills");
351
+ const claudeDir = path.join(projectRoot, ".claude", "skills");
352
+ if (!fsSync.existsSync(agentsDir)) {
353
+ return { syncedCount: 0, skills: [] };
354
+ }
355
+ await fs.rm(claudeDir, { recursive: true, force: true });
356
+ await fs.mkdir(claudeDir, { recursive: true });
357
+ const entries = await fs.readdir(agentsDir, { withFileTypes: true });
358
+ const syncedSkills = [];
359
+ for (const entry of entries) {
360
+ if (entry.isDirectory()) {
361
+ const src = path.join(agentsDir, entry.name);
362
+ const dst = path.join(claudeDir, entry.name);
363
+ await fs.cp(src, dst, { recursive: true });
364
+ syncedSkills.push(entry.name);
365
+ }
366
+ }
367
+ return {
368
+ syncedCount: syncedSkills.length,
369
+ skills: syncedSkills
370
+ };
371
+ }
372
+ //# sourceMappingURL=skill-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-manager.js","sourceRoot":"","sources":["../../lib/skill-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jakkrichm/create-nexus-devflow",
3
- "version": "2.8.0",
4
- "description": "Installer package for Nexus-DevFlow agentic workflow layer.",
3
+ "version": "2.9.0",
4
+ "description": "Installer and workflow manager for Nexus-DevFlow agentic workflow layer.",
5
5
  "license": "MIT",
6
6
  "author": "Jakkrich",
7
7
  "homepage": "https://github.com/Jakkrich/nexus-devflow#readme",
@@ -56,6 +56,7 @@ When invoked without an argument (or when determining the next step), inspect:
56
56
  | **"Run QA verification & check"** | `check` | `/check` | **Core Loop**: `/check` -> `/complete` |
57
57
  | **"Complete run & git merge"** | `complete` | `/complete` | **Core Loop**: `/complete` |
58
58
  | **"Generate HTML dashboard report"**| `report-html` | `/report:html` | **Standalone**: Converts living spec or archive to HTML |
59
+ | **"Create editorial diagram / flowchart"**| `diagram-design`| `/diagram-design` | **Third-Party**: 39 visual diagrams (HTML/SVG) |
59
60
  | "Setup DevFlow on fresh/new project" | `onboard` | `onboard` / `setup` | `onboard` -> `/feature` |
60
61
  | "Adopt DevFlow on existing codebase" | `adopt` | `adopt` / `bootstrap` | `adopt` -> `/feature` |
61
62
  | "Check setup health & diagnostics" | `doctor` | `doctor` / `health` | `doctor` |
@@ -94,4 +95,8 @@ When invoked without an argument (or when determining the next step), inspect:
94
95
  - `report-html` - Standalone interactive HTML report dashboard
95
96
  - `debug` - Root-cause investigation without editing code
96
97
  - `rollback` - Safe reversal of completed features
97
- - `release` - Deployment readiness check
98
+ - `release` - Deployment readiness check
99
+
100
+ ### 4. Installed Third-Party Skills & Extensions
101
+ - `diagram-design` (`/diagram-design`) - 39 editorial visual diagram types (HTML/SVG) for system architecture, sequence flows, ER models, data platform pipelines, and journeys.
102
+ - *Use `nexus-devflow skill add <url>` to install more third-party skills.*
@@ -57,7 +57,7 @@ devflow/discoveries/{DISCOVERY_ID}-{slug}/discovery.md
57
57
  ```
58
58
  *(A Discovery ID uses the namespace `DISC-YYYYMMDD-NNN`. It is not a Running ID and does not reserve a numeric delivery run.)*
59
59
 
60
- ### 5 Supporting Routes & Built-in Lenses:
60
+ ### 6 Supporting Routes & Built-in Lenses:
61
61
 
62
62
  1. **Brainstorming Lens (Divergent & Convergent)**:
63
63
  - Formulate 2-3 viable options with trade-offs.
@@ -72,6 +72,11 @@ devflow/discoveries/{DISCOVERY_ID}-{slug}/discovery.md
72
72
  5. **Socratic Grilling & Domain Alignment Lens (`grill`)**:
73
73
  - Codebase-grounded interactive inquiry to clarify entity boundaries, data flows, and edge cases.
74
74
  - Record agreed terminology in `devflow/context/glossary.md` and major architecture decisions in `devflow/decisions/ADR-xxx-{slug}.md`.
75
+ 6. **🎨 Visual Architecture & Diagram Design Lens (`diagram-design`)**:
76
+ - When exploring system topologies, legacy IT modernizations, sequence flows, data platform pipelines, or user journeys, check if the third-party skill `diagram-design` is installed in `.agents/skills/diagram-design/`.
77
+ - If available: Read `.agents/skills/diagram-design/SKILL.md` and load the matching type reference (e.g. `references/type-architecture.md`, `references/type-data-flow.md`, `references/type-sequence.md`, `references/type-journey.md`).
78
+ - Strictly follow the genuine design rules: editorial palette, style guide gate, target density 4/10, and self-contained HTML/SVG output.
79
+ - Save diagram artifacts to `devflow/discoveries/{DISCOVERY_ID}-{slug}/diagrams/{name}.html` and reference them directly in `discovery.md`.
75
80
 
76
81
  ### Decision & Approval Gate:
77
82
  Set one visible decision:
@@ -56,6 +56,7 @@ When invoked without an argument (or when determining the next step), inspect:
56
56
  | **"Run QA verification & check"** | `check` | `/check` | **Core Loop**: `/check` -> `/complete` |
57
57
  | **"Complete run & git merge"** | `complete` | `/complete` | **Core Loop**: `/complete` |
58
58
  | **"Generate HTML dashboard report"**| `report-html` | `/report:html` | **Standalone**: Converts living spec or archive to HTML |
59
+ | **"Create editorial diagram / flowchart"**| `diagram-design`| `/diagram-design` | **Third-Party**: 39 visual diagrams (HTML/SVG) |
59
60
  | "Setup DevFlow on fresh/new project" | `onboard` | `onboard` / `setup` | `onboard` -> `/feature` |
60
61
  | "Adopt DevFlow on existing codebase" | `adopt` | `adopt` / `bootstrap` | `adopt` -> `/feature` |
61
62
  | "Check setup health & diagnostics" | `doctor` | `doctor` / `health` | `doctor` |
@@ -94,4 +95,8 @@ When invoked without an argument (or when determining the next step), inspect:
94
95
  - `report-html` - Standalone interactive HTML report dashboard
95
96
  - `debug` - Root-cause investigation without editing code
96
97
  - `rollback` - Safe reversal of completed features
97
- - `release` - Deployment readiness check
98
+ - `release` - Deployment readiness check
99
+
100
+ ### 4. Installed Third-Party Skills & Extensions
101
+ - `diagram-design` (`/diagram-design`) - 39 editorial visual diagram types (HTML/SVG) for system architecture, sequence flows, ER models, data platform pipelines, and journeys.
102
+ - *Use `nexus-devflow skill add <url>` to install more third-party skills.*
@@ -57,7 +57,7 @@ devflow/discoveries/{DISCOVERY_ID}-{slug}/discovery.md
57
57
  ```
58
58
  *(A Discovery ID uses the namespace `DISC-YYYYMMDD-NNN`. It is not a Running ID and does not reserve a numeric delivery run.)*
59
59
 
60
- ### 5 Supporting Routes & Built-in Lenses:
60
+ ### 6 Supporting Routes & Built-in Lenses:
61
61
 
62
62
  1. **Brainstorming Lens (Divergent & Convergent)**:
63
63
  - Formulate 2-3 viable options with trade-offs.
@@ -72,6 +72,11 @@ devflow/discoveries/{DISCOVERY_ID}-{slug}/discovery.md
72
72
  5. **Socratic Grilling & Domain Alignment Lens (`grill`)**:
73
73
  - Codebase-grounded interactive inquiry to clarify entity boundaries, data flows, and edge cases.
74
74
  - Record agreed terminology in `devflow/context/glossary.md` and major architecture decisions in `devflow/decisions/ADR-xxx-{slug}.md`.
75
+ 6. **🎨 Visual Architecture & Diagram Design Lens (`diagram-design`)**:
76
+ - When exploring system topologies, legacy IT modernizations, sequence flows, data platform pipelines, or user journeys, check if the third-party skill `diagram-design` is installed in `.agents/skills/diagram-design/`.
77
+ - If available: Read `.agents/skills/diagram-design/SKILL.md` and load the matching type reference (e.g. `references/type-architecture.md`, `references/type-data-flow.md`, `references/type-sequence.md`, `references/type-journey.md`).
78
+ - Strictly follow the genuine design rules: editorial palette, style guide gate, target density 4/10, and self-contained HTML/SVG output.
79
+ - Save diagram artifacts to `devflow/discoveries/{DISCOVERY_ID}-{slug}/diagrams/{name}.html` and reference them directly in `discovery.md`.
75
80
 
76
81
  ### Decision & Approval Gate:
77
82
  Set one visible decision:
package/template/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Nexus-DevFlow contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nexus-DevFlow contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -159,3 +159,28 @@ Progress lives in persistent files, not in transient chat history:
159
159
  - **Lazy Inline Persistence**:
160
160
  - Immediately append resolved terms to `devflow/context/glossary.md`.
161
161
  - Immediately record major, hard-to-reverse architectural decisions as Architecture Decision Records in `devflow/decisions/ADR-xxx-{slug}.md`.
162
+
163
+ ---
164
+
165
+ ## 10. Third-Party Skill Orchestration & Multi-Skill Delegation Protocol
166
+
167
+ Nexus-DevFlow natively supports extending workflow capabilities with **Third-Party Skills** (installed via `nexus-devflow skill add <repo-or-path>`):
168
+
169
+ ### 🧩 1. Discovery & Inventory
170
+ - Core workflow commands and AI agents automatically inspect `.agents/skills/` (and `.claude/skills/`) or run `nexus-devflow skill list` to discover installed third-party capabilities.
171
+ - Installed third-party skills maintain their exact original directory structure, references, assets, scripts, and `SKILL.md`.
172
+
173
+ ### 🎯 2. Cross-Command Delegation & Genuine Execution
174
+ - **Verbatim & Original Prompt Fidelity**: When a DevFlow stage requires specialized domain expertise (e.g., editorial diagramming, domain modeling, cloud provisioning, UI benchmarking), the AI agent must read the third-party skill's `SKILL.md` (e.g. `.agents/skills/diagram-design/SKILL.md`) and strictly follow its original instructions, philosophy, style guide gates, and complexity constraints.
175
+ - **Workflow Command Integration Map**:
176
+ - **`/discovery`**: When macro roadmap planning or micro pre-flight exploration involves system architecture, IT landscape, data pipelines, sequence flows, or user journeys, check for `diagram-design` and generate editorial HTML/SVG diagrams.
177
+ - **`/feature` & `/fix`**: In Section 2 (`## 📐 2. Technical Spec & Contracts`), invoke `diagram-design` for component diagrams, database ER models, or sequence flows.
178
+ - **`/brainstorm` & `/grill`**: Leverage visual trade-off matrices (Quadrant, Radar spider) or domain models (UML class, ER).
179
+ - **`/prototype` & `/report-html`**: Embed standalone HTML/SVG assets seamlessly.
180
+ - **`/devflow`**: Intent router surfaces installed third-party skills (e.g. `/diagram-design`) directly to the user.
181
+
182
+ ### 📁 3. Generated Asset Storage Hierarchy
183
+ - **Discovery Stage**: `devflow/discoveries/{id}/diagrams/` (referenced in `discovery.md`).
184
+ - **Active Task Stage**: `devflow/context/{xxx-slug}/diagrams/` (referenced in `spec.md`).
185
+ - **Global / Reference**: `devflow/reference/diagrams/` or `devflow/reference/assets/`.
186
+
@@ -1,52 +0,0 @@
1
- export interface AntigravityArtifactMetadata {
2
- Summary: string;
3
- UserFacing: boolean;
4
- RequestFeedback: boolean;
5
- }
6
- export type AntigravityDiagramType = "dual-track" | "swarm-matrix" | "blast-radius";
7
- export interface BlastRadiusDiagramOptions {
8
- targetFile?: string;
9
- directDependents?: string[];
10
- transitiveDependents?: string[];
11
- }
12
- export interface ImplementationPlanInput {
13
- title: string;
14
- runId?: string;
15
- track?: "fast" | "deep";
16
- category?: string;
17
- problemStatement?: string;
18
- tasks?: Array<{
19
- id?: string;
20
- title: string;
21
- doneWhen?: string;
22
- role?: string;
23
- }>;
24
- verificationPlan?: string[];
25
- }
26
- export interface WalkthroughInput {
27
- title: string;
28
- runId?: string;
29
- completedDate?: string;
30
- changesSummary?: string;
31
- verificationRows?: Array<{
32
- lane: string;
33
- command: string;
34
- verdict: string;
35
- details?: string;
36
- }>;
37
- slides?: Array<{
38
- title: string;
39
- description: string;
40
- codeSnippet?: string;
41
- }>;
42
- }
43
- export declare function generateMermaidDiagram(type: AntigravityDiagramType, options?: BlastRadiusDiagramOptions): string;
44
- export declare function generateAntigravityImplementationPlan(input: ImplementationPlanInput, options?: {
45
- includeMermaid?: boolean;
46
- }): string;
47
- export declare function generateAntigravityWalkthrough(input: WalkthroughInput): string;
48
- export declare function writeAntigravityArtifactFile(projectRoot: string, artifactType: "plan" | "walkthrough", content: string, options?: {
49
- outPath?: string;
50
- }): Promise<{
51
- filePath: string;
52
- }>;