|
38 | 38 | var title = meta.title || ('Session ' + (meta.session_id || '')); |
39 | 39 | document.title = title + ' — Claurst Session'; |
40 | 40 |
|
| 41 | + var msgsEl = document.getElementById('messages'); |
| 42 | + |
| 43 | + // Tool-call visibility preference, persisted across reloads. Default: shown. |
| 44 | + var TOOLS_PREF_KEY = 'claurst.share.showTools'; |
| 45 | + var showTools = true; |
| 46 | + try { |
| 47 | + var stored = localStorage.getItem(TOOLS_PREF_KEY); |
| 48 | + if (stored === '0') showTools = false; |
| 49 | + } catch (_) { /* localStorage may be unavailable in sandboxed contexts */ } |
| 50 | + applyShowTools(showTools); |
| 51 | + |
41 | 52 | var hero = document.getElementById('hero'); |
42 | 53 | if (hero) { |
43 | 54 | var heroBody = document.createElement('div'); |
|
67 | 78 | metaDiv.appendChild(s); |
68 | 79 | }); |
69 | 80 | heroBody.appendChild(metaDiv); |
| 81 | + |
| 82 | + // Tool-call visibility toggle. Tool calls, tool results and thinking |
| 83 | + // blocks are shown by default; this lets the reader hide them for a |
| 84 | + // cleaner prompts/responses-only view. |
| 85 | + var controls = document.createElement('div'); |
| 86 | + controls.className = 'hero-controls'; |
| 87 | + var toolToggle = document.createElement('label'); |
| 88 | + toolToggle.className = 'toggle'; |
| 89 | + var cb = document.createElement('input'); |
| 90 | + cb.type = 'checkbox'; |
| 91 | + cb.checked = showTools; |
| 92 | + cb.addEventListener('change', function () { |
| 93 | + showTools = cb.checked; |
| 94 | + applyShowTools(showTools); |
| 95 | + try { localStorage.setItem(TOOLS_PREF_KEY, showTools ? '1' : '0'); } catch (_) {} |
| 96 | + }); |
| 97 | + toolToggle.appendChild(cb); |
| 98 | + var swatch = document.createElement('span'); |
| 99 | + swatch.className = 'toggle-swatch'; |
| 100 | + toolToggle.appendChild(swatch); |
| 101 | + var lbl = document.createElement('span'); |
| 102 | + lbl.className = 'toggle-label'; |
| 103 | + lbl.textContent = 'Show tool calls & thinking'; |
| 104 | + toolToggle.appendChild(lbl); |
| 105 | + controls.appendChild(toolToggle); |
| 106 | + heroBody.appendChild(controls); |
| 107 | + |
70 | 108 | hero.appendChild(heroBody); |
71 | 109 | } |
72 | 110 |
|
73 | | - var msgsEl = document.getElementById('messages'); |
74 | 111 | messages.forEach(function (m) { msgsEl.appendChild(renderMessage(m)); }); |
75 | 112 |
|
| 113 | + function applyShowTools(on) { |
| 114 | + if (on) { |
| 115 | + msgsEl.classList.remove('hide-tools'); |
| 116 | + } else { |
| 117 | + msgsEl.classList.add('hide-tools'); |
| 118 | + } |
| 119 | + } |
| 120 | + |
76 | 121 | function renderMessage(m) { |
77 | 122 | var div = document.createElement('div'); |
78 | 123 | div.className = 'msg ' + (m.role || ''); |
|
193 | 238 | function renderToolCall(block) { |
194 | 239 | var d = document.createElement('details'); |
195 | 240 | d.className = 'tool-call'; |
| 241 | + d.open = true; |
196 | 242 | var s = document.createElement('summary'); |
197 | 243 |
|
198 | 244 | var badge = document.createElement('span'); |
|
219 | 265 | var isError = !!block.is_error; |
220 | 266 | var d = document.createElement('details'); |
221 | 267 | d.className = 'tool-result' + (isError ? ' error' : ''); |
222 | | - d.open = isError; |
| 268 | + d.open = true; |
223 | 269 | var s = document.createElement('summary'); |
224 | 270 |
|
225 | 271 | var badge = document.createElement('span'); |
|
0 commit comments