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.66
10 files changed
+32−14
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.66: widget pages have two layouts chosen by the slot height: rows stacked in the full Title Bar (like the meter), one horizontal row when it is compact.+ v1.1.65: the Claude usage widget reads the structured limits list, so model-scoped weekly limits (Fable limit 93 percent) show with their own name and the provider severity colour, next to the session and weekly bars. v1.1.64: the usage widgets ask their provider at most once every three minutes, pause while the window is hidden, back off on errors (doubling to 15 minutes), and re-read the sign-in file only when it changes.
VERSION+1−1@@ -1 +1 @@-1.1.65+1.1.66
bin/adom-vscode⋯ 1 unchanged line ⋯
bin/hydrogen-widget-claude-usagebin/hydrogen-widget-codex-usagebin/hydrogen-widget-lib.py+26−10@@ -10,20 +10,36 @@ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer PAGE = """<!doctype html><meta charset="utf-8"><title>%(title)s</title> <style> html,body{margin:0;height:100%%;background:transparent;color:#e6ebef;font-family:"Familjen Grotesk","Satoshi",system-ui,sans-serif;overflow:hidden}-/* Sized by the slot's height, so the same page fits the full Title Bar (30 px) and the compact one (20 px). */-.w{display:flex;align-items:center;gap:calc(20vh);height:100vh;padding:0 calc(20vh);white-space:nowrap;font-size:clamp(7px,37vh,12px);line-height:1.2}-.lbl{opacity:.75;font-size:clamp(6px,30vh,9px);letter-spacing:.04em;text-transform:uppercase}-.bar{position:relative;width:clamp(24px,130vh,40px);height:clamp(4px,20vh,6px);border-radius:3px;background:rgba(255,255,255,.14);overflow:hidden}+/* Two layouts, chosen by the slot's height (the Title Bar, full or compact), like the meter:+ tall = rows stacked to use the height; short = one horizontal row. */+.w{display:flex;align-items:center;height:100vh;padding:0 5px;gap:5px;white-space:nowrap}+.mark{display:inline-flex;flex:none;width:15px;height:15px}.mark svg{width:100%%;height:100%%}+.rows{display:flex;align-items:center;gap:8px;min-width:0;flex:1}+.row{display:flex;align-items:center;gap:4px}+.lbl{opacity:.75;letter-spacing:.04em;text-transform:uppercase}+.bar{position:relative;border-radius:3px;background:rgba(255,255,255,.14);overflow:hidden} .bar i{position:absolute;left:0;top:0;bottom:0;background:#19b3a6;border-radius:3px} .bar.warn i{background:#f0a060}.bar.hot i{background:#e5484d}-.v{font-variant-numeric:tabular-nums;min-width:2.4em;text-align:right}-.big{font-size:clamp(9px,47vh,14px);font-weight:600;font-variant-numeric:tabular-nums}-.err{color:#f0a060;font-size:clamp(7px,33vh,10px)}-.mark{display:inline-flex;flex:none;width:clamp(10px,55vh,17px);height:clamp(10px,55vh,17px)}.mark svg{width:100%%;height:100%%}-</style><body><div class="w"><span class="mark" style="color:%(mark_color)s">%(mark_svg)s</span><div class="w" id="w" style="padding-left:0">%(title)s…</div></div>+.v{font-variant-numeric:tabular-nums;text-align:right}+.big{font-weight:600;font-variant-numeric:tabular-nums}+.err{color:#f0a060}+@media (max-height:33px){+ .w{font-size:clamp(7px,37vh,12px);line-height:1.2}+ .lbl{font-size:clamp(6px,30vh,9px)}.bar{width:clamp(24px,130vh,40px);height:clamp(4px,20vh,6px)}.v{min-width:2.4em}+ .big{font-size:clamp(9px,47vh,14px)}.err{font-size:clamp(7px,33vh,10px)}+ .mark{width:clamp(10px,55vh,17px);height:clamp(10px,55vh,17px)}+}+@media (min-height:34px){+ .w{font-size:9px;line-height:1;padding:2px 6px}+ .rows{flex-direction:column;align-items:stretch;justify-content:center;gap:2px}+ .row{display:grid;grid-template-columns:2.8em 1fr 2.6em;gap:5px}+ .lbl{font-size:7.5px}.bar{width:auto;height:5px}.v{font-size:9px}+ .big{font-size:15px}.err{font-size:9px}+}+</style><body><div class="w"><span class="mark" style="color:%(mark_color)s">%(mark_svg)s</span><div class="rows" id="w">%(title)s…</div></div> <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="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>`;}+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>`;} async function tick(){try{const r=await fetch('/data.json',{cache:'no-store'});const d=await r.json();document.getElementById('w').innerHTML=%(render_js)s;}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.65",+ "version": "1.1.66", "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.65",+ "version": "1.1.66", "license": "PROPRIETARY", "visibility": "public", "hero": {@@ -141,4 +141,4 @@ "adom-vscode-extensions", "adom-vscode-modes" ]-}+}