@tekyzinc/gsd-t 3.18.11 → 3.18.12

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/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to GSD-T are documented here. Updated with each release.
4
4
 
5
+ ## [3.18.12] - 2026-04-23
6
+
7
+ ### Fixed
8
+
9
+ - **Dashboard Live Stream button stuck disabled** — the header button had `cursor:not-allowed` + `pointer-events:none` whenever the `/transcripts` index returned no spawns, including the common case of opening the dashboard before any agent had run. The button now stays enabled in all states. With a live spawn it links to the live transcript; with only finished spawns it links to the most recent one; with no spawn data at all it links to the `/transcripts` JSON index as a discoverable last resort.
10
+
5
11
  ## [3.18.11] - 2026-04-23
6
12
 
7
13
  ### Fixed
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekyzinc/gsd-t",
3
- "version": "3.18.11",
3
+ "version": "3.18.12",
4
4
  "description": "GSD-T: Contract-Driven Development for Claude Code — 54 slash commands with headless-by-default workflow spawning, unattended supervisor relay with event stream, graph-powered code analysis, real-time agent dashboard, task telemetry, doc-ripple enforcement, backlog management, impact analysis, test sync, milestone archival, and PRD generation",
5
5
  "author": "Tekyz, Inc.",
6
6
  "license": "MIT",
@@ -71,7 +71,7 @@ body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:12
71
71
  <div class="hdr">
72
72
  <span class="logo">GSD-T Agent Dashboard</span>
73
73
  <div id="status" class="status wait"><span class="dot"></span><span id="status-txt">Connecting...</span></div>
74
- <a id="livestream-btn" class="livestream-btn disabled" href="#" title="Open the latest live spawn transcript">▶ Live Stream</a>
74
+ <a id="livestream-btn" class="livestream-btn" href="/transcripts" title="Open the latest live spawn transcript">▶ Live Stream</a>
75
75
  <div class="hright"><span id="ev-count">0 events</span></div>
76
76
  </div>
77
77
  <div class="main">
@@ -275,13 +275,13 @@ ReactDOM.render(React.createElement(Dashboard),document.getElementById('rf-root'
275
275
  function refresh(){
276
276
  fetch(`http://localhost:${PORT}/transcripts`,{cache:'no-store'}).then(r=>r.ok?r.json():null).then(d=>{
277
277
  const latest=d&&pickLatest(d.spawns);
278
+ btn.classList.remove('disabled');
278
279
  if(latest){
279
280
  btn.href=`/transcript/${encodeURIComponent(latest.spawnId)}`;
280
- btn.classList.remove('disabled');
281
281
  const live=latest.status&&!['done','stopped','failed','crashed'].includes(latest.status);
282
282
  btn.textContent=(live?'▶ Live Stream':'▶ Latest Transcript')+` · ${latest.spawnId.slice(0,10)}`;
283
283
  }else{
284
- btn.href='#';btn.classList.add('disabled');btn.textContent='▶ Live Stream (no spawns yet)';
284
+ btn.href='/transcripts';btn.textContent='▶ Live Stream (no spawns yet)';
285
285
  }
286
286
  }).catch(()=>{});
287
287
  }