← Commit history
VERSION+1−1
@@ -1 +1 @@-1.1.111+1.1.112
bin/adom-vscode
⋯ 1 unchanged line ⋯
bin/hydrogen-widget-claude-usage

  
bin/hydrogen-widget-codex-usage+1−1
@@ -25,4 +25,4 @@ def data():     return {'plan': u.get('plan_type'), 'items': items}  RENDER = r"""(d.error?`<span class="err">${d.error}</span>`:(d.items||[]).map(b=>bar(b.label,b.pct,b.severity)).join(''))"""-lib.serve('Codex usage', data, RENDER, 180000, mark=marks.MARKS['codex'], default_view='big:1')+lib.serve('Codex usage', data, RENDER, 180000, mark=marks.MARKS['codex'], default_view='nums')
bin/hydrogen-widget-lib.py+7−4
@@ -100,6 +100,9 @@ function viewsFor(items){const n=items.length;const v=[{id:'rows',name:'all mete   for(let i=0;i<n;i++)for(let j=i+1;j<n;j++)v.push({id:'duo:'+i+','+j,name:items[i].label+' + '+items[j].label});   if(n>1){v.push({id:'nums',name:'all as numbers'});v.push({id:'rings',name:'all as rings'});}   return v;}+/* A widget whose default is 'nums' (all as numbers) and that has a single limit gets that limit as+   one big number, the same look: 'nums' needs two items, and falling to the first view (rows) showed+   Codex's lone week as a thin meter (John 2026-10-01). */ const DEF_VIEW='%(default_view)s'; let curView=(function(){try{return localStorage.getItem('hw.view')||DEF_VIEW;}catch(e){return DEF_VIEW;}})(); function renderItems(items,id){const [kind,arg]=String(id).split(':');const at=(k)=>items[Math.max(0,Math.min(items.length-1,+k||0))];@@ -115,7 +118,7 @@ function renderItems(items,id){const [kind,arg]=String(id).split(':');const at=( function render(d0){const d=d0&&d0.stale?d0.stale:d0;const el=document.getElementById('w');const wrap=document.getElementById('wrap');   el.classList.toggle('stale',!!(d0&&d0.stale));let tip=(d0&&d0.stale)?String(d0.error||''):'';   if(d0&&d0.view&&d0.view!==curView){curView=d0.view;try{localStorage.setItem('hw.view',curView);}catch(e){}}-  if(d&&Array.isArray(d.items)&&d.items.length){const vs=viewsFor(d.items);let k=vs.findIndex(v=>v.id===curView);if(k<0){k=vs.findIndex(v=>v.id===DEF_VIEW);if(k<0)k=0;curView=vs[k].id;}+  if(d&&Array.isArray(d.items)&&d.items.length){const vs=viewsFor(d.items);let k=vs.findIndex(v=>v.id===curView);if(k<0){k=vs.findIndex(v=>v.id===DEF_VIEW);if(k<0&&DEF_VIEW==='nums')k=vs.findIndex(v=>v.id==='big:0');if(k<0)k=0;curView=vs[k].id;}     el.classList.toggle('hz',curView!=='rows');el.innerHTML=renderItems(d.items,curView);     tip=(tip?tip+'. ':'')+'%(title)s: '+vs[k].name+'. Click for the next view ('+(k+1)+' of '+vs.length+').';}   else{el.classList.remove('hz');el.innerHTML=%(render_js)s;tip=(d0&&d0.error?String(d0.error)+'. ':'')+'Click to check again now.';}@@ -188,9 +191,9 @@ def serve(title, data_fn, render_js, refresh_ms=60000, mark=None, align_ms=0, de     # the next tries come at 5, 15, 45, 90 s, then minutes, capped at 15; back to normal on the     # next success. The last good numbers live on disk so a restart shows them at once, dimmed.     st = _load_state(title)-    # The view a fresh install opens on: the widget's choice (Claude: the three percents in a-    # row; Codex: the week only, John 2026-09-19), until the user clicks to another one, which-    # is remembered on disk and wins from then on.+    # The view a fresh install opens on: the widget's choice (Claude and Codex: every limit as a+    # big number in a row, John 2026-10-01; Codex was "the week only" from 2026-09-19), until the+    # user clicks to another one, which is remembered on disk and wins from then on.     cache = {'t': 0, 'v': {'error': 'starting'}, 'wait': refresh_ms/1000, 'good': None, 'fails': 0, 'view': str(st.get('view') or default_view)}     if isinstance(st.get('good'), dict) and st['good'].get('items') is not None:         cache['good'] = st['good']
bin/hydrogen-widget-marks.py

  
install.sh

  
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-vscode",-  "version": "1.1.111",+  "version": "1.1.112",   "type": "app",   "description": "CLI + VS Code extension that lets AI assistants and the Hydrogen Desktop frontend drive VS Code from inside an Adom container: open files, live get/set of any setting/theme/font (no reload), native streamed exec, a frontend event queue, container identity (hd/hw), api-key status/inject, extension query/update, modes, paste screenshots, and any VS Code command via a local HTTP API on port 8821 (with port-file fallback discovery).",   "license": "PROPRIETARY",
page.json+2−2
@@ -4,7 +4,7 @@   "slug": "adom-vscode",   "title": "adom-vscode",   "brief": "Let Claude, Codex and Kimi drive VS Code inside your Adom container",-  "version": "1.1.111",+  "version": "1.1.112",   "license": "PROPRIETARY",   "visibility": "public",   "hero": {@@ -141,4 +141,4 @@     "adom-vscode-extensions",     "adom-vscode-modes"   ]-}\ No newline at end of file+}