@closedrouter/cli 1.1.13 → 1.1.14

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/README.md CHANGED
@@ -155,7 +155,7 @@ On macOS, Claude uses a compatible Electron runtime installed by Cockpit, or the
155
155
 
156
156
  Antigravity uses the CCPA envelope conversion documented in `~/Projects/antigravity-mods`. The launcher briefly opens a loopback Node inspector and installs its language-server hook. A browser debugger replaces the launched renderer's model catalog with native custom-model entries, then detaches. Each entry carries a distinct routing alias and a positive context and output budget. The picker lists the supported pool models, and selecting one changes inference routing. App bundles and global hook configuration are not modified. Unsupported launcher builds fail before opening; `--open-only` remains available.
157
157
 
158
- Cursor, Antigravity, and the hooked Claude view display the colored ClosedRouter logo beside model names. The active chat-box mark has a brief electric arc every five seconds and immediately on hover or keyboard focus. Reduced-motion preferences keep the mark static; hidden windows pause the effect. Codex uses its custom model catalog and provider labels. Launch requests also carry the configured model ID in system context so native client identity prompts do not misidentify the underlying model. The relay resolves the requested model on each turn and preserves tools and streamed responses. Unsupported model IDs are rejected before forwarding. Catalogs are snapshots of the models available to the platform key at launch; provider quotas can change during a session.
158
+ Cursor, Antigravity, and the hooked Claude view display the colored ClosedRouter logo beside model names. White-core neon-blue lightning bolts orbit the active chat model button in 3D for a brief pass every five seconds, and immediately on hover or keyboard focus. Reduced-motion preferences keep the mark static; hidden windows pause the effect. Codex uses its custom model catalog and provider labels. Launch requests also carry the configured model ID in system context so native client identity prompts do not misidentify the underlying model. The relay resolves the requested model on each turn and preserves tools and streamed responses. Unsupported model IDs are rejected before forwarding. Catalogs are snapshots of the models available to the platform key at launch; provider quotas can change during a session.
159
159
 
160
160
  macOS app bundles are discovered in `/Applications` and `~/Applications`. Common Windows and Linux installation paths are checked, with `--path` available for other installations. Live tests verified Cursor, Claude's Code and Cowork views, and Antigravity inference through ClosedRouter. Cursor and Antigravity switched between `gpt-5-nano` and `gpt-4.1-nano` in their native pickers. Cowork could answer through the gateway, but its workspace VM reported insufficient disk space on the test Mac; workspace actions were not verified. Gemma's full agent request previously received an upstream quota error. Desktop hooks fail closed when expected controllers change. See the [Codex provider configuration](https://developers.openai.com/codex/config-advanced) and [Electron fuse documentation](https://www.electronjs.org/docs/latest/tutorial/fuses) for configuration and inspector behavior.
161
161
 
@@ -1,6 +1,6 @@
1
1
  export declare const CLOSEDROUTER_LOGO = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><rect width=\"24\" height=\"24\" rx=\"6\" fill=\"#D4FE51\"/><path d=\"M16.68 7.82A6.5 6.5 0 1 0 16.68 16.18\" fill=\"none\" stroke=\"#04080A\" stroke-width=\"2.6\" stroke-linecap=\"round\"/><circle cx=\"18.2\" cy=\"12\" r=\"1.9\" fill=\"#04080A\"/></svg>";
2
2
  import type { DesktopAccountIdentity } from "./desktop-account";
3
- export declare const CLOSEDROUTER_ELECTRIC_CSS = "\n[data-closedrouter-logo]{position:relative;isolation:isolate}\n[data-closedrouter-electric]{position:absolute;inset:-3px;width:22px;height:22px;overflow:visible;pointer-events:none;opacity:0}\n@keyframes cr-electric-arc{0%,14%,100%{opacity:0;transform:translateX(-1px)}3%{opacity:.85}8%{opacity:.45;transform:translateX(1px)}12%{opacity:0}}\n@keyframes cr-electric-hover{0%,14%,100%{opacity:0;transform:translateX(1px)}2%{opacity:.95}7%{opacity:.55;transform:translateX(-1px)}12%{opacity:0}}\n@media(prefers-reduced-motion:no-preference){\n [data-closedrouter-supercharged] [data-closedrouter-electric]{animation:cr-electric-arc 5s linear infinite}\n button:hover>[data-closedrouter-supercharged] [data-closedrouter-electric],button:focus-visible>[data-closedrouter-supercharged] [data-closedrouter-electric]{animation-name:cr-electric-hover}\n}\nhtml[data-closedrouter-page-hidden] [data-closedrouter-electric]{animation-play-state:paused}\n";
3
+ export declare const CLOSEDROUTER_ELECTRIC_CSS = "\n[data-closedrouter-logo]{position:relative;isolation:isolate}\n[data-closedrouter-charged-control]{position:relative;perspective:420px;transform-style:preserve-3d;overflow:visible!important}\n[data-closedrouter-electric]{position:absolute;inset:0;pointer-events:none;transform-style:preserve-3d;opacity:0}\n[data-cr-lightning-orbit]{position:absolute;left:50%;top:50%;width:0;height:0;transform-style:preserve-3d}\n[data-cr-lightning-bolt]{position:absolute;width:30px;height:44px;left:-15px;top:-22px;overflow:visible;filter:drop-shadow(0 0 3px #58caff) drop-shadow(0 0 7px #159aff)}\n[data-cr-lightning-bolt=\"front\"]{transform:translateX(var(--cr-lightning-radius,70px)) rotateY(30deg)}\n[data-cr-lightning-bolt=\"back\"]{transform:rotateY(180deg) translateX(var(--cr-lightning-radius,70px)) rotateZ(24deg)}\n@keyframes cr-electric-depth{0%{opacity:0;transform:rotateX(22deg) rotateY(-150deg)}2%{opacity:1}8%{opacity:1;transform:rotateX(22deg) rotateY(25deg)}16%{opacity:.85;transform:rotateX(22deg) rotateY(210deg)}20%,100%{opacity:0;transform:rotateX(22deg) rotateY(210deg)}}\n@keyframes cr-electric-hover{0%{opacity:.1;transform:rotateX(-18deg) rotateY(-150deg)}2%{opacity:1}8%{opacity:1;transform:rotateX(-18deg) rotateY(25deg)}16%{opacity:.85;transform:rotateX(-18deg) rotateY(210deg)}20%,100%{opacity:0;transform:rotateX(-18deg) rotateY(210deg)}}\n@media(prefers-reduced-motion:no-preference){\n [data-cr-lightning-orbit]{animation:cr-electric-depth 5s linear infinite}\n [data-closedrouter-electric]{opacity:1}\n button:hover>[data-closedrouter-electric] [data-cr-lightning-orbit],button:focus-visible>[data-closedrouter-electric] [data-cr-lightning-orbit]{animation-name:cr-electric-hover}\n}\nhtml[data-closedrouter-page-hidden] [data-cr-lightning-orbit]{animation-play-state:paused}\n";
4
4
  /** Add the provider mark to native controls without changing click handlers,
5
5
  * model IDs, keyboard behavior, or the application's typography. */
6
6
  export declare function installModelBranding(models: string[], artwork: string, electricCss: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"model-branding.d.ts","sourceRoot":"","sources":["../../src/commands/model-branding.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,mUAAqS,CAAC;AACpU,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,eAAO,MAAM,yBAAyB,q7BAUrC,CAAC;AAEF;oEACoE;AACpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAqDjG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmC/F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAS5F"}
1
+ {"version":3,"file":"model-branding.d.ts","sourceRoot":"","sources":["../../src/commands/model-branding.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,mUAAqS,CAAC;AACpU,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,eAAO,MAAM,yBAAyB,6wDAgBrC,CAAC;AAEF;oEACoE;AACpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA0DjG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmC/F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAS5F"}
package/dist/index.js CHANGED
@@ -10264,14 +10264,20 @@ app.on('web-contents-created', (_event, contents) => {
10264
10264
  var CLOSEDROUTER_LOGO = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><rect width="24" height="24" rx="6" fill="#D4FE51"/><path d="M16.68 7.82A6.5 6.5 0 1 0 16.68 16.18" fill="none" stroke="#04080A" stroke-width="2.6" stroke-linecap="round"/><circle cx="18.2" cy="12" r="1.9" fill="#04080A"/></svg>';
10265
10265
  var CLOSEDROUTER_ELECTRIC_CSS = `
10266
10266
  [data-closedrouter-logo]{position:relative;isolation:isolate}
10267
- [data-closedrouter-electric]{position:absolute;inset:-3px;width:22px;height:22px;overflow:visible;pointer-events:none;opacity:0}
10268
- @keyframes cr-electric-arc{0%,14%,100%{opacity:0;transform:translateX(-1px)}3%{opacity:.85}8%{opacity:.45;transform:translateX(1px)}12%{opacity:0}}
10269
- @keyframes cr-electric-hover{0%,14%,100%{opacity:0;transform:translateX(1px)}2%{opacity:.95}7%{opacity:.55;transform:translateX(-1px)}12%{opacity:0}}
10267
+ [data-closedrouter-charged-control]{position:relative;perspective:420px;transform-style:preserve-3d;overflow:visible!important}
10268
+ [data-closedrouter-electric]{position:absolute;inset:0;pointer-events:none;transform-style:preserve-3d;opacity:0}
10269
+ [data-cr-lightning-orbit]{position:absolute;left:50%;top:50%;width:0;height:0;transform-style:preserve-3d}
10270
+ [data-cr-lightning-bolt]{position:absolute;width:30px;height:44px;left:-15px;top:-22px;overflow:visible;filter:drop-shadow(0 0 3px #58caff) drop-shadow(0 0 7px #159aff)}
10271
+ [data-cr-lightning-bolt="front"]{transform:translateX(var(--cr-lightning-radius,70px)) rotateY(30deg)}
10272
+ [data-cr-lightning-bolt="back"]{transform:rotateY(180deg) translateX(var(--cr-lightning-radius,70px)) rotateZ(24deg)}
10273
+ @keyframes cr-electric-depth{0%{opacity:0;transform:rotateX(22deg) rotateY(-150deg)}2%{opacity:1}8%{opacity:1;transform:rotateX(22deg) rotateY(25deg)}16%{opacity:.85;transform:rotateX(22deg) rotateY(210deg)}20%,100%{opacity:0;transform:rotateX(22deg) rotateY(210deg)}}
10274
+ @keyframes cr-electric-hover{0%{opacity:.1;transform:rotateX(-18deg) rotateY(-150deg)}2%{opacity:1}8%{opacity:1;transform:rotateX(-18deg) rotateY(25deg)}16%{opacity:.85;transform:rotateX(-18deg) rotateY(210deg)}20%,100%{opacity:0;transform:rotateX(-18deg) rotateY(210deg)}}
10270
10275
  @media(prefers-reduced-motion:no-preference){
10271
- [data-closedrouter-supercharged] [data-closedrouter-electric]{animation:cr-electric-arc 5s linear infinite}
10272
- button:hover>[data-closedrouter-supercharged] [data-closedrouter-electric],button:focus-visible>[data-closedrouter-supercharged] [data-closedrouter-electric]{animation-name:cr-electric-hover}
10276
+ [data-cr-lightning-orbit]{animation:cr-electric-depth 5s linear infinite}
10277
+ [data-closedrouter-electric]{opacity:1}
10278
+ button:hover>[data-closedrouter-electric] [data-cr-lightning-orbit],button:focus-visible>[data-closedrouter-electric] [data-cr-lightning-orbit]{animation-name:cr-electric-hover}
10273
10279
  }
10274
- html[data-closedrouter-page-hidden] [data-closedrouter-electric]{animation-play-state:paused}
10280
+ html[data-closedrouter-page-hidden] [data-cr-lightning-orbit]{animation-play-state:paused}
10275
10281
  `;
10276
10282
  function installModelBranding(models, artwork, electricCss) {
10277
10283
  if (document.querySelector("[data-closedrouter-branding]"))
@@ -10311,12 +10317,23 @@ function installModelBranding(models, artwork, electricCss) {
10311
10317
  logo.append(image);
10312
10318
  if (element.matches("button") && !element.closest('[role="menu"],[role="listbox"],[role="dialog"]') && document.querySelector('[contenteditable="true"],textarea')) {
10313
10319
  logo.dataset.closedrouterSupercharged = "true";
10314
- const arc = document.createElementNS("http://www.w3.org/2000/svg", "svg");
10315
- arc.setAttribute("viewBox", "0 0 24 24");
10316
- arc.setAttribute("aria-hidden", "true");
10317
- arc.setAttribute("data-closedrouter-electric", "true");
10318
- arc.innerHTML = '<path d="M1 8 6 5 3 12 8 9 M17 1 14 7 21 4 18 11 M20 16 16 19 22 20" fill="none" stroke="#D4FE51" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>';
10319
- logo.append(arc);
10320
+ element.dataset.closedrouterChargedControl = "true";
10321
+ element.style.setProperty("--cr-lightning-radius", `${Math.max(35, element.getBoundingClientRect().width / 2 + 10)}px`);
10322
+ const layer = document.createElement("span");
10323
+ layer.dataset.closedrouterElectric = "true";
10324
+ layer.setAttribute("aria-hidden", "true");
10325
+ const orbit = document.createElement("span");
10326
+ orbit.dataset.crLightningOrbit = "true";
10327
+ for (const position of ["front", "back"]) {
10328
+ const bolt = document.createElementNS("http://www.w3.org/2000/svg", "svg");
10329
+ bolt.setAttribute("viewBox", "0 0 30 44");
10330
+ bolt.setAttribute("data-cr-lightning-bolt", position);
10331
+ const path = "M23 2 11 13 19 15 5 30 13 29 7 42 M11 13 3 11 M19 15 27 23";
10332
+ bolt.innerHTML = `<path d="${path}" fill="none" stroke="#42bdff" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/><path d="${path}" fill="none" stroke="#f5fcff" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/>`;
10333
+ orbit.append(bolt);
10334
+ }
10335
+ layer.append(orbit);
10336
+ element.append(layer);
10320
10337
  }
10321
10338
  element.prepend(logo);
10322
10339
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@closedrouter/cli",
3
- "version": "1.1.13",
3
+ "version": "1.1.14",
4
4
  "description": "ClosedRouter CLI: Onboard and import local AI subscriptions and API keys into your shared token pool",
5
5
  "author": "ClosedRouter Contributors",
6
6
  "repository": {