@jakkrichm/create-nexus-devflow 2.0.25 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +30 -8
  2. package/dist/bin/create-nexus-devflow.d.ts +22 -1
  3. package/dist/bin/create-nexus-devflow.js +658 -11
  4. package/dist/bin/create-nexus-devflow.js.map +1 -1
  5. package/dist/lib/branch-context.d.ts +39 -0
  6. package/dist/lib/branch-context.js +196 -0
  7. package/dist/lib/branch-context.js.map +1 -0
  8. package/dist/lib/code-graph.d.ts +30 -0
  9. package/dist/lib/code-graph.js +209 -0
  10. package/dist/lib/code-graph.js.map +1 -0
  11. package/dist/lib/command-catalog.d.ts +11 -0
  12. package/dist/lib/command-catalog.js +63 -0
  13. package/dist/lib/command-catalog.js.map +1 -0
  14. package/dist/lib/context-slicer.d.ts +31 -0
  15. package/dist/lib/context-slicer.js +234 -0
  16. package/dist/lib/context-slicer.js.map +1 -0
  17. package/dist/lib/current-work.js +97 -49
  18. package/dist/lib/current-work.js.map +1 -1
  19. package/dist/lib/dashboard-page.d.ts +2 -0
  20. package/dist/lib/dashboard-page.js +285 -0
  21. package/dist/lib/dashboard-page.js.map +1 -0
  22. package/dist/lib/dashboard-snapshot.d.ts +62 -0
  23. package/dist/lib/dashboard-snapshot.js +114 -0
  24. package/dist/lib/dashboard-snapshot.js.map +1 -0
  25. package/dist/lib/dashboard.d.ts +2 -0
  26. package/dist/lib/dashboard.js +398 -8
  27. package/dist/lib/dashboard.js.map +1 -1
  28. package/dist/lib/discoveries.d.ts +19 -0
  29. package/dist/lib/discoveries.js +81 -0
  30. package/dist/lib/discoveries.js.map +1 -0
  31. package/dist/lib/doctor.d.ts +26 -0
  32. package/dist/lib/doctor.js +474 -0
  33. package/dist/lib/doctor.js.map +1 -0
  34. package/dist/lib/drift-reconciler.d.ts +38 -0
  35. package/dist/lib/drift-reconciler.js +155 -0
  36. package/dist/lib/drift-reconciler.js.map +1 -0
  37. package/dist/lib/findings.d.ts +26 -2
  38. package/dist/lib/findings.js +165 -1
  39. package/dist/lib/findings.js.map +1 -1
  40. package/dist/lib/gatekeeper.d.ts +20 -0
  41. package/dist/lib/gatekeeper.js +106 -0
  42. package/dist/lib/gatekeeper.js.map +1 -0
  43. package/dist/lib/git-hooks.d.ts +16 -0
  44. package/dist/lib/git-hooks.js +103 -0
  45. package/dist/lib/git-hooks.js.map +1 -0
  46. package/dist/lib/history.d.ts +6 -1
  47. package/dist/lib/history.js +98 -11
  48. package/dist/lib/history.js.map +1 -1
  49. package/dist/lib/ide-extension.d.ts +38 -0
  50. package/dist/lib/ide-extension.js +61 -0
  51. package/dist/lib/ide-extension.js.map +1 -0
  52. package/dist/lib/ideas.d.ts +26 -0
  53. package/dist/lib/ideas.js +179 -0
  54. package/dist/lib/ideas.js.map +1 -0
  55. package/dist/lib/mcp.d.ts +36 -0
  56. package/dist/lib/mcp.js +653 -0
  57. package/dist/lib/mcp.js.map +1 -0
  58. package/dist/lib/status.d.ts +3 -1
  59. package/dist/lib/status.js +60 -6
  60. package/dist/lib/status.js.map +1 -1
  61. package/dist/lib/swarm-orchestrator.d.ts +31 -0
  62. package/dist/lib/swarm-orchestrator.js +134 -0
  63. package/dist/lib/swarm-orchestrator.js.map +1 -0
  64. package/dist/lib/update.js +2 -2
  65. package/dist/lib/update.js.map +1 -1
  66. package/dist/lib/version-check.d.ts +22 -0
  67. package/dist/lib/version-check.js +59 -0
  68. package/dist/lib/version-check.js.map +1 -0
  69. package/dist/lib/webview-studio.d.ts +8 -0
  70. package/dist/lib/webview-studio.js +463 -0
  71. package/dist/lib/webview-studio.js.map +1 -0
  72. package/dist/lib/workflow-state.d.ts +23 -0
  73. package/dist/lib/workflow-state.js +128 -0
  74. package/dist/lib/workflow-state.js.map +1 -0
  75. package/dist/scripts/prepare-template.js +3 -3
  76. package/package.json +1 -1
  77. package/template/{.claude/skills/00-discover → .agents/skills/00-explore}/SKILL.md +10 -10
  78. package/template/.agents/skills/10-define/SKILL.md +4 -4
  79. package/template/.agents/skills/20-spec/SKILL.md +2 -3
  80. package/template/.agents/skills/30-plan/SKILL.md +2 -3
  81. package/template/.agents/skills/40-execute/SKILL.md +2 -2
  82. package/template/.agents/skills/50-verify/SKILL.md +2 -2
  83. package/template/.agents/skills/60-report/SKILL.md +3 -3
  84. package/template/{.claude/skills/70-release → .agents/skills/70-deliver}/SKILL.md +7 -13
  85. package/template/.agents/skills/adopt/SKILL.md +136 -73
  86. package/template/.agents/skills/audit/SKILL.md +275 -0
  87. package/template/.agents/skills/autopilot/SKILL.md +228 -147
  88. package/template/.agents/skills/brainstorm/SKILL.md +3 -3
  89. package/template/.agents/skills/brief/SKILL.md +74 -51
  90. package/template/.agents/skills/check/SKILL.md +96 -76
  91. package/template/.agents/skills/ci/SKILL.md +140 -61
  92. package/template/.agents/skills/complete/SKILL.md +156 -101
  93. package/template/.agents/skills/convert-any-to-md/SKILL.md +2 -2
  94. package/template/.agents/skills/debug/SKILL.md +124 -49
  95. package/template/.agents/skills/devflow/SKILL.md +16 -10
  96. package/template/.agents/skills/discovery/SKILL.md +166 -0
  97. package/template/.agents/skills/doctor/SKILL.md +188 -72
  98. package/template/.agents/skills/feature/SKILL.md +195 -102
  99. package/template/.agents/skills/fix/SKILL.md +41 -90
  100. package/template/.agents/skills/idea/SKILL.md +3 -3
  101. package/template/.agents/skills/implement/SKILL.md +189 -46
  102. package/template/.agents/skills/onboard/SKILL.md +215 -85
  103. package/template/.agents/skills/overview/SKILL.md +51 -85
  104. package/template/.agents/skills/prototype/SKILL.md +82 -27
  105. package/template/.agents/skills/release/SKILL.md +160 -0
  106. package/template/.agents/skills/report-html/SKILL.md +2 -2
  107. package/template/.agents/skills/rollback/SKILL.md +123 -77
  108. package/template/.agents/skills/status/SKILL.md +109 -0
  109. package/template/.agents/skills/test/SKILL.md +2 -2
  110. package/template/.agents/skills/tests/SKILL.md +126 -0
  111. package/template/.agents/skills/try/SKILL.md +77 -65
  112. package/template/{.agents/skills/00-discover → .claude/skills/00-explore}/SKILL.md +9 -9
  113. package/template/.claude/skills/10-define/SKILL.md +2 -2
  114. package/template/.claude/skills/20-spec/SKILL.md +1 -1
  115. package/template/.claude/skills/30-plan/SKILL.md +1 -1
  116. package/template/.claude/skills/60-report/SKILL.md +1 -1
  117. package/template/{.agents/skills/70-release → .claude/skills/70-deliver}/SKILL.md +6 -12
  118. package/template/.claude/skills/adopt/SKILL.md +2 -2
  119. package/template/.claude/skills/audit/SKILL.md +141 -0
  120. package/template/.claude/skills/autopilot/SKILL.md +74 -52
  121. package/template/.claude/skills/brief/SKILL.md +67 -45
  122. package/template/.claude/skills/ci/SKILL.md +1 -1
  123. package/template/.claude/skills/complete/SKILL.md +1 -1
  124. package/template/.claude/skills/debug/SKILL.md +1 -1
  125. package/template/.claude/skills/devflow/SKILL.md +7 -7
  126. package/template/.claude/skills/discovery/SKILL.md +145 -0
  127. package/template/.claude/skills/doctor/SKILL.md +1 -1
  128. package/template/.claude/skills/feature/SKILL.md +67 -18
  129. package/template/.claude/skills/fix/SKILL.md +1 -1
  130. package/template/.claude/skills/idea/SKILL.md +2 -2
  131. package/template/.claude/skills/onboard/SKILL.md +3 -3
  132. package/template/.claude/skills/overview/SKILL.md +39 -88
  133. package/template/.claude/skills/prototype/SKILL.md +1 -1
  134. package/template/.claude/skills/release/SKILL.md +171 -0
  135. package/template/.claude/skills/rollback/SKILL.md +2 -2
  136. package/template/AGENTS.md +5 -5
  137. package/template/devflow/build-plan.md +62 -0
  138. package/template/devflow/context/ai-interaction.md +4 -4
  139. package/template/devflow/context/coding-standards.md +3 -3
  140. package/template/devflow/context/current-stage.md +1 -1
  141. package/template/devflow/context/findings.md +1 -1
  142. package/template/devflow/history/HISTORY.md +2 -2
  143. package/template/devflow/project-plan.md +79 -0
  144. package/template/devflow/reference/mockup.html +476 -0
  145. package/template/devflow/reference/project-overview-template.md +39 -0
  146. package/template/devflow/reference/running-id-contract.md +24 -2
  147. package/template/devflow/reference/studio.html +504 -0
@@ -0,0 +1,19 @@
1
+ interface DiscoveryItem {
2
+ id: string;
3
+ title: string;
4
+ date: string | null;
5
+ decision: "Proceed" | "Defer" | "Reject" | "Unknown";
6
+ approvalStatus: string | null;
7
+ status: string | null;
8
+ file: string;
9
+ }
10
+ interface DiscoverySummary {
11
+ total: number;
12
+ activeId: string | null;
13
+ active: DiscoveryItem | null;
14
+ recent: DiscoveryItem[];
15
+ }
16
+ declare function readDiscoveries(projectRoot: string, activeId?: string | null): Promise<DiscoverySummary>;
17
+ declare function parseDiscovery(markdown: string, file: string, fallbackId: string): DiscoveryItem;
18
+ export { parseDiscovery, readDiscoveries };
19
+ export type { DiscoveryItem, DiscoverySummary };
@@ -0,0 +1,81 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ async function readDiscoveries(projectRoot, activeId = null) {
4
+ const root = path.join(projectRoot, "devflow", "discoveries");
5
+ let entries;
6
+ try {
7
+ entries = await fs.readdir(root, { withFileTypes: true });
8
+ }
9
+ catch (error) {
10
+ if (getErrorCode(error) === "ENOENT")
11
+ return emptySummary(activeId);
12
+ throw error;
13
+ }
14
+ const items = await Promise.all(entries
15
+ .filter((entry) => entry.isDirectory() && !entry.isSymbolicLink())
16
+ .map(async (entry) => {
17
+ const file = path.join(entry.name, "00-explore.md");
18
+ try {
19
+ const markdown = await fs.readFile(path.join(root, file), "utf8");
20
+ return parseDiscovery(markdown, file, entry.name);
21
+ }
22
+ catch (error) {
23
+ if (getErrorCode(error) === "ENOENT")
24
+ return null;
25
+ throw error;
26
+ }
27
+ }));
28
+ const valid = items.filter((item) => item !== null)
29
+ .sort((left, right) => right.id.localeCompare(left.id));
30
+ return {
31
+ total: valid.length,
32
+ activeId,
33
+ active: valid.find((item) => item.id === activeId) || null,
34
+ recent: valid.slice(0, 6)
35
+ };
36
+ }
37
+ function parseDiscovery(markdown, file, fallbackId) {
38
+ const id = field(markdown, "Discovery ID") || fallbackId.match(/DISC-\d{8}-\d{3}/)?.[0] || fallbackId;
39
+ const heading = markdown.match(/^#\s+(.+)$/m)?.[1]?.trim() || fallbackId;
40
+ const title = heading
41
+ .replace(/^.*?\]\s*/, "")
42
+ .replace(/^Discovery Document:\s*/i, "")
43
+ .trim();
44
+ const finalDecision = markdown.match(/Final Decision:\s*`?(Proceed|Defer|Reject)`?/i)?.[1];
45
+ const status = field(markdown, "Status");
46
+ const statusDecision = status?.match(/\b(Proceed|Defer|Reject)\b/i)?.[1];
47
+ const normalizedDecision = finalDecision || statusDecision;
48
+ return {
49
+ id,
50
+ title,
51
+ date: field(markdown, "Date"),
52
+ decision: normalizeDecision(normalizedDecision),
53
+ approvalStatus: field(markdown, "Approval Status"),
54
+ status,
55
+ file: file.replaceAll("\\", "/")
56
+ };
57
+ }
58
+ function field(markdown, label) {
59
+ const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
60
+ return markdown.match(new RegExp(`\\*\\*${escaped}\\*\\*:\\s*\\x60?([^\\r\\n\\x60]+)`, "i"))?.[1]?.trim() || null;
61
+ }
62
+ function normalizeDecision(value) {
63
+ const normalized = value?.toLowerCase();
64
+ if (normalized === "proceed")
65
+ return "Proceed";
66
+ if (normalized === "defer")
67
+ return "Defer";
68
+ if (normalized === "reject")
69
+ return "Reject";
70
+ return "Unknown";
71
+ }
72
+ function emptySummary(activeId) {
73
+ return { total: 0, activeId, active: null, recent: [] };
74
+ }
75
+ function getErrorCode(error) {
76
+ return typeof error === "object" && error !== null && "code" in error && typeof error.code === "string"
77
+ ? error.code
78
+ : undefined;
79
+ }
80
+ export { parseDiscovery, readDiscoveries };
81
+ //# sourceMappingURL=discoveries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoveries.js","sourceRoot":"","sources":["../../lib/discoveries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface DoctorCheck {
2
+ id: string;
3
+ name: string;
4
+ status: "pass" | "warn" | "fail";
5
+ message: string;
6
+ fixable: boolean;
7
+ fixed?: boolean;
8
+ }
9
+ export interface DoctorReport {
10
+ projectRoot: string;
11
+ isDevFlowProject: boolean;
12
+ checks: DoctorCheck[];
13
+ totalChecks: number;
14
+ passCount: number;
15
+ warnCount: number;
16
+ failCount: number;
17
+ fixedCount: number;
18
+ }
19
+ export interface DoctorOptions {
20
+ fix?: boolean;
21
+ color?: boolean;
22
+ }
23
+ export declare function runDoctor(projectRoot: string, options?: DoctorOptions): Promise<DoctorReport>;
24
+ export declare function formatDoctorHuman(report: DoctorReport, options?: {
25
+ color?: boolean;
26
+ }): string;
@@ -0,0 +1,474 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { isDevFlowProjectRoot } from "./project-root.js";
4
+ import { createStyle } from "./ui.js";
5
+ const DEFAULT_FINDINGS_STUB = `# Findings Ledger
6
+
7
+ > **Generated Ledger File.** Tracks quality findings, security vulnerabilities, regression risks, and architectural debt raised during review and QA passes.
8
+ >
9
+ > **Finding Format**:
10
+ > \`### <ID> [<SEVERITY>] <STATUS> - <Title>\`
11
+ > - **Severities**: \`P0\` (Critical Blocker), \`P1\` (High Blocker), \`P2\` (Medium), \`P3\` (Low / Polish)
12
+ > - **Statuses**: \`unverified\`, \`open\`, \`fixed\`, \`closed\`, \`accepted\`, \`invalid\`
13
+ > - **Release Gate Rule**: Any \`P0\` or \`P1\` finding in \`open\` or \`fixed\` status unconditionally blocks \`/complete\` and \`70-deliver\`.
14
+
15
+ ---
16
+
17
+ _No active findings recorded. QA and audit passes append findings here as they are discovered._
18
+ `;
19
+ const DEFAULT_CURRENT_STAGE_STUB = `# Current DevFlow Run Status
20
+
21
+ - **Active Discovery ID**: \`None\`
22
+ - **Active Running ID**: \`None\`
23
+ - **Current Stage**: \`Idle (Ready for /feature or /fix)\`
24
+ - **Living Spec**: \`None\`
25
+ - **Last Completed Run**: \`None\`
26
+ - **Last Updated**: ${new Date().toISOString().split("T")[0]}
27
+ `;
28
+ const DEFAULT_CURRENT_FEATURE_STUB = `# Current Feature
29
+
30
+ _Nothing in progress. Run /feature, /fix, or /rollback to start._
31
+ `;
32
+ const DEFAULT_IDEAS_STUB = `# 💡 DevFlow Idea Inbox & Backlog
33
+
34
+ บันทึกไอเดียที่รอดำเนินการ พร้อมบทวิเคราะห์ความเป็นไปได้เบื้องต้นจาก AI (บันทึกด้วยคำสั่ง \`/idea "<text>"\`)
35
+
36
+ ---
37
+
38
+ ## 📌 Pending Ideas
39
+
40
+ ---
41
+
42
+ ## 📦 Archived / Shipped Ideas
43
+ `;
44
+ const DEFAULT_HISTORY_STUB = `# Nexus-DevFlow Master Release History Ledger
45
+
46
+ This master ledger tracks all released delivery runs, milestones, and rollbacks in chronological order. Each entry is recorded during \`/complete\` or \`70-deliver\` and links to its exact Git commit hash, release status, category, and archived delivery artifacts.
47
+
48
+ ---
49
+
50
+ ## 📜 Master Release Log
51
+
52
+ | Completed Date | Run ID | Category | Title | Git Commit | Status | Archive Link |
53
+ | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
54
+
55
+ ---
56
+
57
+ ## 🗄️ History Categories (The Core 3 Model)
58
+
59
+ - **\`features/\`**: New user-facing features, enhancements, architecture migrations, refactoring, and tooling/infra.
60
+ - **\`fixes/\`**: Bug fixes, hotfixes, regressions, security patches, and performance optimizations.
61
+ - **\`rollbacks/\`**: Safe feature reversal and rollback execution records.
62
+ `;
63
+ const DEFAULT_PROJECT_PLAN_STUB = `# 🗺️ Project Plan (User-Owned Architectural Vision)
64
+
65
+ > **Document Type**: Project Plan (User-Owned)
66
+ > **Purpose**: Single source of truth for high-level product vision, architecture, constraints, and non-goals. Distilled into \`devflow/context/project-overview.md\` by \`/overview\`.
67
+
68
+ ---
69
+
70
+ ## 1. Product Vision & Problem Statement
71
+ - **What this is**: A description of the project and the core problem it solves.
72
+ - **Target Audience**: Who will use this system and why.
73
+ - **Core Value Proposition**: Key differentiator and value delivered.
74
+
75
+ ## 2. Architecture & Tech Stack
76
+ - **Runtime / Framework**: Primary language, framework, and runtime (e.g. Node.js, Next.js, FastAPI, Go).
77
+ - **Storage / Database**: Data persistence layers, caching, and state storage.
78
+ - **Key Modules / Services**: High-level module breakdown and directory responsibilities.
79
+ - **Integration Points**: External APIs, MCP servers, or third-party services.
80
+
81
+ ## 3. Constraints & Non-Goals
82
+ - **Non-Goals**: What this project explicitly will NOT do in the current scope.
83
+ - **Technical Constraints**: Performance targets, security standards, offline requirements, or backward compatibility rules.
84
+ - **Delivery Rules**: Dual-Track workflow discipline (Fast-Track for standard features, Deep-Track for epics).
85
+
86
+ ## 4. Key Milestones & Roadmap
87
+ - **Milestone 1**: Core Foundation & MVP
88
+ - **Milestone 2**: Feature Expansion & Integrations
89
+ - **Milestone 3**: Enterprise Hardening & Release Polish
90
+ `;
91
+ const DEFAULT_BUILD_PLAN_STUB = `# 📋 Build Plan (User-Owned Feature Queue)
92
+
93
+ > **Document Type**: Build Plan (User-Owned)
94
+ > **Purpose**: Master sequential feature build queue with dependencies and sizing. Inspected by \`/brief\` and consumed by \`/feature\`.
95
+
96
+ ---
97
+
98
+ ## 🚀 Phase 1: Core Foundation & MVP
99
+
100
+ - [ ] **1. Project Baseline & Context Setup** \`[Size: S]\`
101
+ - *Dependencies*: None
102
+ - *Scope*: Configure project scaffolding, coding standards, and initial workspace verification.
103
+ - [ ] **2. Core Data Models & Store** \`[Size: M]\`
104
+ - *Dependencies*: Feature 1
105
+ - *Scope*: Implement foundational data schemas, types, and persistence layer.
106
+ - [ ] **3. Primary User Interface & Navigation** \`[Size: M]\`
107
+ - *Dependencies*: Feature 2
108
+ - *Scope*: Build core views, interactive components, and responsive layout.
109
+
110
+ ---
111
+
112
+ ## ⚡ Phase 2: Feature Expansion & Integrations
113
+
114
+ - [ ] **4. Automated Quality Gates & CI Pipeline** \`[Size: M]\`
115
+ - *Dependencies*: Phase 1
116
+ - *Scope*: Wire up \`nexus-devflow check-gate\`, GitHub Actions workflows, and pre-commit hooks.
117
+ - [ ] **5. External Services & Tooling** \`[Size: L]\`
118
+ - *Dependencies*: Feature 4
119
+ - *Scope*: Integrate third-party APIs, MCP servers, or background worker jobs.
120
+
121
+ ---
122
+
123
+ ## 📦 Phase 3: Hardening & Production Release
124
+
125
+ - [ ] **6. Security & Performance Audit** \`[Size: M]\`
126
+ - *Dependencies*: Phase 2
127
+ - *Scope*: Run \`/audit\`, resolve P0/P1 blockers, and optimize asset bundle sizes.
128
+ - [ ] **7. Production Deployment & Cloud Smoke Tests** \`[Size: S]\`
129
+ - *Dependencies*: Feature 6
130
+ - *Scope*: Configure Render / Vercel deployment and run end-to-end smoke tests.
131
+ `;
132
+ async function fileExists(filePath) {
133
+ try {
134
+ const stats = await fs.lstat(filePath);
135
+ return stats.isFile();
136
+ }
137
+ catch {
138
+ return false;
139
+ }
140
+ }
141
+ async function dirExists(dirPath) {
142
+ try {
143
+ const stats = await fs.lstat(dirPath);
144
+ return stats.isDirectory();
145
+ }
146
+ catch {
147
+ return false;
148
+ }
149
+ }
150
+ export async function runDoctor(projectRoot, options = {}) {
151
+ const isDevFlow = await isDevFlowProjectRoot(projectRoot);
152
+ const checks = [];
153
+ // Check 1: Project Root
154
+ if (isDevFlow) {
155
+ checks.push({
156
+ id: "project_root",
157
+ name: "DevFlow Project Root",
158
+ status: "pass",
159
+ message: "Directory contains DevFlow workspace markers (AGENTS.md & devflow/).",
160
+ fixable: false
161
+ });
162
+ }
163
+ else {
164
+ checks.push({
165
+ id: "project_root",
166
+ name: "DevFlow Project Root",
167
+ status: "fail",
168
+ message: "Not a recognized DevFlow project directory.",
169
+ fixable: false
170
+ });
171
+ }
172
+ // Check 2: Internal State Manifest
173
+ const manifestPath = path.join(projectRoot, ".nexus", "nexus-devflow.json");
174
+ const hasManifest = await fileExists(manifestPath);
175
+ if (hasManifest) {
176
+ try {
177
+ const parsed = JSON.parse(await fs.readFile(manifestPath, "utf8"));
178
+ checks.push({
179
+ id: "manifest_state",
180
+ name: "Internal State Manifest (.nexus/)",
181
+ status: "pass",
182
+ message: `Manifest valid (version: ${parsed.version || "unknown"}, mode: ${parsed.mode || "standard"}).`,
183
+ fixable: false
184
+ });
185
+ }
186
+ catch {
187
+ checks.push({
188
+ id: "manifest_state",
189
+ name: "Internal State Manifest (.nexus/)",
190
+ status: "warn",
191
+ message: "Manifest file is malformed JSON.",
192
+ fixable: true
193
+ });
194
+ }
195
+ }
196
+ else {
197
+ checks.push({
198
+ id: "manifest_state",
199
+ name: "Internal State Manifest (.nexus/)",
200
+ status: "warn",
201
+ message: "Manifest (.nexus/nexus-devflow.json) not found.",
202
+ fixable: true
203
+ });
204
+ }
205
+ // Check 3: Adapters
206
+ const hasAgentsDir = await dirExists(path.join(projectRoot, ".agents"));
207
+ const hasClaudeDir = await dirExists(path.join(projectRoot, ".claude"));
208
+ if (hasAgentsDir || hasClaudeDir) {
209
+ const adapters = [];
210
+ if (hasAgentsDir)
211
+ adapters.push("Codex/Copilot/Antigravity (.agents)");
212
+ if (hasClaudeDir)
213
+ adapters.push("Claude Code (.claude)");
214
+ checks.push({
215
+ id: "ai_adapters",
216
+ name: "AI Tool Adapters",
217
+ status: "pass",
218
+ message: `Active adapters detected: ${adapters.join(", ")}.`,
219
+ fixable: false
220
+ });
221
+ }
222
+ else {
223
+ checks.push({
224
+ id: "ai_adapters",
225
+ name: "AI Tool Adapters",
226
+ status: "warn",
227
+ message: "No AI adapter folders (.agents or .claude) detected.",
228
+ fixable: false
229
+ });
230
+ }
231
+ // Check 4: Core Context Files
232
+ const contextFiles = [
233
+ { name: "current-stage.md", path: path.join("devflow", "context", "current-stage.md"), stub: DEFAULT_CURRENT_STAGE_STUB },
234
+ { name: "current-feature.md", path: path.join("devflow", "context", "current-feature.md"), stub: DEFAULT_CURRENT_FEATURE_STUB },
235
+ { name: "findings.md", path: path.join("devflow", "context", "findings.md"), stub: DEFAULT_FINDINGS_STUB },
236
+ { name: "project-overview.md", path: path.join("devflow", "context", "project-overview.md"), stub: "# Project Overview\n\n_Source of truth for project architecture and domain rules._\n" },
237
+ { name: "coding-standards.md", path: path.join("devflow", "context", "coding-standards.md"), stub: "# Coding Standards\n\n_Engineering conventions and quality standards._\n" },
238
+ { name: "ai-interaction.md", path: path.join("devflow", "context", "ai-interaction.md"), stub: "# AI Interaction Guidelines\n\n_Rules and guidelines for interacting with AI agents._\n" }
239
+ ];
240
+ for (const cf of contextFiles) {
241
+ const absPath = path.join(projectRoot, cf.path);
242
+ const exists = await fileExists(absPath);
243
+ if (exists) {
244
+ checks.push({
245
+ id: `context_${cf.name}`,
246
+ name: `Context File (${cf.name})`,
247
+ status: "pass",
248
+ message: `Found at ${cf.path}.`,
249
+ fixable: false
250
+ });
251
+ }
252
+ else {
253
+ let fixed = false;
254
+ if (options.fix) {
255
+ await fs.mkdir(path.dirname(absPath), { recursive: true });
256
+ await fs.writeFile(absPath, cf.stub, "utf8");
257
+ fixed = true;
258
+ }
259
+ checks.push({
260
+ id: `context_${cf.name}`,
261
+ name: `Context File (${cf.name})`,
262
+ status: fixed ? "pass" : "warn",
263
+ message: fixed ? `Restored stub at ${cf.path}.` : `Missing at ${cf.path}.`,
264
+ fixable: true,
265
+ fixed
266
+ });
267
+ }
268
+ }
269
+ // Check 5: Planning Documents (project-plan.md & build-plan.md)
270
+ const projectPlanPath = path.join(projectRoot, "devflow", "project-plan.md");
271
+ const buildPlanPath = path.join(projectRoot, "devflow", "build-plan.md");
272
+ const hasProjectPlan = await fileExists(projectPlanPath);
273
+ const hasBuildPlan = await fileExists(buildPlanPath);
274
+ if (hasProjectPlan && hasBuildPlan) {
275
+ checks.push({
276
+ id: "planning_documents",
277
+ name: "Planning Documents (project-plan.md & build-plan.md)",
278
+ status: "pass",
279
+ message: "Both project-plan.md and build-plan.md are present.",
280
+ fixable: false
281
+ });
282
+ }
283
+ else if (hasProjectPlan || hasBuildPlan) {
284
+ let fixed = false;
285
+ if (options.fix) {
286
+ if (!hasProjectPlan)
287
+ await fs.writeFile(projectPlanPath, DEFAULT_PROJECT_PLAN_STUB, "utf8");
288
+ if (!hasBuildPlan)
289
+ await fs.writeFile(buildPlanPath, DEFAULT_BUILD_PLAN_STUB, "utf8");
290
+ fixed = true;
291
+ }
292
+ checks.push({
293
+ id: "planning_documents",
294
+ name: "Planning Documents (project-plan.md & build-plan.md)",
295
+ status: fixed ? "pass" : "warn",
296
+ message: fixed
297
+ ? "Restored missing planning document."
298
+ : `Partially present (${hasProjectPlan ? "project-plan.md present" : "build-plan.md present"}).`,
299
+ fixable: true,
300
+ fixed
301
+ });
302
+ }
303
+ else {
304
+ let fixed = false;
305
+ if (options.fix) {
306
+ await fs.writeFile(projectPlanPath, DEFAULT_PROJECT_PLAN_STUB, "utf8");
307
+ await fs.writeFile(buildPlanPath, DEFAULT_BUILD_PLAN_STUB, "utf8");
308
+ fixed = true;
309
+ }
310
+ checks.push({
311
+ id: "planning_documents",
312
+ name: "Planning Documents (project-plan.md & build-plan.md)",
313
+ status: fixed ? "pass" : "warn",
314
+ message: fixed
315
+ ? "Initialized project-plan.md and build-plan.md."
316
+ : "User-owned planning documents not configured (optional, recommended for long-term roadmap).",
317
+ fixable: true,
318
+ fixed
319
+ });
320
+ }
321
+ // Check 6: Ideas File
322
+ const ideasPath = path.join(projectRoot, "devflow", "ideas.md");
323
+ const hasIdeas = await fileExists(ideasPath);
324
+ if (hasIdeas) {
325
+ checks.push({
326
+ id: "ideas_inbox",
327
+ name: "Idea Inbox (devflow/ideas.md)",
328
+ status: "pass",
329
+ message: "Found at devflow/ideas.md.",
330
+ fixable: false
331
+ });
332
+ }
333
+ else {
334
+ let fixed = false;
335
+ if (options.fix) {
336
+ await fs.mkdir(path.dirname(ideasPath), { recursive: true });
337
+ await fs.writeFile(ideasPath, DEFAULT_IDEAS_STUB, "utf8");
338
+ fixed = true;
339
+ }
340
+ checks.push({
341
+ id: "ideas_inbox",
342
+ name: "Idea Inbox (devflow/ideas.md)",
343
+ status: fixed ? "pass" : "warn",
344
+ message: fixed ? "Restored stub at devflow/ideas.md." : "Missing devflow/ideas.md.",
345
+ fixable: true,
346
+ fixed
347
+ });
348
+ }
349
+ // Check 7: History Directory Structure
350
+ const historyDir = path.join(projectRoot, "devflow", "history");
351
+ const historyLedger = path.join(historyDir, "HISTORY.md");
352
+ const featuresDir = path.join(historyDir, "features");
353
+ const fixesDir = path.join(historyDir, "fixes");
354
+ const rollbacksDir = path.join(historyDir, "rollbacks");
355
+ const hasHistory = await dirExists(historyDir);
356
+ const hasLedger = await fileExists(historyLedger);
357
+ const hasFeatures = await dirExists(featuresDir);
358
+ const hasFixes = await dirExists(fixesDir);
359
+ const hasRollbacks = await dirExists(rollbacksDir);
360
+ if (hasHistory && hasLedger && hasFeatures && hasFixes && hasRollbacks) {
361
+ checks.push({
362
+ id: "history_structure",
363
+ name: "History Ledger & Archives (devflow/history/)",
364
+ status: "pass",
365
+ message: "Master ledger and categorized subdirectories (features, fixes, rollbacks) intact.",
366
+ fixable: false
367
+ });
368
+ }
369
+ else {
370
+ let fixed = false;
371
+ if (options.fix) {
372
+ await fs.mkdir(featuresDir, { recursive: true });
373
+ await fs.mkdir(fixesDir, { recursive: true });
374
+ await fs.mkdir(rollbacksDir, { recursive: true });
375
+ if (!hasLedger) {
376
+ await fs.writeFile(historyLedger, DEFAULT_HISTORY_STUB, "utf8");
377
+ }
378
+ fixed = true;
379
+ }
380
+ checks.push({
381
+ id: "history_structure",
382
+ name: "History Ledger & Archives (devflow/history/)",
383
+ status: fixed ? "pass" : "warn",
384
+ message: fixed ? "Repaired devflow/history/ directories and HISTORY.md." : "devflow/history/ structure incomplete.",
385
+ fixable: true,
386
+ fixed
387
+ });
388
+ }
389
+ // Check 8: Reference & Discoveries Directories
390
+ const refDir = path.join(projectRoot, "devflow", "reference");
391
+ const discDir = path.join(projectRoot, "devflow", "discoveries");
392
+ const hasRef = await dirExists(refDir);
393
+ const hasDisc = await dirExists(discDir);
394
+ if (hasRef && hasDisc) {
395
+ checks.push({
396
+ id: "reference_discoveries",
397
+ name: "Support Folders (reference/ & discoveries/)",
398
+ status: "pass",
399
+ message: "Folders present for document conversion and discovery storage.",
400
+ fixable: false
401
+ });
402
+ }
403
+ else {
404
+ let fixed = false;
405
+ if (options.fix) {
406
+ await fs.mkdir(refDir, { recursive: true });
407
+ await fs.mkdir(discDir, { recursive: true });
408
+ fixed = true;
409
+ }
410
+ checks.push({
411
+ id: "reference_discoveries",
412
+ name: "Support Folders (reference/ & discoveries/)",
413
+ status: fixed ? "pass" : "warn",
414
+ message: fixed ? "Created devflow/reference/ and devflow/discoveries/." : "Missing reference/ or discoveries/ folder.",
415
+ fixable: true,
416
+ fixed
417
+ });
418
+ }
419
+ let passCount = 0;
420
+ let warnCount = 0;
421
+ let failCount = 0;
422
+ let fixedCount = 0;
423
+ for (const c of checks) {
424
+ if (c.fixed)
425
+ fixedCount++;
426
+ if (c.status === "pass")
427
+ passCount++;
428
+ else if (c.status === "warn")
429
+ warnCount++;
430
+ else if (c.status === "fail")
431
+ failCount++;
432
+ }
433
+ return {
434
+ projectRoot,
435
+ isDevFlowProject: isDevFlow,
436
+ checks,
437
+ totalChecks: checks.length,
438
+ passCount,
439
+ warnCount,
440
+ failCount,
441
+ fixedCount
442
+ };
443
+ }
444
+ export function formatDoctorHuman(report, options = {}) {
445
+ const style = createStyle(options.color);
446
+ const lines = [];
447
+ lines.push(style.bold(`Nexus-DevFlow Doctor Health Report (${report.passCount} passed, ${report.warnCount} warnings, ${report.failCount} failed)`));
448
+ if (report.fixedCount > 0) {
449
+ lines.push(style.green(` ⚡ Auto-healed ${report.fixedCount} items via --fix`));
450
+ }
451
+ lines.push("");
452
+ for (const check of report.checks) {
453
+ let icon = style.green("✔");
454
+ if (check.status === "warn")
455
+ icon = style.yellow("⚠");
456
+ if (check.status === "fail")
457
+ icon = style.red("✖");
458
+ let statusText = style.green("PASS");
459
+ if (check.status === "warn")
460
+ statusText = style.yellow("WARN");
461
+ if (check.status === "fail")
462
+ statusText = style.red("FAIL");
463
+ if (check.fixed)
464
+ statusText = style.cyan("FIXED");
465
+ lines.push(` ${icon} ${style.bold(check.name)} [${statusText}]`);
466
+ lines.push(` ${style.dim(check.message)}`);
467
+ }
468
+ lines.push("");
469
+ if (report.warnCount > 0 && report.fixedCount === 0) {
470
+ lines.push(style.yellow("Tip: Run `nexus-devflow doctor --fix` to automatically repair missing context and folders."));
471
+ }
472
+ return lines.join("\n").trimEnd();
473
+ }
474
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../lib/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface GitDriftReport {
2
+ hasDrift: boolean;
3
+ undocumentedFiles: string[];
4
+ phantomFiles: string[];
5
+ matchedFiles: string[];
6
+ gitModifiedFiles: string[];
7
+ specFiles: string[];
8
+ stageDrift: {
9
+ isDrifted: boolean;
10
+ activeBranch: string | null;
11
+ stageRunningId: string | null;
12
+ };
13
+ }
14
+ export interface ReconcileResult {
15
+ reconciled: boolean;
16
+ addedFiles: string[];
17
+ healedStage: boolean;
18
+ message: string;
19
+ }
20
+ /**
21
+ * Normalizes file path to forward slashes relative to workspace root.
22
+ */
23
+ export declare function normalizeRelativePath(projectRoot: string, filePath: string): string;
24
+ /**
25
+ * Parses the "Files to Modify/Create" section from a living spec markdown.
26
+ */
27
+ export declare function parseSpecFilesList(specContent: string): string[];
28
+ /**
29
+ * Detects git drift between modified repository files and spec declaration.
30
+ */
31
+ export declare function detectGitDrift(projectRoot: string, explicitBranch?: string): Promise<GitDriftReport>;
32
+ /**
33
+ * Automatically reconciles and synchronizes living spec and stage file.
34
+ */
35
+ export declare function reconcileState(projectRoot: string, options?: {
36
+ autoAddUndocumented?: boolean;
37
+ healStage?: boolean;
38
+ }): Promise<ReconcileResult>;