@otto-code/brain 0.8.7 → 0.8.9

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 (61) hide show
  1. package/dist/cli.js +2 -1
  2. package/dist/commands/bench.js +19 -5
  3. package/dist/commands/catalog.d.ts +3 -0
  4. package/dist/commands/catalog.js +2 -0
  5. package/dist/commands/pull.d.ts +1 -0
  6. package/dist/commands/pull.js +47 -14
  7. package/dist/commands/repo-download.d.ts +14 -0
  8. package/dist/commands/repo-download.js +29 -0
  9. package/dist/commands/runtime.d.ts +3 -0
  10. package/dist/commands/runtime.js +65 -18
  11. package/dist/commands/search.d.ts +3 -0
  12. package/dist/commands/search.js +38 -17
  13. package/dist/config/builtin-hosting-profiles.d.ts +8 -0
  14. package/dist/config/builtin-hosting-profiles.js +32 -0
  15. package/dist/config/hosting-profiles.d.ts +33 -0
  16. package/dist/config/hosting-profiles.js +71 -0
  17. package/dist/config/index.d.ts +1 -0
  18. package/dist/config/index.js +1 -0
  19. package/dist/config/paths.d.ts +2 -0
  20. package/dist/config/paths.js +1 -0
  21. package/dist/config/profile-edit.d.ts +5 -3
  22. package/dist/config/profile-edit.js +134 -14
  23. package/dist/config/profiles.js +66 -3
  24. package/dist/config/schema.d.ts +998 -0
  25. package/dist/config/schema.js +79 -0
  26. package/dist/config/store.js +28 -16
  27. package/dist/gguf.d.ts +1 -0
  28. package/dist/gguf.js +1 -0
  29. package/dist/models/download.d.ts +7 -0
  30. package/dist/models/download.js +165 -17
  31. package/dist/models/enrich.d.ts +6 -19
  32. package/dist/models/enrich.js +138 -4
  33. package/dist/models/hf.d.ts +14 -1
  34. package/dist/models/hf.js +239 -6
  35. package/dist/models/index.d.ts +2 -2
  36. package/dist/models/index.js +8 -5
  37. package/dist/models/manage.d.ts +4 -0
  38. package/dist/models/manage.js +34 -4
  39. package/dist/models/scan.js +8 -42
  40. package/dist/ops/calibrate.d.ts +4 -1
  41. package/dist/ops/calibrate.js +10 -7
  42. package/dist/ops/sweep.d.ts +3 -1
  43. package/dist/ops/sweep.js +3 -3
  44. package/dist/runtime/args.d.ts +2 -2
  45. package/dist/runtime/args.js +18 -1
  46. package/dist/runtime/index.d.ts +8 -1
  47. package/dist/runtime/index.js +11 -1
  48. package/dist/runtime/managed.d.ts +40 -0
  49. package/dist/runtime/managed.js +146 -7
  50. package/dist/service/host-api.d.ts +20 -3
  51. package/dist/service/host-api.js +313 -20
  52. package/dist/service/router.d.ts +18 -0
  53. package/dist/service/router.js +89 -4
  54. package/dist/service/serve.js +221 -22
  55. package/dist/service/supervisor.d.ts +32 -4
  56. package/dist/service/supervisor.js +30 -6
  57. package/dist/tui/app.js +1 -1
  58. package/dist/types.d.ts +24 -0
  59. package/dist/vram.d.ts +3 -0
  60. package/dist/vram.js +24 -6
  61. package/package.json +1 -1
@@ -10,6 +10,10 @@ export declare const ProfileSchema: z.ZodObject<{
10
10
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
11
11
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
12
12
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
13
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
14
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
15
+ /** Derived component paths for the launcher; never accepted from clients. */
16
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
13
17
  contextSize: z.ZodNumber;
14
18
  cacheTypeK: z.ZodDefault<z.ZodString>;
15
19
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -19,13 +23,43 @@ export declare const ProfileSchema: z.ZodObject<{
19
23
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
20
24
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
21
25
  parallelSlots: z.ZodDefault<z.ZodNumber>;
26
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
27
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
28
+ /** Cleared only by a successful calibration of this saved model profile. */
29
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
22
30
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
23
31
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
24
32
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
33
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
34
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
35
+ /**
36
+ * Whether this model inherits its family's profile, disables profiles, or
37
+ * selects one itself. `inherit` is the default because it is what a profile
38
+ * stored before this field existed meant: the family default applied to
39
+ * every model in the family that had not overridden it. Defaulting to `off`
40
+ * would silently drop that default on every profile written by an older
41
+ * Brain. With no family default set, `inherit` resolves to nothing, which
42
+ * is exactly what `off` does, so the safe default costs nothing.
43
+ */
44
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
45
+ /** Derived at load time from the selected Brain-owned hosting profile. */
46
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
47
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
48
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
49
+ /**
50
+ * Derived at load time from the selected hosting profile's system-prompt
51
+ * addendum. The router injects it per request rather than the launcher
52
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
53
+ */
54
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
25
55
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
26
56
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
27
57
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
28
58
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
59
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
60
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
61
+ /** Derived component paths for the launcher; never accepted from clients. */
62
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
29
63
  contextSize: z.ZodNumber;
30
64
  cacheTypeK: z.ZodDefault<z.ZodString>;
31
65
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -35,13 +69,43 @@ export declare const ProfileSchema: z.ZodObject<{
35
69
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
36
70
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
37
71
  parallelSlots: z.ZodDefault<z.ZodNumber>;
72
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
73
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
74
+ /** Cleared only by a successful calibration of this saved model profile. */
75
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
38
76
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
39
77
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
40
78
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
79
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
80
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
81
+ /**
82
+ * Whether this model inherits its family's profile, disables profiles, or
83
+ * selects one itself. `inherit` is the default because it is what a profile
84
+ * stored before this field existed meant: the family default applied to
85
+ * every model in the family that had not overridden it. Defaulting to `off`
86
+ * would silently drop that default on every profile written by an older
87
+ * Brain. With no family default set, `inherit` resolves to nothing, which
88
+ * is exactly what `off` does, so the safe default costs nothing.
89
+ */
90
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
91
+ /** Derived at load time from the selected Brain-owned hosting profile. */
92
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
93
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
94
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
95
+ /**
96
+ * Derived at load time from the selected hosting profile's system-prompt
97
+ * addendum. The router injects it per request rather than the launcher
98
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
99
+ */
100
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
41
101
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
42
102
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
43
103
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
44
104
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
105
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
106
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
107
+ /** Derived component paths for the launcher; never accepted from clients. */
108
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
45
109
  contextSize: z.ZodNumber;
46
110
  cacheTypeK: z.ZodDefault<z.ZodString>;
47
111
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -51,11 +115,69 @@ export declare const ProfileSchema: z.ZodObject<{
51
115
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
52
116
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
53
117
  parallelSlots: z.ZodDefault<z.ZodNumber>;
118
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
119
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
120
+ /** Cleared only by a successful calibration of this saved model profile. */
121
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
54
122
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
55
123
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
56
124
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
125
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
126
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
127
+ /**
128
+ * Whether this model inherits its family's profile, disables profiles, or
129
+ * selects one itself. `inherit` is the default because it is what a profile
130
+ * stored before this field existed meant: the family default applied to
131
+ * every model in the family that had not overridden it. Defaulting to `off`
132
+ * would silently drop that default on every profile written by an older
133
+ * Brain. With no family default set, `inherit` resolves to nothing, which
134
+ * is exactly what `off` does, so the safe default costs nothing.
135
+ */
136
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
137
+ /** Derived at load time from the selected Brain-owned hosting profile. */
138
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
139
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
140
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
141
+ /**
142
+ * Derived at load time from the selected hosting profile's system-prompt
143
+ * addendum. The router injects it per request rather than the launcher
144
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
145
+ */
146
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
57
147
  }, z.ZodTypeAny, "passthrough">>;
58
148
  export type Profile = z.infer<typeof ProfileSchema>;
149
+ /**
150
+ * A named, Brain-owned inference composition. The template is intentionally
151
+ * text, rather than a user-owned path: remote Brains must be able to apply the
152
+ * same profile and no client is allowed to make llama-server read arbitrary
153
+ * files from its host.
154
+ */
155
+ export declare const HostingProfileSchema: z.ZodObject<{
156
+ id: z.ZodString;
157
+ name: z.ZodString;
158
+ family: z.ZodString;
159
+ description: z.ZodDefault<z.ZodString>;
160
+ template: z.ZodDefault<z.ZodNullable<z.ZodString>>;
161
+ systemPromptAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
162
+ templateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
163
+ }, "strict", z.ZodTypeAny, {
164
+ id: string;
165
+ name: string;
166
+ family: string;
167
+ description: string;
168
+ template: string | null;
169
+ systemPromptAddendum: string | null;
170
+ templateKwargs: Record<string, unknown>;
171
+ }, {
172
+ id: string;
173
+ name: string;
174
+ family: string;
175
+ description?: string | undefined;
176
+ template?: string | null | undefined;
177
+ systemPromptAddendum?: string | null | undefined;
178
+ templateKwargs?: Record<string, unknown> | undefined;
179
+ }>;
180
+ export type HostingProfile = z.infer<typeof HostingProfileSchema>;
59
181
  export declare const CalibrationSampleSchema: z.ZodObject<{
60
182
  contextSize: z.ZodNumber;
61
183
  deltaBytes: z.ZodNumber;
@@ -153,6 +275,10 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
153
275
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
154
276
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
155
277
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
278
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
279
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
280
+ /** Derived component paths for the launcher; never accepted from clients. */
281
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
156
282
  contextSize: z.ZodNumber;
157
283
  cacheTypeK: z.ZodDefault<z.ZodString>;
158
284
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -162,13 +288,43 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
162
288
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
163
289
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
164
290
  parallelSlots: z.ZodDefault<z.ZodNumber>;
291
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
292
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
293
+ /** Cleared only by a successful calibration of this saved model profile. */
294
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
165
295
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
166
296
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
167
297
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
298
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
299
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
300
+ /**
301
+ * Whether this model inherits its family's profile, disables profiles, or
302
+ * selects one itself. `inherit` is the default because it is what a profile
303
+ * stored before this field existed meant: the family default applied to
304
+ * every model in the family that had not overridden it. Defaulting to `off`
305
+ * would silently drop that default on every profile written by an older
306
+ * Brain. With no family default set, `inherit` resolves to nothing, which
307
+ * is exactly what `off` does, so the safe default costs nothing.
308
+ */
309
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
310
+ /** Derived at load time from the selected Brain-owned hosting profile. */
311
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
312
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
313
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
314
+ /**
315
+ * Derived at load time from the selected hosting profile's system-prompt
316
+ * addendum. The router injects it per request rather than the launcher
317
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
318
+ */
319
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
168
320
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
169
321
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
170
322
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
171
323
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
324
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
325
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
326
+ /** Derived component paths for the launcher; never accepted from clients. */
327
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
172
328
  contextSize: z.ZodNumber;
173
329
  cacheTypeK: z.ZodDefault<z.ZodString>;
174
330
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -178,13 +334,43 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
178
334
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
179
335
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
180
336
  parallelSlots: z.ZodDefault<z.ZodNumber>;
337
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
338
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
339
+ /** Cleared only by a successful calibration of this saved model profile. */
340
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
181
341
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
182
342
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
183
343
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
344
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
345
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
346
+ /**
347
+ * Whether this model inherits its family's profile, disables profiles, or
348
+ * selects one itself. `inherit` is the default because it is what a profile
349
+ * stored before this field existed meant: the family default applied to
350
+ * every model in the family that had not overridden it. Defaulting to `off`
351
+ * would silently drop that default on every profile written by an older
352
+ * Brain. With no family default set, `inherit` resolves to nothing, which
353
+ * is exactly what `off` does, so the safe default costs nothing.
354
+ */
355
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
356
+ /** Derived at load time from the selected Brain-owned hosting profile. */
357
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
358
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
359
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
360
+ /**
361
+ * Derived at load time from the selected hosting profile's system-prompt
362
+ * addendum. The router injects it per request rather than the launcher
363
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
364
+ */
365
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
184
366
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
185
367
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
186
368
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
187
369
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
370
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
371
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
372
+ /** Derived component paths for the launcher; never accepted from clients. */
373
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
188
374
  contextSize: z.ZodNumber;
189
375
  cacheTypeK: z.ZodDefault<z.ZodString>;
190
376
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -194,9 +380,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
194
380
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
195
381
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
196
382
  parallelSlots: z.ZodDefault<z.ZodNumber>;
383
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
384
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
385
+ /** Cleared only by a successful calibration of this saved model profile. */
386
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
197
387
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
198
388
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
199
389
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
390
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
391
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
392
+ /**
393
+ * Whether this model inherits its family's profile, disables profiles, or
394
+ * selects one itself. `inherit` is the default because it is what a profile
395
+ * stored before this field existed meant: the family default applied to
396
+ * every model in the family that had not overridden it. Defaulting to `off`
397
+ * would silently drop that default on every profile written by an older
398
+ * Brain. With no family default set, `inherit` resolves to nothing, which
399
+ * is exactly what `off` does, so the safe default costs nothing.
400
+ */
401
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
402
+ /** Derived at load time from the selected Brain-owned hosting profile. */
403
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
404
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
405
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
406
+ /**
407
+ * Derived at load time from the selected hosting profile's system-prompt
408
+ * addendum. The router injects it per request rather than the launcher
409
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
410
+ */
411
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
200
412
  }, z.ZodTypeAny, "passthrough">>>>;
201
413
  calibrations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
202
414
  kvBytesPerToken: z.ZodNumber;
@@ -274,6 +486,40 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
274
486
  measuredOn: z.ZodOptional<z.ZodString>;
275
487
  measuredLayers: z.ZodOptional<z.ZodNumber>;
276
488
  }, z.ZodTypeAny, "passthrough">>>>;
489
+ /** Named reusable profiles, scoped to this Brain rather than any client. */
490
+ hostingProfiles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
491
+ id: z.ZodString;
492
+ name: z.ZodString;
493
+ family: z.ZodString;
494
+ description: z.ZodDefault<z.ZodString>;
495
+ template: z.ZodDefault<z.ZodNullable<z.ZodString>>;
496
+ systemPromptAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
497
+ templateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
498
+ }, "strict", z.ZodTypeAny, {
499
+ id: string;
500
+ name: string;
501
+ family: string;
502
+ description: string;
503
+ template: string | null;
504
+ systemPromptAddendum: string | null;
505
+ templateKwargs: Record<string, unknown>;
506
+ }, {
507
+ id: string;
508
+ name: string;
509
+ family: string;
510
+ description?: string | undefined;
511
+ template?: string | null | undefined;
512
+ systemPromptAddendum?: string | null | undefined;
513
+ templateKwargs?: Record<string, unknown> | undefined;
514
+ }>>>;
515
+ /** Optional family default; individual model profiles may override it. */
516
+ familyHostingProfileIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
517
+ /**
518
+ * A saved edit made while that model was resident. It stays visible when
519
+ * the user leaves and revisits the model settings, and clears only after a
520
+ * successful fresh llama-server load of that model.
521
+ */
522
+ pendingReloadModelIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
277
523
  lastModelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
278
524
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
279
525
  version: z.ZodDefault<z.ZodLiteral<1>>;
@@ -281,6 +527,10 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
281
527
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
282
528
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
283
529
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
530
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
531
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
532
+ /** Derived component paths for the launcher; never accepted from clients. */
533
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
284
534
  contextSize: z.ZodNumber;
285
535
  cacheTypeK: z.ZodDefault<z.ZodString>;
286
536
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -290,13 +540,43 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
290
540
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
291
541
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
292
542
  parallelSlots: z.ZodDefault<z.ZodNumber>;
543
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
544
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
545
+ /** Cleared only by a successful calibration of this saved model profile. */
546
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
293
547
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
294
548
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
295
549
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
550
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
551
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
552
+ /**
553
+ * Whether this model inherits its family's profile, disables profiles, or
554
+ * selects one itself. `inherit` is the default because it is what a profile
555
+ * stored before this field existed meant: the family default applied to
556
+ * every model in the family that had not overridden it. Defaulting to `off`
557
+ * would silently drop that default on every profile written by an older
558
+ * Brain. With no family default set, `inherit` resolves to nothing, which
559
+ * is exactly what `off` does, so the safe default costs nothing.
560
+ */
561
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
562
+ /** Derived at load time from the selected Brain-owned hosting profile. */
563
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
564
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
565
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
566
+ /**
567
+ * Derived at load time from the selected hosting profile's system-prompt
568
+ * addendum. The router injects it per request rather than the launcher
569
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
570
+ */
571
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
296
572
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
297
573
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
298
574
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
299
575
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
576
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
577
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
578
+ /** Derived component paths for the launcher; never accepted from clients. */
579
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
300
580
  contextSize: z.ZodNumber;
301
581
  cacheTypeK: z.ZodDefault<z.ZodString>;
302
582
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -306,13 +586,43 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
306
586
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
307
587
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
308
588
  parallelSlots: z.ZodDefault<z.ZodNumber>;
589
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
590
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
591
+ /** Cleared only by a successful calibration of this saved model profile. */
592
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
309
593
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
310
594
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
311
595
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
596
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
597
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
598
+ /**
599
+ * Whether this model inherits its family's profile, disables profiles, or
600
+ * selects one itself. `inherit` is the default because it is what a profile
601
+ * stored before this field existed meant: the family default applied to
602
+ * every model in the family that had not overridden it. Defaulting to `off`
603
+ * would silently drop that default on every profile written by an older
604
+ * Brain. With no family default set, `inherit` resolves to nothing, which
605
+ * is exactly what `off` does, so the safe default costs nothing.
606
+ */
607
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
608
+ /** Derived at load time from the selected Brain-owned hosting profile. */
609
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
610
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
611
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
612
+ /**
613
+ * Derived at load time from the selected hosting profile's system-prompt
614
+ * addendum. The router injects it per request rather than the launcher
615
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
616
+ */
617
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
312
618
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
313
619
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
314
620
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
315
621
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
622
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
623
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
624
+ /** Derived component paths for the launcher; never accepted from clients. */
625
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
316
626
  contextSize: z.ZodNumber;
317
627
  cacheTypeK: z.ZodDefault<z.ZodString>;
318
628
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -322,9 +632,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
322
632
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
323
633
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
324
634
  parallelSlots: z.ZodDefault<z.ZodNumber>;
635
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
636
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
637
+ /** Cleared only by a successful calibration of this saved model profile. */
638
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
325
639
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
326
640
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
327
641
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
642
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
643
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
644
+ /**
645
+ * Whether this model inherits its family's profile, disables profiles, or
646
+ * selects one itself. `inherit` is the default because it is what a profile
647
+ * stored before this field existed meant: the family default applied to
648
+ * every model in the family that had not overridden it. Defaulting to `off`
649
+ * would silently drop that default on every profile written by an older
650
+ * Brain. With no family default set, `inherit` resolves to nothing, which
651
+ * is exactly what `off` does, so the safe default costs nothing.
652
+ */
653
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
654
+ /** Derived at load time from the selected Brain-owned hosting profile. */
655
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
656
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
657
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
658
+ /**
659
+ * Derived at load time from the selected hosting profile's system-prompt
660
+ * addendum. The router injects it per request rather than the launcher
661
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
662
+ */
663
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
328
664
  }, z.ZodTypeAny, "passthrough">>>>;
329
665
  calibrations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
330
666
  kvBytesPerToken: z.ZodNumber;
@@ -402,6 +738,40 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
402
738
  measuredOn: z.ZodOptional<z.ZodString>;
403
739
  measuredLayers: z.ZodOptional<z.ZodNumber>;
404
740
  }, z.ZodTypeAny, "passthrough">>>>;
741
+ /** Named reusable profiles, scoped to this Brain rather than any client. */
742
+ hostingProfiles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
743
+ id: z.ZodString;
744
+ name: z.ZodString;
745
+ family: z.ZodString;
746
+ description: z.ZodDefault<z.ZodString>;
747
+ template: z.ZodDefault<z.ZodNullable<z.ZodString>>;
748
+ systemPromptAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
749
+ templateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
750
+ }, "strict", z.ZodTypeAny, {
751
+ id: string;
752
+ name: string;
753
+ family: string;
754
+ description: string;
755
+ template: string | null;
756
+ systemPromptAddendum: string | null;
757
+ templateKwargs: Record<string, unknown>;
758
+ }, {
759
+ id: string;
760
+ name: string;
761
+ family: string;
762
+ description?: string | undefined;
763
+ template?: string | null | undefined;
764
+ systemPromptAddendum?: string | null | undefined;
765
+ templateKwargs?: Record<string, unknown> | undefined;
766
+ }>>>;
767
+ /** Optional family default; individual model profiles may override it. */
768
+ familyHostingProfileIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
769
+ /**
770
+ * A saved edit made while that model was resident. It stays visible when
771
+ * the user leaves and revisits the model settings, and clears only after a
772
+ * successful fresh llama-server load of that model.
773
+ */
774
+ pendingReloadModelIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
405
775
  lastModelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
406
776
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
407
777
  version: z.ZodDefault<z.ZodLiteral<1>>;
@@ -409,6 +779,10 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
409
779
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
410
780
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
411
781
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
782
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
783
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
784
+ /** Derived component paths for the launcher; never accepted from clients. */
785
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
412
786
  contextSize: z.ZodNumber;
413
787
  cacheTypeK: z.ZodDefault<z.ZodString>;
414
788
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -418,13 +792,43 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
418
792
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
419
793
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
420
794
  parallelSlots: z.ZodDefault<z.ZodNumber>;
795
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
796
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
797
+ /** Cleared only by a successful calibration of this saved model profile. */
798
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
421
799
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
422
800
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
423
801
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
802
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
803
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
804
+ /**
805
+ * Whether this model inherits its family's profile, disables profiles, or
806
+ * selects one itself. `inherit` is the default because it is what a profile
807
+ * stored before this field existed meant: the family default applied to
808
+ * every model in the family that had not overridden it. Defaulting to `off`
809
+ * would silently drop that default on every profile written by an older
810
+ * Brain. With no family default set, `inherit` resolves to nothing, which
811
+ * is exactly what `off` does, so the safe default costs nothing.
812
+ */
813
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
814
+ /** Derived at load time from the selected Brain-owned hosting profile. */
815
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
816
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
817
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
818
+ /**
819
+ * Derived at load time from the selected hosting profile's system-prompt
820
+ * addendum. The router injects it per request rather than the launcher
821
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
822
+ */
823
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
424
824
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
425
825
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
426
826
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
427
827
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
828
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
829
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
830
+ /** Derived component paths for the launcher; never accepted from clients. */
831
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
428
832
  contextSize: z.ZodNumber;
429
833
  cacheTypeK: z.ZodDefault<z.ZodString>;
430
834
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -434,13 +838,43 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
434
838
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
435
839
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
436
840
  parallelSlots: z.ZodDefault<z.ZodNumber>;
841
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
842
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
843
+ /** Cleared only by a successful calibration of this saved model profile. */
844
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
437
845
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
438
846
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
439
847
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
848
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
849
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
850
+ /**
851
+ * Whether this model inherits its family's profile, disables profiles, or
852
+ * selects one itself. `inherit` is the default because it is what a profile
853
+ * stored before this field existed meant: the family default applied to
854
+ * every model in the family that had not overridden it. Defaulting to `off`
855
+ * would silently drop that default on every profile written by an older
856
+ * Brain. With no family default set, `inherit` resolves to nothing, which
857
+ * is exactly what `off` does, so the safe default costs nothing.
858
+ */
859
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
860
+ /** Derived at load time from the selected Brain-owned hosting profile. */
861
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
862
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
863
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
864
+ /**
865
+ * Derived at load time from the selected hosting profile's system-prompt
866
+ * addendum. The router injects it per request rather than the launcher
867
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
868
+ */
869
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
440
870
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
441
871
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
442
872
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
443
873
  mmprojPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
874
+ /** Stable bundle component ids enabled for this load. Paths are re-derived. */
875
+ enabledComponents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
876
+ /** Derived component paths for the launcher; never accepted from clients. */
877
+ componentPaths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
444
878
  contextSize: z.ZodNumber;
445
879
  cacheTypeK: z.ZodDefault<z.ZodString>;
446
880
  cacheTypeV: z.ZodDefault<z.ZodString>;
@@ -450,9 +884,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
450
884
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
451
885
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
452
886
  parallelSlots: z.ZodDefault<z.ZodNumber>;
887
+ /** RoPE extension factor; 1 keeps the GGUF-native context window. */
888
+ contextMultiplier: z.ZodDefault<z.ZodNumber>;
889
+ /** Cleared only by a successful calibration of this saved model profile. */
890
+ calibrationRequired: z.ZodDefault<z.ZodBoolean>;
453
891
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
454
892
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
455
893
  extraArgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
894
+ /** The selected profile id when `hostingProfileMode` is `custom`. */
895
+ hostingProfileId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
896
+ /**
897
+ * Whether this model inherits its family's profile, disables profiles, or
898
+ * selects one itself. `inherit` is the default because it is what a profile
899
+ * stored before this field existed meant: the family default applied to
900
+ * every model in the family that had not overridden it. Defaulting to `off`
901
+ * would silently drop that default on every profile written by an older
902
+ * Brain. With no family default set, `inherit` resolves to nothing, which
903
+ * is exactly what `off` does, so the safe default costs nothing.
904
+ */
905
+ hostingProfileMode: z.ZodDefault<z.ZodEnum<["inherit", "off", "custom"]>>;
906
+ /** Derived at load time from the selected Brain-owned hosting profile. */
907
+ chatTemplateFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
908
+ /** Derived at load time; passed directly to llama-server's Jinja engine. */
909
+ chatTemplateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
910
+ /**
911
+ * Derived at load time from the selected hosting profile's system-prompt
912
+ * addendum. The router injects it per request rather than the launcher
913
+ * baking it into a CLI flag; see `hosting-profiles.ts` for why.
914
+ */
915
+ chatSystemAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
456
916
  }, z.ZodTypeAny, "passthrough">>>>;
457
917
  calibrations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
458
918
  kvBytesPerToken: z.ZodNumber;
@@ -530,6 +990,40 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
530
990
  measuredOn: z.ZodOptional<z.ZodString>;
531
991
  measuredLayers: z.ZodOptional<z.ZodNumber>;
532
992
  }, z.ZodTypeAny, "passthrough">>>>;
993
+ /** Named reusable profiles, scoped to this Brain rather than any client. */
994
+ hostingProfiles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
995
+ id: z.ZodString;
996
+ name: z.ZodString;
997
+ family: z.ZodString;
998
+ description: z.ZodDefault<z.ZodString>;
999
+ template: z.ZodDefault<z.ZodNullable<z.ZodString>>;
1000
+ systemPromptAddendum: z.ZodDefault<z.ZodNullable<z.ZodString>>;
1001
+ templateKwargs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1002
+ }, "strict", z.ZodTypeAny, {
1003
+ id: string;
1004
+ name: string;
1005
+ family: string;
1006
+ description: string;
1007
+ template: string | null;
1008
+ systemPromptAddendum: string | null;
1009
+ templateKwargs: Record<string, unknown>;
1010
+ }, {
1011
+ id: string;
1012
+ name: string;
1013
+ family: string;
1014
+ description?: string | undefined;
1015
+ template?: string | null | undefined;
1016
+ systemPromptAddendum?: string | null | undefined;
1017
+ templateKwargs?: Record<string, unknown> | undefined;
1018
+ }>>>;
1019
+ /** Optional family default; individual model profiles may override it. */
1020
+ familyHostingProfileIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
1021
+ /**
1022
+ * A saved edit made while that model was resident. It stays visible when
1023
+ * the user leaves and revisits the model settings, and clears only after a
1024
+ * successful fresh llama-server load of that model.
1025
+ */
1026
+ pendingReloadModelIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
533
1027
  lastModelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
534
1028
  }, z.ZodTypeAny, "passthrough">>;
535
1029
  export type ProfilesStore = z.infer<typeof ProfilesStoreSchema>;
@@ -808,7 +1302,11 @@ export type BrainConfig = z.infer<typeof BrainConfigSchema>;
808
1302
  export declare const DEFAULT_BRAIN_CONFIG: BrainConfig;
809
1303
  export declare const CatalogModelSchema: z.ZodObject<{
810
1304
  id: z.ZodString;
1305
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1306
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
811
1307
  name: z.ZodString;
1308
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1309
+ family: z.ZodOptional<z.ZodString>;
812
1310
  publisher: z.ZodOptional<z.ZodString>;
813
1311
  hfRepo: z.ZodString;
814
1312
  quant: z.ZodString;
@@ -824,9 +1322,51 @@ export declare const CatalogModelSchema: z.ZodObject<{
824
1322
  tier: z.ZodOptional<z.ZodString>;
825
1323
  why: z.ZodOptional<z.ZodString>;
826
1324
  status: z.ZodOptional<z.ZodString>;
1325
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1326
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1327
+ id: z.ZodString;
1328
+ label: z.ZodString;
1329
+ description: z.ZodString;
1330
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1331
+ hfRepo: z.ZodOptional<z.ZodString>;
1332
+ file: z.ZodString;
1333
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1334
+ required: z.ZodDefault<z.ZodBoolean>;
1335
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1336
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1337
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1338
+ }, "strict", z.ZodTypeAny, {
1339
+ id: string;
1340
+ description: string;
1341
+ label: string;
1342
+ role: "vision_projector" | "speculative_drafter";
1343
+ file: string;
1344
+ required: boolean;
1345
+ defaultDownload: boolean;
1346
+ defaultLoad: boolean;
1347
+ hfRepo?: string | undefined;
1348
+ bytes?: number | null | undefined;
1349
+ minRuntimeBuild?: number | undefined;
1350
+ }, {
1351
+ id: string;
1352
+ description: string;
1353
+ label: string;
1354
+ role: "vision_projector" | "speculative_drafter";
1355
+ file: string;
1356
+ hfRepo?: string | undefined;
1357
+ bytes?: number | null | undefined;
1358
+ required?: boolean | undefined;
1359
+ defaultDownload?: boolean | undefined;
1360
+ defaultLoad?: boolean | undefined;
1361
+ minRuntimeBuild?: number | undefined;
1362
+ }>, "many">>;
827
1363
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
828
1364
  id: z.ZodString;
1365
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1366
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
829
1367
  name: z.ZodString;
1368
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1369
+ family: z.ZodOptional<z.ZodString>;
830
1370
  publisher: z.ZodOptional<z.ZodString>;
831
1371
  hfRepo: z.ZodString;
832
1372
  quant: z.ZodString;
@@ -842,9 +1382,51 @@ export declare const CatalogModelSchema: z.ZodObject<{
842
1382
  tier: z.ZodOptional<z.ZodString>;
843
1383
  why: z.ZodOptional<z.ZodString>;
844
1384
  status: z.ZodOptional<z.ZodString>;
1385
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1386
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1387
+ id: z.ZodString;
1388
+ label: z.ZodString;
1389
+ description: z.ZodString;
1390
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1391
+ hfRepo: z.ZodOptional<z.ZodString>;
1392
+ file: z.ZodString;
1393
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1394
+ required: z.ZodDefault<z.ZodBoolean>;
1395
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1396
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1397
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1398
+ }, "strict", z.ZodTypeAny, {
1399
+ id: string;
1400
+ description: string;
1401
+ label: string;
1402
+ role: "vision_projector" | "speculative_drafter";
1403
+ file: string;
1404
+ required: boolean;
1405
+ defaultDownload: boolean;
1406
+ defaultLoad: boolean;
1407
+ hfRepo?: string | undefined;
1408
+ bytes?: number | null | undefined;
1409
+ minRuntimeBuild?: number | undefined;
1410
+ }, {
1411
+ id: string;
1412
+ description: string;
1413
+ label: string;
1414
+ role: "vision_projector" | "speculative_drafter";
1415
+ file: string;
1416
+ hfRepo?: string | undefined;
1417
+ bytes?: number | null | undefined;
1418
+ required?: boolean | undefined;
1419
+ defaultDownload?: boolean | undefined;
1420
+ defaultLoad?: boolean | undefined;
1421
+ minRuntimeBuild?: number | undefined;
1422
+ }>, "many">>;
845
1423
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
846
1424
  id: z.ZodString;
1425
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1426
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
847
1427
  name: z.ZodString;
1428
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1429
+ family: z.ZodOptional<z.ZodString>;
848
1430
  publisher: z.ZodOptional<z.ZodString>;
849
1431
  hfRepo: z.ZodString;
850
1432
  quant: z.ZodString;
@@ -860,6 +1442,44 @@ export declare const CatalogModelSchema: z.ZodObject<{
860
1442
  tier: z.ZodOptional<z.ZodString>;
861
1443
  why: z.ZodOptional<z.ZodString>;
862
1444
  status: z.ZodOptional<z.ZodString>;
1445
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1446
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1447
+ id: z.ZodString;
1448
+ label: z.ZodString;
1449
+ description: z.ZodString;
1450
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1451
+ hfRepo: z.ZodOptional<z.ZodString>;
1452
+ file: z.ZodString;
1453
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1454
+ required: z.ZodDefault<z.ZodBoolean>;
1455
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1456
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1457
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1458
+ }, "strict", z.ZodTypeAny, {
1459
+ id: string;
1460
+ description: string;
1461
+ label: string;
1462
+ role: "vision_projector" | "speculative_drafter";
1463
+ file: string;
1464
+ required: boolean;
1465
+ defaultDownload: boolean;
1466
+ defaultLoad: boolean;
1467
+ hfRepo?: string | undefined;
1468
+ bytes?: number | null | undefined;
1469
+ minRuntimeBuild?: number | undefined;
1470
+ }, {
1471
+ id: string;
1472
+ description: string;
1473
+ label: string;
1474
+ role: "vision_projector" | "speculative_drafter";
1475
+ file: string;
1476
+ hfRepo?: string | undefined;
1477
+ bytes?: number | null | undefined;
1478
+ required?: boolean | undefined;
1479
+ defaultDownload?: boolean | undefined;
1480
+ defaultLoad?: boolean | undefined;
1481
+ minRuntimeBuild?: number | undefined;
1482
+ }>, "many">>;
863
1483
  }, z.ZodTypeAny, "passthrough">>;
864
1484
  export type CatalogModel = z.infer<typeof CatalogModelSchema>;
865
1485
  export declare const CatalogSchema: z.ZodObject<{
@@ -869,7 +1489,11 @@ export declare const CatalogSchema: z.ZodObject<{
869
1489
  systemRamBytes: z.ZodOptional<z.ZodNumber>;
870
1490
  models: z.ZodDefault<z.ZodArray<z.ZodObject<{
871
1491
  id: z.ZodString;
1492
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1493
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
872
1494
  name: z.ZodString;
1495
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1496
+ family: z.ZodOptional<z.ZodString>;
873
1497
  publisher: z.ZodOptional<z.ZodString>;
874
1498
  hfRepo: z.ZodString;
875
1499
  quant: z.ZodString;
@@ -885,9 +1509,51 @@ export declare const CatalogSchema: z.ZodObject<{
885
1509
  tier: z.ZodOptional<z.ZodString>;
886
1510
  why: z.ZodOptional<z.ZodString>;
887
1511
  status: z.ZodOptional<z.ZodString>;
1512
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1513
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1514
+ id: z.ZodString;
1515
+ label: z.ZodString;
1516
+ description: z.ZodString;
1517
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1518
+ hfRepo: z.ZodOptional<z.ZodString>;
1519
+ file: z.ZodString;
1520
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1521
+ required: z.ZodDefault<z.ZodBoolean>;
1522
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1523
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1524
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1525
+ }, "strict", z.ZodTypeAny, {
1526
+ id: string;
1527
+ description: string;
1528
+ label: string;
1529
+ role: "vision_projector" | "speculative_drafter";
1530
+ file: string;
1531
+ required: boolean;
1532
+ defaultDownload: boolean;
1533
+ defaultLoad: boolean;
1534
+ hfRepo?: string | undefined;
1535
+ bytes?: number | null | undefined;
1536
+ minRuntimeBuild?: number | undefined;
1537
+ }, {
1538
+ id: string;
1539
+ description: string;
1540
+ label: string;
1541
+ role: "vision_projector" | "speculative_drafter";
1542
+ file: string;
1543
+ hfRepo?: string | undefined;
1544
+ bytes?: number | null | undefined;
1545
+ required?: boolean | undefined;
1546
+ defaultDownload?: boolean | undefined;
1547
+ defaultLoad?: boolean | undefined;
1548
+ minRuntimeBuild?: number | undefined;
1549
+ }>, "many">>;
888
1550
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
889
1551
  id: z.ZodString;
1552
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1553
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
890
1554
  name: z.ZodString;
1555
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1556
+ family: z.ZodOptional<z.ZodString>;
891
1557
  publisher: z.ZodOptional<z.ZodString>;
892
1558
  hfRepo: z.ZodString;
893
1559
  quant: z.ZodString;
@@ -903,9 +1569,51 @@ export declare const CatalogSchema: z.ZodObject<{
903
1569
  tier: z.ZodOptional<z.ZodString>;
904
1570
  why: z.ZodOptional<z.ZodString>;
905
1571
  status: z.ZodOptional<z.ZodString>;
1572
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1573
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1574
+ id: z.ZodString;
1575
+ label: z.ZodString;
1576
+ description: z.ZodString;
1577
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1578
+ hfRepo: z.ZodOptional<z.ZodString>;
1579
+ file: z.ZodString;
1580
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1581
+ required: z.ZodDefault<z.ZodBoolean>;
1582
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1583
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1584
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1585
+ }, "strict", z.ZodTypeAny, {
1586
+ id: string;
1587
+ description: string;
1588
+ label: string;
1589
+ role: "vision_projector" | "speculative_drafter";
1590
+ file: string;
1591
+ required: boolean;
1592
+ defaultDownload: boolean;
1593
+ defaultLoad: boolean;
1594
+ hfRepo?: string | undefined;
1595
+ bytes?: number | null | undefined;
1596
+ minRuntimeBuild?: number | undefined;
1597
+ }, {
1598
+ id: string;
1599
+ description: string;
1600
+ label: string;
1601
+ role: "vision_projector" | "speculative_drafter";
1602
+ file: string;
1603
+ hfRepo?: string | undefined;
1604
+ bytes?: number | null | undefined;
1605
+ required?: boolean | undefined;
1606
+ defaultDownload?: boolean | undefined;
1607
+ defaultLoad?: boolean | undefined;
1608
+ minRuntimeBuild?: number | undefined;
1609
+ }>, "many">>;
906
1610
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
907
1611
  id: z.ZodString;
1612
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1613
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
908
1614
  name: z.ZodString;
1615
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1616
+ family: z.ZodOptional<z.ZodString>;
909
1617
  publisher: z.ZodOptional<z.ZodString>;
910
1618
  hfRepo: z.ZodString;
911
1619
  quant: z.ZodString;
@@ -921,6 +1629,44 @@ export declare const CatalogSchema: z.ZodObject<{
921
1629
  tier: z.ZodOptional<z.ZodString>;
922
1630
  why: z.ZodOptional<z.ZodString>;
923
1631
  status: z.ZodOptional<z.ZodString>;
1632
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1633
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1634
+ id: z.ZodString;
1635
+ label: z.ZodString;
1636
+ description: z.ZodString;
1637
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1638
+ hfRepo: z.ZodOptional<z.ZodString>;
1639
+ file: z.ZodString;
1640
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1641
+ required: z.ZodDefault<z.ZodBoolean>;
1642
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1643
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1644
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1645
+ }, "strict", z.ZodTypeAny, {
1646
+ id: string;
1647
+ description: string;
1648
+ label: string;
1649
+ role: "vision_projector" | "speculative_drafter";
1650
+ file: string;
1651
+ required: boolean;
1652
+ defaultDownload: boolean;
1653
+ defaultLoad: boolean;
1654
+ hfRepo?: string | undefined;
1655
+ bytes?: number | null | undefined;
1656
+ minRuntimeBuild?: number | undefined;
1657
+ }, {
1658
+ id: string;
1659
+ description: string;
1660
+ label: string;
1661
+ role: "vision_projector" | "speculative_drafter";
1662
+ file: string;
1663
+ hfRepo?: string | undefined;
1664
+ bytes?: number | null | undefined;
1665
+ required?: boolean | undefined;
1666
+ defaultDownload?: boolean | undefined;
1667
+ defaultLoad?: boolean | undefined;
1668
+ minRuntimeBuild?: number | undefined;
1669
+ }>, "many">>;
924
1670
  }, z.ZodTypeAny, "passthrough">>, "many">>;
925
1671
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
926
1672
  version: z.ZodDefault<z.ZodLiteral<1>>;
@@ -929,7 +1675,11 @@ export declare const CatalogSchema: z.ZodObject<{
929
1675
  systemRamBytes: z.ZodOptional<z.ZodNumber>;
930
1676
  models: z.ZodDefault<z.ZodArray<z.ZodObject<{
931
1677
  id: z.ZodString;
1678
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1679
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
932
1680
  name: z.ZodString;
1681
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1682
+ family: z.ZodOptional<z.ZodString>;
933
1683
  publisher: z.ZodOptional<z.ZodString>;
934
1684
  hfRepo: z.ZodString;
935
1685
  quant: z.ZodString;
@@ -945,9 +1695,51 @@ export declare const CatalogSchema: z.ZodObject<{
945
1695
  tier: z.ZodOptional<z.ZodString>;
946
1696
  why: z.ZodOptional<z.ZodString>;
947
1697
  status: z.ZodOptional<z.ZodString>;
1698
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1699
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1700
+ id: z.ZodString;
1701
+ label: z.ZodString;
1702
+ description: z.ZodString;
1703
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1704
+ hfRepo: z.ZodOptional<z.ZodString>;
1705
+ file: z.ZodString;
1706
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1707
+ required: z.ZodDefault<z.ZodBoolean>;
1708
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1709
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1710
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1711
+ }, "strict", z.ZodTypeAny, {
1712
+ id: string;
1713
+ description: string;
1714
+ label: string;
1715
+ role: "vision_projector" | "speculative_drafter";
1716
+ file: string;
1717
+ required: boolean;
1718
+ defaultDownload: boolean;
1719
+ defaultLoad: boolean;
1720
+ hfRepo?: string | undefined;
1721
+ bytes?: number | null | undefined;
1722
+ minRuntimeBuild?: number | undefined;
1723
+ }, {
1724
+ id: string;
1725
+ description: string;
1726
+ label: string;
1727
+ role: "vision_projector" | "speculative_drafter";
1728
+ file: string;
1729
+ hfRepo?: string | undefined;
1730
+ bytes?: number | null | undefined;
1731
+ required?: boolean | undefined;
1732
+ defaultDownload?: boolean | undefined;
1733
+ defaultLoad?: boolean | undefined;
1734
+ minRuntimeBuild?: number | undefined;
1735
+ }>, "many">>;
948
1736
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
949
1737
  id: z.ZodString;
1738
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1739
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
950
1740
  name: z.ZodString;
1741
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1742
+ family: z.ZodOptional<z.ZodString>;
951
1743
  publisher: z.ZodOptional<z.ZodString>;
952
1744
  hfRepo: z.ZodString;
953
1745
  quant: z.ZodString;
@@ -963,9 +1755,51 @@ export declare const CatalogSchema: z.ZodObject<{
963
1755
  tier: z.ZodOptional<z.ZodString>;
964
1756
  why: z.ZodOptional<z.ZodString>;
965
1757
  status: z.ZodOptional<z.ZodString>;
1758
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1759
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1760
+ id: z.ZodString;
1761
+ label: z.ZodString;
1762
+ description: z.ZodString;
1763
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1764
+ hfRepo: z.ZodOptional<z.ZodString>;
1765
+ file: z.ZodString;
1766
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1767
+ required: z.ZodDefault<z.ZodBoolean>;
1768
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1769
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1770
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1771
+ }, "strict", z.ZodTypeAny, {
1772
+ id: string;
1773
+ description: string;
1774
+ label: string;
1775
+ role: "vision_projector" | "speculative_drafter";
1776
+ file: string;
1777
+ required: boolean;
1778
+ defaultDownload: boolean;
1779
+ defaultLoad: boolean;
1780
+ hfRepo?: string | undefined;
1781
+ bytes?: number | null | undefined;
1782
+ minRuntimeBuild?: number | undefined;
1783
+ }, {
1784
+ id: string;
1785
+ description: string;
1786
+ label: string;
1787
+ role: "vision_projector" | "speculative_drafter";
1788
+ file: string;
1789
+ hfRepo?: string | undefined;
1790
+ bytes?: number | null | undefined;
1791
+ required?: boolean | undefined;
1792
+ defaultDownload?: boolean | undefined;
1793
+ defaultLoad?: boolean | undefined;
1794
+ minRuntimeBuild?: number | undefined;
1795
+ }>, "many">>;
966
1796
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
967
1797
  id: z.ZodString;
1798
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1799
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
968
1800
  name: z.ZodString;
1801
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1802
+ family: z.ZodOptional<z.ZodString>;
969
1803
  publisher: z.ZodOptional<z.ZodString>;
970
1804
  hfRepo: z.ZodString;
971
1805
  quant: z.ZodString;
@@ -981,6 +1815,44 @@ export declare const CatalogSchema: z.ZodObject<{
981
1815
  tier: z.ZodOptional<z.ZodString>;
982
1816
  why: z.ZodOptional<z.ZodString>;
983
1817
  status: z.ZodOptional<z.ZodString>;
1818
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1819
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1820
+ id: z.ZodString;
1821
+ label: z.ZodString;
1822
+ description: z.ZodString;
1823
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1824
+ hfRepo: z.ZodOptional<z.ZodString>;
1825
+ file: z.ZodString;
1826
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1827
+ required: z.ZodDefault<z.ZodBoolean>;
1828
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1829
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1830
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1831
+ }, "strict", z.ZodTypeAny, {
1832
+ id: string;
1833
+ description: string;
1834
+ label: string;
1835
+ role: "vision_projector" | "speculative_drafter";
1836
+ file: string;
1837
+ required: boolean;
1838
+ defaultDownload: boolean;
1839
+ defaultLoad: boolean;
1840
+ hfRepo?: string | undefined;
1841
+ bytes?: number | null | undefined;
1842
+ minRuntimeBuild?: number | undefined;
1843
+ }, {
1844
+ id: string;
1845
+ description: string;
1846
+ label: string;
1847
+ role: "vision_projector" | "speculative_drafter";
1848
+ file: string;
1849
+ hfRepo?: string | undefined;
1850
+ bytes?: number | null | undefined;
1851
+ required?: boolean | undefined;
1852
+ defaultDownload?: boolean | undefined;
1853
+ defaultLoad?: boolean | undefined;
1854
+ minRuntimeBuild?: number | undefined;
1855
+ }>, "many">>;
984
1856
  }, z.ZodTypeAny, "passthrough">>, "many">>;
985
1857
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
986
1858
  version: z.ZodDefault<z.ZodLiteral<1>>;
@@ -989,7 +1861,11 @@ export declare const CatalogSchema: z.ZodObject<{
989
1861
  systemRamBytes: z.ZodOptional<z.ZodNumber>;
990
1862
  models: z.ZodDefault<z.ZodArray<z.ZodObject<{
991
1863
  id: z.ZodString;
1864
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1865
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
992
1866
  name: z.ZodString;
1867
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1868
+ family: z.ZodOptional<z.ZodString>;
993
1869
  publisher: z.ZodOptional<z.ZodString>;
994
1870
  hfRepo: z.ZodString;
995
1871
  quant: z.ZodString;
@@ -1005,9 +1881,51 @@ export declare const CatalogSchema: z.ZodObject<{
1005
1881
  tier: z.ZodOptional<z.ZodString>;
1006
1882
  why: z.ZodOptional<z.ZodString>;
1007
1883
  status: z.ZodOptional<z.ZodString>;
1884
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1885
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1886
+ id: z.ZodString;
1887
+ label: z.ZodString;
1888
+ description: z.ZodString;
1889
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1890
+ hfRepo: z.ZodOptional<z.ZodString>;
1891
+ file: z.ZodString;
1892
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1893
+ required: z.ZodDefault<z.ZodBoolean>;
1894
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1895
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1896
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1897
+ }, "strict", z.ZodTypeAny, {
1898
+ id: string;
1899
+ description: string;
1900
+ label: string;
1901
+ role: "vision_projector" | "speculative_drafter";
1902
+ file: string;
1903
+ required: boolean;
1904
+ defaultDownload: boolean;
1905
+ defaultLoad: boolean;
1906
+ hfRepo?: string | undefined;
1907
+ bytes?: number | null | undefined;
1908
+ minRuntimeBuild?: number | undefined;
1909
+ }, {
1910
+ id: string;
1911
+ description: string;
1912
+ label: string;
1913
+ role: "vision_projector" | "speculative_drafter";
1914
+ file: string;
1915
+ hfRepo?: string | undefined;
1916
+ bytes?: number | null | undefined;
1917
+ required?: boolean | undefined;
1918
+ defaultDownload?: boolean | undefined;
1919
+ defaultLoad?: boolean | undefined;
1920
+ minRuntimeBuild?: number | undefined;
1921
+ }>, "many">>;
1008
1922
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
1009
1923
  id: z.ZodString;
1924
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1925
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1010
1926
  name: z.ZodString;
1927
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1928
+ family: z.ZodOptional<z.ZodString>;
1011
1929
  publisher: z.ZodOptional<z.ZodString>;
1012
1930
  hfRepo: z.ZodString;
1013
1931
  quant: z.ZodString;
@@ -1023,9 +1941,51 @@ export declare const CatalogSchema: z.ZodObject<{
1023
1941
  tier: z.ZodOptional<z.ZodString>;
1024
1942
  why: z.ZodOptional<z.ZodString>;
1025
1943
  status: z.ZodOptional<z.ZodString>;
1944
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
1945
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
1946
+ id: z.ZodString;
1947
+ label: z.ZodString;
1948
+ description: z.ZodString;
1949
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
1950
+ hfRepo: z.ZodOptional<z.ZodString>;
1951
+ file: z.ZodString;
1952
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1953
+ required: z.ZodDefault<z.ZodBoolean>;
1954
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
1955
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
1956
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1957
+ }, "strict", z.ZodTypeAny, {
1958
+ id: string;
1959
+ description: string;
1960
+ label: string;
1961
+ role: "vision_projector" | "speculative_drafter";
1962
+ file: string;
1963
+ required: boolean;
1964
+ defaultDownload: boolean;
1965
+ defaultLoad: boolean;
1966
+ hfRepo?: string | undefined;
1967
+ bytes?: number | null | undefined;
1968
+ minRuntimeBuild?: number | undefined;
1969
+ }, {
1970
+ id: string;
1971
+ description: string;
1972
+ label: string;
1973
+ role: "vision_projector" | "speculative_drafter";
1974
+ file: string;
1975
+ hfRepo?: string | undefined;
1976
+ bytes?: number | null | undefined;
1977
+ required?: boolean | undefined;
1978
+ defaultDownload?: boolean | undefined;
1979
+ defaultLoad?: boolean | undefined;
1980
+ minRuntimeBuild?: number | undefined;
1981
+ }>, "many">>;
1026
1982
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1027
1983
  id: z.ZodString;
1984
+ /** Retired Otto-curated ids this canonical catalog entry replaces. */
1985
+ replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1028
1986
  name: z.ZodString;
1987
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1988
+ family: z.ZodOptional<z.ZodString>;
1029
1989
  publisher: z.ZodOptional<z.ZodString>;
1030
1990
  hfRepo: z.ZodString;
1031
1991
  quant: z.ZodString;
@@ -1041,6 +2001,44 @@ export declare const CatalogSchema: z.ZodObject<{
1041
2001
  tier: z.ZodOptional<z.ZodString>;
1042
2002
  why: z.ZodOptional<z.ZodString>;
1043
2003
  status: z.ZodOptional<z.ZodString>;
2004
+ /** Declared only for multi-artifact model bundles. Plain models omit it. */
2005
+ components: z.ZodOptional<z.ZodArray<z.ZodObject<{
2006
+ id: z.ZodString;
2007
+ label: z.ZodString;
2008
+ description: z.ZodString;
2009
+ role: z.ZodEnum<["vision_projector", "speculative_drafter"]>;
2010
+ hfRepo: z.ZodOptional<z.ZodString>;
2011
+ file: z.ZodString;
2012
+ bytes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2013
+ required: z.ZodDefault<z.ZodBoolean>;
2014
+ defaultDownload: z.ZodDefault<z.ZodBoolean>;
2015
+ defaultLoad: z.ZodDefault<z.ZodBoolean>;
2016
+ minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
2017
+ }, "strict", z.ZodTypeAny, {
2018
+ id: string;
2019
+ description: string;
2020
+ label: string;
2021
+ role: "vision_projector" | "speculative_drafter";
2022
+ file: string;
2023
+ required: boolean;
2024
+ defaultDownload: boolean;
2025
+ defaultLoad: boolean;
2026
+ hfRepo?: string | undefined;
2027
+ bytes?: number | null | undefined;
2028
+ minRuntimeBuild?: number | undefined;
2029
+ }, {
2030
+ id: string;
2031
+ description: string;
2032
+ label: string;
2033
+ role: "vision_projector" | "speculative_drafter";
2034
+ file: string;
2035
+ hfRepo?: string | undefined;
2036
+ bytes?: number | null | undefined;
2037
+ required?: boolean | undefined;
2038
+ defaultDownload?: boolean | undefined;
2039
+ defaultLoad?: boolean | undefined;
2040
+ minRuntimeBuild?: number | undefined;
2041
+ }>, "many">>;
1044
2042
  }, z.ZodTypeAny, "passthrough">>, "many">>;
1045
2043
  }, z.ZodTypeAny, "passthrough">>;
1046
2044
  export type Catalog = z.infer<typeof CatalogSchema>;