@jhizzard/termdeck 0.9.0 → 0.10.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jhizzard/termdeck",
3
- "version": "0.9.0",
3
+ "version": "0.10.2",
4
4
  "description": "Browser-based terminal multiplexer with metadata overlays, panel flashback memory recall, and AI-aware session management",
5
5
  "bin": {
6
6
  "termdeck": "./packages/cli/src/index.js"
@@ -237,6 +237,9 @@
237
237
  case 'meta':
238
238
  updatePanelMeta(id, msg.session.meta);
239
239
  break;
240
+ case 'proactive_memory':
241
+ showProactiveToast(id, msg.hit);
242
+ break;
240
243
  case 'exit':
241
244
  updatePanelMeta(id, {
242
245
  status: 'exited',
@@ -1245,6 +1248,9 @@
1245
1248
  case 'meta':
1246
1249
  updatePanelMeta(id, msg.session.meta);
1247
1250
  break;
1251
+ case 'proactive_memory':
1252
+ showProactiveToast(id, msg.hit);
1253
+ break;
1248
1254
  case 'exit':
1249
1255
  updatePanelMeta(id, { status: 'exited', statusDetail: `Exited (${msg.exitCode})` });
1250
1256
  const p = document.getElementById(`panel-${id}`);
@@ -1253,6 +1259,17 @@
1253
1259
  case 'status_broadcast':
1254
1260
  updateGlobalStats(msg.sessions);
1255
1261
  break;
1262
+ case 'config_changed':
1263
+ // Sprint 40 T1: parity with the main panel WS handler. The
1264
+ // server broadcasts config_changed to ALL ws clients, including
1265
+ // reconnected sessions; previously the reconnect path silently
1266
+ // dropped these. Idempotent — safe to re-receive.
1267
+ if (msg.config) {
1268
+ state.config = { ...state.config, ...msg.config };
1269
+ if (typeof renderSettingsPanel === 'function') renderSettingsPanel();
1270
+ if (typeof updateRagIndicator === 'function') updateRagIndicator();
1271
+ }
1272
+ break;
1256
1273
  }
1257
1274
  } catch (err) { console.error('[client] reconnect ws message failed:', err); }
1258
1275
  };
@@ -2509,12 +2526,29 @@
2509
2526
  {
2510
2527
  targets: ['#btn-status', '#btn-config'],
2511
2528
  title: 'Status and config',
2512
- body: `<strong>status</strong> opens a global-metrics modal (session counts by state, RAG mode, memory bridge). <strong>config</strong> shows your loaded project list and theme defaults. Both are in the polish queue for Sprint 3 buttons are visible but unwired right now.`,
2529
+ body: `<strong>status</strong> opens a global-metrics modal (session counts by state, RAG mode, memory bridge). <strong>config</strong> shows your loaded project list and theme defaults plus a live RAG-mode toggle (Sprint 36) that flips Flashback on/off without a server restart.`,
2530
+ },
2531
+ {
2532
+ targets: ['#btn-sprint', '#btn-graph'],
2533
+ title: 'Sprint runner and knowledge graph',
2534
+ body: `<strong>sprint</strong> opens the in-dashboard 4+1 sprint runner (Sprint 37): name the sprint, define T1–T4 lane goals, click kick off — TermDeck spawns four panels and injects boot prompts via the two-stage submit pattern automatically. Optional <strong>--isolation=worktree</strong> creates a git worktree per lane so concurrent edits can't stomp. <strong>graph</strong> opens the D3.js force-directed knowledge graph (Sprint 38) of your memory_items + memory_relationships in a new tab — click any node to open its memory in a drawer, filter by relationship type, search, zoom/pan.`,
2513
2535
  },
2514
2536
  {
2515
2537
  targets: ['#btn-how', '#btn-help'],
2516
2538
  title: 'How this works and help',
2517
- body: `Click <strong>how this works</strong> any time to replay this tour. <strong>help</strong> opens the full TermDeck documentation in a new tab.`,
2539
+ body: `Click <strong>how this works</strong> any time to replay this tour. <strong>help</strong> opens the full TermDeck documentation in a new tab. The <strong>📖 Guide</strong> tab on the right edge of the screen — also opens with the <kbd>g</kbd> keyboard shortcut — is the always-on Orchestrator Guide (Sprint 37): nine sections covering the 4+1 sprint pattern, inject mandate, CLAUDE.md hierarchy, memory-first discipline, sprint discipline, restart-prompt rituals, scaffolding files, channel inject patterns. Search built in.`,
2540
+ },
2541
+ {
2542
+ target: '#guideRail',
2543
+ title: 'Right-rail Orchestrator Guide',
2544
+ body: `The <strong>📖 Guide</strong> rail is your orchestration cheat-sheet — collapsed by default, one click (or <kbd>g</kbd>) to expand. It auto-scrolls to the relevant section based on what you're focused on: clicking a terminal panel jumps the Guide to the 4+1 pattern; opening the project drawer jumps to CLAUDE.md hierarchy. Useful when you forget exactly how the two-stage submit pattern works at 2 AM in the middle of a sprint inject.`,
2545
+ fallback: '#btn-how',
2546
+ },
2547
+ {
2548
+ target: '#btnPreviewProject',
2549
+ title: 'Orchestration preview',
2550
+ body: `The <strong>preview</strong> button next to the project + button (Sprint 37) shows you exactly what <code>termdeck init --project &lt;name&gt;</code> would create for the selected project — file tree, contents per file, expand-on-click. Read-only by default; optional generate button writes the scaffolding (CLAUDE.md, CONTRADICTIONS.md, project_facts.md, .claude/settings.json, docs/orchestration/, RESTART-PROMPT.md template). Lets you see-before-commit instead of running the CLI blind.`,
2551
+ fallback: '#btn-how',
2518
2552
  },
2519
2553
  {
2520
2554
  target: '.panel-header',
@@ -2553,10 +2587,15 @@
2553
2587
  title: 'Prompt bar',
2554
2588
  body: `Type any command here to launch it as a new terminal — <kbd>claude code ~/myproject</kbd>, <kbd>python3 manage.py runserver</kbd>, <kbd>npm run dev</kbd>. Pick a project from the dropdown to auto-cd into its path and apply its default theme. <kbd>Ctrl+Shift+N</kbd> focuses this bar from anywhere.`,
2555
2589
  },
2590
+ {
2591
+ target: null,
2592
+ title: 'Knowledge graph + memory inference',
2593
+ body: `Sprint 38 brought your <strong>memory_relationships</strong> table to life. The <strong>graph</strong> button (top toolbar) renders your memories as a force-directed network — supersedes / relates_to / contradicts / elaborates / caused_by / blocks / inspired_by / cross_project_link edges, color-coded, filterable. The Mnestra MCP server now exposes four new tools: <code>memory_link</code>, <code>memory_unlink</code>, <code>memory_related</code>, and <code>memory_recall_graph</code> — Claude Code can connect related memories explicitly, traverse N-hop neighborhoods, and recall via graph-aware re-ranking (vector_score × edge_weight × recency). Edges populate automatically from Joshua's private rag-system classifier; a nightly cron in Sprint 39+ will surface cross-project connections.`,
2594
+ },
2556
2595
  {
2557
2596
  target: null,
2558
2597
  title: 'You are ready.',
2559
- body: `That's every major surface. Click <strong>how this works</strong> in the top toolbar to replay this walkthrough. <strong>help</strong> opens the full docs. Questions, bugs, feedback: <a href="https://github.com/jhizzard/termdeck/issues" target="_blank" style="color:var(--tg-accent)">github.com/jhizzard/termdeck/issues</a>. Now launch something.`,
2598
+ body: `That's every major surface. Click <strong>how this works</strong> in the top toolbar to replay this walkthrough. <strong>help</strong> opens the full docs. Press <kbd>g</kbd> any time to crack open the Orchestrator Guide. Questions, bugs, feedback: <a href="https://github.com/jhizzard/termdeck/issues" target="_blank" style="color:var(--tg-accent)">github.com/jhizzard/termdeck/issues</a>. Now launch something.`,
2560
2599
  },
2561
2600
  ];
2562
2601
 
@@ -0,0 +1,104 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>TermDeck · Knowledge Graph</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ </head>
9
+ <body class="graph-page">
10
+
11
+ <header class="graph-topbar" id="graphTopbar">
12
+ <div class="graph-tb-left">
13
+ <a class="graph-tb-back" href="/" title="Back to dashboard" aria-label="Back to dashboard">
14
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true">
15
+ <path d="M10 12L6 8l4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
16
+ </svg>
17
+ TermDeck
18
+ </a>
19
+ <span class="graph-tb-divider">/</span>
20
+ <span class="graph-tb-title">Knowledge Graph</span>
21
+ </div>
22
+
23
+ <div class="graph-tb-controls">
24
+ <label class="graph-tb-control">
25
+ <span>Project</span>
26
+ <select id="graphProject"></select>
27
+ </label>
28
+ <label class="graph-tb-control graph-tb-search-wrap">
29
+ <span>Search</span>
30
+ <input type="search" id="graphSearch" placeholder="content, category…" autocomplete="off" spellcheck="false">
31
+ </label>
32
+ <button type="button" class="graph-tb-btn" id="graphReheat" title="Re-heat the simulation">re-heat</button>
33
+ <button type="button" class="graph-tb-btn" id="graphFit" title="Frame the full graph">fit</button>
34
+ </div>
35
+
36
+ <div class="graph-tb-right">
37
+ <span class="graph-tb-stat" id="graphStatNodes">— nodes</span>
38
+ <span class="graph-tb-stat" id="graphStatEdges">— edges</span>
39
+ <span class="graph-tb-stat" id="graphStatProject">project</span>
40
+ </div>
41
+ </header>
42
+
43
+ <div class="graph-filters" id="graphFilters" role="toolbar" aria-label="Edge type filters"></div>
44
+
45
+ <main class="graph-stage" id="graphStage">
46
+ <div class="graph-loading" id="graphLoading">
47
+ <div class="graph-loading-spinner" aria-hidden="true"></div>
48
+ <p id="graphLoadingMsg">Loading graph…</p>
49
+ </div>
50
+
51
+ <div class="graph-empty" id="graphEmpty" hidden>
52
+ <h3 id="graphEmptyTitle">No memories yet</h3>
53
+ <p id="graphEmptyBody">This project has no <code>memory_items</code> rows. Run a Claude Code session in this project; the session-end hook will populate Mnestra and edges will be inferred on the next nightly cron.</p>
54
+ </div>
55
+
56
+ <svg class="graph-svg" id="graphSvg" role="img" aria-label="Force-directed knowledge graph">
57
+ <defs>
58
+ <radialGradient id="graphBgGrad" cx="50%" cy="50%" r="75%">
59
+ <stop offset="0%" stop-color="#1a1f2e" />
60
+ <stop offset="100%" stop-color="#0a0c12" />
61
+ </radialGradient>
62
+ <filter id="nodeGlow" x="-50%" y="-50%" width="200%" height="200%">
63
+ <feGaussianBlur stdDeviation="2.5" result="blur"/>
64
+ <feMerge>
65
+ <feMergeNode in="blur"/>
66
+ <feMergeNode in="SourceGraphic"/>
67
+ </feMerge>
68
+ </filter>
69
+ </defs>
70
+ <rect class="graph-bg" width="100%" height="100%" fill="url(#graphBgGrad)" />
71
+ <g class="graph-zoom-root" id="graphZoomRoot">
72
+ <g class="graph-edges" id="graphEdgesLayer"></g>
73
+ <g class="graph-nodes" id="graphNodesLayer"></g>
74
+ <g class="graph-labels" id="graphLabelsLayer"></g>
75
+ </g>
76
+ </svg>
77
+
78
+ <aside class="graph-drawer" id="graphDrawer" hidden aria-label="Memory detail">
79
+ <header class="graph-drawer-header">
80
+ <div class="gd-h-meta">
81
+ <span class="gd-project" id="gdProject">project</span>
82
+ <span class="gd-source-type" id="gdSourceType">fact</span>
83
+ <span class="gd-created" id="gdCreated">—</span>
84
+ </div>
85
+ <button type="button" class="graph-drawer-close" id="gdClose" aria-label="Close">×</button>
86
+ </header>
87
+ <div class="graph-drawer-body">
88
+ <pre class="gd-content" id="gdContent">—</pre>
89
+ <h4 class="gd-section">Neighbors</h4>
90
+ <div class="gd-neighbors" id="gdNeighbors">—</div>
91
+ </div>
92
+ <footer class="graph-drawer-footer">
93
+ <button type="button" class="graph-drawer-action" id="gdExpand" title="Center the graph on this memory">focus</button>
94
+ <button type="button" class="graph-drawer-action" id="gdCopyId" title="Copy the memory id">copy id</button>
95
+ </footer>
96
+ </aside>
97
+
98
+ <div class="graph-tooltip" id="graphTooltip" hidden></div>
99
+ </main>
100
+
101
+ <script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
102
+ <script src="graph.js" defer></script>
103
+ </body>
104
+ </html>