conductor-remote 1.54.0 → 1.54.2

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/dist/index.html CHANGED
@@ -13,7 +13,7 @@
13
13
  <title>Conductor Remote</title>
14
14
  <!-- Runs before the module bundle so it can catch a stale shell that fails to boot. -->
15
15
  <script src="/self-heal.js"></script>
16
- <script type="module" crossorigin src="/assets/index-CSpn2y0z.js"></script>
16
+ <script type="module" crossorigin src="/assets/index-Dg1cJ9Gi.js"></script>
17
17
  <link rel="stylesheet" crossorigin href="/assets/index-TXYaWW0Q.css">
18
18
  <link rel="manifest" href="/manifest.webmanifest"></head>
19
19
  <body>
package/dist/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(s[o])return;let l={};const t=e=>i(e,o),c={module:{uri:o},exports:l,require:t};s[o]=Promise.all(n.map(e=>c[e]||t(e))).then(e=>(r(...e),l))}}define(["./workbox-9c191d2f"],function(e){"use strict";importScripts("/push-sw.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"self-heal.js",revision:"49bd63adb25a09341f8d2610e8bd3c76"},{url:"push-sw.js",revision:"e1e682e2e5e88fa03b7808ae9db8e098"},{url:"index.html",revision:"41161a1248affb7483c88058e475e58d"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/index-TXYaWW0Q.css",revision:null},{url:"assets/index-CSpn2y0z.js",revision:null},{url:"apple-touch-icon.png",revision:"2b9301416b880d45d4bb655f2600d1f2"},{url:"icon-192.png",revision:"c5e01ac58768627e18ee7b8b6a9239ef"},{url:"icon-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon-maskable-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon.svg",revision:"c1aee186821798733dd477e69a0ef243"},{url:"manifest.webmanifest",revision:"cf88fbc5755108a7fe0616fa160a8a15"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api\//]}))});
1
+ if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(s[o])return;let l={};const c=e=>i(e,o),t={module:{uri:o},exports:l,require:c};s[o]=Promise.all(n.map(e=>t[e]||c(e))).then(e=>(r(...e),l))}}define(["./workbox-9c191d2f"],function(e){"use strict";importScripts("/push-sw.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"self-heal.js",revision:"49bd63adb25a09341f8d2610e8bd3c76"},{url:"push-sw.js",revision:"e1e682e2e5e88fa03b7808ae9db8e098"},{url:"index.html",revision:"c1e816c05899b3526575286617f5e4cb"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/index-TXYaWW0Q.css",revision:null},{url:"assets/index-Dg1cJ9Gi.js",revision:null},{url:"apple-touch-icon.png",revision:"2b9301416b880d45d4bb655f2600d1f2"},{url:"icon-192.png",revision:"c5e01ac58768627e18ee7b8b6a9239ef"},{url:"icon-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon-maskable-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon.svg",revision:"c1aee186821798733dd477e69a0ef243"},{url:"manifest.webmanifest",revision:"cf88fbc5755108a7fe0616fa160a8a15"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api\//]}))});
@@ -59,21 +59,31 @@ export function modelPickerLabel(label) {
59
59
  return label.endsWith(' NEW') ? label.slice(0, -4) : label;
60
60
  }
61
61
  /**
62
- * Group picker labels by model family rather than by a maintained list of model
63
- * names. The labels come from Conductor at run time, including provider-qualified
64
- * OpenCode names, so a hard-coded catalog would age badly.
62
+ * Conductor's labels omit the agent for its built-in models. Keep them in the
63
+ * same provider sections as Conductor's picker: Claude Code, Codex, Cursor,
64
+ * and OpenCode. An unknown label belongs in Other until Conductor gives us a
65
+ * provider-qualified name or this small mapping gains its family.
65
66
  */
66
- function modelFamily(model) {
67
- const label = modelPickerLabel(model).trim();
67
+ function modelProvider(model) {
68
+ const label = modelPickerLabel(model).trim().toLowerCase();
69
+ if (label.startsWith('anthropic/'))
70
+ return 'Anthropic';
71
+ if (label.startsWith('openai/'))
72
+ return 'OpenAI';
73
+ if (label.startsWith('cursor/'))
74
+ return 'Cursor';
75
+ if (/^(claude|fable|haiku|opus|sonnet)(?:[\s-]|$)/.test(label))
76
+ return 'Anthropic';
77
+ if (/^(?:auto|gpt|o[1-9]|\d)(?:[\s.-]|$)/.test(label))
78
+ return 'OpenAI';
79
+ if (/^(composer|grok)(?:[\s-]|$)/.test(label))
80
+ return 'Cursor';
81
+ if (/^opencode(?:-go)?\//.test(label))
82
+ return 'OpenCode';
68
83
  const slash = label.indexOf('/');
69
84
  if (slash > 0)
70
85
  return label.slice(0, slash);
71
- const words = label.split(/[\s-]+/).filter(Boolean);
72
- if (!words.length)
73
- return 'Other';
74
- if (words[0].toLowerCase() === 'claude' && words[1])
75
- return words[1];
76
- return words[0];
86
+ return 'Other';
77
87
  }
78
88
  /** Stable, case-insensitive grouping shared by every model selector. */
79
89
  export function groupModelPickerLabels(models) {
@@ -82,11 +92,11 @@ export function groupModelPickerLabels(models) {
82
92
  const model = modelPickerLabel(raw).trim();
83
93
  if (!model)
84
94
  continue;
85
- const family = modelFamily(model);
86
- const entries = grouped.get(family) ?? [];
95
+ const provider = modelProvider(model);
96
+ const entries = grouped.get(provider) ?? [];
87
97
  if (!entries.includes(model))
88
98
  entries.push(model);
89
- grouped.set(family, entries);
99
+ grouped.set(provider, entries);
90
100
  }
91
101
  return [...grouped]
92
102
  .map(([label, entries]) => ({ label, models: entries.sort((a, b) => a.localeCompare(b)) }))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conductor-remote",
3
- "version": "1.54.0",
3
+ "version": "1.54.2",
4
4
  "type": "module",
5
5
  "packageManager": "yarn@4.15.0",
6
6
  "description": "Phone control panel for local Conductor agents. Reads ride SQLite + git; prompts ride Conductor's own dispatch path.",