visionclaw 0.1.75 → 0.1.76

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
@@ -1,3 +1,12 @@
1
+ ## [0.1.76](https://github.com/babelcloud/visionclaw/compare/v0.1.75...v0.1.76) (2026-03-03)
2
+
3
+
4
+ ### Features
5
+
6
+ * **ui:** add auto-scroll indicator to logs tab ([60f2eba](https://github.com/babelcloud/visionclaw/commit/60f2ebab83fca09b3443c3392c96b06f7b04a5bb))
7
+
8
+
9
+
1
10
  ## [0.1.75](https://github.com/babelcloud/visionclaw/compare/v0.1.74...v0.1.75) (2026-03-03)
2
11
 
3
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/obs/ui.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,IAAI,MAAM,CAu3BxC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/obs/ui.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,IAAI,MAAM,CA+4BxC"}
package/dist/obs/ui.js CHANGED
@@ -91,6 +91,9 @@ export function renderIndexHtml() {
91
91
  .tab { cursor: pointer; background: transparent; border: 1px solid transparent; color: var(--muted); padding: 5px 12px; border-radius: 8px; font-size: 12px; font-family: var(--sans); }
92
92
  .tab:hover { background: rgba(255,255,255,0.06); color: var(--text); }
93
93
  .tab.active { background: rgba(255,255,255,0.10); border-color: var(--border); color: var(--text); font-weight: 600; }
94
+ .scroll-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-left: 5px; vertical-align: middle; transition: background 0.2s; }
95
+ .scroll-dot.on { background: var(--good); box-shadow: 0 0 4px rgba(49,208,170,0.5); }
96
+ .scroll-dot.off { background: var(--warn); box-shadow: 0 0 4px rgba(255,204,102,0.4); }
94
97
  .tab-content { display: none; }
95
98
  .tab-content.visible { display: block; }
96
99
  /* Resource view (memory / skills) */
@@ -170,7 +173,7 @@ export function renderIndexHtml() {
170
173
  <section class="panel">
171
174
  <div class="panel-head">
172
175
  <div class="tabs">
173
- <button class="tab active" id="tab-btn-logs">Logs</button>
176
+ <button class="tab active" id="tab-btn-logs">Logs<span class="scroll-dot on" id="scroll-dot" title="Auto-scroll active"></span></button>
174
177
  <button class="tab" id="tab-btn-memory">Memory</button>
175
178
  <button class="tab" id="tab-btn-skills">Skills</button>
176
179
  <button class="tab" id="tab-btn-config">Config</button>
@@ -215,6 +218,7 @@ export function renderIndexHtml() {
215
218
  const $rawToggle = document.getElementById('rawToggle');
216
219
  const $sse = document.getElementById('sse');
217
220
  const $dot = document.getElementById('dot');
221
+ const $scrollDot = document.getElementById('scroll-dot');
218
222
 
219
223
  const MAX = 300;
220
224
  const COLLAPSE_AT = 260;
@@ -224,6 +228,23 @@ export function renderIndexHtml() {
224
228
  let rawMode = false;
225
229
  let autoScroll = true;
226
230
  let programmaticScroll = false;
231
+
232
+ function syncAutoScrollIndicator() {
233
+ $scrollDot.classList.toggle('on', autoScroll);
234
+ $scrollDot.classList.toggle('off', !autoScroll);
235
+ $scrollDot.title = autoScroll ? 'Auto-scroll active' : 'Auto-scroll paused — click to resume';
236
+ }
237
+
238
+ $scrollDot.addEventListener('click', (e) => {
239
+ e.stopPropagation();
240
+ autoScroll = !autoScroll;
241
+ syncAutoScrollIndicator();
242
+ if (autoScroll) {
243
+ const target = rawMode ? $logsRaw : $logs;
244
+ programmaticScroll = true;
245
+ target.scrollTop = target.scrollHeight;
246
+ }
247
+ });
227
248
  const rawLines = [];
228
249
 
229
250
  function isNearBottom(el) {
@@ -477,7 +498,9 @@ export function renderIndexHtml() {
477
498
  programmaticScroll = false;
478
499
  return;
479
500
  }
501
+ const was = autoScroll;
480
502
  autoScroll = isNearBottom($logs);
503
+ if (was !== autoScroll) syncAutoScrollIndicator();
481
504
  });
482
505
 
483
506
  $expandAll.addEventListener('click', () => {
@@ -504,6 +527,7 @@ export function renderIndexHtml() {
504
527
  $count.textContent = '0';
505
528
  rawLines.length = 0;
506
529
  autoScroll = true;
530
+ syncAutoScrollIndicator();
507
531
  $logsRaw.textContent = '';
508
532
  });
509
533
 
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/obs/ui.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,oFAAoF;AACpF,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAq3BD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/obs/ui.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,oFAAoF;AACpF,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA64BD,CAAC;AACT,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.75",
3
+ "version": "0.1.76",
4
4
  "description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",