@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,463 @@
1
+ import { readDashboardSnapshot } from "./dashboard-snapshot.js";
2
+ import { evaluateGate } from "./gatekeeper.js";
3
+ import { detectGitDrift } from "./drift-reconciler.js";
4
+ import { readIdeas } from "./ideas.js";
5
+ /**
6
+ * Escapes HTML characters safely.
7
+ */
8
+ function escapeHtml(str) {
9
+ if (!str)
10
+ return "";
11
+ return String(str)
12
+ .replace(/&/g, "&")
13
+ .replace(/</g, "&lt;")
14
+ .replace(/>/g, "&gt;")
15
+ .replace(/"/g, "&quot;")
16
+ .replace(/'/g, "&#039;");
17
+ }
18
+ /**
19
+ * Renders a self-contained, interactive Webview Studio HTML page.
20
+ */
21
+ export async function renderStudioHtml(projectRoot, options = {}) {
22
+ const snapshot = await readDashboardSnapshot(projectRoot);
23
+ const gateReport = await evaluateGate(projectRoot, { strict: false });
24
+ const driftReport = await detectGitDrift(projectRoot);
25
+ const ideas = await readIdeas(projectRoot);
26
+ const status = snapshot.status;
27
+ const currentWork = status.currentWork;
28
+ const projectName = status.project.name || "Nexus-DevFlow Project";
29
+ const branch = status.git.branch || "main";
30
+ const nextActionCmd = typeof status.nextAction === "string" ? status.nextAction : status.nextAction?.command || "/feature";
31
+ const track = snapshot.workflow.track || (currentWork.state === "active" ? "fast" : "idle");
32
+ const isGatePassed = gateReport.passed;
33
+ const gatePillClass = isGatePassed ? "badge-pass" : "badge-blocked";
34
+ const gatePillText = isGatePassed ? "✔ Gate Passed" : "✖ Gate Blocked";
35
+ const ideasHtml = ideas.pending.length > 0
36
+ ? ideas.pending.map((idea) => `
37
+ <div class="card-item idea-item">
38
+ <div class="item-header">
39
+ <span class="badge-id">${escapeHtml(idea.id)}</span>
40
+ <span class="item-title">${escapeHtml(idea.title || idea.rawInput.slice(0, 40))}</span>
41
+ </div>
42
+ <div class="item-tags">
43
+ <span class="tag tag-feasibility">${escapeHtml(idea.feasibility || "Feasible")}</span>
44
+ <span class="tag tag-value">${escapeHtml(idea.value || "Value: High")}</span>
45
+ </div>
46
+ </div>
47
+ `).join("")
48
+ : `<div class="empty-state">No pending ideas in inbox. Use <code>nexus-devflow idea add</code></div>`;
49
+ const historyHtml = snapshot.history.items.length > 0
50
+ ? snapshot.history.items.slice(0, 8).map((item) => {
51
+ const runId = item.buildPlanItem || item.file.replace(/\.md$/, "");
52
+ return `
53
+ <div class="card-item history-item">
54
+ <div class="item-header">
55
+ <span class="badge-id badge-history">${escapeHtml(runId)}</span>
56
+ <span class="item-title">${escapeHtml(item.title)}</span>
57
+ </div>
58
+ <div class="item-meta">
59
+ <span class="tag tag-cat">${escapeHtml(item.type)}</span>
60
+ </div>
61
+ </div>
62
+ `;
63
+ }).join("")
64
+ : `<div class="empty-state">No archived history records yet.</div>`;
65
+ const completedCount = currentWork.completed;
66
+ const totalTasks = currentWork.total;
67
+ const progressPercent = totalTasks > 0 ? Math.round((completedCount / totalTasks) * 100) : 0;
68
+ return `<!DOCTYPE html>
69
+ <html lang="th" data-theme="${options.theme || "auto"}">
70
+ <head>
71
+ <meta charset="UTF-8">
72
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
73
+ <title>Nexus-DevFlow Studio: ${escapeHtml(projectName)}</title>
74
+ <style>
75
+ :root {
76
+ --bg: var(--vscode-editor-background, #090d16);
77
+ --bg-panel: var(--vscode-sideBar-background, rgba(17, 24, 39, 0.75));
78
+ --bg-card: rgba(30, 41, 59, 0.6);
79
+ --border: var(--vscode-panel-border, rgba(255, 255, 255, 0.08));
80
+ --border-accent: rgba(56, 189, 248, 0.3);
81
+ --fg: var(--vscode-editor-foreground, #f8fafc);
82
+ --fg-muted: var(--vscode-descriptionForeground, #94a3b8);
83
+ --accent: #38bdf8;
84
+ --accent-gradient: linear-gradient(135deg, #38bdf8 0%, #818cf8 100%);
85
+ --green: #4ade80;
86
+ --yellow: #facc15;
87
+ --red: #f87171;
88
+ --font-mono: var(--vscode-editor-font-family, 'Fira Code', Consolas, monospace);
89
+ --font-sans: var(--vscode-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
90
+ }
91
+
92
+ * { box-sizing: border-box; margin: 0; padding: 0; }
93
+ body {
94
+ font-family: var(--font-sans);
95
+ background-color: var(--bg);
96
+ color: var(--fg);
97
+ padding: 16px;
98
+ line-height: 1.5;
99
+ font-size: 13px;
100
+ overflow-x: hidden;
101
+ }
102
+
103
+ .studio-container {
104
+ max-width: 1200px;
105
+ margin: 0 auto;
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 16px;
109
+ }
110
+
111
+ /* Top Studio Header */
112
+ .studio-header {
113
+ background: var(--bg-panel);
114
+ backdrop-filter: blur(12px);
115
+ border: 1px solid var(--border);
116
+ border-radius: 12px;
117
+ padding: 16px 20px;
118
+ display: flex;
119
+ align-items: center;
120
+ justify-content: space-between;
121
+ flex-wrap: wrap;
122
+ gap: 12px;
123
+ }
124
+ .header-left {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 12px;
128
+ }
129
+ .project-badge {
130
+ font-weight: 700;
131
+ font-size: 16px;
132
+ background: var(--accent-gradient);
133
+ -webkit-background-clip: text;
134
+ -webkit-text-fill-color: transparent;
135
+ letter-spacing: -0.5px;
136
+ }
137
+ .branch-pill {
138
+ font-family: var(--font-mono);
139
+ font-size: 12px;
140
+ background: rgba(56, 189, 248, 0.12);
141
+ color: var(--accent);
142
+ padding: 3px 10px;
143
+ border-radius: 20px;
144
+ border: 1px solid var(--border-accent);
145
+ }
146
+ .header-right {
147
+ display: flex;
148
+ align-items: center;
149
+ gap: 10px;
150
+ }
151
+ .badge-pass {
152
+ background: rgba(74, 222, 128, 0.15);
153
+ color: var(--green);
154
+ border: 1px solid rgba(74, 222, 128, 0.3);
155
+ padding: 4px 12px;
156
+ border-radius: 20px;
157
+ font-weight: 600;
158
+ }
159
+ .badge-blocked {
160
+ background: rgba(248, 113, 113, 0.15);
161
+ color: var(--red);
162
+ border: 1px solid rgba(248, 113, 113, 0.3);
163
+ padding: 4px 12px;
164
+ border-radius: 20px;
165
+ font-weight: 600;
166
+ }
167
+
168
+ /* Quick Action Dispatcher */
169
+ .action-bar {
170
+ background: var(--bg-panel);
171
+ border: 1px solid var(--border);
172
+ border-radius: 10px;
173
+ padding: 12px 16px;
174
+ display: flex;
175
+ align-items: center;
176
+ gap: 8px;
177
+ overflow-x: auto;
178
+ }
179
+ .action-label {
180
+ font-weight: 600;
181
+ color: var(--fg-muted);
182
+ font-size: 11px;
183
+ text-transform: uppercase;
184
+ margin-right: 4px;
185
+ white-space: nowrap;
186
+ }
187
+ .btn-action {
188
+ background: var(--bg-card);
189
+ border: 1px solid var(--border);
190
+ color: var(--fg);
191
+ padding: 5px 12px;
192
+ border-radius: 6px;
193
+ cursor: pointer;
194
+ font-family: var(--font-mono);
195
+ font-size: 12px;
196
+ transition: all 0.2s ease;
197
+ white-space: nowrap;
198
+ }
199
+ .btn-action:hover {
200
+ background: rgba(56, 189, 248, 0.15);
201
+ border-color: var(--accent);
202
+ color: var(--accent);
203
+ }
204
+ .btn-action.btn-primary {
205
+ background: var(--accent-gradient);
206
+ color: #040812;
207
+ font-weight: 700;
208
+ border: none;
209
+ }
210
+
211
+ /* 3-Pillars Kanban Grid */
212
+ .kanban-grid {
213
+ display: grid;
214
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
215
+ gap: 16px;
216
+ }
217
+ .kanban-col {
218
+ background: var(--bg-panel);
219
+ border: 1px solid var(--border);
220
+ border-radius: 12px;
221
+ padding: 16px;
222
+ display: flex;
223
+ flex-direction: column;
224
+ gap: 12px;
225
+ }
226
+ .col-header {
227
+ display: flex;
228
+ align-items: center;
229
+ justify-content: space-between;
230
+ border-bottom: 1px solid var(--border);
231
+ padding-bottom: 10px;
232
+ }
233
+ .col-title {
234
+ font-size: 13px;
235
+ font-weight: 700;
236
+ display: flex;
237
+ align-items: center;
238
+ gap: 6px;
239
+ }
240
+ .col-count {
241
+ font-size: 11px;
242
+ background: var(--bg-card);
243
+ padding: 2px 8px;
244
+ border-radius: 10px;
245
+ color: var(--fg-muted);
246
+ }
247
+
248
+ .col-content {
249
+ display: flex;
250
+ flex-direction: column;
251
+ gap: 10px;
252
+ max-height: 480px;
253
+ overflow-y: auto;
254
+ }
255
+
256
+ /* Card Items */
257
+ .card-item {
258
+ background: var(--bg-card);
259
+ border: 1px solid var(--border);
260
+ border-radius: 8px;
261
+ padding: 12px;
262
+ display: flex;
263
+ flex-direction: column;
264
+ gap: 6px;
265
+ transition: transform 0.15s ease, border-color 0.15s ease;
266
+ }
267
+ .card-item:hover {
268
+ border-color: var(--border-accent);
269
+ transform: translateY(-1px);
270
+ }
271
+ .card-item.active-item {
272
+ border-color: var(--accent);
273
+ box-shadow: 0 0 12px rgba(56, 189, 248, 0.15);
274
+ }
275
+
276
+ .item-header {
277
+ display: flex;
278
+ align-items: flex-start;
279
+ gap: 8px;
280
+ }
281
+ .badge-id {
282
+ font-family: var(--font-mono);
283
+ font-size: 10px;
284
+ font-weight: 700;
285
+ background: rgba(56, 189, 248, 0.2);
286
+ color: var(--accent);
287
+ padding: 2px 6px;
288
+ border-radius: 4px;
289
+ white-space: nowrap;
290
+ }
291
+ .badge-history {
292
+ background: rgba(129, 140, 248, 0.2);
293
+ color: #818cf8;
294
+ }
295
+ .item-title {
296
+ font-weight: 600;
297
+ font-size: 12px;
298
+ flex: 1;
299
+ }
300
+
301
+ /* Progress bar */
302
+ .progress-bar-container {
303
+ background: rgba(0, 0, 0, 0.3);
304
+ height: 6px;
305
+ border-radius: 3px;
306
+ overflow: hidden;
307
+ margin-top: 4px;
308
+ }
309
+ .progress-bar-fill {
310
+ background: var(--accent-gradient);
311
+ height: 100%;
312
+ transition: width 0.3s ease;
313
+ }
314
+
315
+ .item-tags, .item-meta {
316
+ display: flex;
317
+ align-items: center;
318
+ gap: 6px;
319
+ font-size: 11px;
320
+ color: var(--fg-muted);
321
+ }
322
+ .tag {
323
+ font-size: 10px;
324
+ padding: 1px 6px;
325
+ border-radius: 4px;
326
+ background: rgba(255, 255, 255, 0.05);
327
+ }
328
+ .tag-feasibility { color: var(--green); }
329
+ .tag-value { color: var(--accent); }
330
+ .tag-cat { color: var(--yellow); }
331
+
332
+ .empty-state {
333
+ text-align: center;
334
+ padding: 24px;
335
+ color: var(--fg-muted);
336
+ font-size: 12px;
337
+ }
338
+
339
+ /* Pulse Notification */
340
+ .pulse-panel {
341
+ background: var(--bg-panel);
342
+ border: 1px solid var(--border);
343
+ border-radius: 10px;
344
+ padding: 12px 16px;
345
+ display: flex;
346
+ align-items: center;
347
+ justify-content: space-between;
348
+ font-size: 12px;
349
+ }
350
+ </style>
351
+ </head>
352
+ <body>
353
+ <div class="studio-container">
354
+
355
+ <!-- Top Header -->
356
+ <header class="studio-header">
357
+ <div class="header-left">
358
+ <span class="project-badge">⚡ ${escapeHtml(projectName)}</span>
359
+ <span class="branch-pill">🌿 ${escapeHtml(branch)}</span>
360
+ <span class="badge-track">Track: ${escapeHtml(track)}</span>
361
+ </div>
362
+ <div class="header-right">
363
+ <span class="${gatePillClass}">${gatePillText}</span>
364
+ <button class="btn-action btn-primary" onclick="dispatchCommand('${escapeHtml(nextActionCmd)}')">
365
+ Next: ${escapeHtml(nextActionCmd)}
366
+ </button>
367
+ </div>
368
+ </header>
369
+
370
+
371
+ <!-- Quick Action Bar -->
372
+ <div class="action-bar">
373
+ <span class="action-label">Quick Actions:</span>
374
+ <button class="btn-action" onclick="dispatchCommand('/feature')">/feature</button>
375
+ <button class="btn-action" onclick="dispatchCommand('/implement')">/implement</button>
376
+ <button class="btn-action" onclick="dispatchCommand('/check')">/check</button>
377
+ <button class="btn-action" onclick="dispatchCommand('/complete')">/complete</button>
378
+ <button class="btn-action" onclick="dispatchCommand('nexus-devflow slice --stage implement')">slice</button>
379
+ <button class="btn-action" onclick="dispatchCommand('nexus-devflow drift')">drift</button>
380
+ <button class="btn-action" onclick="dispatchCommand('nexus-devflow reconcile --fix')">reconcile</button>
381
+ <button class="btn-action" onclick="dispatchCommand('nexus-devflow doctor')">doctor</button>
382
+ </div>
383
+
384
+ <!-- 3-Pillars Kanban View -->
385
+ <main class="kanban-grid">
386
+
387
+ <!-- 🔮 1. Future (Ideas Inbox) -->
388
+ <section class="kanban-col">
389
+ <div class="col-header">
390
+ <span class="col-title">🔮 Future (Ideas Inbox)</span>
391
+ <span class="col-count">${ideas.pending.length}</span>
392
+ </div>
393
+ <div class="col-content">
394
+ ${ideasHtml}
395
+ </div>
396
+ </section>
397
+
398
+
399
+ <!-- ⚡ 2. Present (Active Living Context) -->
400
+ <section class="kanban-col">
401
+ <div class="col-header">
402
+ <span class="col-title">⚡ Present (Active Living Spec)</span>
403
+ <span class="col-count">${completedCount}/${totalTasks} Tasks</span>
404
+ </div>
405
+ <div class="col-content">
406
+ ${currentWork.state === "active" ? `
407
+ <div class="card-item active-item">
408
+ <div class="item-header">
409
+ <span class="badge-id">${escapeHtml(currentWork.runId || "ACTIVE")}</span>
410
+ <span class="item-title">${escapeHtml(currentWork.title || "Active Spec")}</span>
411
+ </div>
412
+ <div class="progress-bar-container">
413
+ <div class="progress-bar-fill" style="width: ${progressPercent}%;"></div>
414
+ </div>
415
+ <div class="item-meta">
416
+ <span>Progress: ${progressPercent}%</span>
417
+ <span>Remaining: ${currentWork.remaining} task(s)</span>
418
+ </div>
419
+ </div>
420
+ ` : `
421
+ <div class="empty-state">
422
+ Idle workspace.<br>Run <code>/feature</code> or <code>/fix</code> to start a run.
423
+ </div>
424
+ `}
425
+ </div>
426
+ </section>
427
+
428
+ <!-- 📦 3. Past (Release History Archive) -->
429
+ <section class="kanban-col">
430
+ <div class="col-header">
431
+ <span class="col-title">📦 Past (History Archives)</span>
432
+ <span class="col-count">${snapshot.history.total} Releases</span>
433
+ </div>
434
+ <div class="col-content">
435
+ ${historyHtml}
436
+ </div>
437
+ </section>
438
+
439
+ </main>
440
+
441
+ <!-- Bottom Pulse -->
442
+ <footer class="pulse-panel">
443
+ <div>Findings Blockers: <strong>${gateReport.findingsBlockers}</strong> | Total Findings: <strong>${status.findings.total}</strong></div>
444
+ <div>Git Drift: <strong>${driftReport.hasDrift ? "⚠ Drift Detected" : "✔ In Sync"}</strong></div>
445
+ </footer>
446
+
447
+ </div>
448
+
449
+ <script>
450
+ function dispatchCommand(cmd) {
451
+ if (window.acquireVsCodeApi) {
452
+ const vscode = window.acquireVsCodeApi();
453
+ vscode.postMessage({ command: 'exec', text: cmd });
454
+ } else if (navigator.clipboard) {
455
+ navigator.clipboard.writeText(cmd);
456
+ alert('Copied command to clipboard: ' + cmd);
457
+ }
458
+ }
459
+ </script>
460
+ </body>
461
+ </html>`;
462
+ }
463
+ //# sourceMappingURL=webview-studio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview-studio.js","sourceRoot":"","sources":["../../lib/webview-studio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA0B,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC;;GAEG;AACH,SAAS,UAAU,CAAC,GAA8B;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,MAAM,CAAC,GAAG,CAAC;SACf,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAGD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,UAA+B,EAAE;IAEjC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,uBAAuB,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC;IAC3C,MAAM,aAAa,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,UAAU,CAAC;IAC3H,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE5F,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IACvC,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC;IACpE,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEvE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;;;qCAGG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;uCACjB,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;;;gDAG3C,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC;0CAChD,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;;;OAG1E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,mGAAmG,CAAC;IAGxG,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACnD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnE,OAAO;;;qDAGsC,UAAU,CAAC,KAAK,CAAC;yCAC7B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;0CAGrB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;;SAGtD,CAAC;QACJ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,iEAAiE,CAAC;IAGtE,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC;IAC7C,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;IACrC,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,OAAO;8BACqB,OAAO,CAAC,KAAK,IAAI,MAAM;;;;iCAIpB,UAAU,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA6RhB,UAAU,CAAC,WAAW,CAAC;uCACxB,UAAU,CAAC,MAAM,CAAC;2CACd,UAAU,CAAC,KAAK,CAAC;;;uBAGrC,aAAa,KAAK,YAAY;2EACsB,UAAU,CAAC,aAAa,CAAC;kBAClF,UAAU,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;oCA0BP,KAAK,CAAC,OAAO,CAAC,MAAM;;;YAG5C,SAAS;;;;;;;;;oCASe,cAAc,IAAI,UAAU;;;YAGpD,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC;;;yCAGJ,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,QAAQ,CAAC;2CACvC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,aAAa,CAAC;;;+DAG1B,eAAe;;;kCAG5C,eAAe;mCACd,WAAW,CAAC,SAAS;;;WAG7C,CAAC,CAAC,CAAC;;;;WAIH;;;;;;;;oCAQyB,QAAQ,CAAC,OAAO,CAAC,KAAK;;;YAG9C,WAAW;;;;;;;;wCAQiB,UAAU,CAAC,gBAAgB,uCAAuC,MAAM,CAAC,QAAQ,CAAC,KAAK;gCAC/F,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW;;;;;;;;;;;;;;;;;QAiB/E,CAAC;AACT,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { StatusCurrentWork } from "./status.js";
2
+ type WorkflowTrack = "fast" | "deep" | "idle";
3
+ type WorkflowNodeState = "done" | "active" | "pending";
4
+ interface WorkflowNode {
5
+ id: string;
6
+ label: string;
7
+ command: string;
8
+ state: WorkflowNodeState;
9
+ }
10
+ interface WorkflowState {
11
+ track: WorkflowTrack;
12
+ currentStage: string | null;
13
+ activeDiscoveryId: string | null;
14
+ activeRunId: string | null;
15
+ lastCompletedRun: string | null;
16
+ lastUpdated: string | null;
17
+ fast: WorkflowNode[];
18
+ deep: WorkflowNode[];
19
+ }
20
+ declare function readWorkflowState(projectRoot: string, currentWork: StatusCurrentWork): Promise<WorkflowState>;
21
+ declare function parseWorkflowState(markdown: string, currentWork: StatusCurrentWork): WorkflowState;
22
+ export { parseWorkflowState, readWorkflowState };
23
+ export type { WorkflowNode, WorkflowNodeState, WorkflowState, WorkflowTrack };
@@ -0,0 +1,128 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const FAST_STAGES = ["feature-fix", "implement", "check", "complete"];
4
+ const DEEP_STAGES = [
5
+ "00-explore",
6
+ "10-define",
7
+ "20-spec",
8
+ "30-plan",
9
+ "40-execute",
10
+ "50-verify",
11
+ "60-report",
12
+ "70-deliver"
13
+ ];
14
+ async function readWorkflowState(projectRoot, currentWork) {
15
+ const stagePath = path.join(projectRoot, "devflow", "context", "current-stage.md");
16
+ let markdown = "";
17
+ try {
18
+ markdown = await fs.readFile(stagePath, "utf8");
19
+ }
20
+ catch (error) {
21
+ if (getErrorCode(error) !== "ENOENT")
22
+ throw error;
23
+ }
24
+ return parseWorkflowState(markdown, currentWork);
25
+ }
26
+ function parseWorkflowState(markdown, currentWork) {
27
+ const explicitTrack = nullableField(markdown, "Track")?.toLowerCase();
28
+ const activeDiscoveryId = nullableField(markdown, "Active Discovery ID");
29
+ const activeRunId = nullableField(markdown, "Active Running ID");
30
+ const rawStage = nullableField(markdown, "Current Stage");
31
+ const lastCompletedRun = nullableField(markdown, "Last Completed Run");
32
+ const lastUpdated = nullableField(markdown, "Last Updated");
33
+ const deepStage = normalizeDeepStage(rawStage);
34
+ const fastStageFromMarkdown = normalizeFastStage(rawStage);
35
+ let track = "idle";
36
+ let currentStage = null;
37
+ const isIdle = explicitTrack === "idle" ||
38
+ (rawStage === null && currentWork.state === "idle" && !activeRunId && !activeDiscoveryId);
39
+ if (isIdle) {
40
+ track = "idle";
41
+ currentStage = null;
42
+ }
43
+ else if (explicitTrack === "deep") {
44
+ track = "deep";
45
+ currentStage = deepStage || (activeDiscoveryId ? "00-explore" : "10-define");
46
+ }
47
+ else if (explicitTrack === "fast") {
48
+ track = "fast";
49
+ currentStage = fastStageFromMarkdown || fastStage(currentWork);
50
+ }
51
+ else if (activeRunId && deepStage) {
52
+ track = "deep";
53
+ currentStage = deepStage;
54
+ }
55
+ else if (activeDiscoveryId) {
56
+ track = "deep";
57
+ currentStage = "00-explore";
58
+ }
59
+ else if (currentWork.state === "active") {
60
+ track = currentWork.type === "stage" ? "deep" : "fast";
61
+ currentStage = track === "deep" ? deepStage || "40-execute" : fastStageFromMarkdown || fastStage(currentWork);
62
+ }
63
+ return {
64
+ track,
65
+ currentStage,
66
+ activeDiscoveryId,
67
+ activeRunId,
68
+ lastCompletedRun,
69
+ lastUpdated,
70
+ fast: buildPipeline(FAST_STAGES, track === "fast" ? currentStage : null),
71
+ deep: buildPipeline(DEEP_STAGES, track === "deep" ? currentStage : null)
72
+ };
73
+ }
74
+ function nullableField(markdown, label) {
75
+ const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
76
+ const match = markdown.match(new RegExp(`^-\\s+(?:\\*\\*)?${escaped}(?:\\*\\*)?:\\s*\\x60?([^\\r\\n\\x60]+)`, "im"));
77
+ const value = match?.[1]?.trim() || "";
78
+ return value === "" || value.toLowerCase() === "none" || value.toLowerCase() === "idle"
79
+ ? null
80
+ : value;
81
+ }
82
+ function normalizeDeepStage(value) {
83
+ if (!value)
84
+ return null;
85
+ const handoff = value.match(/(?:ready\s+for|executing)\s+(00-explore|10-define|20-spec|30-plan|40-execute|50-verify|60-report|70-deliver)/i)?.[1];
86
+ const direct = value.match(/\b(00-explore|10-define|20-spec|30-plan|40-execute|50-verify|60-report|70-deliver)\b/i)?.[1];
87
+ return (handoff || direct || "").toLowerCase() || null;
88
+ }
89
+ function normalizeFastStage(value) {
90
+ if (!value)
91
+ return null;
92
+ const match = value.match(/\b(feature|fix|feature-fix|implement|check|complete)\b/i)?.[1];
93
+ if (!match)
94
+ return null;
95
+ const normalized = match.toLowerCase();
96
+ if (normalized === "feature" || normalized === "fix")
97
+ return "feature-fix";
98
+ return normalized;
99
+ }
100
+ function fastStage(work) {
101
+ if (work.state === "idle")
102
+ return "feature-fix";
103
+ if (work.completed === 0 && work.total > 0)
104
+ return "implement";
105
+ return work.remaining > 0 ? "implement" : "check";
106
+ }
107
+ function buildPipeline(stages, activeStage) {
108
+ const activeIndex = activeStage ? stages.indexOf(activeStage) : -1;
109
+ return stages.map((stage, index) => ({
110
+ id: stage,
111
+ label: stage === "feature-fix" ? "feature / fix" : stage,
112
+ command: stage === "feature-fix" ? "/feature · /fix" : `/${stage}`,
113
+ state: activeIndex < 0
114
+ ? "pending"
115
+ : index < activeIndex
116
+ ? "done"
117
+ : index === activeIndex
118
+ ? "active"
119
+ : "pending"
120
+ }));
121
+ }
122
+ function getErrorCode(error) {
123
+ return typeof error === "object" && error !== null && "code" in error && typeof error.code === "string"
124
+ ? error.code
125
+ : undefined;
126
+ }
127
+ export { parseWorkflowState, readWorkflowState };
128
+ //# sourceMappingURL=workflow-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../lib/workflow-state.ts"],"names":[],"mappings":"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"}
@@ -94,7 +94,7 @@ async function sanitizeStarterFiles() {
94
94
  // 2. Clean Starter HISTORY.md
95
95
  const starterHistory = `# Master Release History Ledger
96
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.
97
+ 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.
98
98
 
99
99
  ---
100
100
 
@@ -102,7 +102,7 @@ This master ledger tracks all released delivery runs, milestones, and rollbacks
102
102
 
103
103
  | Completed Date | Run ID | Category | Title | Git Commit | Status | Archive Link |
104
104
  | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
105
- | _No shipped runs yet_ | - | - | Run \`/feature\` or \`/00-discover\` to start your first delivery run | - | - | - |
105
+ | _No shipped runs yet_ | - | - | Run \`/feature\` or \`/00-explore\` to start your first delivery run | - | - | - |
106
106
 
107
107
  ---
108
108
 
@@ -170,7 +170,7 @@ This master ledger tracks all released delivery runs, milestones, and rollbacks
170
170
 
171
171
  - **Active Discovery ID**: \`None\`
172
172
  - **Active Running ID**: \`None\`
173
- - **Current Stage**: \`Idle (Ready for new /feature, /fix, /00-discover, or /10-define)\`
173
+ - **Current Stage**: \`Idle (Ready for new /feature, /fix, /00-explore, or /10-define)\`
174
174
  - **Living Spec**: \`None\`
175
175
  - **Last Completed Run**: \`None\`
176
176
  - **Last Updated**: \`None\`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakkrichm/create-nexus-devflow",
3
- "version": "2.0.25",
3
+ "version": "2.1.0",
4
4
  "description": "Installer package for Nexus-DevFlow agentic workflow layer.",
5
5
  "license": "MIT",
6
6
  "author": "Jakkrich",