@tractorscorch/clank 1.5.7 → 1.5.9

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.
@@ -49,7 +49,13 @@
49
49
  .msg .tool-card { background: var(--surface2); border: 1px solid var(--border); border-radius: 6px; padding: 8px 12px; margin: 6px 0; font-size: 12px; }
50
50
  .msg .tool-card .tool-name { color: var(--yellow); font-weight: 600; }
51
51
  .msg .tool-card .tool-output { color: var(--text-dim); margin-top: 4px; max-height: 100px; overflow: hidden; }
52
- .msg .thinking { color: var(--text-dim); font-style: italic; font-size: 13px; background: var(--surface); padding: 8px 12px; border-radius: 6px; margin: 6px 0; }
52
+ .msg .thinking { margin: 6px 0; }
53
+ .msg .thinking-toggle { color: var(--text-dim); font-size: 12px; cursor: pointer; user-select: none; display: flex; align-items: center; gap: 4px; padding: 4px 0; }
54
+ .msg .thinking-toggle:hover { color: var(--text); }
55
+ .msg .thinking-toggle .arrow { display: inline-block; transition: transform 0.15s; font-size: 10px; }
56
+ .msg .thinking-toggle .arrow.open { transform: rotate(90deg); }
57
+ .msg .thinking-content { color: var(--text-dim); font-style: italic; font-size: 13px; background: var(--surface); padding: 8px 12px; border-radius: 6px; margin: 4px 0 0 0; display: none; max-height: 300px; overflow-y: auto; white-space: pre-wrap; word-break: break-word; }
58
+ .msg .thinking-content.open { display: block; }
53
59
  #chat-input { padding: 12px 20px; border-top: 1px solid var(--border); display: flex; gap: 8px; align-items: flex-end; }
54
60
  #chat-input textarea { flex: 1; background: var(--surface); border: 1px solid var(--border); color: var(--text); padding: 10px 14px; border-radius: 8px; font-family: inherit; font-size: 14px; resize: none; outline: none; min-height: 44px; max-height: 200px; }
55
61
  #chat-input textarea:focus { border-color: var(--accent); }
@@ -241,7 +247,19 @@
241
247
  currentAssistantEl.querySelector('.body').textContent += (f.payload.text || f.payload.content || '');
242
248
  scrollChat(); break;
243
249
  case 'chat.thinking': case 'thinking':
244
- if (currentAssistantEl) { let t = currentAssistantEl.querySelector('.thinking'); if (!t) { t = document.createElement('div'); t.className = 'thinking'; currentAssistantEl.insertBefore(t, currentAssistantEl.querySelector('.body')); } t.textContent += (f.payload.text || ''); }
250
+ if (currentAssistantEl) {
251
+ let tw = currentAssistantEl.querySelector('.thinking');
252
+ if (!tw) {
253
+ tw = document.createElement('div'); tw.className = 'thinking';
254
+ const toggle = document.createElement('div'); toggle.className = 'thinking-toggle';
255
+ toggle.innerHTML = '<span class="arrow">&#9654;</span> <span class="label">Thinking...</span>';
256
+ const content = document.createElement('div'); content.className = 'thinking-content';
257
+ toggle.onclick = () => { const a = toggle.querySelector('.arrow'); const c = tw.querySelector('.thinking-content'); a.classList.toggle('open'); c.classList.toggle('open'); };
258
+ tw.appendChild(toggle); tw.appendChild(content);
259
+ currentAssistantEl.insertBefore(tw, currentAssistantEl.querySelector('.body'));
260
+ }
261
+ tw.querySelector('.thinking-content').textContent += (f.payload.content || f.payload.text || '');
262
+ }
245
263
  break;
246
264
  case 'chat.tool': case 'tool-start':
247
265
  if (currentAssistantEl) { const c = document.createElement('div'); c.className = 'tool-card'; c.innerHTML = `<span class="tool-name">${esc(f.payload.name)}</span>`; currentAssistantEl.querySelector('.body').before(c); }
@@ -250,7 +268,13 @@
250
268
  if (currentAssistantEl) { const cards = currentAssistantEl.querySelectorAll('.tool-card'); const last = cards[cards.length-1]; if (last) { const o = document.createElement('div'); o.className = 'tool-output'; o.textContent = (f.payload.summary || '').slice(0,200); last.appendChild(o); } }
251
269
  break;
252
270
  case 'chat.complete': case 'response-end': case 'turn-complete':
253
- if (currentAssistantEl) { const raw = currentAssistantEl.querySelector('.body').textContent; currentAssistantEl.querySelector('.body').innerHTML = md(raw); }
271
+ if (currentAssistantEl) {
272
+ const raw = currentAssistantEl.querySelector('.body').textContent;
273
+ currentAssistantEl.querySelector('.body').innerHTML = md(raw);
274
+ // Update thinking toggle label to past tense
275
+ const tl = currentAssistantEl.querySelector('.thinking-toggle .label');
276
+ if (tl) tl.textContent = 'Thought';
277
+ }
254
278
  currentAssistantEl = null; streaming = false; document.getElementById('btn-send').style.display = ''; document.getElementById('btn-abort').style.display = 'none';
255
279
  break;
256
280
  case 'chat.error': case 'error':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tractorscorch/clank",
3
- "version": "1.5.7",
3
+ "version": "1.5.9",
4
4
  "description": "Local-first AI agent gateway. Open-source alternative to OpenClaw, optimized for local models.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",