@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.
|
|
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
|
|
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='
|
|
284
|
+
btn.href='/transcripts';btn.textContent='▶ Live Stream (no spawns yet)';
|
|
285
285
|
}
|
|
286
286
|
}).catch(()=>{});
|
|
287
287
|
}
|