@jakkrichm/create-nexus-devflow 2.9.0 → 2.9.4

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 (62) hide show
  1. package/dist/bin/create-nexus-devflow.d.ts +7 -2
  2. package/dist/bin/create-nexus-devflow.js +231 -23
  3. package/dist/bin/create-nexus-devflow.js.map +1 -1
  4. package/dist/lib/dashboard-page.d.ts +1 -1
  5. package/dist/lib/dashboard-page.js +76 -0
  6. package/dist/lib/dashboard-page.js.map +1 -1
  7. package/dist/lib/project-config.d.ts +1 -1
  8. package/dist/lib/project-config.js +4 -1
  9. package/dist/lib/project-config.js.map +1 -1
  10. package/dist/lib/run-state.d.ts +39 -0
  11. package/dist/lib/run-state.js +203 -0
  12. package/dist/lib/run-state.js.map +1 -0
  13. package/dist/lib/skill-manager.d.ts +40 -1
  14. package/dist/lib/skill-manager.js +270 -68
  15. package/dist/lib/skill-manager.js.map +1 -1
  16. package/dist/lib/status.d.ts +4 -1
  17. package/dist/lib/status.js +49 -3
  18. package/dist/lib/status.js.map +1 -1
  19. package/dist/lib/webview-studio.js +169 -47
  20. package/dist/lib/webview-studio.js.map +1 -1
  21. package/package.json +1 -1
  22. package/template/.agents/skills/adopt/SKILL.md +4 -0
  23. package/template/.agents/skills/audit/SKILL.md +4 -0
  24. package/template/.agents/skills/autopilot/SKILL.md +4 -0
  25. package/template/.agents/skills/check/SKILL.md +4 -0
  26. package/template/.agents/skills/ci/SKILL.md +4 -0
  27. package/template/.agents/skills/complete/SKILL.md +7 -1
  28. package/template/.agents/skills/continuous/SKILL.md +4 -0
  29. package/template/.agents/skills/debug/SKILL.md +4 -0
  30. package/template/.agents/skills/discovery/SKILL.md +8 -4
  31. package/template/.agents/skills/feature/SKILL.md +4 -0
  32. package/template/.agents/skills/fix/SKILL.md +4 -0
  33. package/template/.agents/skills/implement/SKILL.md +4 -0
  34. package/template/.agents/skills/onboard/SKILL.md +4 -0
  35. package/template/.agents/skills/overview/SKILL.md +4 -0
  36. package/template/.agents/skills/prototype/SKILL.md +4 -0
  37. package/template/.agents/skills/release/SKILL.md +4 -0
  38. package/template/.agents/skills/rollback/SKILL.md +18 -5
  39. package/template/.agents/skills/status/SKILL.md +7 -0
  40. package/template/.agents/skills/tests/SKILL.md +4 -0
  41. package/template/.claude/skills/adopt/SKILL.md +4 -0
  42. package/template/.claude/skills/audit/SKILL.md +4 -0
  43. package/template/.claude/skills/autopilot/SKILL.md +4 -0
  44. package/template/.claude/skills/check/SKILL.md +4 -0
  45. package/template/.claude/skills/ci/SKILL.md +4 -0
  46. package/template/.claude/skills/complete/SKILL.md +7 -1
  47. package/template/.claude/skills/continuous/SKILL.md +4 -0
  48. package/template/.claude/skills/debug/SKILL.md +4 -0
  49. package/template/.claude/skills/discovery/SKILL.md +8 -4
  50. package/template/.claude/skills/feature/SKILL.md +4 -0
  51. package/template/.claude/skills/fix/SKILL.md +4 -0
  52. package/template/.claude/skills/implement/SKILL.md +4 -0
  53. package/template/.claude/skills/onboard/SKILL.md +4 -0
  54. package/template/.claude/skills/overview/SKILL.md +4 -0
  55. package/template/.claude/skills/prototype/SKILL.md +4 -0
  56. package/template/.claude/skills/release/SKILL.md +4 -0
  57. package/template/.claude/skills/rollback/SKILL.md +18 -5
  58. package/template/.claude/skills/status/SKILL.md +7 -0
  59. package/template/.claude/skills/tests/SKILL.md +4 -0
  60. package/template/AGENTS.md +24 -5
  61. package/template/devflow/build-plan.md +24 -0
  62. package/template/devflow/context/ai-interaction.md +4 -4
@@ -57,6 +57,7 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
57
57
  .search-row{display:flex;gap:10px;margin-bottom:16px}.search-input{flex:1;padding:10px 14px;background:var(--bg-deep);border:1px solid var(--line-strong);border-radius:4px;color:var(--ink);font-family:var(--font-mono);font-size:12px}.search-btn{padding:10px 18px;border:1px solid var(--cyan);border-radius:4px;background:var(--cyan);color:var(--bg-deep);font-weight:700;cursor:pointer}
58
58
  .blast-result{padding:16px;border:1px solid var(--line-strong);border-radius:4px;background:var(--bg-deep);margin-top:12px;display:none}
59
59
  .section-note{margin:-2px 0 14px;color:var(--muted);font:10px/1.5 var(--font-mono)}.record-list{display:grid;gap:8px}.record-item{display:grid;grid-template-columns:38px minmax(0,1fr) auto;gap:13px;align-items:center;padding:13px 15px;border:1px solid var(--line);border-left:3px solid var(--record-color,var(--cyan));border-radius:3px;background:rgba(255,255,255,.02)}.record-icon{display:grid;place-items:center;width:31px;height:31px;border-radius:8px;background:color-mix(in srgb,var(--record-color,var(--cyan)) 14%,transparent)}.record-body{min-width:0}.record-meta{color:var(--record-color,var(--cyan));font:700 10px var(--font-mono);letter-spacing:.06em;text-transform:uppercase}.record-title{margin-top:3px;color:var(--ink);font-weight:650}.record-desc{margin-top:3px;color:var(--soft);font-size:12px}.record-desc:empty{display:none}.record-title strong,.record-desc strong{color:var(--record-color,var(--cyan));font-weight:750}.record-title em,.record-desc em{color:var(--gold)}.record-title code,.record-desc code{padding:1px 4px;border:1px solid var(--line);border-radius:3px;color:var(--cyan);font:10px var(--font-mono)}.record-title a,.record-desc a{color:var(--cyan);text-decoration:underline}.record-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}.record-action{border:1px solid var(--record-color,var(--cyan));border-radius:3px;padding:8px 11px;background:transparent;color:var(--record-color,var(--cyan));font:700 10px var(--font-mono);cursor:pointer}.record-action:hover,.record-action:focus-visible{background:var(--record-color,var(--cyan));color:var(--bg)}.record-badge{align-self:start;border:1px solid rgba(111,227,180,.36);border-radius:99px;padding:4px 8px;background:var(--mint-soft);color:var(--mint);font:700 9px var(--font-mono);letter-spacing:.04em;text-transform:uppercase}.record-item.tone-cyan{--record-color:var(--cyan)}.record-item.tone-mint{--record-color:var(--mint)}.record-item.tone-gold{--record-color:var(--gold)}.record-item.tone-red{--record-color:var(--red)}.record-item.tone-violet{--record-color:var(--violet)}.stepper{gap:0;justify-content:center}.step{padding-right:0;overflow:visible}.step-line{left:calc(50% + 10px);right:calc(-50% + 10px);width:auto}#sev-p0{color:var(--red)}#sev-p1{color:var(--gold)}#sev-p2{color:var(--violet)}#sev-p3{color:var(--cyan)}#stat-runs.tone{color:var(--mint)}#stat-findings.tone-ok{color:var(--mint)}#stat-findings.tone-alert{color:var(--red)}#stat-ideas.tone-ok{color:var(--mint)}#stat-ideas.tone-pending{color:var(--gold)}#stat-adapters.tone-ok{color:var(--mint)}#stat-adapters.tone-partial{color:var(--gold)}#stat-state.tone-idle{color:var(--cyan)}#stat-state.tone-active{color:var(--violet)}#stat-state.tone-blocked{color:var(--red)}
60
+ .multitask-panel{border-color:rgba(56,189,248,.35)}.workspace-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;margin-top:10px}.workspace-card{background:rgba(255,255,255,.025);border:1px solid var(--line);border-radius:6px;padding:16px;display:flex;flex-direction:column;gap:8px;transition:all .2s ease}.workspace-card:hover{border-color:var(--cyan);background:rgba(255,255,255,.04)}.ws-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.ws-id{font-family:var(--font-mono);font-weight:700;font-size:11px;color:var(--cyan);background:var(--cyan-soft);padding:2px 8px;border-radius:3px}.ws-stage{font-family:var(--font-mono);font-size:10px;font-weight:700;text-transform:uppercase;padding:2px 6px;border-radius:3px;background:var(--gold-soft);color:var(--gold);border:1px solid rgba(242,193,78,.3)}.ws-stage.stage-check{background:var(--mint-soft);color:var(--mint);border-color:rgba(111,227,180,.3)}.ws-title{font-weight:650;font-size:13px;color:var(--ink);line-height:1.4}.ws-progress-bar{height:6px;background:rgba(0,0,0,.3);border-radius:99px;overflow:hidden;margin:4px 0}.ws-progress-fill{height:100%;background:linear-gradient(135deg,var(--cyan),var(--violet));transition:width .3s}.ws-meta{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--muted)}.ws-actions{display:flex;align-items:center;gap:6px;padding-top:8px;border-top:1px dashed var(--line);flex-wrap:wrap}.btn-ws{padding:4px 9px;border-radius:3px;font-family:var(--font-mono);font-size:10px;font-weight:700;background:rgba(255,255,255,.04);border:1px solid var(--line);color:var(--soft);cursor:pointer;transition:all .15s}.btn-ws:hover{background:var(--cyan-soft);border-color:var(--cyan);color:var(--cyan)}
60
61
  footer{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:26px;padding-top:17px;border-top:1px solid var(--line);color:var(--muted);font:10px var(--font-mono)}
61
62
  @media(max-width:920px){.grid .card,.grid .card.wide{grid-column:1/-1}.stats{grid-template-columns:repeat(2,1fr)}.adapters,.roster-grid,.mcp-grid{grid-template-columns:repeat(2,1fr)}.titleblock{align-items:flex-start;flex-direction:column}.meta dd{text-align:left}.stepper{gap:0}.cmd:after{position:fixed;left:12px;right:12px;bottom:16px;width:auto;max-width:none;transform:translateY(5px)}.cmd:hover:after,.cmd:focus-visible:after,.cmd:focus:after{transform:none}}
62
63
  @media(max-width:560px){.sheet{width:calc(100% - 24px);padding-top:22px}.panel,.card{padding:18px}.grid{gap:14px;margin-bottom:14px}.stats{margin-bottom:14px}.adapters,.roster-grid,.mcp-grid{grid-template-columns:1fr}.cmd:after{position:fixed;left:12px;right:12px;bottom:16px;width:auto;max-width:none;transform:translateY(5px)}.cmd:hover:after,.cmd:focus-visible:after,.cmd:focus:after{transform:none}.meta{grid-template-columns:1fr}.track-tabs{width:100%}.tab{flex:1}.fact{align-items:flex-start}.record-item{grid-template-columns:34px minmax(0,1fr)}.record-action{grid-column:2;justify-self:start}}
@@ -133,6 +134,18 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
133
134
  <div class="stat"><div class="stat-value" id="stat-state">-</div><div class="stat-label">Current state</div></div>
134
135
  </section>
135
136
 
137
+ <!-- Multi-Task Living Spec Workspaces Grid -->
138
+ <section class="card full panel multitask-panel" id="active-workspaces-panel">
139
+ <div class="panel-head">
140
+ <div>
141
+ <span class="label">Active Living Specs (Pure Task-Isolated Workspaces)</span>
142
+ <div class="muted" id="active-workspaces-summary" style="margin-top:3px;font-size:11px;">Scanned from devflow/context/{xxx-slug}/</div>
143
+ </div>
144
+ <span class="pill active" id="active-workspaces-pill">0 Active</span>
145
+ </div>
146
+ <div class="workspace-grid" id="active-workspaces-list"></div>
147
+ </section>
148
+
136
149
  <section class="grid">
137
150
  <article class="card"><div class="card-head"><span class="label">Nexus-DevFlow</span><span class="pill" id="update-pill">checking</span></div><div class="facts"><div class="fact"><span>Installed / latest</span><span id="installed-latest">-</span></div><div class="fact"><span>Health</span><span id="system-health">-</span></div><div class="fact"><span>Architecture</span><span>3-Pillars + Swarm RAG</span></div></div></article>
138
151
  <article class="card wide"><div class="card-head"><span class="label">Current Work</span><span class="pill" id="work-pill">loading</span></div><div class="value" id="work-title">Loading...</div><div class="progress"><span id="work-progress"></span></div><div class="muted" id="work-meta"></div></article>
@@ -152,6 +165,7 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
152
165
  </main>
153
166
  <script>
154
167
  const byId = (id) => document.getElementById(id);
168
+ const escapeHtml = (str) => String(str == null ? '' : str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;');
155
169
  const text = (id, value) => { const node = byId(id); if (node) node.textContent = value == null ? '-' : String(value); };
156
170
  const pill = (id, state, label) => { const node = byId(id); if (!node) return; node.className = 'pill ' + (state || 'configured'); node.textContent = label || state || '-'; };
157
171
  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); }); };
@@ -253,6 +267,67 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
253
267
  }
254
268
  });
255
269
 
270
+ function renderActiveWorkspaces(activeRuns, work) {
271
+ const root = byId('active-workspaces-list');
272
+ if (!root) return;
273
+ root.replaceChildren();
274
+ const runs = (activeRuns && activeRuns.length > 0) ? activeRuns : (work && work.state === 'active' ? [{
275
+ runId: work.runId || 'ACTIVE',
276
+ title: work.title || 'Active Spec',
277
+ status: work.status || 'implementing',
278
+ branch: 'current',
279
+ totalTasks: work.total || 0,
280
+ completedTasks: work.completed || 0,
281
+ remainingTasks: work.remaining || 0,
282
+ hasOpenFindings: false
283
+ }] : []);
284
+
285
+ pill('active-workspaces-pill', runs.length > 0 ? 'active' : 'idle', runs.length + ' Active');
286
+ text('active-workspaces-summary', runs.length > 0 ? 'Found ' + runs.length + ' active workspace(s) in devflow/context/' : 'No active workspace folders. Run /feature or /fix to start.');
287
+
288
+ if (runs.length === 0) {
289
+ const empty = document.createElement('div');
290
+ empty.className = 'empty';
291
+ empty.style.padding = '18px';
292
+ empty.textContent = 'No active delivery runs in progress. Use /feature or /fix to create a living spec.';
293
+ root.append(empty);
294
+ return;
295
+ }
296
+
297
+ runs.forEach((run) => {
298
+ const card = document.createElement('article');
299
+ card.className = 'workspace-card';
300
+ const pct = run.totalTasks > 0 ? Math.round((run.completedTasks / run.totalTasks) * 100) : 0;
301
+ const stageClass = (run.status || '').includes('check') ? 'ws-stage stage-check' : 'ws-stage';
302
+ const findingTag = run.hasOpenFindings ? '<span style="color:var(--red);font-size:10px;font-weight:700;">⚠ Open Findings</span>' : '<span style="color:var(--mint);font-size:10px;font-weight:700;">✔ 0 Blockers</span>';
303
+
304
+ card.innerHTML = '<div class="ws-header">' +
305
+ '<span class="ws-id">' + escapeHtml(run.runId) + '</span>' +
306
+ '<span class="' + stageClass + '">Stage: ' + escapeHtml(run.status || 'active') + '</span>' +
307
+ '</div>' +
308
+ '<div class="ws-title">' + escapeHtml(run.title || 'Living Spec') + '</div>' +
309
+ '<div class="ws-progress-bar"><div class="ws-progress-fill" style="width:' + pct + '%;"></div></div>' +
310
+ '<div class="ws-meta">' +
311
+ '<span>🌿 <code>' + escapeHtml(run.branch || 'main') + '</code></span>' +
312
+ '<span><strong>' + pct + '%</strong> (' + run.completedTasks + '/' + run.totalTasks + ' Tasks)</span>' +
313
+ '</div>' +
314
+ '<div style="display:flex;justify-content:space-between;align-items:center;margin-top:2px;">' +
315
+ findingTag +
316
+ '<span style="font-size:10px;color:var(--muted);">' + run.remainingTasks + ' remaining</span>' +
317
+ '</div>' +
318
+ '<div class="ws-actions">' +
319
+ '<button class="btn-ws" type="button" data-cmd="/implement ' + escapeHtml(run.runId) + '">▶ /implement</button>' +
320
+ '<button class="btn-ws" type="button" data-cmd="/check ' + escapeHtml(run.runId) + '">🧪 /check</button>' +
321
+ '<button class="btn-ws" type="button" data-cmd="/complete ' + escapeHtml(run.runId) + '">📦 /complete</button>' +
322
+ '</div>';
323
+
324
+ card.querySelectorAll('.btn-ws').forEach(btn => {
325
+ wireCopy(btn, () => btn.getAttribute('data-cmd'));
326
+ });
327
+ root.append(card);
328
+ });
329
+ }
330
+
256
331
  function renderSnapshot(data) {
257
332
  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 };
258
333
 
@@ -272,6 +347,7 @@ const DASHBOARD_PAGE_HTML = `<!doctype html>
272
347
  }
273
348
  }
274
349
  renderSwarm(data.swarm); renderMcp(data.mcpTools); text('stat-mcp', (data.mcpTools || []).length + ' Ready');
350
+ renderActiveWorkspaces(status.activeRuns, work);
275
351
 
276
352
  const nextCommand = data.nextAction?.command || status.nextAction?.command || '/feature'; text('next-command', nextCommand); text('next-reason', data.nextAction?.reason || 'Ready for new work.');
277
353
  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'));
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"dashboard-page.js","sourceRoot":"","sources":["../../lib/dashboard-page.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4XpB,CAAC;AAET,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- declare const PROJECT_CONFIG_PATH: string;
1
+ declare const PROJECT_CONFIG_PATH = "devflow/config.json";
2
2
  declare const PROJECT_CONFIG_SCHEMA_VERSION: 1;
3
3
  type StepReviewPolicy = "every" | "feature";
4
4
  type CheckpointCommitPolicy = "disabled" | "enabled";
@@ -1,6 +1,9 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
- const PROJECT_CONFIG_PATH = path.join("devflow", "config.json");
3
+ // Stable repo-relative identifier for warnings and status output. path.join
4
+ // normalizes the separator for filesystem reads, so this must not be built with
5
+ // path.join or Windows would surface "devflow\config.json" to users.
6
+ const PROJECT_CONFIG_PATH = "devflow/config.json";
4
7
  const PROJECT_CONFIG_SCHEMA_VERSION = 1;
5
8
  function createDefaultProjectConfig() {
6
9
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../lib/project-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAChE,MAAM,6BAA6B,GAAG,CAAU,CAAC;AAuDjD,SAAS,0BAA0B;IACjC,OAAO;QACL,aAAa,EAAE,6BAA6B;QAC5C,QAAQ,EAAE;YACR,UAAU,EAAE,OAAO;YACnB,iBAAiB,EAAE,SAAS;SAC7B;QACD,GAAG,EAAE;YACH,mBAAmB,EAAE,UAAU;YAC/B,eAAe,EAAE,MAAM;YACvB,oBAAoB,EAAE,WAAW;SAClC;QACD,YAAY,EAAE;YACZ,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,gBAAgB;SAC7B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,QAAQ;aACnB;YACD,UAAU,EAAE;gBACV,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,QAAQ;aACnB;SACF;QACD,UAAU,EAAE;YACV,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,CAAC;YACpB,qBAAqB,EAAE,KAAK;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC,qDAAqD,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,4CAA4C,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,MAAe,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,OAAO,aAAa,CAAC,gCAAgC,mBAAmB,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO;gBACL,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;gBAClC,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAClB,0CAA0C,mBAAmB,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3H,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO;gBACL,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAClB,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,SAAS,aAAa,CAAC,OAAe;QACpC,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,eAAe,CACb,IAAI,EACJ;QACE,eAAe;QACf,UAAU;QACV,KAAK;QACL,cAAc;QACd,cAAc;QACd,YAAY;KACb,EACD,QAAQ,CACT,CAAC;IAEF,IAAI,IAAI,CAAC,aAAa,KAAK,6BAA6B,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,yBAAyB,6BAA6B,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,cAAc,CACjC,YAAY,CAAC,OAAO,EACpB,sBAAsB,CACvB,CAAC;IACF,MAAM,eAAe,GAAG,cAAc,CACpC,YAAY,CAAC,UAAU,EACvB,yBAAyB,CAC1B,CAAC;IACF,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEjE,eAAe,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3E,eAAe,CACb,GAAG,EACH,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,EAClE,KAAK,CACN,CAAC;IACF,eAAe,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC5E,eAAe,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IACzE,eAAe,CACb,YAAY,EACZ,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAC9B,sBAAsB,CACvB,CAAC;IACF,eAAe,CACb,eAAe,EACf,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAC9B,yBAAyB,CAC1B,CAAC;IACF,eAAe,CACb,UAAU,EACV,CAAC,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,CAAC,EAC7D,YAAY,CACb,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,6BAA6B;QAC5C,QAAQ,EAAE;YACR,UAAU,EAAE,YAAY,CACtB,QAAQ,CAAC,UAAU,EACnB,CAAC,OAAO,EAAE,SAAS,CAAC,EACpB,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAC5B,qBAAqB,CACtB;YACD,iBAAiB,EAAE,YAAY,CAC7B,QAAQ,CAAC,iBAAiB,EAC1B,CAAC,UAAU,EAAE,SAAS,CAAC,EACvB,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EACnC,4BAA4B,CAC7B;SACF;QACD,GAAG,EAAE;YACH,mBAAmB,EAAE,oBAAoB,CACvC,GAAG,CAAC,mBAAmB,EACvB,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAChC,yBAAyB,CAC1B;YACD,eAAe,EAAE,oBAAoB,CACnC,GAAG,CAAC,eAAe,EACnB,QAAQ,CAAC,GAAG,CAAC,eAAe,EAC5B,qBAAqB,CACtB;YACD,oBAAoB,EAAE,oBAAoB,CACxC,GAAG,CAAC,oBAAoB,EACxB,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EACjC,0BAA0B,CAC3B;SACF;QACD,YAAY,EAAE;YACZ,UAAU,EAAE,YAAY,CACtB,YAAY,CAAC,UAAU,EACvB,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAC/B,QAAQ,CAAC,YAAY,CAAC,UAAU,EAChC,yBAAyB,CAC1B;YACD,UAAU,EAAE,YAAY,CACtB,YAAY,CAAC,UAAU,EACvB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAC9B,QAAQ,CAAC,YAAY,CAAC,UAAU,EAChC,yBAAyB,CAC1B;SACF;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,sBAAsB,CAC7B,YAAY,EACZ,QAAQ,CAAC,YAAY,CAAC,OAAO,EAC7B,sBAAsB,CACvB;YACD,UAAU,EAAE,sBAAsB,CAChC,eAAe,EACf,QAAQ,CAAC,YAAY,CAAC,UAAU,EAChC,yBAAyB,CAC1B;SACF;QACD,UAAU,EAAE;YACV,WAAW,EAAE,+BAA+B,CAC1C,UAAU,CAAC,WAAW,EACtB,QAAQ,CAAC,UAAU,CAAC,WAAW,EAC/B,wBAAwB,CACzB;YACD,iBAAiB,EAAE,sBAAsB,CACvC,UAAU,CAAC,iBAAiB,EAC5B,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EACrC,8BAA8B,EAC9B,CAAC,EACD,EAAE,CACH;YACD,qBAAqB,EAAE,eAAe,CACpC,UAAU,CAAC,qBAAqB,EAChC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EACzC,kCAAkC,CACnC;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAA8B,EAC9B,QAA2B,EAC3B,KAAa;IAEb,OAAO;QACL,KAAK,EAAE,YAAY,CACjB,KAAK,CAAC,KAAK,EACX,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EACtC,QAAQ,CAAC,KAAK,EACd,GAAG,KAAK,QAAQ,CACjB;QACD,KAAK,EAAE,YAAY,CACjB,KAAK,CAAC,KAAK,EACX,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EACvC,QAAQ,CAAC,KAAK,EACd,GAAG,KAAK,QAAQ,CACjB;QACD,QAAQ,EAAE,YAAY,CACpB,KAAK,CAAC,QAAQ,EACd,CAAC,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EACxC,QAAQ,CAAC,QAAQ,EACjB,GAAG,KAAK,WAAW,CACpB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,eAAe,CACtB,MAA+B,EAC/B,OAA0B,EAC1B,KAAa;IAEb,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,wBAAwB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAc,EACd,OAAqB,EACrB,QAAW,EACX,KAAa;IAEb,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc,EACd,QAAgB,EAChB,KAAa;IAEb,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,mEAAmE,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAc,EACd,QAAuB,EACvB,KAAa;IAEb,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAc,EACd,QAAgB,EAChB,KAAa,EACb,OAAe,EACf,OAAe;IAEf,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,KAAgB,GAAG,OAAO;QAC1B,KAAgB,GAAG,OAAO,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,OAAO,YAAY,OAAO,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,QAAiB,EAAE,KAAa;IACvE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EAClB,CAAC"}
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../lib/project-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ type RunStateKind = "idle" | "recorded" | "malformed";
2
+ type RunStatus = "running" | "blocked" | "ready" | "completed";
3
+ type RunMode = "manual" | "autopilot" | "continuous";
4
+ type RunBoundary = "read-only" | "reviewed" | "local-only";
5
+ type RunFreshness = "current" | "stale";
6
+ interface RunProgress {
7
+ current: number;
8
+ total: number;
9
+ label: string;
10
+ }
11
+ interface RunFeature {
12
+ id: string | null;
13
+ title: string;
14
+ }
15
+ interface RunStateWarning {
16
+ code: "invalid_run_state_path" | "malformed_run_state" | "stale_run_state" | "unsafe_run_state_path";
17
+ message: string;
18
+ }
19
+ interface RunStateSummary {
20
+ state: RunStateKind;
21
+ mode: RunMode;
22
+ command: string | null;
23
+ status: RunStatus | null;
24
+ freshness: RunFreshness | null;
25
+ summary: string | null;
26
+ detail: string | null;
27
+ boundary: RunBoundary | null;
28
+ startedAt: string | null;
29
+ updatedAt: string | null;
30
+ resumeCommand: string | null;
31
+ progress: RunProgress | null;
32
+ feature: RunFeature | null;
33
+ warnings: RunStateWarning[];
34
+ }
35
+ declare const RUN_STATE_PATH: string;
36
+ declare function readRunState(projectRoot: string, now?: Date): Promise<RunStateSummary>;
37
+ declare function parseRunState(value: string, now?: Date): RunStateSummary;
38
+ export { RUN_STATE_PATH, parseRunState, readRunState };
39
+ export type { RunBoundary, RunFeature, RunFreshness, RunMode, RunProgress, RunStateKind, RunStateSummary, RunStateWarning, RunStatus };
@@ -0,0 +1,203 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const RUN_STATE_PATH = path.join("devflow", ".state", "run.json");
4
+ const COMMAND_PATTERN = /^[a-z][a-z-]{0,31}$/;
5
+ const RUN_STATUSES = new Set([
6
+ "running",
7
+ "blocked",
8
+ "ready",
9
+ "completed"
10
+ ]);
11
+ const RUN_BOUNDARIES = new Set([
12
+ "read-only",
13
+ "reviewed",
14
+ "local-only"
15
+ ]);
16
+ const RUN_STALE_AFTER_MS = 60 * 60 * 1000;
17
+ async function readRunState(projectRoot, now = new Date()) {
18
+ const runStatePath = path.join(projectRoot, RUN_STATE_PATH);
19
+ try {
20
+ const stats = await fs.lstat(runStatePath);
21
+ if (stats.isSymbolicLink()) {
22
+ return malformedSummary({
23
+ code: "unsafe_run_state_path",
24
+ message: "Dashboard run state is a symbolic link and was not read."
25
+ });
26
+ }
27
+ if (!stats.isFile()) {
28
+ return malformedSummary({
29
+ code: "invalid_run_state_path",
30
+ message: "Dashboard run state path is not a regular file."
31
+ });
32
+ }
33
+ return parseRunState(await fs.readFile(runStatePath, "utf8"), now);
34
+ }
35
+ catch (error) {
36
+ if (getErrorCode(error) === "ENOENT") {
37
+ return idleSummary();
38
+ }
39
+ throw error;
40
+ }
41
+ }
42
+ function parseRunState(value, now = new Date()) {
43
+ let parsed;
44
+ try {
45
+ parsed = JSON.parse(value);
46
+ }
47
+ catch {
48
+ return malformedSummary({
49
+ code: "malformed_run_state",
50
+ message: "Dashboard run state is not valid JSON."
51
+ });
52
+ }
53
+ if (!isRecord(parsed)) {
54
+ return malformedRunState();
55
+ }
56
+ const command = readString(parsed.command);
57
+ const status = readString(parsed.status);
58
+ const summary = readString(parsed.summary);
59
+ const detail = readOptionalString(parsed.detail);
60
+ const boundary = readOptionalString(parsed.boundary);
61
+ const startedAt = readString(parsed.startedAt);
62
+ const updatedAt = readString(parsed.updatedAt);
63
+ const resumeCommand = readOptionalString(parsed.resumeCommand);
64
+ const progress = parseProgress(parsed.progress);
65
+ const feature = parseFeature(parsed.feature);
66
+ if (parsed.schemaVersion !== 1 ||
67
+ !command ||
68
+ !COMMAND_PATTERN.test(command) ||
69
+ !status ||
70
+ !RUN_STATUSES.has(status) ||
71
+ !summary ||
72
+ !startedAt ||
73
+ !updatedAt ||
74
+ !isTimestamp(startedAt) ||
75
+ !isTimestamp(updatedAt) ||
76
+ Date.parse(startedAt) > Date.parse(updatedAt) ||
77
+ (parsed.detail !== undefined && detail === null) ||
78
+ (parsed.boundary !== undefined && (!boundary || !RUN_BOUNDARIES.has(boundary))) ||
79
+ (parsed.resumeCommand !== undefined && resumeCommand === null) ||
80
+ (parsed.progress !== undefined && progress === null) ||
81
+ (parsed.feature !== undefined && feature === null)) {
82
+ return malformedRunState();
83
+ }
84
+ const freshness = status === "running" &&
85
+ now.getTime() - Date.parse(updatedAt) > RUN_STALE_AFTER_MS
86
+ ? "stale"
87
+ : "current";
88
+ const warnings = freshness === "stale"
89
+ ? [
90
+ {
91
+ code: "stale_run_state",
92
+ message: `Recorded /${command} activity has not updated for over one hour and may have been interrupted.`
93
+ }
94
+ ]
95
+ : [];
96
+ return {
97
+ state: "recorded",
98
+ mode: command === "autopilot"
99
+ ? "autopilot"
100
+ : command === "continuous"
101
+ ? "continuous"
102
+ : "manual",
103
+ command,
104
+ status,
105
+ freshness,
106
+ summary,
107
+ detail,
108
+ boundary,
109
+ startedAt,
110
+ updatedAt,
111
+ resumeCommand,
112
+ progress,
113
+ feature,
114
+ warnings
115
+ };
116
+ }
117
+ function parseProgress(value) {
118
+ if (value === undefined) {
119
+ return null;
120
+ }
121
+ if (!isRecord(value)) {
122
+ return null;
123
+ }
124
+ const label = readString(value.label);
125
+ const current = value.current;
126
+ const total = value.total;
127
+ if (!label ||
128
+ !Number.isInteger(current) ||
129
+ !Number.isInteger(total) ||
130
+ Number(current) < 0 ||
131
+ Number(total) < 1 ||
132
+ Number(current) > Number(total)) {
133
+ return null;
134
+ }
135
+ return { label, current: Number(current), total: Number(total) };
136
+ }
137
+ function parseFeature(value) {
138
+ if (value === undefined) {
139
+ return null;
140
+ }
141
+ if (!isRecord(value)) {
142
+ return null;
143
+ }
144
+ const id = readOptionalString(value.id);
145
+ const title = readString(value.title);
146
+ if (!title || (value.id !== undefined && id === null)) {
147
+ return null;
148
+ }
149
+ return { id, title };
150
+ }
151
+ function malformedRunState() {
152
+ return malformedSummary({
153
+ code: "malformed_run_state",
154
+ message: "Dashboard run state does not match schema version 1."
155
+ });
156
+ }
157
+ function idleSummary() {
158
+ return {
159
+ state: "idle",
160
+ mode: "manual",
161
+ command: null,
162
+ status: null,
163
+ freshness: null,
164
+ summary: null,
165
+ detail: null,
166
+ boundary: null,
167
+ startedAt: null,
168
+ updatedAt: null,
169
+ resumeCommand: null,
170
+ progress: null,
171
+ feature: null,
172
+ warnings: []
173
+ };
174
+ }
175
+ function malformedSummary(warning) {
176
+ return {
177
+ ...idleSummary(),
178
+ state: "malformed",
179
+ warnings: [warning]
180
+ };
181
+ }
182
+ function readString(value) {
183
+ return typeof value === "string" && value.trim() !== "" ? value.trim() : null;
184
+ }
185
+ function readOptionalString(value) {
186
+ return value === undefined ? null : readString(value);
187
+ }
188
+ function isTimestamp(value) {
189
+ return !Number.isNaN(Date.parse(value));
190
+ }
191
+ function isRecord(value) {
192
+ return typeof value === "object" && value !== null && !Array.isArray(value);
193
+ }
194
+ function getErrorCode(error) {
195
+ return typeof error === "object" &&
196
+ error !== null &&
197
+ "code" in error &&
198
+ typeof error.code === "string"
199
+ ? error.code
200
+ : undefined;
201
+ }
202
+ export { RUN_STATE_PATH, parseRunState, readRunState };
203
+ //# sourceMappingURL=run-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../lib/run-state.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,23 @@ export interface SkillListResult {
23
23
  }
24
24
  export interface InstallSkillOptions {
25
25
  name?: string;
26
+ all?: boolean;
26
27
  force?: boolean;
28
+ overrideSource?: string;
29
+ }
30
+ export interface RecommendedSkillPreset {
31
+ source: string;
32
+ name?: string;
33
+ all?: boolean;
34
+ description?: string;
35
+ }
36
+ export declare const RECOMMENDED_THIRD_PARTY_SKILLS: readonly RecommendedSkillPreset[];
37
+ export interface InstallRecommendedOptions {
38
+ presets?: readonly RecommendedSkillPreset[];
39
+ force?: boolean;
40
+ }
41
+ export interface UpdateRecommendedOptions {
42
+ presets?: readonly RecommendedSkillPreset[];
27
43
  }
28
44
  export declare function parseSkillFrontmatter(content: string): {
29
45
  name?: string;
@@ -33,6 +49,16 @@ export declare function parseSkillFrontmatter(content: string): {
33
49
  export declare function readDevflowManifest(projectRoot: string): Promise<Record<string, unknown> | null>;
34
50
  export declare function writeDevflowManifest(projectRoot: string, manifest: Record<string, unknown>): Promise<void>;
35
51
  export declare function listInstalledSkills(projectRoot: string): Promise<SkillListResult>;
52
+ export interface DiscoveredSkill {
53
+ sourceSkillPath: string;
54
+ skillName: string;
55
+ meta: {
56
+ name?: string;
57
+ description?: string;
58
+ version?: string;
59
+ };
60
+ }
61
+ export declare function discoverSkillsInDirectory(rootDir: string, maxDepth?: number, currentDepth?: number): Promise<DiscoveredSkill[]>;
36
62
  export declare function findSkillSourceDirectory(sourceDir: string, requestedName?: string): Promise<{
37
63
  sourceSkillPath: string;
38
64
  skillName: string;
@@ -42,9 +68,22 @@ export declare function findSkillSourceDirectory(sourceDir: string, requestedNam
42
68
  version?: string;
43
69
  };
44
70
  }>;
45
- export declare function installThirdPartySkill(projectRoot: string, source: string, options?: InstallSkillOptions): Promise<SkillDetail>;
71
+ export declare function installThirdPartySkill(projectRoot: string, source: string, options?: InstallSkillOptions): Promise<SkillDetail | SkillDetail[]>;
46
72
  export declare function removeThirdPartySkill(projectRoot: string, name: string): Promise<boolean>;
47
73
  export declare function syncSkills(projectRoot: string): Promise<{
48
74
  syncedCount: number;
49
75
  skills: string[];
50
76
  }>;
77
+ export interface SkillUpdateResult {
78
+ updatedSkills: SkillDetail[];
79
+ failedSkills: Array<{
80
+ name: string;
81
+ reason: string;
82
+ }>;
83
+ totalUpdated: number;
84
+ }
85
+ export declare function updateThirdPartySkills(projectRoot: string, targetSkillName?: string, options?: {
86
+ force?: boolean;
87
+ }): Promise<SkillUpdateResult>;
88
+ export declare function installRecommendedSkills(projectRoot: string, options?: InstallRecommendedOptions): Promise<SkillDetail[]>;
89
+ export declare function updateRecommendedSkills(projectRoot: string, options?: UpdateRecommendedOptions): Promise<SkillUpdateResult>;