@telora/daemon 0.18.78 → 0.18.80

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.
Files changed (42) hide show
  1. package/build-info.json +4 -3
  2. package/dist/backends/resolve.d.ts +19 -5
  3. package/dist/backends/resolve.d.ts.map +1 -1
  4. package/dist/backends/resolve.js +23 -37
  5. package/dist/backends/resolve.js.map +1 -1
  6. package/dist/directive/directive-dispatch.d.ts.map +1 -1
  7. package/dist/directive/directive-dispatch.js +2 -0
  8. package/dist/directive/directive-dispatch.js.map +1 -1
  9. package/dist/directive/directive-queue.d.ts +10 -0
  10. package/dist/directive/directive-queue.d.ts.map +1 -1
  11. package/dist/directive/directive-queue.js.map +1 -1
  12. package/dist/focus-executor.d.ts +57 -5
  13. package/dist/focus-executor.d.ts.map +1 -1
  14. package/dist/focus-executor.js +124 -21
  15. package/dist/focus-executor.js.map +1 -1
  16. package/dist/host-control/index.d.ts +3 -3
  17. package/dist/host-control/index.d.ts.map +1 -1
  18. package/dist/host-control/index.js +2 -2
  19. package/dist/host-control/index.js.map +1 -1
  20. package/dist/host-control/load.d.ts +30 -1
  21. package/dist/host-control/load.d.ts.map +1 -1
  22. package/dist/host-control/load.js +47 -6
  23. package/dist/host-control/load.js.map +1 -1
  24. package/dist/host-control/swap-manager.d.ts +38 -0
  25. package/dist/host-control/swap-manager.d.ts.map +1 -1
  26. package/dist/host-control/swap-manager.js +60 -0
  27. package/dist/host-control/swap-manager.js.map +1 -1
  28. package/dist/model-resolution.d.ts +60 -18
  29. package/dist/model-resolution.d.ts.map +1 -1
  30. package/dist/model-resolution.js +75 -19
  31. package/dist/model-resolution.js.map +1 -1
  32. package/dist/queries/local-models.d.ts +10 -0
  33. package/dist/queries/local-models.d.ts.map +1 -1
  34. package/dist/queries/local-models.js +2 -0
  35. package/dist/queries/local-models.js.map +1 -1
  36. package/dist/queries/schemas.d.ts +4 -0
  37. package/dist/queries/schemas.d.ts.map +1 -1
  38. package/dist/queries/schemas.js +5 -0
  39. package/dist/queries/schemas.js.map +1 -1
  40. package/dist/types/workflow.d.ts +13 -0
  41. package/dist/types/workflow.d.ts.map +1 -1
  42. package/package.json +1 -1
@@ -19,7 +19,7 @@
19
19
  * inside `ensureLoaded`) so Delivery 3 can replace the fixed `DEFAULT_MAX_SEQ_LENGTH`
20
20
  * floor with a computed safe value without re-architecting this module.
21
21
  */
22
- import { hostGet, hostPost, HostControlError, HOST_CONTROL_ERROR_UNREACHABLE } from './client.js';
22
+ import { hostGet, hostPost, hostRootFromBaseUrl, HostControlError, HOST_CONTROL_ERROR_UNREACHABLE } from './client.js';
23
23
  import { readLoadableCatalog } from './catalog.js';
24
24
  /**
25
25
  * The control surface lives under `/v1` -- the SAME segment the stored baseUrl
@@ -30,6 +30,22 @@ import { readLoadableCatalog } from './catalog.js';
30
30
  export const HOST_CONTROL_LOAD_PATH = '/load';
31
31
  export const HOST_CONTROL_UNLOAD_PATH = '/unload';
32
32
  export const HOST_CONTROL_STATUS_PATH = '/status';
33
+ /**
34
+ * The PRIMARY readiness endpoint, under the host ROOT (NOT `/v1`) -- the same
35
+ * `/api/...` control surface the catalog (`/api/models/local`) and sizing
36
+ * (`/api/system/hardware`) reads already live on. The live host (Unsloth Studio)
37
+ * reports readiness here as `{ status, active_model, active_requests }` and does
38
+ * NOT serve `/v1/status`. `getStatus` reads this FIRST and only falls back to the
39
+ * legacy OpenAI-style `/v1/status` (`HOST_CONTROL_STATUS_PATH`, appended to the
40
+ * `/v1` baseUrl) for hosts that expose that instead.
41
+ *
42
+ * Regression this closes: the readiness probe was pinned to `/v1/status` only.
43
+ * On a host that does not serve it, the probe failed, `normalizeStatus` read the
44
+ * absence as "nothing resident", `decideSwap` chose `load` for an ALREADY-resident
45
+ * model, and the readiness poll could never confirm -> a perpetual load-timeout
46
+ * that blocked every spawn for the focus.
47
+ */
48
+ export const HOST_CONTROL_MONITOR_PATH = '/api/inference/monitor';
33
49
  /**
34
50
  * Default max sequence length for a load. Sized at the live-proven 16384, which
35
51
  * clears codex's ~8k turn-1 context floor with headroom. NOTE: Delivery 3 will
@@ -84,8 +100,13 @@ function firstStringOrNull(obj, keys) {
84
100
  }
85
101
  return null;
86
102
  }
87
- /** Candidate keys carrying the currently-loaded model id on a `/v1/status` body. */
88
- const STATUS_LOADED_KEYS = ['model', 'id', 'loaded_model', 'loadedModel', 'model_id'];
103
+ /**
104
+ * Candidate keys carrying the currently-loaded model id on a readiness body.
105
+ * `active_model`/`activeModel` come FIRST because the live `/api/inference/monitor`
106
+ * surface reports the resident model under `active_model`; the rest cover the
107
+ * legacy `/v1/status` shape.
108
+ */
109
+ const STATUS_LOADED_KEYS = ['active_model', 'activeModel', 'model', 'id', 'loaded_model', 'loadedModel', 'model_id'];
89
110
  /** Candidate keys carrying a readiness signal on a `/v1/status` body. */
90
111
  const STATUS_READY_KEYS = ['status', 'state', 'ready'];
91
112
  /**
@@ -171,10 +192,30 @@ export async function unloadModel(baseUrl, apiKey, unloadTimeoutMs = HOST_CONTRO
171
192
  timeoutMs: unloadTimeoutMs,
172
193
  });
173
194
  }
174
- /** Read current host status (`GET /v1/status`), normalized to a typed shape. */
195
+ /**
196
+ * Read current host readiness, normalized to a typed shape. Reads the host-root
197
+ * `/api/inference/monitor` FIRST (the live control-surface readiness endpoint,
198
+ * peer of the `/api/...` catalog + sizing reads), then falls back to the legacy
199
+ * OpenAI-style `/v1/status` for hosts that only expose that.
200
+ *
201
+ * Fallback is keyed on the monitor endpoint ERRORING (absent / unreachable), NOT
202
+ * on an empty body: a host that answers `/api/inference/monitor` with HTTP 200 IS
203
+ * the control surface, so an empty body there means "nothing resident" and is
204
+ * trusted directly. Only a host that does not serve the endpoint at all (the GET
205
+ * throws) routes to the legacy probe. If BOTH fail the error propagates -- the
206
+ * caller skips the spawn for that tick rather than spawning against an unconfirmed
207
+ * model.
208
+ */
175
209
  export async function getStatus(baseUrl, apiKey) {
176
- const payload = await hostGet(controlUrl(baseUrl, HOST_CONTROL_STATUS_PATH), { apiKey });
177
- return normalizeStatus(payload);
210
+ const monitorUrl = `${hostRootFromBaseUrl(baseUrl)}${HOST_CONTROL_MONITOR_PATH}`;
211
+ try {
212
+ return normalizeStatus(await hostGet(monitorUrl, { apiKey }));
213
+ }
214
+ catch {
215
+ // Monitor endpoint absent/unreachable on this host -> legacy OpenAI-style probe.
216
+ const payload = await hostGet(controlUrl(baseUrl, HOST_CONTROL_STATUS_PATH), { apiKey });
217
+ return normalizeStatus(payload);
218
+ }
178
219
  }
179
220
  /**
180
221
  * Resolve a chosen local_models `model` id to the host's `/v1/load` target by
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/host-control/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/host-control/load.ts"],"names":[],"mappings":"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"}
@@ -91,4 +91,42 @@ export declare function claimResidentHost(args: {
91
91
  export declare function releaseHostByFocus(focusId: string): void;
92
92
  /** Test-only: clear the per-host swap registry between cases. */
93
93
  export declare function __resetHostSwapManager(): void;
94
+ /**
95
+ * Test-only: true when NO host entry references `focusId` (neither as a
96
+ * residency owner nor in the focus->root index). Lets a test assert the registry
97
+ * was fully reset after a failed/timed-out swap + teardown, without reaching into
98
+ * the private maps.
99
+ */
100
+ export declare function __hostSwapRegistryHasFocus(focusId: string): boolean;
101
+ /** A resolved per-pass local-model binding: which model on which host. */
102
+ export interface HostPassBinding {
103
+ pass: 'coding' | 'review';
104
+ /** The resolved local model id (the host's served model id). */
105
+ modelId: string;
106
+ /** The host base URL the pass routes to (the GPU host). */
107
+ baseUrl: string;
108
+ }
109
+ /**
110
+ * PURE: detect two DIFFERENT local models bound to passes that share one GPU
111
+ * host. Groups bindings by host ROOT (so `/v1`-suffixed vs root base URLs for the
112
+ * same host collapse together); a conflict exists when one root carries more than
113
+ * one distinct model id. Returns the offending root + the distinct models, or
114
+ * `{ conflict: false }`. No HTTP, no state -- unit-testable.
115
+ */
116
+ export declare function detectSingleHostModelConflict(bindings: HostPassBinding[]): {
117
+ conflict: true;
118
+ root: string;
119
+ models: string[];
120
+ } | {
121
+ conflict: false;
122
+ };
123
+ /**
124
+ * Process-level dedupe gate for the single-host conflict surfacing: returns true
125
+ * the FIRST time it is asked for a focus, false on every subsequent call within
126
+ * the run. Keeps a wedged conflict from re-escalating + re-logging every 30s
127
+ * poll while still raising it once so an operator sees it.
128
+ */
129
+ export declare function shouldSurfaceHostConflictOnce(focusId: string): boolean;
130
+ /** Test-only: clear the per-focus conflict-surfacing dedupe set. */
131
+ export declare function __resetHostConflictSurfacing(): void;
94
132
  //# sourceMappingURL=swap-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"swap-manager.d.ts","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAY3D,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAOxC,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC,GAAG,mBAAmB,CA8CtB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C,GAAG,mBAAmB,CAYtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxD;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C"}
1
+ {"version":3,"file":"swap-manager.d.ts","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAY3D,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAOxC,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC,GAAG,mBAAmB,CA8CtB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C,GAAG,mBAAmB,CAYtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxD;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMnE;AAWD,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,eAAe,EAAE,GAEzB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAClD;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,CAkBtB;AAKD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAItE;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
@@ -153,4 +153,64 @@ export function __resetHostSwapManager() {
153
153
  byRoot.clear();
154
154
  rootByFocus.clear();
155
155
  }
156
+ /**
157
+ * Test-only: true when NO host entry references `focusId` (neither as a
158
+ * residency owner nor in the focus->root index). Lets a test assert the registry
159
+ * was fully reset after a failed/timed-out swap + teardown, without reaching into
160
+ * the private maps.
161
+ */
162
+ export function __hostSwapRegistryHasFocus(focusId) {
163
+ if (rootByFocus.has(focusId))
164
+ return true;
165
+ for (const entry of byRoot.values()) {
166
+ if (entry.ownerFocusId === focusId)
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+ /**
172
+ * PURE: detect two DIFFERENT local models bound to passes that share one GPU
173
+ * host. Groups bindings by host ROOT (so `/v1`-suffixed vs root base URLs for the
174
+ * same host collapse together); a conflict exists when one root carries more than
175
+ * one distinct model id. Returns the offending root + the distinct models, or
176
+ * `{ conflict: false }`. No HTTP, no state -- unit-testable.
177
+ */
178
+ export function detectSingleHostModelConflict(bindings) {
179
+ const modelsByRoot = new Map();
180
+ for (const b of bindings) {
181
+ if (!b.modelId || !b.baseUrl)
182
+ continue;
183
+ const root = hostRootFromBaseUrl(b.baseUrl);
184
+ let set = modelsByRoot.get(root);
185
+ if (!set) {
186
+ set = new Set();
187
+ modelsByRoot.set(root, set);
188
+ }
189
+ set.add(b.modelId);
190
+ }
191
+ for (const [root, models] of modelsByRoot) {
192
+ if (models.size > 1) {
193
+ return { conflict: true, root, models: [...models] };
194
+ }
195
+ }
196
+ return { conflict: false };
197
+ }
198
+ /** focusId set -- surfacing is raised at most once per focus per daemon run. */
199
+ const surfacedHostConflictFocuses = new Set();
200
+ /**
201
+ * Process-level dedupe gate for the single-host conflict surfacing: returns true
202
+ * the FIRST time it is asked for a focus, false on every subsequent call within
203
+ * the run. Keeps a wedged conflict from re-escalating + re-logging every 30s
204
+ * poll while still raising it once so an operator sees it.
205
+ */
206
+ export function shouldSurfaceHostConflictOnce(focusId) {
207
+ if (surfacedHostConflictFocuses.has(focusId))
208
+ return false;
209
+ surfacedHostConflictFocuses.add(focusId);
210
+ return true;
211
+ }
212
+ /** Test-only: clear the per-focus conflict-surfacing dedupe set. */
213
+ export function __resetHostConflictSurfacing() {
214
+ surfacedHostConflictFocuses.clear();
215
+ }
156
216
  //# sourceMappingURL=swap-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"swap-manager.js","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAsBlD,qFAAqF;AACrF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;AAChD,oFAAoF;AACpF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK;QAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,IAO/B;IACC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,mBAAmB,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;YACtC,gDAAgD;YAChD,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;YACvE,CAAC;YACD,4EAA4E;YAC5E,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAChD,4DAA4D;YAC5D,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,kBAAkB,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACrC,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,MAAM,KAAK,GAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACtF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,KAAK,OAAO,EAAE,CAAC,IAAI,CACjB,GAAG,EAAE;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,yEAAyE;QACzE,IAAI,OAAO,KAAK,KAAK;YAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;IACjD,CAAC,EACD,CAAC,GAAY,EAAE,EAAE;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;YACzB,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAiD,CAAC;QAC5D,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACnE,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAKjC;IACC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,QAAQ,IAAI,QAAQ,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QAClD,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;QACvE,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;IAC7C,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"swap-manager.js","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,73 @@
1
1
  /**
2
- * Unified team-model precedence.
2
+ * Unified per-pass model precedence -- the ONE place the daemon decides which
3
+ * model, engine, and local model a focus team launches under, applied
4
+ * identically at initial spawn AND at stage respawn.
3
5
  *
4
- * ONE rule decides which model a focus team launches under, applied
5
- * identically at initial spawn AND at stage respawn:
6
+ * There are THREE per-pass axes, and all three resolve under the SAME ordering:
6
7
  *
7
- * focus override (pipeline_config.model, if set)
8
- * -> stage directive model
9
- * -> CLI default (null = let the backend pick)
8
+ * Focus override -> Workflow stage directive -> Default
10
9
  *
11
- * The workflow stage's directive model is the source of truth for "how this
12
- * stage thinks"; the focus selector is an explicit opt-in OVERRIDE. A null
13
- * focus override means "inherit the per-stage workflow model" -- the focus is
14
- * NOT pinning anything, so the stage model wins. A null stage model in turn
15
- * falls through to the CLI default.
10
+ * - cloud model id (focus pipeline_config.model | directive.model | CLI default/null)
11
+ * - engine (focus engine_override.{pass} | directive.engine | product/org/global default)
12
+ * - local model (focus local_model_overrides.{pass} | directive.localModel | none/null)
13
+ *
14
+ * The workflow stage's directive is the source of truth for "how this stage
15
+ * thinks"; the focus selector is an explicit opt-in OVERRIDE. An unset focus
16
+ * axis means "inherit the per-stage workflow value" -- the focus is NOT pinning
17
+ * anything on that axis, so the stage value wins. An unset stage value in turn
18
+ * falls through to the axis default (null cloud model = let the backend pick;
19
+ * null local model = no local model; engine = product -> org -> global default).
16
20
  *
17
21
  * Engine-compat filtering (never pass a Claude id to a cloud Codex engine,
18
22
  * route a local-Codex pass to its selected model) is applied by the callers
19
- * BEFORE the two inputs reach this helper -- see focus-executor's
20
- * selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out
21
- * an input the resolved backend cannot run. This helper is the single,
22
- * pure precedence step they all funnel through, so spawn and respawn can
23
- * never diverge on ordering.
23
+ * BEFORE the inputs reach the cloud-model helper -- see focus-executor's
24
+ * selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out an
25
+ * input the resolved backend cannot run. These helpers are the single, pure
26
+ * precedence steps every caller funnels through, so spawn and respawn can never
27
+ * diverge on ordering, and the precedence lives in exactly one module per the
28
+ * no-invisible-cascading principle.
29
+ */
30
+ /**
31
+ * First non-empty trimmed candidate, or null. The shared precedence primitive:
32
+ * Focus > Workflow > Default is expressed as `firstPresent(focus, workflow,
33
+ * ...defaults)`. A blank/whitespace string is treated as "unset" so an empty
34
+ * override does not shadow the inherited value.
24
35
  */
36
+ export declare function firstPresent(...candidates: Array<string | null | undefined>): string | null;
25
37
  /**
26
- * Resolve the effective team model from the focus override and the stage
38
+ * Resolve the effective CLOUD MODEL id from the focus override and the stage
27
39
  * directive model, both already filtered for backend compatibility by the
28
- * caller. Pure -- the entire precedence contract lives in this one expression.
40
+ * caller. Pure -- Focus > Workflow > Default (null = let the backend pick).
29
41
  */
30
42
  export declare function resolveTeamModel(focusOverrideModel: string | null | undefined, stageDirectiveModel: string | null | undefined): string | null;
43
+ /**
44
+ * Resolve the effective LOCAL MODEL ref (a `local_models` row id) from the focus
45
+ * per-pass override and the stage directive's localModel, under the SAME
46
+ * Focus > Workflow > Default ordering. Default is null -- no local model means
47
+ * the pass runs on the resolved engine's own default model. Pure + testable.
48
+ */
49
+ export declare function resolveLocalModelRefPrecedence(focusOverrideLocalRef: string | null | undefined, stageDirectiveLocalRef: string | null | undefined): string | null;
50
+ /** Where a resolved engine id came from (always logged by the caller). */
51
+ export type EngineResolutionSource = 'focus-override' | 'stage-directive' | 'product-default' | 'org-default' | 'default';
52
+ /**
53
+ * Resolve the ENGINE id (and its source) for a pass under the unified
54
+ * precedence. The engine axis has the same Focus > Workflow head as the other
55
+ * two, then keeps the existing product -> org -> global default tail (so engine
56
+ * behavior is NOT regressed for focuses that never used a stage directive):
57
+ *
58
+ * Focus override -> Workflow stage -> Product default -> Org default -> Global
59
+ *
60
+ * Pure -- the registered-backend guard (never spawn on an unknown engine) stays
61
+ * in the caller (`resolveBackend`), which validates the returned candidate.
62
+ */
63
+ export declare function resolveEngineId(args: {
64
+ focusOverrideEngine: string | null | undefined;
65
+ stageDirectiveEngine: string | null | undefined;
66
+ productDefault: string | null | undefined;
67
+ orgDefault: string | null | undefined;
68
+ globalDefault: string;
69
+ }): {
70
+ engineId: string;
71
+ source: EngineResolutionSource;
72
+ };
31
73
  //# sourceMappingURL=model-resolution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7C,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7C,MAAM,GAAG,IAAI,CAEf"}
1
+ {"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAC9C,MAAM,GAAG,IAAI,CAOf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7C,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7C,MAAM,GAAG,IAAI,CAEf;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,qBAAqB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChD,sBAAsB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChD,MAAM,GAAG,IAAI,CAEf;AAED,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,GAC9B,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,SAAS,CAAC;AAEd;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAUvD"}
@@ -1,33 +1,89 @@
1
1
  /**
2
- * Unified team-model precedence.
2
+ * Unified per-pass model precedence -- the ONE place the daemon decides which
3
+ * model, engine, and local model a focus team launches under, applied
4
+ * identically at initial spawn AND at stage respawn.
3
5
  *
4
- * ONE rule decides which model a focus team launches under, applied
5
- * identically at initial spawn AND at stage respawn:
6
+ * There are THREE per-pass axes, and all three resolve under the SAME ordering:
6
7
  *
7
- * focus override (pipeline_config.model, if set)
8
- * -> stage directive model
9
- * -> CLI default (null = let the backend pick)
8
+ * Focus override -> Workflow stage directive -> Default
10
9
  *
11
- * The workflow stage's directive model is the source of truth for "how this
12
- * stage thinks"; the focus selector is an explicit opt-in OVERRIDE. A null
13
- * focus override means "inherit the per-stage workflow model" -- the focus is
14
- * NOT pinning anything, so the stage model wins. A null stage model in turn
15
- * falls through to the CLI default.
10
+ * - cloud model id (focus pipeline_config.model | directive.model | CLI default/null)
11
+ * - engine (focus engine_override.{pass} | directive.engine | product/org/global default)
12
+ * - local model (focus local_model_overrides.{pass} | directive.localModel | none/null)
13
+ *
14
+ * The workflow stage's directive is the source of truth for "how this stage
15
+ * thinks"; the focus selector is an explicit opt-in OVERRIDE. An unset focus
16
+ * axis means "inherit the per-stage workflow value" -- the focus is NOT pinning
17
+ * anything on that axis, so the stage value wins. An unset stage value in turn
18
+ * falls through to the axis default (null cloud model = let the backend pick;
19
+ * null local model = no local model; engine = product -> org -> global default).
16
20
  *
17
21
  * Engine-compat filtering (never pass a Claude id to a cloud Codex engine,
18
22
  * route a local-Codex pass to its selected model) is applied by the callers
19
- * BEFORE the two inputs reach this helper -- see focus-executor's
20
- * selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out
21
- * an input the resolved backend cannot run. This helper is the single,
22
- * pure precedence step they all funnel through, so spawn and respawn can
23
- * never diverge on ordering.
23
+ * BEFORE the inputs reach the cloud-model helper -- see focus-executor's
24
+ * selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out an
25
+ * input the resolved backend cannot run. These helpers are the single, pure
26
+ * precedence steps every caller funnels through, so spawn and respawn can never
27
+ * diverge on ordering, and the precedence lives in exactly one module per the
28
+ * no-invisible-cascading principle.
29
+ */
30
+ /**
31
+ * First non-empty trimmed candidate, or null. The shared precedence primitive:
32
+ * Focus > Workflow > Default is expressed as `firstPresent(focus, workflow,
33
+ * ...defaults)`. A blank/whitespace string is treated as "unset" so an empty
34
+ * override does not shadow the inherited value.
24
35
  */
36
+ export function firstPresent(...candidates) {
37
+ for (const candidate of candidates) {
38
+ if (typeof candidate !== 'string')
39
+ continue;
40
+ const trimmed = candidate.trim();
41
+ if (trimmed.length > 0)
42
+ return trimmed;
43
+ }
44
+ return null;
45
+ }
25
46
  /**
26
- * Resolve the effective team model from the focus override and the stage
47
+ * Resolve the effective CLOUD MODEL id from the focus override and the stage
27
48
  * directive model, both already filtered for backend compatibility by the
28
- * caller. Pure -- the entire precedence contract lives in this one expression.
49
+ * caller. Pure -- Focus > Workflow > Default (null = let the backend pick).
29
50
  */
30
51
  export function resolveTeamModel(focusOverrideModel, stageDirectiveModel) {
31
- return focusOverrideModel ?? stageDirectiveModel ?? null;
52
+ return firstPresent(focusOverrideModel, stageDirectiveModel);
53
+ }
54
+ /**
55
+ * Resolve the effective LOCAL MODEL ref (a `local_models` row id) from the focus
56
+ * per-pass override and the stage directive's localModel, under the SAME
57
+ * Focus > Workflow > Default ordering. Default is null -- no local model means
58
+ * the pass runs on the resolved engine's own default model. Pure + testable.
59
+ */
60
+ export function resolveLocalModelRefPrecedence(focusOverrideLocalRef, stageDirectiveLocalRef) {
61
+ return firstPresent(focusOverrideLocalRef, stageDirectiveLocalRef);
62
+ }
63
+ /**
64
+ * Resolve the ENGINE id (and its source) for a pass under the unified
65
+ * precedence. The engine axis has the same Focus > Workflow head as the other
66
+ * two, then keeps the existing product -> org -> global default tail (so engine
67
+ * behavior is NOT regressed for focuses that never used a stage directive):
68
+ *
69
+ * Focus override -> Workflow stage -> Product default -> Org default -> Global
70
+ *
71
+ * Pure -- the registered-backend guard (never spawn on an unknown engine) stays
72
+ * in the caller (`resolveBackend`), which validates the returned candidate.
73
+ */
74
+ export function resolveEngineId(args) {
75
+ const focus = firstPresent(args.focusOverrideEngine);
76
+ if (focus)
77
+ return { engineId: focus, source: 'focus-override' };
78
+ const stage = firstPresent(args.stageDirectiveEngine);
79
+ if (stage)
80
+ return { engineId: stage, source: 'stage-directive' };
81
+ const product = firstPresent(args.productDefault);
82
+ if (product)
83
+ return { engineId: product, source: 'product-default' };
84
+ const org = firstPresent(args.orgDefault);
85
+ if (org)
86
+ return { engineId: org, source: 'org-default' };
87
+ return { engineId: args.globalDefault, source: 'default' };
32
88
  }
33
89
  //# sourceMappingURL=model-resolution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolution.js","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,kBAA6C,EAC7C,mBAA8C;IAE9C,OAAO,kBAAkB,IAAI,mBAAmB,IAAI,IAAI,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"model-resolution.js","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAG,UAA4C;IAE/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,kBAA6C,EAC7C,mBAA8C;IAE9C,OAAO,YAAY,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,qBAAgD,EAChD,sBAAiD;IAEjD,OAAO,YAAY,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AACrE,CAAC;AAUD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAM/B;IACC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrD,IAAI,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtD,IAAI,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,GAAG;QAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACzD,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC"}
@@ -14,6 +14,16 @@ export interface LocalModelCoordinates {
14
14
  model: string;
15
15
  wireApi: string | null;
16
16
  engine: string | null;
17
+ /**
18
+ * Host-control sizing hints (D3). The approximate resident weights size (MB)
19
+ * and the model's native context window (tokens), when the registry row
20
+ * carries them. Both null when unset -- the sizer then reserves no weights and
21
+ * clamps native context to the global ceiling (legacy behavior). These feed
22
+ * resolveSafeLoadOptions so a cold-GPU load reserves the weights before sizing
23
+ * the KV cache instead of over-allocating max_seq_length.
24
+ */
25
+ modelSizeMb: number | null;
26
+ nativeContext: number | null;
17
27
  }
18
28
  /**
19
29
  * Resolve a local_models row by id to its coordinates, org-scoped server-side.
@@ -1 +1 @@
1
- {"version":3,"file":"local-models.d.ts","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAgB/F;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOtF;AAED,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAOtF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,6DAA6D;AAC7D,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhB"}
1
+ {"version":3,"file":"local-models.d.ts","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAkB/F;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOtF;AAED,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAOtF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,6DAA6D;AAC7D,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhB"}
@@ -25,6 +25,8 @@ export async function getLocalModel(localModelId) {
25
25
  model: m.model,
26
26
  wireApi: m.wireApi ?? null,
27
27
  engine: m.engine ?? null,
28
+ modelSizeMb: m.modelSizeMb ?? null,
29
+ nativeContext: m.nativeContext ?? null,
28
30
  };
29
31
  }
30
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"local-models.js","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,sCAAsC,GACvC,MAAM,cAAc,CAAC;AAYtB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,YAAoB;IACtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,wBAAwB,EACxB,wBAAwB,EACxB,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;KACzB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IAC5D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,+BAA+B,EAC/B,8BAA8B,EAC9B,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AAC/B,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,uCAAuC,EACvC,sCAAsC,EACtC,EAAE,CACH,CAAC;IACF,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAK7C;IACC,MAAM,OAAO,CAAC,kCAAkC,EAAE;QAChD,kBAAkB,EAAE,MAAM,CAAC,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"local-models.js","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,sCAAsC,GACvC,MAAM,cAAc,CAAC;AAsBtB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,YAAoB;IACtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,wBAAwB,EACxB,wBAAwB,EACxB,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;QACxB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;QAClC,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,IAAI;KACvC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IAC5D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,+BAA+B,EAC/B,8BAA8B,EAC9B,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AAC/B,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,uCAAuC,EACvC,sCAAsC,EACtC,EAAE,CACH,CAAC;IACF,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAK7C;IACC,MAAM,OAAO,CAAC,kCAAkC,EAAE;QAChD,kBAAkB,EAAE,MAAM,CAAC,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC;AACL,CAAC"}
@@ -417,6 +417,8 @@ export declare const LocalModelSchema: z.ZodObject<{
417
417
  model: z.ZodString;
418
418
  wireApi: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
419
419
  engine: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
420
+ modelSizeMb: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
421
+ nativeContext: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
420
422
  }, z.core.$loose>;
421
423
  export declare const LocalModelResponseSchema: z.ZodObject<{
422
424
  localModel: z.ZodNullable<z.ZodObject<{
@@ -426,6 +428,8 @@ export declare const LocalModelResponseSchema: z.ZodObject<{
426
428
  model: z.ZodString;
427
429
  wireApi: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
428
430
  engine: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
431
+ modelSizeMb: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
432
+ nativeContext: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
429
433
  }, z.core.$loose>>;
430
434
  }, z.core.$loose>;
431
435
  export declare const LocalModelSecretResponseSchema: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/queries/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/queries/schemas.ts"],"names":[],"mappings":"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"}
@@ -253,6 +253,11 @@ export const LocalModelSchema = z.object({
253
253
  model: z.string(),
254
254
  wireApi: nullableString.optional().default(null),
255
255
  engine: nullableString.optional().default(null),
256
+ // Host-control sizing hints (D3): approximate weights size (MB) + native
257
+ // context (tokens). Null/absent => the sizer reserves no weights / clamps to
258
+ // the global ceiling (legacy behavior).
259
+ modelSizeMb: z.number().nullable().optional().default(null),
260
+ nativeContext: z.number().nullable().optional().default(null),
256
261
  }).passthrough();
257
262
  export const LocalModelResponseSchema = z.object({
258
263
  // null => no such model in the org; the daemon falls back to engine default.