@jakkrichm/create-nexus-devflow 2.7.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/README.md +2 -2
- 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/branch-context.d.ts +1 -0
- package/dist/lib/branch-context.js +14 -9
- package/dist/lib/branch-context.js.map +1 -1
- package/dist/lib/current-work.js +10 -22
- package/dist/lib/current-work.js.map +1 -1
- package/dist/lib/doctor.js +44 -6
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/findings.js +14 -10
- package/dist/lib/findings.js.map +1 -1
- package/dist/lib/mcp.js +3 -3
- package/dist/lib/mcp.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/dist/lib/swarm-orchestrator.js +14 -8
- package/dist/lib/swarm-orchestrator.js.map +1 -1
- package/dist/lib/workflow-state.js +3 -1
- package/dist/lib/workflow-state.js.map +1 -1
- package/dist/scripts/prepare-template.js +0 -19
- package/dist/scripts/prepare-template.js.map +1 -1
- package/package.json +2 -2
- package/template/.agents/skills/audit/SKILL.md +7 -7
- package/template/.agents/skills/autopilot/SKILL.md +34 -58
- package/template/.agents/skills/brief/SKILL.md +1 -1
- package/template/.agents/skills/check/SKILL.md +4 -4
- package/template/.agents/skills/complete/SKILL.md +13 -46
- package/template/.agents/skills/continuous/SKILL.md +8 -9
- package/template/.agents/skills/devflow/SKILL.md +18 -13
- package/template/.agents/skills/discovery/SKILL.md +8 -3
- package/template/.agents/skills/doctor/SKILL.md +7 -11
- package/template/.agents/skills/feature/SKILL.md +5 -6
- package/template/.agents/skills/fix/SKILL.md +2 -2
- package/template/.agents/skills/implement/SKILL.md +11 -12
- package/template/.agents/skills/release/SKILL.md +1 -1
- package/template/.agents/skills/report-html/SKILL.md +3 -3
- package/template/.agents/skills/rollback/SKILL.md +4 -6
- package/template/.agents/skills/status/SKILL.md +20 -27
- package/template/.agents/skills/try/SKILL.md +5 -6
- package/template/.claude/skills/audit/SKILL.md +7 -7
- package/template/.claude/skills/autopilot/SKILL.md +34 -58
- package/template/.claude/skills/brief/SKILL.md +1 -1
- package/template/.claude/skills/check/SKILL.md +4 -4
- package/template/.claude/skills/complete/SKILL.md +13 -46
- package/template/.claude/skills/continuous/SKILL.md +8 -9
- package/template/.claude/skills/devflow/SKILL.md +18 -13
- package/template/.claude/skills/discovery/SKILL.md +8 -3
- package/template/.claude/skills/doctor/SKILL.md +7 -11
- package/template/.claude/skills/feature/SKILL.md +5 -6
- package/template/.claude/skills/fix/SKILL.md +2 -2
- package/template/.claude/skills/implement/SKILL.md +11 -12
- package/template/.claude/skills/release/SKILL.md +1 -1
- package/template/.claude/skills/report-html/SKILL.md +3 -3
- package/template/.claude/skills/rollback/SKILL.md +4 -6
- package/template/.claude/skills/status/SKILL.md +20 -27
- package/template/.claude/skills/try/SKILL.md +5 -6
- package/template/AGENTS.md +18 -19
- package/template/devflow/build-plan.md +9 -0
- package/template/devflow/context/ai-interaction.md +55 -16
- package/template/devflow/reference/feature-spec-template.md +2 -2
- package/template/devflow/reference/running-id-contract.md +0 -3
- package/template/devflow/context/current-feature.md +0 -3
- package/template/devflow/context/current-stage.md +0 -11
- package/template/devflow/context/findings.md +0 -10
|
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAiC1C,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AACxD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;AAChE,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;AAEzD,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAwB,CAAC;IAC7B,IAAI,WAA+B,CAAC;IACpC,IAAI,OAA2B,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9C,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,QAAiC;IAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,IAAI,WAAW,GAAwB,IAAI,GAAG,EAAU,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC5F,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC;QAClE,CAAC,CAAE,QAAQ,CAAC,gBAA2C;QACvD,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,aAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC9D,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;YACjB,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,MAAM,gBAAgB,GAAkB,EAAE,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAE3C,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC5C,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,QAAQ,GAA4B,iBAAiB,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,QAAQ,GAAG,aAAa,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAgB;YAC1B,IAAI;YACJ,QAAQ;YACR,WAAW,EAAE,WAAW,IAAI,QAAQ,EAAE,WAAW,IAAI,EAAE;YACvD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,OAAO;YACrC,MAAM,EAAE,QAAQ,EAAE,MAAM;YACxB,QAAQ;YACR,MAAM,EAAE,QAAQ,IAAI,QAAQ;YAC5B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE;SACrE,CAAC;QAEF,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;QACV,gBAAgB;QAChB,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAiB,EACjB,aAAsB;IAEtB,4CAA4C;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IAED,0CAA0C;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAChG,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;wBACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;wBAC5E,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;wBAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yDAAyD,SAAS,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,MAAc,EACd,OAA6B;IAE7B,MAAM,QAAQ,GAAG,qCAAqC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,eAAe,GAAG,MAAM,CAAC;IAE7B,IAAI,WAAW,GAAwB,IAAI,GAAG,EAAU,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC5F,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,IAAI,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;YACxE,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5E,eAAe,GAAG,YAAY,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,wBAAwB,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAE5G,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,iDAAiD,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,mCAAmC,SAAS,8CAA8C,CAAC,CAAC;QAC9G,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpF,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEpF,MAAM,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,yCAAyC;QACzC,MAAM,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,yCAAyC;QACzC,MAAM,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,mCAAmC;QACnC,MAAM,QAAQ,GAAG,CAAC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC,IAAI;YAC3D,aAAa,EAAE,CAAC;YAChB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,iCAAiC;YAC1C,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjE,CAAC,CAAE,QAAQ,CAAC,gBAA2C;YACvD,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACxE,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,SAAS;YACf,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;YAChC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;SACjC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACrC,MAAM,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAElD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,aAAa;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;YAChC,MAAM;YACN,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;YAChC,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,kBAAkB,SAAS,EAAE;SACpC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB,EAAE,IAAY;IAC3E,IAAI,WAAW,GAAwB,IAAI,GAAG,EAAU,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC5F,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,8CAA8C,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/E,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE/E,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAA0C,CAAC;QACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC;YACrC,MAAM,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAClD,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE9D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,YAAY,CAAC,MAAM;QAChC,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import fsSync from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
3
4
|
import { resolveActiveContextPaths } from "./branch-context.js";
|
|
4
5
|
export const SWARM_ROSTER = [
|
|
5
6
|
{
|
|
@@ -36,17 +37,22 @@ export const SWARM_ROSTER = [
|
|
|
36
37
|
*/
|
|
37
38
|
export async function generateSwarmPlan(projectRoot, options = {}) {
|
|
38
39
|
const contextPaths = await resolveActiveContextPaths(projectRoot, options.branch);
|
|
39
|
-
let runId = "ACTIVE";
|
|
40
|
+
let runId = contextPaths.runId || "ACTIVE";
|
|
40
41
|
let title = "Active Feature";
|
|
41
42
|
let track = "fast";
|
|
42
43
|
const tasks = [];
|
|
44
|
+
const relSpecPath = contextPaths.featureSpecPath
|
|
45
|
+
? path.relative(projectRoot, contextPaths.featureSpecPath).replace(/\\/g, "/")
|
|
46
|
+
: "devflow/context/spec.md";
|
|
43
47
|
if (fsSync.existsSync(contextPaths.featureSpecPath)) {
|
|
44
48
|
const specContent = await fs.readFile(contextPaths.featureSpecPath, "utf8");
|
|
45
49
|
// Extract title & ID
|
|
46
|
-
const titleMatch = specContent.match(/^#\s
|
|
50
|
+
const titleMatch = specContent.match(/^#\s+(?:📐\s+)?(?:\[([^\]]+)\]\s+)?(.*)/m);
|
|
47
51
|
if (titleMatch) {
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
if (titleMatch[1])
|
|
53
|
+
runId = titleMatch[1];
|
|
54
|
+
if (titleMatch[2])
|
|
55
|
+
title = titleMatch[2].trim();
|
|
50
56
|
}
|
|
51
57
|
// Parse checklist tasks
|
|
52
58
|
const lines = specContent.split("\n");
|
|
@@ -76,7 +82,7 @@ export async function generateSwarmPlan(projectRoot, options = {}) {
|
|
|
76
82
|
role,
|
|
77
83
|
title: taskTitle,
|
|
78
84
|
description: `Execute ${taskTitle} with role-specialized focus and rigorous verification.`,
|
|
79
|
-
requiredContext: [
|
|
85
|
+
requiredContext: [relSpecPath, "devflow/context/coding-standards.md"],
|
|
80
86
|
verificationCriterion: `Pass multi-lane quality gate and done-when assertions for ${taskTitle}.`,
|
|
81
87
|
parallelGroup: role === "qa" || role === "security" ? 2 : 1
|
|
82
88
|
});
|
|
@@ -91,7 +97,7 @@ export async function generateSwarmPlan(projectRoot, options = {}) {
|
|
|
91
97
|
role: "architect",
|
|
92
98
|
title: "Specification & Alignment Verification",
|
|
93
99
|
description: "Align living spec with project architectural invariants.",
|
|
94
|
-
requiredContext: [
|
|
100
|
+
requiredContext: [relSpecPath],
|
|
95
101
|
verificationCriterion: "Spec adheres to 3-Pillars contract.",
|
|
96
102
|
parallelGroup: 1
|
|
97
103
|
}, {
|
|
@@ -99,7 +105,7 @@ export async function generateSwarmPlan(projectRoot, options = {}) {
|
|
|
99
105
|
role: "coder",
|
|
100
106
|
title: "Core Logic Implementation",
|
|
101
107
|
description: "Develop required functions and modules.",
|
|
102
|
-
requiredContext: [
|
|
108
|
+
requiredContext: [relSpecPath, "devflow/context/coding-standards.md"],
|
|
103
109
|
verificationCriterion: "Code builds and passes typecheck.",
|
|
104
110
|
parallelGroup: 2
|
|
105
111
|
}, {
|
|
@@ -107,7 +113,7 @@ export async function generateSwarmPlan(projectRoot, options = {}) {
|
|
|
107
113
|
role: "qa",
|
|
108
114
|
title: "Automated Test & Edge Case Coverage",
|
|
109
115
|
description: "Author comprehensive unit tests and run verification.",
|
|
110
|
-
requiredContext: [
|
|
116
|
+
requiredContext: [relSpecPath],
|
|
111
117
|
verificationCriterion: "100% test pass rate with zero regressions.",
|
|
112
118
|
parallelGroup: 2
|
|
113
119
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-orchestrator.js","sourceRoot":"","sources":["../../lib/swarm-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAoChE,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE,IAAI;QACZ,cAAc,EAAE,uFAAuF;QACvG,oBAAoB,EAAE,WAAW;KAClC;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE,OAAO;QACf,cAAc,EAAE,uFAAuF;QACvG,oBAAoB,EAAE,UAAU;KACjC;IACD;QACE,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,qCAAqC;QAC3C,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,gFAAgF;QAChG,oBAAoB,EAAE,WAAW;KAClC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,2FAA2F;QAC3G,oBAAoB,EAAE,MAAM;KAC7B;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,UAA4B,EAAE;IAE9B,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAElF,IAAI,KAAK,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"swarm-orchestrator.js","sourceRoot":"","sources":["../../lib/swarm-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { resolveActiveRunContext } from "./branch-context.js";
|
|
3
4
|
const FAST_STAGES = ["feature-fix", "implement", "check", "complete"];
|
|
4
5
|
const PREFLIGHT_STAGES = ["idea", "grill", "brainstorm", "discovery"];
|
|
5
6
|
async function readWorkflowState(projectRoot, currentWork) {
|
|
6
|
-
const
|
|
7
|
+
const runContext = await resolveActiveRunContext(projectRoot);
|
|
8
|
+
const stagePath = runContext.stagePath || path.join(projectRoot, "devflow", "context", "current-stage.md");
|
|
7
9
|
let markdown = "";
|
|
8
10
|
try {
|
|
9
11
|
markdown = await fs.readFile(stagePath, "utf8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../lib/workflow-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../lib/workflow-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -173,25 +173,6 @@ This master ledger tracks all released delivery runs, milestones, and rollbacks
|
|
|
173
173
|
- Upcoming priorities, refactoring targets, or known technical considerations.
|
|
174
174
|
`;
|
|
175
175
|
await fs.writeFile(path.join(templateRoot, "devflow", "context", "project-overview.md"), starterOverview, "utf8");
|
|
176
|
-
const starterStage = `# Current Stage
|
|
177
|
-
|
|
178
|
-
- Active Discovery ID: \`None\`
|
|
179
|
-
- Active Running ID: \`None\`
|
|
180
|
-
- Track: \`idle\`
|
|
181
|
-
- Current Stage: \`idle\`
|
|
182
|
-
- Active Branch: \`main\`
|
|
183
|
-
- Living Spec: \`devflow/context/current-feature.md\`
|
|
184
|
-
- Next Action: \`Run /feature, /fix, or /discovery to start new work.\`
|
|
185
|
-
- Last Completed Run: \`None\`
|
|
186
|
-
- Last Updated: \`None\`
|
|
187
|
-
`;
|
|
188
|
-
await fs.writeFile(path.join(templateRoot, "devflow", "context", "current-stage.md"), starterStage, "utf8");
|
|
189
|
-
// 6. Clean Starter current-feature.md
|
|
190
|
-
const starterFeature = `# Current Feature
|
|
191
|
-
|
|
192
|
-
_Nothing in progress. Run /feature, /fix, or /rollback to start._
|
|
193
|
-
`;
|
|
194
|
-
await fs.writeFile(path.join(templateRoot, "devflow", "context", "current-feature.md"), starterFeature, "utf8");
|
|
195
176
|
}
|
|
196
177
|
async function main() {
|
|
197
178
|
const inventory = await loadCoreSkillInventory(path.join(repoRoot, "agent-bundle.manifest.json"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-template.js","sourceRoot":"","sources":["../../scripts/prepare-template.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prepare-template.js","sourceRoot":"","sources":["../../scripts/prepare-template.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",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: audit
|
|
3
|
-
description: "[devflow] Read-only code audit for a Blueprint project, except for the findings ledger it maintains at devflow/context/findings.md. Reviews the active feature, changed files, a selected path, or the full project through all concerns or a focused quality, security, performance, or tests lens. Use when the user runs /audit, invokes $audit, asks for a code or quality audit, security review, performance review, test quality review, dead-code or duplication check, vibe-coded project cleanup, or standards review."
|
|
3
|
+
description: "[devflow] Read-only code audit for a Blueprint project, except for the findings ledger it maintains at devflow/context/{xxx-slug}/findings.md. Reviews the active feature, changed files, a selected path, or the full project through all concerns or a focused quality, security, performance, or tests lens. Use when the user runs /audit, invokes $audit, asks for a code or quality audit, security review, performance review, test quality review, dead-code or duplication check, vibe-coded project cleanup, or standards review."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# audit - review code quality against the project standards
|
|
@@ -17,7 +17,7 @@ or one focused lens: quality, security, performance, or tests.
|
|
|
17
17
|
|
|
18
18
|
It reviews code without changing it: it never edits source files, installs
|
|
19
19
|
dependencies, commits, merges, pushes, or starts product work. Its one write is
|
|
20
|
-
the findings ledger at `devflow/context/findings.md` (Step 4), the durable
|
|
20
|
+
the findings ledger at `devflow/context/{xxx-slug}/findings.md` (Step 4), the durable
|
|
21
21
|
record of findings and their status.
|
|
22
22
|
|
|
23
23
|
## Input
|
|
@@ -29,7 +29,7 @@ Optional scope:
|
|
|
29
29
|
|
|
30
30
|
- no scope argument: use `current` when an active feature exists, otherwise use
|
|
31
31
|
`changed` when local changes exist, otherwise use `full`
|
|
32
|
-
- `current`: audit the active `
|
|
32
|
+
- `current`: audit the active `devflow/context/{xxx-slug}/spec.md`, every committed feature-branch
|
|
33
33
|
change from its merge base through `HEAD`, staged and unstaged changes,
|
|
34
34
|
untracked source files, and nearby code affected by the feature
|
|
35
35
|
- `changed`: audit staged, unstaged, and untracked source files plus nearby code
|
|
@@ -65,8 +65,8 @@ Read:
|
|
|
65
65
|
- `AGENTS.md`
|
|
66
66
|
- `devflow/context/project-overview.md`
|
|
67
67
|
- `devflow/context/coding-standards.md`
|
|
68
|
-
- `devflow/context/
|
|
69
|
-
- `devflow/context/findings.md
|
|
68
|
+
- `devflow/context/{xxx-slug}/spec.md` (when a task is active)
|
|
69
|
+
- `devflow/context/{xxx-slug}/findings.md` (or existing ledger), for existing IDs and statuses
|
|
70
70
|
- `devflow/context/ai-interaction.md`
|
|
71
71
|
- `devflow/build-plan.md`, when feature order matters
|
|
72
72
|
- git branch and working tree status
|
|
@@ -145,9 +145,9 @@ audit evidence before responding.
|
|
|
145
145
|
|
|
146
146
|
## Step 4 - update the findings ledger
|
|
147
147
|
|
|
148
|
-
`devflow/context/findings.md` is the durable record of findings. Chat reports
|
|
148
|
+
`devflow/context/{xxx-slug}/findings.md` is the durable record of findings for the active task. Chat reports
|
|
149
149
|
do not survive a context clear; the ledger does. It is the only file this skill
|
|
150
|
-
writes. If it is missing
|
|
150
|
+
writes. If it is missing, create it with a `# Findings`
|
|
151
151
|
heading first.
|
|
152
152
|
|
|
153
153
|
**The ledger never scopes the review.** Review the code fresh in Step 3, then
|