app
adom-vscode
Public Made by Adomby adom
Let Claude, Codex and Kimi drive VS Code inside your Adom container
← Commit history
release 1.1.71
11 files changed
+25−6
README.md+2@@ -276,6 +276,8 @@ v1.1.20: /command returns errorCode command_not_found (HTTP 400) with did-you-me v1.1.21: event-driven tab census + Claude session identity (John 2026-09-03: never poll the iframes again). GET /tabs and the SSE stream GET /tabs/events publish the extension host's own tabGroups census on every change; POST /claude/session-start ingests the Claude SessionStart hook (id + transcript path, before the jsonl is flushed) and GET /claude/sessions lists it; POST /claude/open-session opens an existing conversation by id and confirms the bind (retagging sdk-cli transcripts, which the Claude extension otherwise declines). Capability markers in /health: tabs.list, tabs.events, claude.open-session, claude.session-start, claude.sessions. +v1.1.71: widget pages tell Hydrogen the width they need in the current layout (narrow when tall, wide when compact); the widgets page explains shipping several widgets from one repo.+ v1.1.70: the usage widgets describe themselves for Hydrogen's hover card (about, refresh fields in the manifest). v1.1.69: the widget helper retries its bind for five seconds, so a port a stopped instance is still releasing never fails the launch.
VERSION+1−1@@ -1 +1 @@-1.1.70+1.1.71
bin/adom-vscode⋯ 1 unchanged line ⋯
bin/hydrogen-widget-claude-usagebin/hydrogen-widget-codex-usagebin/hydrogen-widget-lib.py+9−2@@ -35,7 +35,7 @@ html,body{margin:0;height:100%%;background:transparent;color:#e6ebef;font-family ellipsis instead of pushing the value out of view. */ .w{font-size:9px;line-height:1;padding:2px 6px} .rows{flex-direction:column;align-items:stretch;justify-content:center;gap:2px;min-width:0}- .row{display:grid;grid-template-columns:auto minmax(14px,1fr) auto;align-items:center;gap:4px;min-width:0}+ .row{display:grid;grid-template-columns:auto minmax(56px,1fr) auto;align-items:center;gap:4px;min-width:0} .lbl{font-size:7.5px;max-width:5.5em;overflow:hidden;text-overflow:ellipsis}.bar{width:auto;height:5px}.v{font-size:9px;min-width:0} .big{font-size:15px}.err{font-size:9px;white-space:normal;line-height:1.1} }@@ -44,7 +44,14 @@ html,body{margin:0;height:100%%;background:transparent;color:#e6ebef;font-family <script> const R=%(refresh_ms)d; function bar(l,p,sev){const c=(sev==='critical'||p>=90)?'hot':(sev==='warning'||p>=70)?'warn':'';return `<span class="row"><span class="lbl">${l}</span><span class="bar ${c}"><i style="width:${Math.max(0,Math.min(100,p))}%%"></i></span><span class="v">${Math.round(p)}%%</span></span>`;}-function render(d){document.getElementById('w').innerHTML=%(render_js)s;}+function render(d){document.getElementById('w').innerHTML=%(render_js)s;postWidth();}+/* THE WIDGET DECIDES ITS WIDTH: measure the content in the current layout (tall rows are narrow,+ the compact row is wide) and ask the host for that width. Never fixed px; the host clamps. */+function postWidth(){try{const w=document.querySelector('.w');const rows=document.getElementById('w');if(!w||!rows)return;+ let need=0;for(const r of rows.children){need=Math.max(need,r.scrollWidth);}+ const mark=w.querySelector('.mark');const cs=getComputedStyle(w);+ const total=Math.ceil(need+(mark?mark.getBoundingClientRect().width+parseFloat(cs.gap||'0'):0)+parseFloat(cs.paddingLeft)+parseFloat(cs.paddingRight)+2);+ if(total>0&&window.parent!==window)window.parent.postMessage({hdWidget:{width:total}},'*');}catch(e){}} async function tick(){try{const r=await fetch('/data.json',{cache:'no-store'});const d=await r.json();window.__last=d;render(d);}catch(e){document.getElementById('w').innerHTML='<span class="err">no data</span>';}} let tm=null;function arm(){if(tm)return;tm=setInterval(tick,R);}function disarm(){if(tm){clearInterval(tm);tm=null;}} document.addEventListener('visibilitychange',()=>{if(document.hidden)disarm();else{tick();arm();}});
bin/hydrogen-widget-marks.pyinstall.shpackage.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-vscode",- "version": "1.1.70",+ "version": "1.1.71", "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.70",+ "version": "1.1.71", "license": "PROPRIETARY", "visibility": "public", "hero": {@@ -141,4 +141,4 @@ "adom-vscode-extensions", "adom-vscode-modes" ]-}+}
widgets/README.md+10@@ -20,6 +20,16 @@ Your plan's rate-limit window as percent used, plus the secondary window when yo At most once every three minutes per provider, whatever the page polls. The page pauses while the Hydrogen window is hidden or minimized and reads once on return. An upstream error doubles the interval up to 15 minutes, then recovers. The sign-in file is re-read only when it changes. +## Two widgets from one repo: how that works++A repo ships one `hydrogen-widget.json`. It is either a single widget object, or, as here,+`{"widgets": [ {...}, {...} ]}` with several. Each entry has its own `id`, name, mark, launch+command and port; they share the package (one `install`), the page you are reading (one+`docs`), and the helper. The curated list on adom/hydrogen-bootstrap names a widget by+`wiki_repo` plus `id`, so the two appear as separate rows in the pulldown and open and close+independently. This repo does it because both widgets read an AI sign-in that already lives+next to the editor extension; a repo with one thing to show ships one entry.+ ## The files in this repo that make them widgets ```