@jakkrichm/create-nexus-devflow 2.0.15 → 2.0.18
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 +15 -1
- package/dist/bin/create-nexus-devflow.js +125 -9
- package/dist/bin/create-nexus-devflow.js.map +1 -1
- package/dist/lib/current-work.d.ts +29 -0
- package/dist/lib/current-work.js +235 -0
- package/dist/lib/current-work.js.map +1 -0
- package/dist/lib/findings.d.ts +26 -0
- package/dist/lib/findings.js +110 -0
- package/dist/lib/findings.js.map +1 -0
- package/dist/lib/git-status.d.ts +13 -0
- package/dist/lib/git-status.js +98 -0
- package/dist/lib/git-status.js.map +1 -0
- package/dist/lib/project-metadata.d.ts +22 -0
- package/dist/lib/project-metadata.js +84 -0
- package/dist/lib/project-metadata.js.map +1 -0
- package/dist/lib/project-root.d.ts +3 -0
- package/dist/lib/project-root.js +76 -0
- package/dist/lib/project-root.js.map +1 -0
- package/dist/lib/status.d.ts +62 -0
- package/dist/lib/status.js +273 -0
- package/dist/lib/status.js.map +1 -0
- package/dist/lib/uninstall.d.ts +20 -0
- package/dist/lib/uninstall.js +129 -0
- package/dist/lib/uninstall.js.map +1 -0
- package/dist/scripts/prepare-template.js +120 -10
- package/dist/scripts/prepare-template.js.map +1 -1
- package/package.json +4 -3
- package/template/.agents/skills/00-discover/SKILL.md +2 -2
- package/template/.agents/skills/10-define/SKILL.md +24 -140
- package/template/.agents/skills/20-spec/SKILL.md +2 -2
- package/template/.agents/skills/30-plan/SKILL.md +2 -2
- package/template/.agents/skills/50-verify/SKILL.md +2 -2
- package/template/.agents/skills/60-report/SKILL.md +1 -1
- package/template/.agents/skills/70-release/SKILL.md +19 -143
- package/template/.agents/skills/check/SKILL.md +10 -10
- package/template/.agents/skills/ci/SKILL.md +1 -1
- package/template/.agents/skills/complete/SKILL.md +49 -28
- package/template/.agents/skills/deploy/SKILL.md +1 -1
- package/template/.agents/skills/devflow/SKILL.md +5 -5
- package/template/.agents/skills/feature/SKILL.md +25 -20
- package/template/.agents/skills/fix/SKILL.md +25 -19
- package/template/.agents/skills/implement/SKILL.md +10 -10
- package/template/.agents/skills/insight/SKILL.md +1 -1
- package/template/.agents/skills/overview/SKILL.md +3 -3
- package/template/.agents/skills/report-html/SKILL.md +3 -3
- package/template/.agents/skills/security-review/SKILL.md +1 -1
- package/template/.agents/skills/spec/SKILL.md +7 -6
- package/template/.agents/skills/spec-driven-development/SKILL.md +2 -2
- package/template/.agents/skills/test/SKILL.md +1 -1
- package/template/.claude/skills/00-discover/SKILL.md +2 -2
- package/template/.claude/skills/10-define/SKILL.md +24 -140
- package/template/.claude/skills/20-spec/SKILL.md +2 -2
- package/template/.claude/skills/30-plan/SKILL.md +2 -2
- package/template/.claude/skills/50-verify/SKILL.md +2 -2
- package/template/.claude/skills/60-report/SKILL.md +1 -1
- package/template/.claude/skills/70-release/SKILL.md +19 -143
- package/template/.claude/skills/check/SKILL.md +10 -10
- package/template/.claude/skills/ci/SKILL.md +1 -1
- package/template/.claude/skills/complete/SKILL.md +49 -28
- package/template/.claude/skills/deploy/SKILL.md +1 -1
- package/template/.claude/skills/devflow/SKILL.md +5 -5
- package/template/.claude/skills/feature/SKILL.md +25 -20
- package/template/.claude/skills/fix/SKILL.md +25 -19
- package/template/.claude/skills/implement/SKILL.md +10 -10
- package/template/.claude/skills/insight/SKILL.md +1 -1
- package/template/.claude/skills/overview/SKILL.md +3 -3
- package/template/.claude/skills/report-html/SKILL.md +3 -3
- package/template/.claude/skills/security-review/SKILL.md +1 -1
- package/template/.claude/skills/spec/SKILL.md +7 -6
- package/template/.claude/skills/spec-driven-development/SKILL.md +2 -2
- package/template/.claude/skills/test/SKILL.md +1 -1
- package/template/AGENTS.md +15 -59
- package/template/devflow/context/ai-interaction.md +110 -23
- package/template/devflow/context/coding-standards.md +123 -32
- package/template/devflow/context/current-feature.md +3 -0
- package/template/devflow/context/current-stage.md +6 -6
- package/template/devflow/context/findings.md +10 -10
- package/template/devflow/context/project-overview.md +18 -32
- package/template/devflow/history/HISTORY.md +10 -24
- package/template/devflow/ideas.md +9 -5
- package/template/devflow/reference/running-id-contract.md +39 -39
- package/template/devflow/runs/.gitkeep +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { readCurrentWork } from "./current-work.js";
|
|
2
|
+
import { readFindings } from "./findings.js";
|
|
3
|
+
import { readGitStatus } from "./git-status.js";
|
|
4
|
+
import { readProjectMetadata } from "./project-metadata.js";
|
|
5
|
+
async function readProjectStatus(startPath = process.cwd()) {
|
|
6
|
+
const metadata = await readProjectMetadata(startPath);
|
|
7
|
+
const [currentWork, findings, git] = await Promise.all([
|
|
8
|
+
readCurrentWork(metadata.project.root),
|
|
9
|
+
readFindings(metadata.project.root),
|
|
10
|
+
readGitStatus(metadata.project.root)
|
|
11
|
+
]);
|
|
12
|
+
const warnings = [
|
|
13
|
+
...metadata.warnings,
|
|
14
|
+
...currentWork.warnings,
|
|
15
|
+
...findings.warnings,
|
|
16
|
+
...findDrift(currentWork, git)
|
|
17
|
+
];
|
|
18
|
+
const completion = selectCompletion(currentWork, findings, git);
|
|
19
|
+
const nextAction = selectNextAction(currentWork, findings);
|
|
20
|
+
return {
|
|
21
|
+
schemaVersion: metadata.schemaVersion,
|
|
22
|
+
health: warnings.length > 0 || findings.blockers.length > 0
|
|
23
|
+
? "warning"
|
|
24
|
+
: "ok",
|
|
25
|
+
project: metadata.project,
|
|
26
|
+
devflow: metadata.devflow,
|
|
27
|
+
currentWork: formatCurrentWork(currentWork),
|
|
28
|
+
findings: formatFindings(findings),
|
|
29
|
+
git,
|
|
30
|
+
completion,
|
|
31
|
+
nextAction,
|
|
32
|
+
warnings
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function formatHumanStatus(status, options = {}) {
|
|
36
|
+
const style = createTextStyle(options.color === true);
|
|
37
|
+
const adapters = status.devflow.adapters.length > 0
|
|
38
|
+
? status.devflow.adapters.join(", ")
|
|
39
|
+
: "none detected";
|
|
40
|
+
const lines = [
|
|
41
|
+
`${style.bold(style.cyan("Nexus-DevFlow Status"))} ${style.bold(status.project.name)}`,
|
|
42
|
+
"",
|
|
43
|
+
formatSection("Project", style),
|
|
44
|
+
formatRow("Path", status.project.root, style),
|
|
45
|
+
formatRow("Version", status.devflow.version || "unknown", style),
|
|
46
|
+
formatRow("Adapters", adapters, style),
|
|
47
|
+
"",
|
|
48
|
+
formatSection("Progress", style),
|
|
49
|
+
formatRow("Work", formatWorkValue(status.currentWork, style), style)
|
|
50
|
+
];
|
|
51
|
+
if (status.currentWork.state === "active") {
|
|
52
|
+
lines.push(formatRow("Steps", `${status.currentWork.completed}/${status.currentWork.total} complete`, style));
|
|
53
|
+
if (status.currentWork.nextStep) {
|
|
54
|
+
lines.push(formatRow("Next step", status.currentWork.nextStep.title, style));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
lines.push(formatRow("Findings", formatFindingsValue(status.findings, style), style), formatRow("Completion", formatCompletionValue(status.completion, style), style), "", formatSection("Git", style));
|
|
58
|
+
appendGitLines(lines, status.git, style);
|
|
59
|
+
if (status.warnings.length > 0) {
|
|
60
|
+
lines.push("", formatSection("Attention", style));
|
|
61
|
+
for (const warning of status.warnings) {
|
|
62
|
+
lines.push(` ${style.yellow("!")} ${style.yellow(warning.message)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
lines.push("", formatSection("Next action", style));
|
|
66
|
+
if (status.nextAction.command) {
|
|
67
|
+
lines.push(` ${style.bold(style.brightCyan(status.nextAction.command))}`);
|
|
68
|
+
}
|
|
69
|
+
lines.push(` ${status.nextAction.reason}`);
|
|
70
|
+
return lines.join("\n");
|
|
71
|
+
}
|
|
72
|
+
function shouldUseColor(isTTY = process.stdout.isTTY, environment = process.env) {
|
|
73
|
+
return isTTY === true && !Object.hasOwn(environment, "NO_COLOR");
|
|
74
|
+
}
|
|
75
|
+
function formatSection(label, style) {
|
|
76
|
+
return style.bold(label);
|
|
77
|
+
}
|
|
78
|
+
function formatRow(label, value, style) {
|
|
79
|
+
return ` ${style.cyan(label.padEnd(14))}${value}`;
|
|
80
|
+
}
|
|
81
|
+
function formatWorkValue(work, style) {
|
|
82
|
+
if (work.state === "idle") {
|
|
83
|
+
return style.dim("none");
|
|
84
|
+
}
|
|
85
|
+
if (work.state === "malformed") {
|
|
86
|
+
return style.red("present but malformed");
|
|
87
|
+
}
|
|
88
|
+
const type = work.type || "work";
|
|
89
|
+
const identity = work.runId
|
|
90
|
+
? `${work.runId} - ${work.title || "untitled"}`
|
|
91
|
+
: work.title || "untitled";
|
|
92
|
+
return style.brightCyan(`${type} ${identity}`);
|
|
93
|
+
}
|
|
94
|
+
function formatFindingsValue(findings, style) {
|
|
95
|
+
if (findings.total === 0) {
|
|
96
|
+
return style.green("none");
|
|
97
|
+
}
|
|
98
|
+
const activeGroups = new Map();
|
|
99
|
+
for (const finding of findings.active) {
|
|
100
|
+
const key = `${finding.status} ${finding.severity}`;
|
|
101
|
+
activeGroups.set(key, [...(activeGroups.get(key) || []), finding.id]);
|
|
102
|
+
}
|
|
103
|
+
const activeCounts = [...activeGroups.entries()].map(([label, ids]) => `${ids.length} ${label} (${ids.join(", ")})`);
|
|
104
|
+
const resolvedCounts = ["closed", "accepted", "invalid"]
|
|
105
|
+
.filter((status) => findings.byStatus[status] > 0)
|
|
106
|
+
.map((status) => `${findings.byStatus[status]} ${status}`);
|
|
107
|
+
const value = [...activeCounts, ...resolvedCounts].join(", ");
|
|
108
|
+
if (findings.blockers.length > 0) {
|
|
109
|
+
return style.red(value);
|
|
110
|
+
}
|
|
111
|
+
return findings.active.length > 0 ? style.yellow(value) : style.green(value);
|
|
112
|
+
}
|
|
113
|
+
function formatCompletionValue(completion, style) {
|
|
114
|
+
if (completion.state === "ready") {
|
|
115
|
+
return style.green("ready");
|
|
116
|
+
}
|
|
117
|
+
if (completion.state === "needs_verification") {
|
|
118
|
+
return style.yellow("needs verification");
|
|
119
|
+
}
|
|
120
|
+
return style.red(`blocked: ${completion.blockers.join("; ")}`);
|
|
121
|
+
}
|
|
122
|
+
function appendGitLines(lines, git, style) {
|
|
123
|
+
if (!git.available) {
|
|
124
|
+
lines.push(formatRow("Status", style.red("not a Git repository"), style));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const workingTree = git.clean
|
|
128
|
+
? style.green("clean")
|
|
129
|
+
: style.yellow(`${git.changedFiles} changed ${git.changedFiles === 1 ? "file" : "files"}`);
|
|
130
|
+
const remote = git.upstream
|
|
131
|
+
? `${git.upstream} (${git.ahead || 0} ahead, ${git.behind || 0} behind)`
|
|
132
|
+
: "not configured";
|
|
133
|
+
const coloredRemote = git.upstream && git.ahead === 0 && git.behind === 0
|
|
134
|
+
? style.green(remote)
|
|
135
|
+
: style.yellow(remote);
|
|
136
|
+
lines.push(formatRow("Branch", git.branch || "unknown", style), formatRow("Working tree", workingTree, style), formatRow("Remote", coloredRemote, style));
|
|
137
|
+
if (git.lastCommit) {
|
|
138
|
+
lines.push(` ${style.cyan("Last commit")}`, ` ${git.lastCommit}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function createTextStyle(enabled) {
|
|
142
|
+
const paint = (code, value) => enabled ? `\u001b[${code}m${value}\u001b[0m` : value;
|
|
143
|
+
return {
|
|
144
|
+
bold: (value) => paint(1, value),
|
|
145
|
+
brightCyan: (value) => paint(96, value),
|
|
146
|
+
cyan: (value) => paint(36, value),
|
|
147
|
+
dim: (value) => paint(2, value),
|
|
148
|
+
green: (value) => paint(32, value),
|
|
149
|
+
red: (value) => paint(31, value),
|
|
150
|
+
yellow: (value) => paint(33, value)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function formatCurrentWork(currentWork) {
|
|
154
|
+
return {
|
|
155
|
+
state: currentWork.state,
|
|
156
|
+
type: currentWork.type,
|
|
157
|
+
title: currentWork.title,
|
|
158
|
+
status: currentWork.status,
|
|
159
|
+
runId: currentWork.runId,
|
|
160
|
+
completed: currentWork.completed,
|
|
161
|
+
remaining: currentWork.remaining,
|
|
162
|
+
total: currentWork.total,
|
|
163
|
+
nextStep: currentWork.nextStep
|
|
164
|
+
? { title: currentWork.nextStep.title }
|
|
165
|
+
: null
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function formatFindings(findings) {
|
|
169
|
+
const selectFinding = (finding) => ({
|
|
170
|
+
id: finding.id,
|
|
171
|
+
severity: finding.severity,
|
|
172
|
+
status: finding.status,
|
|
173
|
+
title: finding.title
|
|
174
|
+
});
|
|
175
|
+
return {
|
|
176
|
+
total: findings.total,
|
|
177
|
+
byStatus: findings.byStatus,
|
|
178
|
+
active: findings.items
|
|
179
|
+
.filter((finding) => finding.status === "unverified" ||
|
|
180
|
+
finding.status === "open" ||
|
|
181
|
+
finding.status === "fixed")
|
|
182
|
+
.map(selectFinding),
|
|
183
|
+
blockers: findings.blockers.map(selectFinding)
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function selectCompletion(currentWork, findings, git) {
|
|
187
|
+
const blockers = [];
|
|
188
|
+
if (currentWork.state !== "active") {
|
|
189
|
+
blockers.push("no active delivery run or living spec");
|
|
190
|
+
}
|
|
191
|
+
else if (currentWork.remaining > 0) {
|
|
192
|
+
blockers.push(`${currentWork.remaining} checklist steps remain`);
|
|
193
|
+
}
|
|
194
|
+
if (findings.blockers.length > 0) {
|
|
195
|
+
blockers.push(`blocking findings ${findings.blockers.map((finding) => finding.id).join(", ")}`);
|
|
196
|
+
}
|
|
197
|
+
if (!git.available) {
|
|
198
|
+
blockers.push("Git repository is unavailable");
|
|
199
|
+
}
|
|
200
|
+
if (blockers.length > 0) {
|
|
201
|
+
return { state: "blocked", blockers };
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
state: "needs_verification",
|
|
205
|
+
blockers: ["verification evidence is not persisted"]
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function selectNextAction(currentWork, findings) {
|
|
209
|
+
if (currentWork.state === "malformed") {
|
|
210
|
+
return {
|
|
211
|
+
command: "/doctor",
|
|
212
|
+
reason: "Repair the stage or spec contract before continuing."
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
if (currentWork.state === "active") {
|
|
216
|
+
if (currentWork.nextStep) {
|
|
217
|
+
return {
|
|
218
|
+
command: "/implement",
|
|
219
|
+
reason: `Resume active work with ${currentWork.nextStep.title}.`
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const openBlocker = findings.blockers.find((finding) => finding.status === "open");
|
|
223
|
+
if (openBlocker) {
|
|
224
|
+
return {
|
|
225
|
+
command: "/implement",
|
|
226
|
+
reason: `Repair blocking finding ${openBlocker.id}.`
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
const fixedBlocker = findings.blockers.find((finding) => finding.status === "fixed");
|
|
230
|
+
if (fixedBlocker) {
|
|
231
|
+
return {
|
|
232
|
+
command: "/check",
|
|
233
|
+
reason: `Re-verify fixed finding ${fixedBlocker.id}.`
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
command: "/check",
|
|
238
|
+
reason: "All checklist steps are completed; run QA verification."
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const openBlocker = findings.blockers.find((finding) => finding.status === "open");
|
|
242
|
+
if (openBlocker) {
|
|
243
|
+
return {
|
|
244
|
+
command: `/fix ${openBlocker.id}`,
|
|
245
|
+
reason: "Start a tracked repair for the blocking finding."
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
command: "/feature",
|
|
250
|
+
reason: "Workspace is idle. Ready to spec or discover a new feature."
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
function findDrift(currentWork, git) {
|
|
254
|
+
if (currentWork.state !== "active") {
|
|
255
|
+
return [];
|
|
256
|
+
}
|
|
257
|
+
const warnings = [];
|
|
258
|
+
if (git.available && (git.branch === "main" || git.branch === "master")) {
|
|
259
|
+
warnings.push({
|
|
260
|
+
code: "active_work_on_default_branch",
|
|
261
|
+
message: `Active ${currentWork.type || "work"} is running on the default branch.`
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
if (currentWork.total > 0 && currentWork.remaining === 0) {
|
|
265
|
+
warnings.push({
|
|
266
|
+
code: "completed_steps_not_released",
|
|
267
|
+
message: "All checklist steps are checked, but run has not been completed or verified."
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return warnings;
|
|
271
|
+
}
|
|
272
|
+
export { formatHumanStatus, readProjectStatus, shouldUseColor };
|
|
273
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../lib/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface UninstallOptions {
|
|
2
|
+
targetDir: string;
|
|
3
|
+
keepHistory?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface PreparedUninstall {
|
|
6
|
+
targetDir: string;
|
|
7
|
+
projectRoot: string | null;
|
|
8
|
+
itemsToDelete: string[];
|
|
9
|
+
totalFiles: number;
|
|
10
|
+
totalDirectories: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ApplyUninstallResult {
|
|
13
|
+
deletedCount: number;
|
|
14
|
+
deletedItems: string[];
|
|
15
|
+
success: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function prepareUninstall(options: UninstallOptions): Promise<PreparedUninstall>;
|
|
18
|
+
export declare function applyUninstall(prepared: PreparedUninstall, options?: {
|
|
19
|
+
dryRun?: boolean;
|
|
20
|
+
}): Promise<ApplyUninstallResult>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { findProjectRoot } from "./project-root.js";
|
|
4
|
+
const KNOWN_DEVFLOW_ROOT_FILES = [
|
|
5
|
+
"AGENTS.md",
|
|
6
|
+
"CLAUDE.md"
|
|
7
|
+
];
|
|
8
|
+
const KNOWN_DEVFLOW_DIRECTORIES = [
|
|
9
|
+
".agents",
|
|
10
|
+
".claude",
|
|
11
|
+
".nexus",
|
|
12
|
+
"devflow",
|
|
13
|
+
"blueprint"
|
|
14
|
+
];
|
|
15
|
+
export async function prepareUninstall(options) {
|
|
16
|
+
const targetDir = path.resolve(process.cwd(), options.targetDir || ".");
|
|
17
|
+
const projectRoot = await findProjectRoot(targetDir).catch(() => null);
|
|
18
|
+
const rootDir = projectRoot || targetDir;
|
|
19
|
+
const itemsToDelete = [];
|
|
20
|
+
let totalFiles = 0;
|
|
21
|
+
let totalDirectories = 0;
|
|
22
|
+
// 1. Check known root files
|
|
23
|
+
for (const file of KNOWN_DEVFLOW_ROOT_FILES) {
|
|
24
|
+
const fullPath = path.join(rootDir, file);
|
|
25
|
+
if (await fileExists(fullPath)) {
|
|
26
|
+
itemsToDelete.push(file);
|
|
27
|
+
totalFiles++;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// 2. Check known root directories
|
|
31
|
+
for (const dir of KNOWN_DEVFLOW_DIRECTORIES) {
|
|
32
|
+
const fullPath = path.join(rootDir, dir);
|
|
33
|
+
if (await directoryExists(fullPath)) {
|
|
34
|
+
if (options.keepHistory && dir === "devflow") {
|
|
35
|
+
// Special case: keep devflow/history/
|
|
36
|
+
const subItems = await fs.readdir(fullPath);
|
|
37
|
+
for (const sub of subItems) {
|
|
38
|
+
if (sub === "history")
|
|
39
|
+
continue;
|
|
40
|
+
const subFullPath = path.join(fullPath, sub);
|
|
41
|
+
const relPath = path.join(dir, sub);
|
|
42
|
+
itemsToDelete.push(relPath);
|
|
43
|
+
const stats = await countItemsRecursive(subFullPath);
|
|
44
|
+
totalFiles += stats.files;
|
|
45
|
+
totalDirectories += stats.directories + 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
itemsToDelete.push(dir);
|
|
50
|
+
const stats = await countItemsRecursive(fullPath);
|
|
51
|
+
totalFiles += stats.files;
|
|
52
|
+
totalDirectories += stats.directories + 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
targetDir: rootDir,
|
|
58
|
+
projectRoot,
|
|
59
|
+
itemsToDelete,
|
|
60
|
+
totalFiles,
|
|
61
|
+
totalDirectories
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export async function applyUninstall(prepared, options = {}) {
|
|
65
|
+
const deletedItems = [];
|
|
66
|
+
if (options.dryRun) {
|
|
67
|
+
return {
|
|
68
|
+
deletedCount: prepared.itemsToDelete.length,
|
|
69
|
+
deletedItems: [...prepared.itemsToDelete],
|
|
70
|
+
success: true
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
for (const item of prepared.itemsToDelete) {
|
|
74
|
+
const fullPath = path.join(prepared.targetDir, item);
|
|
75
|
+
try {
|
|
76
|
+
await fs.rm(fullPath, { recursive: true, force: true });
|
|
77
|
+
deletedItems.push(item);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Ignore if already removed or inaccessible
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
deletedCount: deletedItems.length,
|
|
85
|
+
deletedItems,
|
|
86
|
+
success: true
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async function fileExists(targetPath) {
|
|
90
|
+
try {
|
|
91
|
+
const stat = await fs.lstat(targetPath);
|
|
92
|
+
return stat.isFile();
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function directoryExists(targetPath) {
|
|
99
|
+
try {
|
|
100
|
+
const stat = await fs.lstat(targetPath);
|
|
101
|
+
return stat.isDirectory();
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function countItemsRecursive(dirPath) {
|
|
108
|
+
let files = 0;
|
|
109
|
+
let directories = 0;
|
|
110
|
+
try {
|
|
111
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
if (entry.isDirectory()) {
|
|
114
|
+
directories++;
|
|
115
|
+
const sub = await countItemsRecursive(path.join(dirPath, entry.name));
|
|
116
|
+
files += sub.files;
|
|
117
|
+
directories += sub.directories;
|
|
118
|
+
}
|
|
119
|
+
else if (entry.isFile()) {
|
|
120
|
+
files++;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Ignore read errors
|
|
126
|
+
}
|
|
127
|
+
return { files, directories };
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../lib/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,11 +26,26 @@ async function copyEntry(entry) {
|
|
|
26
26
|
!normalized.endsWith("README.md")) {
|
|
27
27
|
return false;
|
|
28
28
|
}
|
|
29
|
+
if (normalized.startsWith("devflow/history/features/") &&
|
|
30
|
+
!normalized.endsWith("README.md")) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (normalized.startsWith("devflow/history/fixes/") &&
|
|
34
|
+
!normalized.endsWith("README.md")) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (normalized.startsWith("devflow/history/rollbacks/") &&
|
|
38
|
+
!normalized.endsWith("README.md")) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
29
41
|
if (normalized.startsWith("devflow/discoveries/") &&
|
|
30
42
|
!normalized.endsWith(".gitkeep") &&
|
|
31
43
|
!normalized.endsWith("README.md")) {
|
|
32
44
|
return false;
|
|
33
45
|
}
|
|
46
|
+
if (normalized.startsWith("devflow/research/")) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
34
49
|
if (normalized.includes(".agents/skills/sync-upstream") ||
|
|
35
50
|
normalized.includes(".claude/skills/sync-upstream")) {
|
|
36
51
|
return false;
|
|
@@ -46,16 +61,21 @@ async function copyEntry(entry) {
|
|
|
46
61
|
}
|
|
47
62
|
}
|
|
48
63
|
async function ensureEmptyDirectories() {
|
|
49
|
-
const runsDir = path.join(templateRoot, "devflow", "runs");
|
|
50
64
|
const discDir = path.join(templateRoot, "devflow", "discoveries");
|
|
51
|
-
|
|
65
|
+
const featDir = path.join(templateRoot, "devflow", "history", "features");
|
|
66
|
+
const fixDir = path.join(templateRoot, "devflow", "history", "fixes");
|
|
67
|
+
const rollDir = path.join(templateRoot, "devflow", "history", "rollbacks");
|
|
52
68
|
await fs.mkdir(discDir, { recursive: true });
|
|
53
|
-
await fs.
|
|
69
|
+
await fs.mkdir(featDir, { recursive: true });
|
|
70
|
+
await fs.mkdir(fixDir, { recursive: true });
|
|
71
|
+
await fs.mkdir(rollDir, { recursive: true });
|
|
54
72
|
await fs.writeFile(path.join(discDir, ".gitkeep"), "", "utf8");
|
|
55
73
|
}
|
|
56
|
-
async function
|
|
74
|
+
async function sanitizeStarterFiles() {
|
|
75
|
+
// 1. Sanitize AGENTS.md
|
|
57
76
|
try {
|
|
58
|
-
|
|
77
|
+
const agentsPath = path.join(templateRoot, "AGENTS.md");
|
|
78
|
+
let agentsContent = await fs.readFile(agentsPath, "utf8");
|
|
59
79
|
const maintainerCommandsRegex = /## Verification & Commands[\s\S]*$/;
|
|
60
80
|
const starterCommands = `## Commands
|
|
61
81
|
|
|
@@ -64,14 +84,104 @@ async function sanitizeAgentsEntryFile(filePath) {
|
|
|
64
84
|
- Test: \`npm test\`
|
|
65
85
|
- Verify: \`npm run check\` (Run \`/onboard\` to auto-configure)
|
|
66
86
|
`;
|
|
67
|
-
|
|
68
|
-
await fs.writeFile(
|
|
87
|
+
agentsContent = agentsContent.replace(maintainerCommandsRegex, starterCommands);
|
|
88
|
+
await fs.writeFile(agentsPath, agentsContent, "utf8");
|
|
69
89
|
}
|
|
70
90
|
catch (error) {
|
|
71
|
-
if (error.code !== "ENOENT")
|
|
91
|
+
if (error.code !== "ENOENT")
|
|
72
92
|
throw error;
|
|
73
|
-
}
|
|
74
93
|
}
|
|
94
|
+
// 2. Clean Starter HISTORY.md
|
|
95
|
+
const starterHistory = `# Master Release History Ledger
|
|
96
|
+
|
|
97
|
+
This master ledger tracks all released delivery runs, milestones, and rollbacks in chronological order. Each entry is recorded during \`/complete\` or \`70-release\` and links to its exact Git commit hash, release status, category, and archived delivery artifacts.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 📜 Master Release Log
|
|
102
|
+
|
|
103
|
+
| Completed Date | Run ID | Category | Title | Git Commit | Status | Archive Link |
|
|
104
|
+
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
|
105
|
+
| _No shipped runs yet_ | - | - | Run \`/feature\` or \`/00-discover\` to start your first delivery run | - | - | - |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 🗄️ History Categories (The Core 3 Model)
|
|
110
|
+
|
|
111
|
+
- **\`features/\`**: New user-facing features, enhancements, architecture migrations, refactoring, and tooling/infra.
|
|
112
|
+
- **\`fixes/\`**: Bug fixes, hotfixes, regressions, security patches, and performance optimizations.
|
|
113
|
+
- **\`rollbacks/\`**: Safe feature reversal and rollback execution records.
|
|
114
|
+
`;
|
|
115
|
+
await fs.writeFile(path.join(templateRoot, "devflow", "history", "HISTORY.md"), starterHistory, "utf8");
|
|
116
|
+
// 3. Clean Starter ideas.md
|
|
117
|
+
const starterIdeas = `# 🔮 Centralized Idea Inbox & Backlog
|
|
118
|
+
|
|
119
|
+
> Record, analyze, and prioritize feature ideas before starting active delivery.
|
|
120
|
+
> Use the \`/idea\` command to quickly capture and evaluate new ideas.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 💡 Active Idea Inbox
|
|
125
|
+
|
|
126
|
+
| ID | Title | Value (1-5) | Feasibility (1-5) | Status | Notes |
|
|
127
|
+
| :--- | :--- | :---: | :---: | :--- | :--- |
|
|
128
|
+
| _No pending ideas_ | - | - | - | Use \`/idea <your idea>\` to capture | - |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 📦 Archived / Shipped Ideas
|
|
133
|
+
|
|
134
|
+
| ID | Title | Shipped In | Completed Date |
|
|
135
|
+
| :--- | :--- | :--- | :--- |
|
|
136
|
+
`;
|
|
137
|
+
await fs.writeFile(path.join(templateRoot, "devflow", "ideas.md"), starterIdeas, "utf8");
|
|
138
|
+
// 4. Clean Starter project-overview.md
|
|
139
|
+
const starterOverview = `# Project Overview & Source of Truth
|
|
140
|
+
|
|
141
|
+
> Living context artifact automatically synchronized with codebase reality and DevFlow delivery history.
|
|
142
|
+
> Run \`/onboard\` (for new projects) or \`/adopt\` (for existing codebases) to populate this file.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 1. Project Purpose & Target Users
|
|
147
|
+
- Describe what this application does, who it is for, and the problems it solves.
|
|
148
|
+
|
|
149
|
+
## 2. Architecture & Directory Layout
|
|
150
|
+
- Visual directory layout and overview of core modules.
|
|
151
|
+
|
|
152
|
+
## 3. Technology Stack & Key Tooling
|
|
153
|
+
- Frameworks, languages, databases, ORMs, package managers, and runtime environment.
|
|
154
|
+
|
|
155
|
+
## 4. Concrete Data Models & Entities
|
|
156
|
+
- Core entities, database schemas, API interfaces, and types.
|
|
157
|
+
|
|
158
|
+
## 5. Shipped Capabilities & Milestones
|
|
159
|
+
- Verified features and components currently functional in the codebase.
|
|
160
|
+
|
|
161
|
+
## 6. Verified Commands & Developer Workflow
|
|
162
|
+
- Dev Server, Build, Test, Lint, and Verify commands.
|
|
163
|
+
|
|
164
|
+
## 7. Known Architectural Focus Areas
|
|
165
|
+
- Upcoming priorities, refactoring targets, or known technical considerations.
|
|
166
|
+
`;
|
|
167
|
+
await fs.writeFile(path.join(templateRoot, "devflow", "context", "project-overview.md"), starterOverview, "utf8");
|
|
168
|
+
// 5. Clean Starter current-stage.md
|
|
169
|
+
const starterStage = `# Current DevFlow Run Status
|
|
170
|
+
|
|
171
|
+
- **Active Discovery ID**: \`None\`
|
|
172
|
+
- **Active Running ID**: \`None\`
|
|
173
|
+
- **Current Stage**: \`Idle (Ready for new /feature, /fix, /00-discover, or /10-define)\`
|
|
174
|
+
- **Living Spec**: \`None\`
|
|
175
|
+
- **Last Completed Run**: \`None\`
|
|
176
|
+
- **Last Updated**: \`None\`
|
|
177
|
+
`;
|
|
178
|
+
await fs.writeFile(path.join(templateRoot, "devflow", "context", "current-stage.md"), starterStage, "utf8");
|
|
179
|
+
// 6. Clean Starter current-feature.md
|
|
180
|
+
const starterFeature = `# Current Feature
|
|
181
|
+
|
|
182
|
+
_Nothing in progress. Run /feature, /fix, or /rollback to start._
|
|
183
|
+
`;
|
|
184
|
+
await fs.writeFile(path.join(templateRoot, "devflow", "context", "current-feature.md"), starterFeature, "utf8");
|
|
75
185
|
}
|
|
76
186
|
async function main() {
|
|
77
187
|
await fs.rm(templateRoot, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
|
|
@@ -80,7 +190,7 @@ async function main() {
|
|
|
80
190
|
await copyEntry(entry);
|
|
81
191
|
}
|
|
82
192
|
await ensureEmptyDirectories();
|
|
83
|
-
await
|
|
193
|
+
await sanitizeStarterFiles();
|
|
84
194
|
}
|
|
85
195
|
main().catch((error) => {
|
|
86
196
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-template.js","sourceRoot":"","sources":["../../scripts/prepare-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAExD,MAAM,OAAO,GAAG;IACd,WAAW;IACX,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,KAAK,UAAU,SAAS,CAAC,KAAa;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE;YAC1B,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACpE,IACE,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC;oBACtC,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAChC,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EACjC,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IACE,UAAU,CAAC,UAAU,CAAC,sBAAsB,CAAC;oBAC7C,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAChC,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EACjC,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IACE,UAAU,CAAC,QAAQ,CAAC,8BAA8B,CAAC;oBACnD,UAAU,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EACnD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare-template.js","sourceRoot":"","sources":["../../scripts/prepare-template.ts"],"names":[],"mappings":"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"}
|