@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.
- package/dist/bin/create-nexus-devflow.d.ts +2 -2
- package/dist/bin/create-nexus-devflow.js +130 -0
- package/dist/bin/create-nexus-devflow.js.map +1 -1
- package/dist/lib/doctor.js +40 -0
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/skill-manager.d.ts +50 -0
- package/dist/lib/skill-manager.js +372 -0
- package/dist/lib/skill-manager.js.map +1 -0
- package/package.json +2 -2
- package/template/.agents/skills/devflow/SKILL.md +6 -1
- package/template/.agents/skills/discovery/SKILL.md +6 -1
- package/template/.claude/skills/devflow/SKILL.md +6 -1
- package/template/.claude/skills/discovery/SKILL.md +6 -1
- package/template/LICENSE +21 -21
- package/template/devflow/context/ai-interaction.md +25 -0
- package/dist/lib/antigravity-artifacts.d.ts +0 -52
- package/dist/lib/antigravity-artifacts.js +0 -170
- package/dist/lib/antigravity-artifacts.js.map +0 -1
- package/dist/lib/antigravity-hooks.d.ts +0 -31
- package/dist/lib/antigravity-hooks.js +0 -85
- package/dist/lib/antigravity-hooks.js.map +0 -1
- package/dist/lib/antigravity-plugin.d.ts +0 -51
- package/dist/lib/antigravity-plugin.js +0 -179
- package/dist/lib/antigravity-plugin.js.map +0 -1
- package/dist/lib/antigravity-scheduler.d.ts +0 -39
- package/dist/lib/antigravity-scheduler.js +0 -95
- package/dist/lib/antigravity-scheduler.js.map +0 -1
- package/dist/lib/openai-tools.d.ts +0 -34
- package/dist/lib/openai-tools.js +0 -57
- package/dist/lib/openai-tools.js.map +0 -1
- package/dist/lib/visual-subagent.d.ts +0 -32
- package/dist/lib/visual-subagent.js +0 -98
- package/dist/lib/visual-subagent.js.map +0 -1
- package/template/.agents/skills/convert-any-to-md/scripts/__pycache__/convert_any_to_md.cpython-314.pyc +0 -0
- 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.
|
|
4
|
-
"description": "Installer
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
-
}>;
|