@jakkrichm/create-nexus-devflow 2.2.2 โ 2.5.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.
- package/dist/bin/create-nexus-devflow.js +9 -1
- package/dist/bin/create-nexus-devflow.js.map +1 -1
- package/dist/lib/command-catalog.js +1 -1
- package/dist/lib/command-catalog.js.map +1 -1
- package/dist/lib/dashboard-page.d.ts +1 -1
- package/dist/lib/dashboard-page.js +42 -20
- package/dist/lib/dashboard-page.js.map +1 -1
- package/dist/lib/dashboard-snapshot.js +16 -12
- package/dist/lib/dashboard-snapshot.js.map +1 -1
- package/dist/lib/dashboard.js +10 -1
- package/dist/lib/dashboard.js.map +1 -1
- package/dist/lib/doctor.js +1 -1
- package/dist/lib/gatekeeper.d.ts +4 -0
- package/dist/lib/gatekeeper.js +2 -2
- package/dist/lib/gatekeeper.js.map +1 -1
- package/dist/lib/git-status.d.ts +10 -2
- package/dist/lib/git-status.js +57 -29
- package/dist/lib/git-status.js.map +1 -1
- package/dist/lib/swarm-orchestrator.d.ts +4 -1
- package/dist/lib/swarm-orchestrator.js +2 -2
- package/dist/lib/swarm-orchestrator.js.map +1 -1
- package/dist/lib/version-check.js +1 -1
- package/dist/lib/workflow-state.js +19 -32
- package/dist/lib/workflow-state.js.map +1 -1
- package/package.json +1 -1
- package/template/.agents/skills/complete/SKILL.md +47 -36
- package/template/.agents/skills/devflow/SKILL.md +51 -79
- package/template/.claude/skills/complete/SKILL.md +47 -36
- package/template/.claude/skills/devflow/SKILL.md +51 -79
- package/template/AGENTS.md +21 -30
- package/template/devflow/build-plan.md +9 -0
- package/template/devflow/context/ai-interaction.md +38 -39
- package/template/devflow/context/findings.md +8 -11
- package/template/devflow/context/glossary.md +31 -0
- package/template/devflow/reference/build-plan-template.md +65 -0
- package/template/devflow/reference/feature-spec-template.md +110 -0
- package/template/devflow/reference/project-plan-template.md +128 -0
- package/template/devflow/reference/running-id-contract.md +12 -11
- package/template/.agents/skills/10-define/SKILL.md +0 -54
- package/template/.agents/skills/20-spec/SKILL.md +0 -155
- package/template/.agents/skills/30-plan/SKILL.md +0 -226
- package/template/.agents/skills/40-execute/SKILL.md +0 -158
- package/template/.agents/skills/50-verify/SKILL.md +0 -62
- package/template/.agents/skills/60-report/SKILL.md +0 -57
- package/template/.agents/skills/70-deliver/SKILL.md +0 -72
- package/template/.claude/skills/10-define/SKILL.md +0 -54
- package/template/.claude/skills/20-spec/SKILL.md +0 -155
- package/template/.claude/skills/30-plan/SKILL.md +0 -226
- package/template/.claude/skills/40-execute/SKILL.md +0 -158
- package/template/.claude/skills/50-verify/SKILL.md +0 -62
- package/template/.claude/skills/60-report/SKILL.md +0 -57
- package/template/.claude/skills/70-deliver/SKILL.md +0 -72
|
@@ -6,6 +6,8 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
6
6
|
<title>Nexus-DevFlow Enterprise Dashboard</title>
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
10
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
11
|
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=Noto+Sans+Thai:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
|
|
10
12
|
<style>
|
|
11
13
|
:root{
|
|
@@ -69,7 +71,7 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
69
71
|
<h1 id="project-name">Nexus-DevFlow</h1>
|
|
70
72
|
<div class="path" id="project-path">Connecting...</div>
|
|
71
73
|
<div class="badges">
|
|
72
|
-
<span class="badge" id="version-badge">v2.
|
|
74
|
+
<span class="badge" id="version-badge">v2.5.0</span>
|
|
73
75
|
<span class="badge" id="health-badge">health</span>
|
|
74
76
|
<span class="badge" id="gate-badge">Gate: checking</span>
|
|
75
77
|
<span class="badge" id="drift-badge">Drift: checking</span>
|
|
@@ -87,21 +89,21 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
87
89
|
|
|
88
90
|
<section class="panel" id="dual-track">
|
|
89
91
|
<div class="panel-head">
|
|
90
|
-
<span class="label">
|
|
92
|
+
<span class="label">Unified Living Spec Model (DevFlow 2.5.0)</span>
|
|
91
93
|
<div class="track-tabs" role="tablist" aria-label="Delivery tracks">
|
|
92
|
-
<button class="tab on" id="tab-
|
|
93
|
-
<button class="tab" id="tab-
|
|
94
|
+
<button class="tab on" id="tab-preflight" role="tab" aria-selected="true" aria-controls="view-preflight" data-track="preflight"><span>๐ฎ Pre-Flight Discovery</span><span class="tab-active-dot">โ ACTIVE</span></button>
|
|
95
|
+
<button class="tab" id="tab-fast" role="tab" aria-selected="false" aria-controls="view-fast" data-track="fast"><span>โก Living Spec ยท 4 steps</span><span class="tab-active-dot">โ ACTIVE</span></button>
|
|
94
96
|
<button class="tab" id="tab-swarm" role="tab" aria-selected="false" aria-controls="view-swarm" data-track="swarm"><span>๐ค Multi-Agent Swarm</span></button>
|
|
95
97
|
<button class="tab" id="tab-graph" role="tab" aria-selected="false" aria-controls="view-graph" data-track="graph"><span>๐บ๏ธ Code Graph</span></button>
|
|
96
98
|
</div>
|
|
97
99
|
</div>
|
|
98
|
-
<div class="track-view on" id="view-
|
|
99
|
-
<div class="stepper" id="pipeline-
|
|
100
|
-
<div class="track-note" id="note-
|
|
100
|
+
<div class="track-view on" id="view-preflight" role="tabpanel" aria-labelledby="tab-preflight">
|
|
101
|
+
<div class="stepper" id="pipeline-preflight"></div>
|
|
102
|
+
<div class="track-note" id="note-preflight">Pre-Flight Discovery & Architectural Alignment (/idea, /grill, /brainstorm, /discovery).</div>
|
|
101
103
|
</div>
|
|
102
|
-
<div class="track-view" id="view-
|
|
103
|
-
<div class="stepper" id="pipeline-
|
|
104
|
-
<div class="track-note" id="note-
|
|
104
|
+
<div class="track-view" id="view-fast" role="tabpanel" aria-labelledby="tab-fast">
|
|
105
|
+
<div class="stepper" id="pipeline-fast"></div>
|
|
106
|
+
<div class="track-note" id="note-fast">Single Living Spec (/feature, /implement, /check, /complete) with TDD Discipline & QA Matrix.</div>
|
|
105
107
|
</div>
|
|
106
108
|
<div class="track-view" id="view-swarm" role="tabpanel" aria-labelledby="tab-swarm">
|
|
107
109
|
<div class="section-note">Role-based specialized AI Subagents roster & execution matrix</div>
|
|
@@ -146,18 +148,18 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
146
148
|
<section class="card full panel"><div class="card-head"><span class="label">Discoveries</span><span class="value" id="discovery-count">-</span></div><div class="record-list" id="discovery-list"></div></section>
|
|
147
149
|
<section class="card full panel"><div class="card-head"><span class="label">Idea Inbox & Backlog</span><span class="value" id="ideas-count">-</span></div><div class="section-note">From devflow/ideas.md ยท start a selected item with /feature IDEA-xxx</div><div class="record-list" id="ideas-list"></div></section>
|
|
148
150
|
<section class="card full panel"><div class="card-head"><span class="label">Completed Work Archive</span><span class="value" id="history-count">-</span></div><div class="section-note">Categorized delivery history ยท features, fixes and rollbacks</div><div class="record-list" id="history-list"></div></section>
|
|
149
|
-
<footer><span>Nexus-DevFlow 2.0 Enterprise Dashboard ยท refreshes every 2 seconds</span><span id="footer-revision">snapshot pending</span></footer>
|
|
151
|
+
<footer><span>Nexus-DevFlow 2.5.0 Enterprise Dashboard ยท refreshes every 2 seconds</span><span id="footer-revision">snapshot pending</span></footer>
|
|
150
152
|
</main>
|
|
151
153
|
<script>
|
|
152
154
|
const byId = (id) => document.getElementById(id);
|
|
153
155
|
const text = (id, value) => { const node = byId(id); if (node) node.textContent = value == null ? '-' : String(value); };
|
|
154
156
|
const pill = (id, state, label) => { const node = byId(id); if (!node) return; node.className = 'pill ' + (state || 'configured'); node.textContent = label || state || '-'; };
|
|
155
157
|
const list = (id, values, empty) => { const node = byId(id); if (!node) return; node.replaceChildren(); const rows = values.length ? values : [empty]; rows.forEach((value) => { const li = document.createElement('li'); li.textContent = value; if (!values.length) li.className = 'empty'; node.append(li); }); };
|
|
156
|
-
const titleCase = (value) => String(value || '').replaceAll('_',' ').replace(
|
|
157
|
-
const FLOW_ICON_NAMES = ['
|
|
158
|
-
const EMOJI_ICONS = { compass:'๐',target:'๐ฏ',document:'๐',list:'๐งฉ',code:'โ๏ธ',shield:'
|
|
158
|
+
const titleCase = (value) => String(value || '').replaceAll('_',' ').replace(/\b\w/g, (c) => c.toUpperCase());
|
|
159
|
+
const FLOW_ICON_NAMES = ['target','code','shield','package'];
|
|
160
|
+
const EMOJI_ICONS = { compass:'๐',discovery:'๐',target:'๐ฏ',document:'๐',list:'๐งฉ',code:'โ๏ธ',shield:'๐งช',report:'๐',package:'๐ฆ',bulb:'๐ก',check:'โ
',wrench:'๐ ๏ธ',rollback:'โฉ๏ธ',search:'๐',alert:'โ ๏ธ',grill:'๐ฅ',brainstorm:'๐ญ',idea:'๐ก' };
|
|
159
161
|
function iconImage(name) { const icon = document.createElement('span'); icon.className = 'icon-glyph'; icon.setAttribute('aria-hidden','true'); icon.textContent = EMOJI_ICONS[name] || '๐'; return icon; }
|
|
160
|
-
function decoratePipeline(id) { byId(id)?.querySelectorAll('.step').forEach((step,index) => { step.classList.add('flow-' + index); const icon = document.createElement('span'); icon.className = 'step-icon'; icon.setAttribute('aria-hidden','true');
|
|
162
|
+
function decoratePipeline(id) { byId(id)?.querySelectorAll('.step').forEach((step,index) => { step.classList.add('flow-' + index); const icon = document.createElement('span'); icon.className = 'step-icon'; icon.setAttribute('aria-hidden','true'); const cmd = step.querySelector('.step-cmd')?.textContent?.replace('/','').split(' ')[0] || ''; const iconKey = id.includes('preflight') ? (cmd || ['idea','grill','brainstorm','discovery'][index] || 'search') : (FLOW_ICON_NAMES[index] || 'document'); icon.append(iconImage(iconKey)); const name = step.querySelector('.step-name'); step.insertBefore(icon,name || null); }); }
|
|
161
163
|
function richText(root,value) { const source = String(value || ''); let cursor = 0; const plain = (end) => { if (end > cursor) root.append(document.createTextNode(source.slice(cursor,end))); cursor = end; }; while (cursor < source.length) { if (source.startsWith('**',cursor)) { const end = source.indexOf('**',cursor + 2); if (end > cursor + 2) { const node = document.createElement('strong'); node.textContent = source.slice(cursor + 2,end); root.append(node); cursor = end + 2; continue; } } if (source[cursor] === '*') { const end = source.indexOf('*',cursor + 1); if (end > cursor + 1) { const node = document.createElement('em'); node.textContent = source.slice(cursor + 1,end); root.append(node); cursor = end + 1; continue; } } if (source.charCodeAt(cursor) === 96) { const end = source.indexOf(String.fromCharCode(96),cursor + 1); if (end > cursor + 1) { const node = document.createElement('code'); node.textContent = source.slice(cursor + 1,end); root.append(node); cursor = end + 1; continue; } } const next = [source.indexOf('**',cursor + 1),source.indexOf('*',cursor + 1),source.indexOf(String.fromCharCode(96),cursor + 1)].filter((index) => index >= 0).sort((a,b) => a-b)[0] ?? source.length; plain(next > cursor ? next : cursor + 1); } }
|
|
162
164
|
function recordCard(options) { const card = document.createElement('article'); card.className = 'record-item tone-' + (options.tone || 'cyan'); const icon = document.createElement('span'); icon.className = 'record-icon'; icon.append(iconImage(options.icon || 'document')); const body = document.createElement('div'); body.className = 'record-body'; const meta = document.createElement('div'); meta.className = 'record-meta'; richText(meta,options.meta); const title = document.createElement('div'); title.className = 'record-title'; richText(title,options.title); const desc = document.createElement('div'); desc.className = 'record-desc'; richText(desc,options.description); body.append(meta,title,desc); card.append(icon,body); if (options.badge) { const badge = document.createElement('span'); badge.className = 'record-badge'; badge.textContent = options.badge; card.append(badge); } return card; }
|
|
163
165
|
function renderRecords(id,items,empty,mapper) { const root = byId(id); root.replaceChildren(); if (!items?.length) { const node = document.createElement('div'); node.className = 'empty'; node.textContent = empty; root.append(node); return; } items.forEach((item,index) => root.append(recordCard(mapper(item,index)))); }
|
|
@@ -178,6 +180,7 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
178
180
|
});
|
|
179
181
|
}
|
|
180
182
|
|
|
183
|
+
let userHasSwitchedTab = false;
|
|
181
184
|
function selectTrack(track) {
|
|
182
185
|
document.querySelectorAll('.tab').forEach((node) => { const on = node.dataset.track === track; node.classList.toggle('on', on); node.setAttribute('aria-selected', String(on)); });
|
|
183
186
|
document.querySelectorAll('.track-view').forEach((node) => node.classList.toggle('on', node.id === 'view-' + track));
|
|
@@ -193,7 +196,7 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
193
196
|
});
|
|
194
197
|
}
|
|
195
198
|
|
|
196
|
-
document.querySelectorAll('.tab').forEach((node) => node.addEventListener('click', () => selectTrack(node.dataset.track)));
|
|
199
|
+
document.querySelectorAll('.tab').forEach((node) => node.addEventListener('click', () => { userHasSwitchedTab = true; selectTrack(node.dataset.track); }));
|
|
197
200
|
wireCopy(byId('next-copy'), () => byId('next-command').textContent.trim());
|
|
198
201
|
|
|
199
202
|
function renderCommands(commands) {
|
|
@@ -253,19 +256,26 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
253
256
|
function renderSnapshot(data) {
|
|
254
257
|
const status = data.status || {}; const project = status.project || {}; const devflow = status.devflow || {}; const work = status.currentWork || {}; const git = status.git || {}; const findings = status.findings || { active: [], blockers: [] }; const workflow = data.workflow || {}; const update = data.update || {}; const doctor = data.doctor || { checks: [] }; const discoveries = data.discoveries || { recent: [] }; const history = data.history || { items: [], total: 0 }; const ideas = status.ideas || { pending: [], totalPending: 0 }; const gate = data.gatekeeper || { passed: true }; const drift = data.drift || { hasDrift: false };
|
|
255
258
|
|
|
256
|
-
text('project-name', project.name || 'Nexus-DevFlow'); text('project-path', project.root || ''); text('version-badge', 'v' + (devflow.version || '2.
|
|
259
|
+
text('project-name', project.name || 'Nexus-DevFlow'); text('project-path', project.root || ''); text('version-badge', 'v' + (devflow.version || '2.5.0'));
|
|
257
260
|
pill('health-badge', status.health, status.health === 'ok' ? 'Health OK' : 'Health warning');
|
|
258
261
|
pill('gate-badge', gate.passed ? 'ok' : 'blocked', gate.passed ? 'โ Gate Passed' : 'โ Gate Blocked');
|
|
259
262
|
pill('drift-badge', !drift.hasDrift ? 'ok' : 'warning', !drift.hasDrift ? 'โ In Sync' : 'โ Drift Detected');
|
|
260
263
|
pill('track-badge', workflow.track, 'Track ' + titleCase(workflow.track || 'idle'));
|
|
261
264
|
|
|
262
265
|
text('adapter-count', (devflow.adapters || []).length + ' configured'); text('header-branch', git.branch || 'unknown'); text('generated-at', new Date(data.generatedAt).toLocaleTimeString()); text('footer-revision', 'snapshot ' + data.generatedAt);
|
|
263
|
-
renderPipeline('pipeline-
|
|
266
|
+
renderPipeline('pipeline-preflight', workflow.deep || workflow.preflight); renderPipeline('pipeline-fast', workflow.fast); decoratePipeline('pipeline-preflight'); decoratePipeline('pipeline-fast');
|
|
267
|
+
if (!userHasSwitchedTab) {
|
|
268
|
+
if (work.state === 'active' || workflow.track === 'fast') {
|
|
269
|
+
selectTrack('fast');
|
|
270
|
+
} else {
|
|
271
|
+
selectTrack('preflight');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
264
274
|
renderSwarm(data.swarm); renderMcp(data.mcpTools); text('stat-mcp', (data.mcpTools || []).length + ' Ready');
|
|
265
275
|
|
|
266
276
|
const nextCommand = data.nextAction?.command || status.nextAction?.command || '/feature'; text('next-command', nextCommand); text('next-reason', data.nextAction?.reason || 'Ready for new work.');
|
|
267
277
|
text('stat-runs', history.total || 0); text('stat-findings', (findings.active || []).length); text('stat-ideas', ideas.totalPending || 0); text('stat-state', titleCase(work.state || 'idle'));
|
|
268
|
-
pill('update-pill', update.state, update.state === 'current' ? 'up to date' : update.state); text('installed-latest', (update.installedVersion || '2.
|
|
278
|
+
pill('update-pill', update.state, update.state === 'current' ? 'up to date' : update.state); text('installed-latest', (update.installedVersion || '2.5.0') + ' / ' + (update.latestVersion || '2.5.0')); text('system-health', status.health || 'ok');
|
|
269
279
|
pill('work-pill', work.state, work.state || 'idle'); text('work-title', work.title || 'No active delivery run'); const pct = work.total > 0 ? Math.round((work.completed / work.total) * 100) : 0; byId('work-progress').style.width = pct + '%'; text('work-meta', work.state === 'active' ? work.completed + ' of ' + work.total + ' steps completed' : 'Ready');
|
|
270
280
|
pill('git-pill', git.clean ? 'ok' : 'warning', git.clean ? 'clean' : (git.changedFiles || 0) + ' changed'); text('git-branch', git.branch || 'unknown'); text('git-changed', git.clean ? 'clean' : (git.changedFiles || 0) + ' changed files'); text('git-drift', drift.clean ? 'In Sync' : 'Drift detected'); text('git-commit', git.lastCommit || '-');
|
|
271
281
|
text('findings-count', findings.total || 0); ['P0','P1','P2','P3'].forEach((severity) => text('sev-' + severity.toLowerCase(), (findings.active || []).filter((item) => item.severity === severity).length)); list('findings-list', (findings.active || []).map((item) => item.id + ' ยท ' + item.title), 'No active findings');
|
|
@@ -275,9 +285,21 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
|
|
|
275
285
|
text('ideas-count', (ideas.totalPending || 0) + ' pending'); renderIdeas(ideas.pending || []); text('history-count', (history.total || 0) + ' released'); renderHistory(history.items || []);
|
|
276
286
|
}
|
|
277
287
|
|
|
288
|
+
window.__INITIAL_SNAPSHOT__ = null;
|
|
289
|
+
if (window.__INITIAL_SNAPSHOT__) {
|
|
290
|
+
try {
|
|
291
|
+
renderSnapshot(window.__INITIAL_SNAPSHOT__);
|
|
292
|
+
byId('live-dot').classList.add('on');
|
|
293
|
+
text('live-label','Connected ยท live snapshot every 2 seconds');
|
|
294
|
+
} catch (e) {
|
|
295
|
+
console.error('Initial hydration error:', e);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
278
299
|
let refreshing = false;
|
|
279
300
|
async function refresh() { if (refreshing) return; refreshing = true; try { const response = await fetch('/api/dashboard'); if (!response.ok) throw new Error('HTTP ' + response.status); renderSnapshot(await response.json()); byId('live-dot').classList.add('on'); text('live-label','Connected ยท live snapshot every 2 seconds'); } catch (error) { byId('live-dot').classList.remove('on'); text('live-label','Disconnected ยท ' + error.message); } finally { refreshing = false; } }
|
|
280
|
-
|
|
301
|
+
if (!window.__INITIAL_SNAPSHOT__) { refresh(); }
|
|
302
|
+
setInterval(refresh, 2000);
|
|
281
303
|
</script>
|
|
282
304
|
</body>
|
|
283
305
|
</html>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-page.js","sourceRoot":"","sources":["../../lib/dashboard-page.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG
|
|
1
|
+
{"version":3,"file":"dashboard-page.js","sourceRoot":"","sources":["../../lib/dashboard-page.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgTpB,CAAC;AAET,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -16,20 +16,21 @@ async function readDashboardSnapshot(startPath = process.cwd(), options = {}) {
|
|
|
16
16
|
const status = await readProjectStatus(startPath);
|
|
17
17
|
const projectRoot = status.project.root;
|
|
18
18
|
const workflow = await readWorkflowState(projectRoot, status.currentWork);
|
|
19
|
-
const
|
|
19
|
+
const driftPromise = detectGitDrift(projectRoot, status.git.branch || undefined);
|
|
20
|
+
const [history, slow, update, drift, swarm] = await Promise.all([
|
|
20
21
|
readHistory(projectRoot),
|
|
21
22
|
readSlowData(projectRoot, workflow.activeDiscoveryId, now, options.slowTtlMs ?? 15_000),
|
|
22
23
|
checkPackageVersion({
|
|
23
24
|
installedVersion: status.devflow.version,
|
|
24
25
|
fetchImpl: options.fetchImpl,
|
|
25
|
-
timeoutMs: options.versionTimeoutMs,
|
|
26
|
+
timeoutMs: options.versionTimeoutMs ?? 1000,
|
|
26
27
|
cacheTtlMs: options.versionCacheTtlMs,
|
|
27
28
|
now
|
|
28
29
|
}),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
generateSwarmPlan(projectRoot)
|
|
30
|
+
driftPromise,
|
|
31
|
+
generateSwarmPlan(projectRoot, { branch: status.git.branch || undefined })
|
|
32
32
|
]);
|
|
33
|
+
const gatekeeper = await evaluateGate(projectRoot, { status, drift, strict: false });
|
|
33
34
|
return {
|
|
34
35
|
schemaVersion: 1,
|
|
35
36
|
generatedAt: new Date(now()).toISOString(),
|
|
@@ -101,14 +102,17 @@ function clearDashboardSnapshotCache() {
|
|
|
101
102
|
slowCache.clear();
|
|
102
103
|
}
|
|
103
104
|
function selectDashboardNextAction(status, workflow) {
|
|
104
|
-
if (workflow.track !== "
|
|
105
|
-
|
|
105
|
+
if (workflow.track !== "idle" && workflow.currentStage) {
|
|
106
|
+
const stageCmd = workflow.currentStage === "feature-fix" ? "feature" : workflow.currentStage;
|
|
107
|
+
const suffix = workflow.activeRunId && (workflow.track === "deep" || stageCmd === "complete")
|
|
108
|
+
? ` ${workflow.activeRunId}`
|
|
109
|
+
: "";
|
|
110
|
+
return {
|
|
111
|
+
command: `/${stageCmd}${suffix}`,
|
|
112
|
+
reason: `Continue active workflow at /${stageCmd}.`
|
|
113
|
+
};
|
|
106
114
|
}
|
|
107
|
-
|
|
108
|
-
return {
|
|
109
|
-
command: `/${workflow.currentStage}${suffix}`,
|
|
110
|
-
reason: `Continue the active Deep-Track run at ${workflow.currentStage}.`
|
|
111
|
-
};
|
|
115
|
+
return status.nextAction;
|
|
112
116
|
}
|
|
113
117
|
export { clearDashboardSnapshotCache, readDashboardSnapshot, selectDashboardNextAction };
|
|
114
118
|
//# sourceMappingURL=dashboard-snapshot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-snapshot.js","sourceRoot":"","sources":["../../lib/dashboard-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAkB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAA0B,MAAM,UAAU,CAAC;AAmErE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEpD,KAAK,UAAU,qBAAqB,CAClC,YAAoB,OAAO,CAAC,GAAG,EAAE,EACjC,UAAoC,EAAE;IAEtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard-snapshot.js","sourceRoot":"","sources":["../../lib/dashboard-snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/dashboard.js
CHANGED
|
@@ -31,6 +31,8 @@ async function startDashboardServer(startPath = process.cwd(), options = {}) {
|
|
|
31
31
|
await closeServer(server);
|
|
32
32
|
throw new Error("Nexus-DevFlow dashboard could not determine its local address.");
|
|
33
33
|
}
|
|
34
|
+
// Pre-warm dashboard snapshot in the background on startup
|
|
35
|
+
void readDashboardSnapshot(projectRoot, options.snapshotOptions).catch(() => { });
|
|
34
36
|
return {
|
|
35
37
|
url: `http://${DASHBOARD_HOST}:${address.port}`,
|
|
36
38
|
close: () => closeServer(server)
|
|
@@ -46,7 +48,14 @@ async function handleRequest(projectRoot, request, response, snapshotOptions) {
|
|
|
46
48
|
const pathname = new URL(request.url || "/", `http://${DASHBOARD_HOST}`).pathname;
|
|
47
49
|
if (pathname === "/") {
|
|
48
50
|
response.setHeader("Content-Security-Policy", "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; connect-src 'self'; img-src 'self' data:; base-uri 'none'; form-action 'none'; frame-ancestors 'none'");
|
|
49
|
-
|
|
51
|
+
try {
|
|
52
|
+
const snapshot = await readDashboardSnapshot(projectRoot, snapshotOptions);
|
|
53
|
+
const injectedHtml = DASHBOARD_PAGE_HTML.replace("window.__INITIAL_SNAPSHOT__ = null;", `window.__INITIAL_SNAPSHOT__ = ${JSON.stringify(snapshot).replace(/</g, "\\u003c")};`);
|
|
54
|
+
sendResponse(response, method, 200, "text/html; charset=utf-8", injectedHtml);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
sendResponse(response, method, 200, "text/html; charset=utf-8", DASHBOARD_PAGE_HTML);
|
|
58
|
+
}
|
|
50
59
|
return;
|
|
51
60
|
}
|
|
52
61
|
if (pathname === "/api/status") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../lib/dashboard.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../lib/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAYvD,MAAM,cAAc,GAAG,WAAW,CAAC;AAEnC,KAAK,UAAU,oBAAoB,CACjC,YAAoB,OAAO,CAAC,GAAG,EAAE,EACjC,UAAkC,EAAE;IAEpC,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QACrD,KAAK,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;YACrC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAS,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IAED,2DAA2D;IAC3D,KAAK,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEjF,OAAO;QACL,GAAG,EAAE,UAAU,cAAc,IAAI,OAAO,CAAC,IAAI,EAAE;QAC/C,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,OAA6B,EAC7B,QAA6B,EAC7B,eAA0C;IAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACzC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,2BAA2B,EAAE,uBAAuB,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC;IAElF,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACrB,QAAQ,CAAC,SAAS,CAChB,yBAAyB,EACzB,mPAAmP,CACpP,CAAC;QACF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAC9C,qCAAqC,EACrC,iCAAiC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CACtF,CAAC;YACF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,0BAA0B,EAAE,YAAY,CAAC,CAAC;QAChF,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,0BAA0B,EAAE,mBAAmB,CAAC,CAAC;QACvF,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpD,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC;aACvF,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC3E,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAChC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;aACrF,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;YAC/C,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAC/B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC;aAClF,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,cAAc,EAAE,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7D,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAC7B,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC;oBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;iBAChC,CAAC,IAAI,CACP,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;aAC9E,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,YAAY,CACV,QAAQ,EACR,MAAM,EACN,GAAG,EACH,iCAAiC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;aAC7E,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAGD,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,2BAA2B,EAAE,cAAc,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CACnB,QAA6B,EAC7B,MAAc,EACd,UAAkB,EAClB,WAAmB,EACnB,IAAY;IAEZ,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAmB;IAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,UAAU,CAAC;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACvC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC;QAC1B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEV,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,cAAc,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0+BvB,CAAC;AAET,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/lib/doctor.js
CHANGED
|
@@ -81,7 +81,7 @@ const DEFAULT_PROJECT_PLAN_STUB = `# ๐บ๏ธ Project Plan (User-Owned Architectu
|
|
|
81
81
|
## 3. Constraints & Non-Goals
|
|
82
82
|
- **Non-Goals**: What this project explicitly will NOT do in the current scope.
|
|
83
83
|
- **Technical Constraints**: Performance targets, security standards, offline requirements, or backward compatibility rules.
|
|
84
|
-
- **Delivery Rules**:
|
|
84
|
+
- **Delivery Rules**: The 3-Pillars & Single Living Spec Model (Fast-Track 4 steps with Deep Architectural Rigour).
|
|
85
85
|
|
|
86
86
|
## 4. Key Milestones & Roadmap
|
|
87
87
|
- **Milestone 1**: Core Foundation & MVP
|
package/dist/lib/gatekeeper.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { ProjectStatus } from "./status.js";
|
|
2
|
+
import type { GitDriftReport } from "./drift-reconciler.js";
|
|
1
3
|
export interface GateOptions {
|
|
2
4
|
strict?: boolean;
|
|
3
5
|
allowUnverified?: boolean;
|
|
4
6
|
color?: boolean;
|
|
7
|
+
status?: ProjectStatus;
|
|
8
|
+
drift?: GitDriftReport;
|
|
5
9
|
}
|
|
6
10
|
export interface GateReport {
|
|
7
11
|
passed: boolean;
|
package/dist/lib/gatekeeper.js
CHANGED
|
@@ -2,7 +2,7 @@ import { readProjectStatus } from "./status.js";
|
|
|
2
2
|
import { detectGitDrift } from "./drift-reconciler.js";
|
|
3
3
|
import { createStyle } from "./ui.js";
|
|
4
4
|
export async function evaluateGate(projectRoot, options = {}) {
|
|
5
|
-
const status = await readProjectStatus(projectRoot);
|
|
5
|
+
const status = options.status || (await readProjectStatus(projectRoot));
|
|
6
6
|
const violations = [];
|
|
7
7
|
const warnings = [];
|
|
8
8
|
// Check 1: Active Findings Blockers (P0 / P1 in open or fixed status)
|
|
@@ -32,7 +32,7 @@ export async function evaluateGate(projectRoot, options = {}) {
|
|
|
32
32
|
}
|
|
33
33
|
// Check 4: Git drift advisory check
|
|
34
34
|
try {
|
|
35
|
-
const drift = await detectGitDrift(projectRoot);
|
|
35
|
+
const drift = options.drift || (await detectGitDrift(projectRoot));
|
|
36
36
|
if (drift.hasDrift && drift.undocumentedFiles.length > 0) {
|
|
37
37
|
warnings.push(`Warning (git_drift): ${drift.undocumentedFiles.length} file(s) modified in git without being listed in living spec.`);
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gatekeeper.js","sourceRoot":"","sources":["../../lib/gatekeeper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gatekeeper.js","sourceRoot":"","sources":["../../lib/gatekeeper.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/git-status.d.ts
CHANGED
|
@@ -8,6 +8,14 @@ interface GitStatusSummary {
|
|
|
8
8
|
ahead: number | null;
|
|
9
9
|
behind: number | null;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
type GitCommandRunner = (projectRoot: string, args: readonly string[]) => Promise<string>;
|
|
12
|
+
interface ReadGitStatusOptions {
|
|
13
|
+
ttlMs?: number;
|
|
14
|
+
forceFresh?: boolean;
|
|
15
|
+
now?: () => number;
|
|
16
|
+
runGit?: GitCommandRunner;
|
|
17
|
+
}
|
|
18
|
+
declare function clearGitStatusCache(): void;
|
|
19
|
+
declare function readGitStatus(projectRoot: string, options?: ReadGitStatusOptions): Promise<GitStatusSummary>;
|
|
20
|
+
export { readGitStatus, clearGitStatusCache };
|
|
13
21
|
export type { GitStatusSummary };
|
package/dist/lib/git-status.js
CHANGED
|
@@ -1,35 +1,62 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
import { promisify } from "node:util";
|
|
4
|
+
const gitCache = new Map();
|
|
5
|
+
const gitInFlight = new Map();
|
|
6
|
+
const DEFAULT_GIT_CACHE_TTL_MS = 2000;
|
|
3
7
|
const execFileAsync = promisify(execFile);
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
function clearGitStatusCache() {
|
|
9
|
+
gitCache.clear();
|
|
10
|
+
gitInFlight.clear();
|
|
11
|
+
}
|
|
12
|
+
async function readGitStatus(projectRoot, options = {}) {
|
|
13
|
+
const now = options.now || Date.now;
|
|
14
|
+
const ttlMs = options.ttlMs ?? DEFAULT_GIT_CACHE_TTL_MS;
|
|
15
|
+
const cacheKey = path.resolve(projectRoot);
|
|
16
|
+
const gitRunner = options.runGit || runGit;
|
|
17
|
+
if (!options.forceFresh) {
|
|
18
|
+
const cached = gitCache.get(cacheKey);
|
|
19
|
+
if (cached && cached.expiresAt > now()) {
|
|
20
|
+
return cached.value;
|
|
21
|
+
}
|
|
22
|
+
const pending = gitInFlight.get(cacheKey);
|
|
23
|
+
if (pending)
|
|
24
|
+
return pending;
|
|
25
|
+
}
|
|
26
|
+
const computeAndCache = async () => {
|
|
27
|
+
const value = await computeGitStatus(projectRoot, gitRunner);
|
|
28
|
+
gitCache.set(cacheKey, { expiresAt: now() + ttlMs, value });
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
if (options.forceFresh) {
|
|
32
|
+
return computeAndCache();
|
|
33
|
+
}
|
|
34
|
+
let pending;
|
|
35
|
+
pending = computeAndCache().finally(() => {
|
|
36
|
+
if (gitInFlight.get(cacheKey) === pending)
|
|
37
|
+
gitInFlight.delete(cacheKey);
|
|
38
|
+
});
|
|
39
|
+
gitInFlight.set(cacheKey, pending);
|
|
40
|
+
return pending;
|
|
41
|
+
}
|
|
42
|
+
async function computeGitStatus(projectRoot, gitRunner) {
|
|
43
|
+
if (!(await isGitRepository(projectRoot, gitRunner))) {
|
|
6
44
|
return unavailableSummary();
|
|
7
45
|
}
|
|
8
|
-
const porcelain = await
|
|
9
|
-
"status",
|
|
10
|
-
|
|
11
|
-
"
|
|
46
|
+
const [porcelain, branch, lastCommit, upstream] = await Promise.all([
|
|
47
|
+
gitRunner(projectRoot, ["status", "--porcelain=v1", "--untracked-files=all"]),
|
|
48
|
+
readBranch(projectRoot, gitRunner),
|
|
49
|
+
runOptionalGit(projectRoot, ["log", "-1", "--format=%s"], gitRunner),
|
|
50
|
+
runOptionalGit(projectRoot, ["rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{upstream}"], gitRunner)
|
|
12
51
|
]);
|
|
13
52
|
const changedFiles = porcelain
|
|
14
53
|
.split(/\r?\n/)
|
|
15
54
|
.filter((line) => line.length > 0)
|
|
16
55
|
.length;
|
|
17
|
-
const branch = await readBranch(projectRoot);
|
|
18
|
-
const lastCommit = await runOptionalGit(projectRoot, [
|
|
19
|
-
"log",
|
|
20
|
-
"-1",
|
|
21
|
-
"--format=%s"
|
|
22
|
-
]);
|
|
23
|
-
const upstream = await runOptionalGit(projectRoot, [
|
|
24
|
-
"rev-parse",
|
|
25
|
-
"--abbrev-ref",
|
|
26
|
-
"--symbolic-full-name",
|
|
27
|
-
"@{upstream}"
|
|
28
|
-
]);
|
|
29
56
|
const divergence = upstream
|
|
30
|
-
? await readDivergence(projectRoot)
|
|
57
|
+
? await readDivergence(projectRoot, gitRunner)
|
|
31
58
|
: { ahead: null, behind: null };
|
|
32
|
-
|
|
59
|
+
const value = {
|
|
33
60
|
available: true,
|
|
34
61
|
branch,
|
|
35
62
|
clean: changedFiles === 0,
|
|
@@ -39,37 +66,38 @@ async function readGitStatus(projectRoot) {
|
|
|
39
66
|
ahead: divergence.ahead,
|
|
40
67
|
behind: divergence.behind
|
|
41
68
|
};
|
|
69
|
+
return value;
|
|
42
70
|
}
|
|
43
|
-
async function isGitRepository(projectRoot) {
|
|
71
|
+
async function isGitRepository(projectRoot, gitRunner) {
|
|
44
72
|
return (await runOptionalGit(projectRoot, [
|
|
45
73
|
"rev-parse",
|
|
46
74
|
"--is-inside-work-tree"
|
|
47
|
-
])) === "true";
|
|
75
|
+
], gitRunner)) === "true";
|
|
48
76
|
}
|
|
49
|
-
async function readBranch(projectRoot) {
|
|
77
|
+
async function readBranch(projectRoot, gitRunner) {
|
|
50
78
|
const branch = await runOptionalGit(projectRoot, [
|
|
51
79
|
"symbolic-ref",
|
|
52
80
|
"--quiet",
|
|
53
81
|
"--short",
|
|
54
82
|
"HEAD"
|
|
55
|
-
]);
|
|
83
|
+
], gitRunner);
|
|
56
84
|
return branch || "(detached HEAD)";
|
|
57
85
|
}
|
|
58
|
-
async function readDivergence(projectRoot) {
|
|
86
|
+
async function readDivergence(projectRoot, gitRunner) {
|
|
59
87
|
const counts = await runOptionalGit(projectRoot, [
|
|
60
88
|
"rev-list",
|
|
61
89
|
"--left-right",
|
|
62
90
|
"--count",
|
|
63
91
|
"HEAD...@{upstream}"
|
|
64
|
-
]);
|
|
92
|
+
], gitRunner);
|
|
65
93
|
const match = counts?.match(/^(\d+)\s+(\d+)$/);
|
|
66
94
|
return match
|
|
67
95
|
? { ahead: Number(match[1]), behind: Number(match[2]) }
|
|
68
96
|
: { ahead: null, behind: null };
|
|
69
97
|
}
|
|
70
|
-
async function runOptionalGit(projectRoot, args) {
|
|
98
|
+
async function runOptionalGit(projectRoot, args, gitRunner) {
|
|
71
99
|
try {
|
|
72
|
-
return await
|
|
100
|
+
return await gitRunner(projectRoot, args);
|
|
73
101
|
}
|
|
74
102
|
catch {
|
|
75
103
|
return null;
|
|
@@ -94,5 +122,5 @@ function unavailableSummary() {
|
|
|
94
122
|
behind: null
|
|
95
123
|
};
|
|
96
124
|
}
|
|
97
|
-
export { readGitStatus };
|
|
125
|
+
export { readGitStatus, clearGitStatusCache };
|
|
98
126
|
//# sourceMappingURL=git-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-status.js","sourceRoot":"","sources":["../../lib/git-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"git-status.js","sourceRoot":"","sources":["../../lib/git-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,11 @@ export interface SwarmPlan {
|
|
|
24
24
|
agentRoster: SwarmAgentDefinition[];
|
|
25
25
|
tasks: SwarmSubtask[];
|
|
26
26
|
}
|
|
27
|
+
export interface SwarmPlanOptions {
|
|
28
|
+
branch?: string;
|
|
29
|
+
}
|
|
27
30
|
export declare const SWARM_ROSTER: SwarmAgentDefinition[];
|
|
28
31
|
/**
|
|
29
32
|
* Generates an optimized Multi-Agent Swarm Execution Plan from the active living spec.
|
|
30
33
|
*/
|
|
31
|
-
export declare function generateSwarmPlan(projectRoot: string): Promise<SwarmPlan>;
|
|
34
|
+
export declare function generateSwarmPlan(projectRoot: string, options?: SwarmPlanOptions): Promise<SwarmPlan>;
|
|
@@ -34,8 +34,8 @@ export const SWARM_ROSTER = [
|
|
|
34
34
|
/**
|
|
35
35
|
* Generates an optimized Multi-Agent Swarm Execution Plan from the active living spec.
|
|
36
36
|
*/
|
|
37
|
-
export async function generateSwarmPlan(projectRoot) {
|
|
38
|
-
const contextPaths = await resolveActiveContextPaths(projectRoot);
|
|
37
|
+
export async function generateSwarmPlan(projectRoot, options = {}) {
|
|
38
|
+
const contextPaths = await resolveActiveContextPaths(projectRoot, options.branch);
|
|
39
39
|
let runId = "ACTIVE";
|
|
40
40
|
let title = "Active Feature";
|
|
41
41
|
let track = "fast";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-orchestrator.js","sourceRoot":"","sources":["../../lib/swarm-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"swarm-orchestrator.js","sourceRoot":"","sources":["../../lib/swarm-orchestrator.ts"],"names":[],"mappings":"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"}
|