@jakkrichm/create-nexus-devflow 2.0.27 → 2.2.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 (104) hide show
  1. package/README.md +29 -7
  2. package/dist/bin/create-nexus-devflow.d.ts +5 -1
  3. package/dist/bin/create-nexus-devflow.js +247 -4
  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/context-slicer.d.ts +31 -0
  12. package/dist/lib/context-slicer.js +234 -0
  13. package/dist/lib/context-slicer.js.map +1 -0
  14. package/dist/lib/current-work.js +4 -2
  15. package/dist/lib/current-work.js.map +1 -1
  16. package/dist/lib/dashboard-page.d.ts +1 -1
  17. package/dist/lib/dashboard-page.js +140 -56
  18. package/dist/lib/dashboard-page.js.map +1 -1
  19. package/dist/lib/dashboard-snapshot.d.ts +13 -0
  20. package/dist/lib/dashboard-snapshot.js +24 -6
  21. package/dist/lib/dashboard-snapshot.js.map +1 -1
  22. package/dist/lib/dashboard.js +38 -0
  23. package/dist/lib/dashboard.js.map +1 -1
  24. package/dist/lib/drift-reconciler.d.ts +38 -0
  25. package/dist/lib/drift-reconciler.js +155 -0
  26. package/dist/lib/drift-reconciler.js.map +1 -0
  27. package/dist/lib/gatekeeper.d.ts +1 -0
  28. package/dist/lib/gatekeeper.js +30 -1
  29. package/dist/lib/gatekeeper.js.map +1 -1
  30. package/dist/lib/git-hooks.js +41 -16
  31. package/dist/lib/git-hooks.js.map +1 -1
  32. package/dist/lib/ide-extension.d.ts +38 -0
  33. package/dist/lib/ide-extension.js +61 -0
  34. package/dist/lib/ide-extension.js.map +1 -0
  35. package/dist/lib/mcp.d.ts +36 -0
  36. package/dist/lib/mcp.js +653 -0
  37. package/dist/lib/mcp.js.map +1 -0
  38. package/dist/lib/project-metadata.d.ts +1 -1
  39. package/dist/lib/project-metadata.js +3 -2
  40. package/dist/lib/project-metadata.js.map +1 -1
  41. package/dist/lib/status.d.ts +1 -1
  42. package/dist/lib/status.js +4 -4
  43. package/dist/lib/status.js.map +1 -1
  44. package/dist/lib/swarm-orchestrator.d.ts +31 -0
  45. package/dist/lib/swarm-orchestrator.js +134 -0
  46. package/dist/lib/swarm-orchestrator.js.map +1 -0
  47. package/dist/lib/update.js +7 -3
  48. package/dist/lib/update.js.map +1 -1
  49. package/dist/lib/webview-studio.d.ts +8 -0
  50. package/dist/lib/webview-studio.js +463 -0
  51. package/dist/lib/webview-studio.js.map +1 -0
  52. package/dist/lib/workflow-state.js +24 -8
  53. package/dist/lib/workflow-state.js.map +1 -1
  54. package/package.json +1 -1
  55. package/template/.agents/skills/adopt/SKILL.md +58 -5
  56. package/template/.agents/skills/doctor/SKILL.md +23 -16
  57. package/template/.agents/skills/implement/SKILL.md +2 -2
  58. package/template/.agents/skills/onboard/SKILL.md +18 -17
  59. package/template/.agents/skills/rollback/SKILL.md +1 -1
  60. package/template/.claude/skills/00-explore/SKILL.md +2 -2
  61. package/template/.claude/skills/10-define/SKILL.md +2 -2
  62. package/template/.claude/skills/20-spec/SKILL.md +1 -2
  63. package/template/.claude/skills/30-plan/SKILL.md +1 -2
  64. package/template/.claude/skills/40-execute/SKILL.md +2 -2
  65. package/template/.claude/skills/50-verify/SKILL.md +2 -2
  66. package/template/.claude/skills/60-report/SKILL.md +2 -2
  67. package/template/.claude/skills/70-deliver/SKILL.md +2 -2
  68. package/template/.claude/skills/adopt/SKILL.md +191 -75
  69. package/template/.claude/skills/audit/SKILL.md +267 -133
  70. package/template/.claude/skills/autopilot/SKILL.md +226 -167
  71. package/template/.claude/skills/brainstorm/SKILL.md +62 -0
  72. package/template/.claude/skills/brief/SKILL.md +93 -92
  73. package/template/.claude/skills/check/SKILL.md +96 -76
  74. package/template/.claude/skills/ci/SKILL.md +140 -61
  75. package/template/.claude/skills/complete/SKILL.md +156 -101
  76. package/template/.claude/skills/convert-any-to-md/SKILL.md +2 -2
  77. package/template/.claude/skills/convert-any-to-md/references/setup.md +29 -0
  78. package/template/.claude/skills/convert-any-to-md/scripts/convert_any_to_md.py +487 -0
  79. package/template/.claude/skills/convert-any-to-md/scripts/requirements.txt +3 -0
  80. package/template/.claude/skills/debug/SKILL.md +124 -49
  81. package/template/.claude/skills/devflow/SKILL.md +9 -3
  82. package/template/.claude/skills/discovery/SKILL.md +150 -129
  83. package/template/.claude/skills/doctor/SKILL.md +195 -72
  84. package/template/.claude/skills/feature/SKILL.md +195 -151
  85. package/template/.claude/skills/fix/SKILL.md +41 -90
  86. package/template/.claude/skills/idea/SKILL.md +2 -2
  87. package/template/.claude/skills/implement/SKILL.md +189 -46
  88. package/template/.claude/skills/onboard/SKILL.md +216 -85
  89. package/template/.claude/skills/overview/SKILL.md +44 -29
  90. package/template/.claude/skills/prototype/SKILL.md +82 -27
  91. package/template/.claude/skills/release/SKILL.md +119 -130
  92. package/template/.claude/skills/report-html/SKILL.md +2 -2
  93. package/template/.claude/skills/rollback/SKILL.md +123 -77
  94. package/template/.claude/skills/status/SKILL.md +109 -0
  95. package/template/.claude/skills/test/SKILL.md +2 -2
  96. package/template/.claude/skills/tests/SKILL.md +126 -0
  97. package/template/.claude/skills/try/SKILL.md +77 -65
  98. package/template/AGENTS.md +2 -1
  99. package/template/devflow/build-plan.md +50 -20
  100. package/template/devflow/history/features/README.md +5 -0
  101. package/template/devflow/history/fixes/README.md +5 -0
  102. package/template/devflow/history/rollbacks/README.md +5 -0
  103. package/template/devflow/project-plan.md +70 -18
  104. 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":"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"}
@@ -31,19 +31,22 @@ function parseWorkflowState(markdown, currentWork) {
31
31
  const lastCompletedRun = nullableField(markdown, "Last Completed Run");
32
32
  const lastUpdated = nullableField(markdown, "Last Updated");
33
33
  const deepStage = normalizeDeepStage(rawStage);
34
+ const fastStageFromMarkdown = normalizeFastStage(rawStage);
34
35
  let track = "idle";
35
36
  let currentStage = null;
36
- if (explicitTrack === "deep") {
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") {
37
44
  track = "deep";
38
45
  currentStage = deepStage || (activeDiscoveryId ? "00-explore" : "10-define");
39
46
  }
40
47
  else if (explicitTrack === "fast") {
41
48
  track = "fast";
42
- currentStage = fastStage(currentWork);
43
- }
44
- else if (explicitTrack === "idle") {
45
- track = "idle";
46
- currentStage = null;
49
+ currentStage = fastStageFromMarkdown || fastStage(currentWork);
47
50
  }
48
51
  else if (activeRunId && deepStage) {
49
52
  track = "deep";
@@ -55,7 +58,7 @@ function parseWorkflowState(markdown, currentWork) {
55
58
  }
56
59
  else if (currentWork.state === "active") {
57
60
  track = currentWork.type === "stage" ? "deep" : "fast";
58
- currentStage = track === "deep" ? deepStage || "40-execute" : fastStage(currentWork);
61
+ currentStage = track === "deep" ? deepStage || "40-execute" : fastStageFromMarkdown || fastStage(currentWork);
59
62
  }
60
63
  return {
61
64
  track,
@@ -83,8 +86,21 @@ function normalizeDeepStage(value) {
83
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];
84
87
  return (handoff || direct || "").toLowerCase() || null;
85
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
+ }
86
100
  function fastStage(work) {
87
- if (work.total === 0)
101
+ if (work.state === "idle")
102
+ return "feature-fix";
103
+ if (work.completed === 0 && work.total > 0)
88
104
  return "implement";
89
105
  return work.remaining > 0 ? "implement" : "check";
90
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../lib/workflow-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../lib/workflow-state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakkrichm/create-nexus-devflow",
3
- "version": "2.0.27",
3
+ "version": "2.2.0",
4
4
  "description": "Installer package for Nexus-DevFlow agentic workflow layer.",
5
5
  "license": "MIT",
6
6
  "author": "Jakkrich",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: adopt
3
- description: "[devflow][B] Bring the blueprint into an existing (brownfield) codebase. Surveys the real repo, interviews for intent, generates the owned plans and coding standards, documents existing verification and CI, and points to the optional standalone CI setup. Use when the user runs /adopt, is overlaying the blueprint onto an app that already has meaningful code, or asks to adopt or bootstrap the workflow into an existing project. For freshly scaffolded or early projects, use onboard instead."
3
+ description: "[devflow][B] Bring the blueprint into an existing (brownfield) codebase. Surveys the real repo, interviews for intent, generates the owned plans and coding standards, documents existing verification and CI, asks whether DevFlow workflow files should be committed or kept local-only, and points to the optional standalone CI setup. Use when the user runs /adopt, is overlaying the blueprint onto an app that already has meaningful code, or asks to adopt or bootstrap the workflow into an existing project. For freshly scaffolded or early projects, use onboard instead."
4
4
  ---
5
5
 
6
6
  # adopt - bootstrap the blueprint from an existing codebase
@@ -42,9 +42,9 @@ Protect the project README:
42
42
 
43
43
  - If the root `README.md` already looks like a real project README, leave it
44
44
  alone.
45
- - If the root `README.md` is the copied Blueprint workflow doc (for example it
45
+ - If the root `README.md` is the copied DevFlow workflow doc (for example it
46
46
  starts with `# AI Coding Blueprint`), report it as obsolete overlay content
47
- and ask before replacing or removing it. Do not move it into `blueprint/`.
47
+ and ask before replacing or removing it. Do not move it into `devflow/`.
48
48
  - Do not create or overwrite a root project README for a brownfield app unless
49
49
  the user explicitly asks. The existing project face belongs to the app, not the
50
50
  workflow.
@@ -124,7 +124,54 @@ Run /ci or $ci when you want automatic GitHub checks.
124
124
  Explain that CI is not required to finish adoption. The `/ci` skill owns
125
125
  project-specific Verify and GitHub workflow setup.
126
126
 
127
- ## Step 5 - review gate, then hand off
127
+ ## Step 5 - ask about DevFlow visibility
128
+
129
+ Ask how the DevFlow workflow files should be handled in git, unless the user
130
+ already gave a preference:
131
+
132
+ ```text
133
+ DevFlow visibility?
134
+
135
+ 1. Commit DevFlow workflow files
136
+ Portable. Best for teams and working across machines.
137
+
138
+ 2. Keep DevFlow workflow files local
139
+ Adds .agents/, .claude/, devflow/, and CLAUDE.md to .gitignore.
140
+ Keeps AGENTS.md public as the lightweight project agent guide.
141
+ ```
142
+
143
+ Recommend option 1 by default. If the user chooses option 2:
144
+
145
+ - Add this block to `.gitignore`, preserving existing entries:
146
+
147
+ ```gitignore
148
+ # DevFlow local workflow files
149
+ .agents/
150
+ .claude/
151
+ devflow/
152
+ CLAUDE.md
153
+ ```
154
+
155
+ - Keep `AGENTS.md` tracked. It remains the lightweight public project guide for
156
+ commands and conventions.
157
+ - Make `AGENTS.md` public-safe: keep project description, commands, testing gate,
158
+ and coding conventions, but remove or avoid DevFlow workflow explanations,
159
+ hidden adapter paths, workflow-document pointers, and core skill lists that
160
+ would expose the local-only workflow.
161
+ - Explain that local-only mode hides the workflow contents from the repo, but the
162
+ `.gitignore` names still reveal the ignored paths.
163
+ - Explain that DevFlow state, specs, findings, and history will not travel
164
+ with the repo; another machine needs DevFlow reinstalled or restored
165
+ locally.
166
+ - Because adoption runs right after the DevFlow files were added to an
167
+ existing repository, they are more likely to already be staged or committed
168
+ than in a fresh install. If any of `.agents/`, `.claude/`, `devflow/`, or
169
+ `CLAUDE.md` are already tracked, say `.gitignore` will not hide tracked files.
170
+ Ask before running
171
+ `git rm --cached -r .agents .claude devflow CLAUDE.md`, and
172
+ only run it if the user explicitly approves. Never delete the local files.
173
+
174
+ ## Step 6 - review gate, then hand off
128
175
 
129
176
  Stop and show the user what you generated, calling out:
130
177
 
@@ -132,7 +179,9 @@ Stop and show the user what you generated, calling out:
132
179
  judgment most worth their eyes,
133
180
  - every `> TODO (confirm)` you left,
134
181
  - anything the survey and the interview disagreed on,
135
- - verification command and GitHub checks status.
182
+ - verification command and GitHub checks status,
183
+ - DevFlow visibility choice, and a tracked-file warning if local-only mode was
184
+ chosen after files were already tracked.
136
185
 
137
186
  These files are the ones the user *owns*. Have them review and adjust, then tell
138
187
  them to run `/overview` to distill the plans into `project-overview.md` and start
@@ -150,6 +199,10 @@ the normal loop.
150
199
  before touching them. Never run a scaffolder.
151
200
  - **Be honest about testing.** If there's no runner, say testing is opt-in and not
152
201
  yet set up; don't describe a gate the project hasn't adopted.
202
+ - Keep `AGENTS.md` public in local-only mode unless the user explicitly asks for
203
+ a more advanced setup.
204
+ - Do not untrack DevFlow files with `git rm --cached` without a separate
205
+ explicit approval.
153
206
 
154
207
  ## Formatting
155
208