@jakkrichm/create-nexus-devflow 2.0.15 → 2.0.16

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.
@@ -1,2 +1,15 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ interface CliOptions {
3
+ command: "install" | "status" | "update";
4
+ target: string | null;
5
+ adapter: string;
6
+ force: boolean;
7
+ dryRun: boolean;
8
+ help: boolean;
9
+ json: boolean;
10
+ version: boolean;
11
+ yes: boolean;
12
+ }
13
+ declare function main(args?: readonly string[]): Promise<void>;
14
+ declare function parseArgs(args: readonly string[]): CliOptions;
15
+ export { main, parseArgs };
@@ -3,13 +3,14 @@ import fsSync from "node:fs";
3
3
  import path from "node:path";
4
4
  import readline from "node:readline/promises";
5
5
  import { fileURLToPath } from "node:url";
6
+ import { formatHumanStatus, readProjectStatus, shouldUseColor } from "../lib/status.js";
6
7
  import { applyPreparedUpdate, prepareUpdate } from "../lib/update.js";
7
8
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
9
  const packageRoot = path.resolve(__dirname, "..", "..");
9
10
  const templateRoot = path.join(packageRoot, "template");
10
11
  const adapterChoices = new Set(["codex", "antigravity", "claude", "both", "all"]);
11
- async function main() {
12
- const options = parseArgs(process.argv.slice(2));
12
+ async function main(args = process.argv.slice(2)) {
13
+ const options = parseArgs(args);
13
14
  if (options.help) {
14
15
  printHelp();
15
16
  return;
@@ -18,10 +19,17 @@ async function main() {
18
19
  console.log(readPackageVersion());
19
20
  return;
20
21
  }
22
+ const targetDir = path.resolve(process.cwd(), options.target || ".");
23
+ if (options.command === "status") {
24
+ const status = await readProjectStatus(targetDir);
25
+ console.log(options.json
26
+ ? JSON.stringify(status, null, 2)
27
+ : formatHumanStatus(status, { color: shouldUseColor() }));
28
+ return;
29
+ }
21
30
  if (!fsSync.existsSync(templateRoot)) {
22
31
  throw new Error("Installer template is missing. Run `npm run prepare-template` before local testing.");
23
32
  }
24
- const targetDir = path.resolve(process.cwd(), options.target || ".");
25
33
  const version = readPackageVersion();
26
34
  if (options.command === "update") {
27
35
  const prepared = await prepareUpdate({
@@ -68,6 +76,7 @@ function parseArgs(args) {
68
76
  let force = false;
69
77
  let dryRun = false;
70
78
  let help = false;
79
+ let json = false;
71
80
  let version = false;
72
81
  let yes = false;
73
82
  const positional = [];
@@ -81,6 +90,10 @@ function parseArgs(args) {
81
90
  version = true;
82
91
  continue;
83
92
  }
93
+ if (arg === "--json") {
94
+ json = true;
95
+ continue;
96
+ }
84
97
  if (arg === "--force" || arg === "-f") {
85
98
  force = true;
86
99
  continue;
@@ -93,6 +106,18 @@ function parseArgs(args) {
93
106
  yes = true;
94
107
  continue;
95
108
  }
109
+ if (arg === "--target" || arg === "-t") {
110
+ const next = args[++i];
111
+ if (!next) {
112
+ throw new Error(`${arg} requires a path`);
113
+ }
114
+ target = next;
115
+ continue;
116
+ }
117
+ if (arg.startsWith("--target=")) {
118
+ target = arg.slice("--target=".length);
119
+ continue;
120
+ }
96
121
  if (arg === "--adapter") {
97
122
  const value = args[++i];
98
123
  if (!value || !adapterChoices.has(value.toLowerCase())) {
@@ -115,9 +140,13 @@ function parseArgs(args) {
115
140
  positional.push(arg);
116
141
  }
117
142
  if (positional.length > 0) {
118
- if (positional[0] === "update") {
143
+ if (positional[0] === "status") {
144
+ command = "status";
145
+ target = positional[1] || target || ".";
146
+ }
147
+ else if (positional[0] === "update") {
119
148
  command = "update";
120
- target = positional[1] || ".";
149
+ target = positional[1] || target || ".";
121
150
  }
122
151
  else {
123
152
  target = positional[0];
@@ -130,6 +159,7 @@ function parseArgs(args) {
130
159
  force,
131
160
  dryRun,
132
161
  help,
162
+ json,
133
163
  version,
134
164
  yes
135
165
  };
@@ -141,14 +171,21 @@ function readPackageVersion() {
141
171
  }
142
172
  function printHelp() {
143
173
  console.log(`
144
- Nexus-DevFlow Installer v${readPackageVersion()}
174
+ Nexus-DevFlow CLI v${readPackageVersion()}
145
175
 
146
176
  Usage:
147
177
  npx @jakkrichm/create-nexus-devflow [target-dir] [options]
148
- npx @jakkrichm/create-nexus-devflow update [target-dir] [options]
178
+ nexus-devflow status [target-dir] [options]
179
+ nexus-devflow update [target-dir] [options]
180
+
181
+ Commands:
182
+ status Show project overview, progress, findings, git status, and next action
183
+ update Update existing DevFlow installation without overwriting user changes
149
184
 
150
185
  Options:
151
186
  --adapter <name> Tool adapters to install: codex, antigravity, claude, both (default: both)
187
+ --json Print status as structured JSON object
188
+ --target, -t Target project directory
152
189
  --force, -f Overwrite conflicting files without prompting
153
190
  --dry-run Preview changes without modifying disk
154
191
  -y, --yes Automatically confirm interactive prompts
@@ -230,4 +267,5 @@ if (process.argv[1] &&
230
267
  process.exit(1);
231
268
  });
232
269
  }
270
+ export { main, parseArgs };
233
271
  //# sourceMappingURL=create-nexus-devflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-nexus-devflow.js","sourceRoot":"","sources":["../../bin/create-nexus-devflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-nexus-devflow.js","sourceRoot":"","sources":["../../bin/create-nexus-devflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ type CurrentWorkState = "active" | "idle" | "malformed";
2
+ type CurrentWorkType = "feature" | "fix" | "rollback" | "stage";
3
+ interface CurrentWorkStep {
4
+ checked: boolean;
5
+ line: number;
6
+ title: string;
7
+ }
8
+ type CurrentWorkWarningCode = "empty_current_work" | "invalid_current_work_path" | "malformed_current_work" | "missing_current_work" | "unsafe_current_work_path";
9
+ interface CurrentWorkWarning {
10
+ code: CurrentWorkWarningCode;
11
+ message: string;
12
+ }
13
+ interface CurrentWorkSummary {
14
+ state: CurrentWorkState;
15
+ type: CurrentWorkType | null;
16
+ title: string | null;
17
+ status: string | null;
18
+ runId: string | null;
19
+ steps: CurrentWorkStep[];
20
+ completed: number;
21
+ remaining: number;
22
+ total: number;
23
+ nextStep: CurrentWorkStep | null;
24
+ warnings: CurrentWorkWarning[];
25
+ }
26
+ declare const CURRENT_STAGE_PATH: string;
27
+ declare function readCurrentWork(projectRoot: string): Promise<CurrentWorkSummary>;
28
+ declare function parseCurrentWork(markdown: string): CurrentWorkSummary;
29
+ export { CURRENT_STAGE_PATH, parseCurrentWork, readCurrentWork };
30
+ export type { CurrentWorkState, CurrentWorkStep, CurrentWorkSummary, CurrentWorkType, CurrentWorkWarning, CurrentWorkWarningCode };
@@ -0,0 +1,208 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const CURRENT_STAGE_PATH = path.join("devflow", "context", "current-stage.md");
4
+ const LEGACY_FEATURE_PATH = path.join("blueprint", "context", "current-feature.md");
5
+ const RESET_MARKER = "_Nothing in progress.";
6
+ const CHECKBOX_PATTERN = /^\s*-\s+\[([ xX])\]\s+(.+?)\s*$/;
7
+ async function readCurrentWork(projectRoot) {
8
+ // First, check devflow/context/current-stage.md
9
+ const currentStageFile = path.join(projectRoot, CURRENT_STAGE_PATH);
10
+ try {
11
+ const stageStats = await fs.lstat(currentStageFile).catch(() => null);
12
+ if (stageStats?.isFile()) {
13
+ const stageContent = await fs.readFile(currentStageFile, "utf8");
14
+ const activeRunningIdMatch = stageContent.match(/-\s+\*\*Active Running ID\*\*:\s*`?([A-Za-z0-9-_]+|None)`?/i);
15
+ const activeRunningId = activeRunningIdMatch ? activeRunningIdMatch[1].trim() : null;
16
+ const stageMatch = stageContent.match(/-\s+\*\*Current Stage\*\*:\s*([^\r\n]+)/i);
17
+ const stageName = stageMatch ? stageMatch[1].trim() : "";
18
+ if (!activeRunningId ||
19
+ activeRunningId.toLowerCase() === "none" ||
20
+ stageName.toLowerCase().startsWith("idle")) {
21
+ return idleSummary();
22
+ }
23
+ // Check the active run directory
24
+ const activeRunDir = path.join(projectRoot, "devflow", "runs", activeRunningId);
25
+ const specPath = path.join(activeRunDir, "spec.md");
26
+ const specStats = await fs.lstat(specPath).catch(() => null);
27
+ if (specStats?.isFile()) {
28
+ const specContent = await fs.readFile(specPath, "utf8");
29
+ const parsed = parseCurrentWork(specContent);
30
+ parsed.runId = activeRunningId;
31
+ return parsed;
32
+ }
33
+ const checklistPath = path.join(activeRunDir, "checklists", "implementation-checklist.md");
34
+ const checklistStats = await fs.lstat(checklistPath).catch(() => null);
35
+ if (checklistStats?.isFile()) {
36
+ const checklistContent = await fs.readFile(checklistPath, "utf8");
37
+ return parseChecklistWork(checklistContent, activeRunningId);
38
+ }
39
+ return idleSummary();
40
+ }
41
+ }
42
+ catch {
43
+ // Fall back to scanning devflow/runs
44
+ }
45
+ // If current-stage.md is absent, scan devflow/runs/
46
+ const devflowRunsDir = path.join(projectRoot, "devflow", "runs");
47
+ try {
48
+ const runsStats = await fs.lstat(devflowRunsDir).catch(() => null);
49
+ if (runsStats?.isDirectory()) {
50
+ const runEntries = (await fs.readdir(devflowRunsDir)).sort().reverse();
51
+ for (const runDirName of runEntries) {
52
+ const runDirPath = path.join(devflowRunsDir, runDirName);
53
+ const dirStats = await fs.lstat(runDirPath).catch(() => null);
54
+ if (!dirStats?.isDirectory())
55
+ continue;
56
+ const specPath = path.join(runDirPath, "spec.md");
57
+ const specStats = await fs.lstat(specPath).catch(() => null);
58
+ if (specStats?.isFile()) {
59
+ const specContent = await fs.readFile(specPath, "utf8");
60
+ const parsed = parseCurrentWork(specContent);
61
+ if (parsed.state === "active") {
62
+ parsed.runId = runDirName;
63
+ return parsed;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ catch {
70
+ // Continue to legacy fallback
71
+ }
72
+ // Fallback to legacy current-feature.md
73
+ const legacyPath = path.join(projectRoot, LEGACY_FEATURE_PATH);
74
+ try {
75
+ const stats = await fs.lstat(legacyPath);
76
+ if (stats.isFile()) {
77
+ const content = await fs.readFile(legacyPath, "utf8");
78
+ return parseCurrentWork(content);
79
+ }
80
+ }
81
+ catch {
82
+ // Return idle
83
+ }
84
+ return idleSummary();
85
+ }
86
+ function parseCurrentWork(markdown) {
87
+ if (markdown.trim() === "") {
88
+ return malformedSummary({
89
+ code: "empty_current_work",
90
+ message: "Current work file is empty."
91
+ });
92
+ }
93
+ if (markdown.includes(RESET_MARKER)) {
94
+ return idleSummary();
95
+ }
96
+ const heading = markdown.match(/^#\s+(.+)$/m)?.[1]?.trim() || null;
97
+ const headingIdentity = heading?.match(/^(Feature|Fix|Rollback|Stage|Spec):\s*(.+)$/i);
98
+ const explicitType = markdown.match(/^\*\*Type:\*\*\s*(Feature|Fix|Rollback|Stage|Spec)\s*$/im)?.[1];
99
+ const typeLabel = explicitType || headingIdentity?.[1] || null;
100
+ const type = normalizeWorkType(typeLabel);
101
+ const title = headingIdentity?.[2]?.trim() || heading;
102
+ const status = markdown.match(/^\*\*Status:\*\*\s*(.+)$/im)?.[1]?.trim() || null;
103
+ const runId = markdown.match(/^\*\*Running ID:\*\*\s*`?([A-Za-z0-9-_]+)`?/im)?.[1] || null;
104
+ const steps = parseChecklistSteps(markdown);
105
+ const warnings = [];
106
+ if (!title) {
107
+ warnings.push({
108
+ code: "malformed_current_work",
109
+ message: "Current work does not contain a recognizable title."
110
+ });
111
+ }
112
+ const normalizedSteps = steps || [];
113
+ const completed = normalizedSteps.filter((step) => step.checked).length;
114
+ return {
115
+ state: warnings.length > 0 ? "malformed" : "active",
116
+ type: type || "feature",
117
+ title,
118
+ status,
119
+ runId,
120
+ steps: normalizedSteps,
121
+ completed,
122
+ remaining: normalizedSteps.length - completed,
123
+ total: normalizedSteps.length,
124
+ nextStep: normalizedSteps.find((step) => !step.checked) || null,
125
+ warnings
126
+ };
127
+ }
128
+ function parseChecklistWork(markdown, runId) {
129
+ const steps = parseChecklistSteps(markdown) || [];
130
+ const completed = steps.filter((step) => step.checked).length;
131
+ const heading = markdown.match(/^#\s+(.+)$/m)?.[1]?.trim() || "Implementation";
132
+ return {
133
+ state: "active",
134
+ type: "stage",
135
+ title: heading,
136
+ status: "In Progress",
137
+ runId,
138
+ steps,
139
+ completed,
140
+ remaining: steps.length - completed,
141
+ total: steps.length,
142
+ nextStep: steps.find((step) => !step.checked) || null,
143
+ warnings: []
144
+ };
145
+ }
146
+ function parseChecklistSteps(markdown) {
147
+ const lines = markdown.split(/\r?\n/);
148
+ const candidates = [];
149
+ for (let index = 0; index < lines.length; index += 1) {
150
+ const line = lines[index] || "";
151
+ const match = line.match(CHECKBOX_PATTERN);
152
+ if (!match) {
153
+ continue;
154
+ }
155
+ const marker = match[1] || "";
156
+ const content = match[2] || "";
157
+ candidates.push({
158
+ checked: marker.toLowerCase() === "x",
159
+ line: index + 1,
160
+ title: parseStepTitle(content)
161
+ });
162
+ }
163
+ return candidates.length > 0 ? candidates : null;
164
+ }
165
+ function parseStepTitle(content) {
166
+ const boldTitle = content.match(/^\*\*(.+?)\*\*/)?.[1];
167
+ const label = boldTitle || content.split(/\s+-\s+/, 1)[0] || content;
168
+ return label.replace(/^Step\s+\d+\s*[-:]\s*/i, "").trim();
169
+ }
170
+ function normalizeWorkType(value) {
171
+ const normalized = value?.toLowerCase();
172
+ if (normalized === "feature" || normalized === "fix" || normalized === "rollback" || normalized === "stage" || normalized === "spec") {
173
+ return normalized === "spec" ? "feature" : normalized;
174
+ }
175
+ return null;
176
+ }
177
+ function idleSummary() {
178
+ return {
179
+ state: "idle",
180
+ type: null,
181
+ title: null,
182
+ status: null,
183
+ runId: null,
184
+ steps: [],
185
+ completed: 0,
186
+ remaining: 0,
187
+ total: 0,
188
+ nextStep: null,
189
+ warnings: []
190
+ };
191
+ }
192
+ function malformedSummary(warning) {
193
+ return {
194
+ ...idleSummary(),
195
+ state: "malformed",
196
+ warnings: [warning]
197
+ };
198
+ }
199
+ function getErrorCode(error) {
200
+ return typeof error === "object" &&
201
+ error !== null &&
202
+ "code" in error &&
203
+ typeof error.code === "string"
204
+ ? error.code
205
+ : undefined;
206
+ }
207
+ export { CURRENT_STAGE_PATH, parseCurrentWork, readCurrentWork };
208
+ //# sourceMappingURL=current-work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-work.js","sourceRoot":"","sources":["../../lib/current-work.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ type FindingSeverity = "P0" | "P1" | "P2" | "P3";
2
+ type FindingStatus = "unverified" | "open" | "fixed" | "closed" | "accepted" | "invalid";
3
+ interface Finding {
4
+ id: string;
5
+ severity: FindingSeverity;
6
+ status: FindingStatus;
7
+ title: string;
8
+ line: number;
9
+ }
10
+ type FindingsWarningCode = "invalid_findings_path" | "malformed_findings" | "unsafe_findings_path";
11
+ interface FindingsWarning {
12
+ code: FindingsWarningCode;
13
+ message: string;
14
+ }
15
+ interface FindingsSummary {
16
+ items: Finding[];
17
+ total: number;
18
+ byStatus: Record<FindingStatus, number>;
19
+ blockers: Finding[];
20
+ warnings: FindingsWarning[];
21
+ }
22
+ declare const DEVFLOW_FINDINGS_PATH: string;
23
+ declare function readFindings(projectRoot: string): Promise<FindingsSummary>;
24
+ declare function parseFindings(markdown: string): FindingsSummary;
25
+ export { DEVFLOW_FINDINGS_PATH, parseFindings, readFindings };
26
+ export type { Finding, FindingSeverity, FindingsSummary, FindingStatus, FindingsWarning, FindingsWarningCode };
@@ -0,0 +1,110 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const DEVFLOW_FINDINGS_PATH = path.join("devflow", "context", "findings.md");
4
+ const BLUEPRINT_FINDINGS_PATH = path.join("blueprint", "context", "findings.md");
5
+ const FINDING_PATTERN = /^###\s+(\S+)\s+\[(P[0-3])\]\s+(unverified|open|fixed|closed|accepted|invalid)\s+-\s+(.+?)\s*$/i;
6
+ async function readFindings(projectRoot) {
7
+ let findingsPath = path.join(projectRoot, DEVFLOW_FINDINGS_PATH);
8
+ try {
9
+ let stats = await fs.lstat(findingsPath);
10
+ if (!stats.isFile()) {
11
+ const altPath = path.join(projectRoot, BLUEPRINT_FINDINGS_PATH);
12
+ const altStats = await fs.lstat(altPath).catch(() => null);
13
+ if (altStats?.isFile()) {
14
+ findingsPath = altPath;
15
+ stats = altStats;
16
+ }
17
+ }
18
+ if (stats.isSymbolicLink()) {
19
+ return emptySummary({
20
+ code: "unsafe_findings_path",
21
+ message: "Findings file is a symbolic link and was not read."
22
+ });
23
+ }
24
+ if (!stats.isFile()) {
25
+ return emptySummary({
26
+ code: "invalid_findings_path",
27
+ message: "Findings path is not a regular file."
28
+ });
29
+ }
30
+ return parseFindings(await fs.readFile(findingsPath, "utf8"));
31
+ }
32
+ catch (error) {
33
+ if (getErrorCode(error) === "ENOENT") {
34
+ try {
35
+ const altPath = path.join(projectRoot, BLUEPRINT_FINDINGS_PATH);
36
+ const altContent = await fs.readFile(altPath, "utf8");
37
+ return parseFindings(altContent);
38
+ }
39
+ catch {
40
+ return emptySummary();
41
+ }
42
+ }
43
+ throw error;
44
+ }
45
+ }
46
+ function parseFindings(markdown) {
47
+ const items = [];
48
+ let malformed = false;
49
+ for (const [index, line] of markdown.split(/\r?\n/).entries()) {
50
+ const match = line.match(FINDING_PATTERN);
51
+ if (match) {
52
+ items.push({
53
+ id: match[1] || "",
54
+ severity: (match[2] || "").toUpperCase(),
55
+ status: (match[3] || "").toLowerCase(),
56
+ title: (match[4] || "").trim(),
57
+ line: index + 1
58
+ });
59
+ }
60
+ else if (/^###\s+\S+\s+\[P/i.test(line)) {
61
+ malformed = true;
62
+ }
63
+ }
64
+ const byStatus = createStatusCounts();
65
+ for (const finding of items) {
66
+ byStatus[finding.status] += 1;
67
+ }
68
+ return {
69
+ items,
70
+ total: items.length,
71
+ byStatus,
72
+ blockers: items.filter((finding) => (finding.severity === "P0" || finding.severity === "P1") &&
73
+ (finding.status === "open" || finding.status === "fixed")),
74
+ warnings: malformed
75
+ ? [{
76
+ code: "malformed_findings",
77
+ message: "One or more finding headings do not match the required ledger format."
78
+ }]
79
+ : []
80
+ };
81
+ }
82
+ function createStatusCounts() {
83
+ return {
84
+ unverified: 0,
85
+ open: 0,
86
+ fixed: 0,
87
+ closed: 0,
88
+ accepted: 0,
89
+ invalid: 0
90
+ };
91
+ }
92
+ function emptySummary(warning) {
93
+ return {
94
+ items: [],
95
+ total: 0,
96
+ byStatus: createStatusCounts(),
97
+ blockers: [],
98
+ warnings: warning ? [warning] : []
99
+ };
100
+ }
101
+ function getErrorCode(error) {
102
+ return typeof error === "object" &&
103
+ error !== null &&
104
+ "code" in error &&
105
+ typeof error.code === "string"
106
+ ? error.code
107
+ : undefined;
108
+ }
109
+ export { DEVFLOW_FINDINGS_PATH, parseFindings, readFindings };
110
+ //# sourceMappingURL=findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../lib/findings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface GitStatusSummary {
2
+ available: boolean;
3
+ branch: string | null;
4
+ clean: boolean | null;
5
+ changedFiles: number;
6
+ lastCommit: string | null;
7
+ upstream: string | null;
8
+ ahead: number | null;
9
+ behind: number | null;
10
+ }
11
+ declare function readGitStatus(projectRoot: string): Promise<GitStatusSummary>;
12
+ export { readGitStatus };
13
+ export type { GitStatusSummary };