@otto-code/brain 0.8.8 → 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 (45) hide show
  1. package/dist/commands/bench.js +19 -5
  2. package/dist/commands/catalog.d.ts +1 -0
  3. package/dist/commands/catalog.js +1 -0
  4. package/dist/commands/pull.js +14 -33
  5. package/dist/commands/repo-download.d.ts +14 -0
  6. package/dist/commands/repo-download.js +29 -0
  7. package/dist/commands/search.js +6 -14
  8. package/dist/config/builtin-hosting-profiles.d.ts +8 -0
  9. package/dist/config/builtin-hosting-profiles.js +32 -0
  10. package/dist/config/hosting-profiles.d.ts +33 -0
  11. package/dist/config/hosting-profiles.js +71 -0
  12. package/dist/config/index.d.ts +1 -0
  13. package/dist/config/index.js +1 -0
  14. package/dist/config/paths.d.ts +2 -0
  15. package/dist/config/paths.js +1 -0
  16. package/dist/config/profile-edit.d.ts +4 -2
  17. package/dist/config/profile-edit.js +94 -4
  18. package/dist/config/profiles.js +25 -2
  19. package/dist/config/schema.d.ts +494 -24
  20. package/dist/config/schema.js +55 -0
  21. package/dist/config/store.js +12 -2
  22. package/dist/gguf.d.ts +1 -0
  23. package/dist/gguf.js +1 -0
  24. package/dist/models/download.js +5 -0
  25. package/dist/models/enrich.d.ts +6 -0
  26. package/dist/models/enrich.js +50 -2
  27. package/dist/ops/calibrate.d.ts +4 -1
  28. package/dist/ops/calibrate.js +10 -7
  29. package/dist/ops/sweep.d.ts +3 -1
  30. package/dist/ops/sweep.js +3 -3
  31. package/dist/runtime/args.d.ts +2 -2
  32. package/dist/runtime/args.js +13 -1
  33. package/dist/runtime/index.d.ts +7 -0
  34. package/dist/runtime/index.js +10 -0
  35. package/dist/service/host-api.d.ts +17 -1
  36. package/dist/service/host-api.js +196 -13
  37. package/dist/service/router.d.ts +18 -0
  38. package/dist/service/router.js +89 -4
  39. package/dist/service/serve.js +184 -12
  40. package/dist/service/supervisor.d.ts +32 -4
  41. package/dist/service/supervisor.js +30 -6
  42. package/dist/tui/app.js +1 -1
  43. package/dist/types.d.ts +4 -0
  44. package/dist/vram.js +3 -3
  45. package/package.json +1 -1
@@ -23,9 +23,35 @@ export declare const ProfileSchema: z.ZodObject<{
23
23
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
24
24
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
25
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>;
26
30
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
27
31
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
28
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>>;
29
55
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
30
56
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
31
57
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -43,9 +69,35 @@ export declare const ProfileSchema: z.ZodObject<{
43
69
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
44
70
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
45
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>;
46
76
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
47
77
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
48
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>>;
49
101
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
50
102
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
51
103
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -63,11 +115,69 @@ export declare const ProfileSchema: z.ZodObject<{
63
115
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
64
116
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
65
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>;
66
122
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
67
123
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
68
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>>;
69
147
  }, z.ZodTypeAny, "passthrough">>;
70
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>;
71
181
  export declare const CalibrationSampleSchema: z.ZodObject<{
72
182
  contextSize: z.ZodNumber;
73
183
  deltaBytes: z.ZodNumber;
@@ -178,9 +288,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
178
288
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
179
289
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
180
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>;
181
295
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
182
296
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
183
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>>;
184
320
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
185
321
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
186
322
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -198,9 +334,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
198
334
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
199
335
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
200
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>;
201
341
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
202
342
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
203
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>>;
204
366
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
205
367
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
206
368
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -218,9 +380,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
218
380
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
219
381
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
220
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>;
221
387
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
222
388
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
223
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>>;
224
412
  }, z.ZodTypeAny, "passthrough">>>>;
225
413
  calibrations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
226
414
  kvBytesPerToken: z.ZodNumber;
@@ -298,6 +486,40 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
298
486
  measuredOn: z.ZodOptional<z.ZodString>;
299
487
  measuredLayers: z.ZodOptional<z.ZodNumber>;
300
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>>;
301
523
  lastModelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
302
524
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
303
525
  version: z.ZodDefault<z.ZodLiteral<1>>;
@@ -318,9 +540,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
318
540
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
319
541
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
320
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>;
321
547
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
322
548
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
323
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>>;
324
572
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
325
573
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
326
574
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -338,9 +586,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
338
586
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
339
587
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
340
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>;
341
593
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
342
594
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
343
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>>;
344
618
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
345
619
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
346
620
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -358,9 +632,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
358
632
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
359
633
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
360
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>;
361
639
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
362
640
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
363
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>>;
364
664
  }, z.ZodTypeAny, "passthrough">>>>;
365
665
  calibrations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
366
666
  kvBytesPerToken: z.ZodNumber;
@@ -438,6 +738,40 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
438
738
  measuredOn: z.ZodOptional<z.ZodString>;
439
739
  measuredLayers: z.ZodOptional<z.ZodNumber>;
440
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>>;
441
775
  lastModelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
442
776
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
443
777
  version: z.ZodDefault<z.ZodLiteral<1>>;
@@ -458,9 +792,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
458
792
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
459
793
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
460
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>;
461
799
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
462
800
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
463
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>>;
464
824
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
465
825
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
466
826
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -478,9 +838,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
478
838
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
479
839
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
480
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>;
481
845
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
482
846
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
483
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>>;
484
870
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
485
871
  modelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
486
872
  modelPath: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -498,9 +884,35 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
498
884
  reasoningBudget: z.ZodDefault<z.ZodNumber>;
499
885
  reasoningBudgetMessage: z.ZodDefault<z.ZodString>;
500
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>;
501
891
  batchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
502
892
  ubatchSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
503
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>>;
504
916
  }, z.ZodTypeAny, "passthrough">>>>;
505
917
  calibrations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
506
918
  kvBytesPerToken: z.ZodNumber;
@@ -578,6 +990,40 @@ export declare const ProfilesStoreSchema: z.ZodObject<{
578
990
  measuredOn: z.ZodOptional<z.ZodString>;
579
991
  measuredLayers: z.ZodOptional<z.ZodNumber>;
580
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>>;
581
1027
  lastModelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
582
1028
  }, z.ZodTypeAny, "passthrough">>;
583
1029
  export type ProfilesStore = z.infer<typeof ProfilesStoreSchema>;
@@ -859,6 +1305,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
859
1305
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
860
1306
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
861
1307
  name: z.ZodString;
1308
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1309
+ family: z.ZodOptional<z.ZodString>;
862
1310
  publisher: z.ZodOptional<z.ZodString>;
863
1311
  hfRepo: z.ZodString;
864
1312
  quant: z.ZodString;
@@ -889,8 +1337,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
889
1337
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
890
1338
  }, "strict", z.ZodTypeAny, {
891
1339
  id: string;
892
- label: string;
893
1340
  description: string;
1341
+ label: string;
894
1342
  role: "vision_projector" | "speculative_drafter";
895
1343
  file: string;
896
1344
  required: boolean;
@@ -901,8 +1349,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
901
1349
  minRuntimeBuild?: number | undefined;
902
1350
  }, {
903
1351
  id: string;
904
- label: string;
905
1352
  description: string;
1353
+ label: string;
906
1354
  role: "vision_projector" | "speculative_drafter";
907
1355
  file: string;
908
1356
  hfRepo?: string | undefined;
@@ -917,6 +1365,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
917
1365
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
918
1366
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
919
1367
  name: z.ZodString;
1368
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1369
+ family: z.ZodOptional<z.ZodString>;
920
1370
  publisher: z.ZodOptional<z.ZodString>;
921
1371
  hfRepo: z.ZodString;
922
1372
  quant: z.ZodString;
@@ -947,8 +1397,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
947
1397
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
948
1398
  }, "strict", z.ZodTypeAny, {
949
1399
  id: string;
950
- label: string;
951
1400
  description: string;
1401
+ label: string;
952
1402
  role: "vision_projector" | "speculative_drafter";
953
1403
  file: string;
954
1404
  required: boolean;
@@ -959,8 +1409,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
959
1409
  minRuntimeBuild?: number | undefined;
960
1410
  }, {
961
1411
  id: string;
962
- label: string;
963
1412
  description: string;
1413
+ label: string;
964
1414
  role: "vision_projector" | "speculative_drafter";
965
1415
  file: string;
966
1416
  hfRepo?: string | undefined;
@@ -975,6 +1425,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
975
1425
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
976
1426
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
977
1427
  name: z.ZodString;
1428
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1429
+ family: z.ZodOptional<z.ZodString>;
978
1430
  publisher: z.ZodOptional<z.ZodString>;
979
1431
  hfRepo: z.ZodString;
980
1432
  quant: z.ZodString;
@@ -1005,8 +1457,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
1005
1457
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1006
1458
  }, "strict", z.ZodTypeAny, {
1007
1459
  id: string;
1008
- label: string;
1009
1460
  description: string;
1461
+ label: string;
1010
1462
  role: "vision_projector" | "speculative_drafter";
1011
1463
  file: string;
1012
1464
  required: boolean;
@@ -1017,8 +1469,8 @@ export declare const CatalogModelSchema: z.ZodObject<{
1017
1469
  minRuntimeBuild?: number | undefined;
1018
1470
  }, {
1019
1471
  id: string;
1020
- label: string;
1021
1472
  description: string;
1473
+ label: string;
1022
1474
  role: "vision_projector" | "speculative_drafter";
1023
1475
  file: string;
1024
1476
  hfRepo?: string | undefined;
@@ -1040,6 +1492,8 @@ export declare const CatalogSchema: z.ZodObject<{
1040
1492
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1041
1493
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1042
1494
  name: z.ZodString;
1495
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1496
+ family: z.ZodOptional<z.ZodString>;
1043
1497
  publisher: z.ZodOptional<z.ZodString>;
1044
1498
  hfRepo: z.ZodString;
1045
1499
  quant: z.ZodString;
@@ -1070,8 +1524,8 @@ export declare const CatalogSchema: z.ZodObject<{
1070
1524
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1071
1525
  }, "strict", z.ZodTypeAny, {
1072
1526
  id: string;
1073
- label: string;
1074
1527
  description: string;
1528
+ label: string;
1075
1529
  role: "vision_projector" | "speculative_drafter";
1076
1530
  file: string;
1077
1531
  required: boolean;
@@ -1082,8 +1536,8 @@ export declare const CatalogSchema: z.ZodObject<{
1082
1536
  minRuntimeBuild?: number | undefined;
1083
1537
  }, {
1084
1538
  id: string;
1085
- label: string;
1086
1539
  description: string;
1540
+ label: string;
1087
1541
  role: "vision_projector" | "speculative_drafter";
1088
1542
  file: string;
1089
1543
  hfRepo?: string | undefined;
@@ -1098,6 +1552,8 @@ export declare const CatalogSchema: z.ZodObject<{
1098
1552
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1099
1553
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1100
1554
  name: z.ZodString;
1555
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1556
+ family: z.ZodOptional<z.ZodString>;
1101
1557
  publisher: z.ZodOptional<z.ZodString>;
1102
1558
  hfRepo: z.ZodString;
1103
1559
  quant: z.ZodString;
@@ -1128,8 +1584,8 @@ export declare const CatalogSchema: z.ZodObject<{
1128
1584
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1129
1585
  }, "strict", z.ZodTypeAny, {
1130
1586
  id: string;
1131
- label: string;
1132
1587
  description: string;
1588
+ label: string;
1133
1589
  role: "vision_projector" | "speculative_drafter";
1134
1590
  file: string;
1135
1591
  required: boolean;
@@ -1140,8 +1596,8 @@ export declare const CatalogSchema: z.ZodObject<{
1140
1596
  minRuntimeBuild?: number | undefined;
1141
1597
  }, {
1142
1598
  id: string;
1143
- label: string;
1144
1599
  description: string;
1600
+ label: string;
1145
1601
  role: "vision_projector" | "speculative_drafter";
1146
1602
  file: string;
1147
1603
  hfRepo?: string | undefined;
@@ -1156,6 +1612,8 @@ export declare const CatalogSchema: z.ZodObject<{
1156
1612
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1157
1613
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1158
1614
  name: z.ZodString;
1615
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1616
+ family: z.ZodOptional<z.ZodString>;
1159
1617
  publisher: z.ZodOptional<z.ZodString>;
1160
1618
  hfRepo: z.ZodString;
1161
1619
  quant: z.ZodString;
@@ -1186,8 +1644,8 @@ export declare const CatalogSchema: z.ZodObject<{
1186
1644
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1187
1645
  }, "strict", z.ZodTypeAny, {
1188
1646
  id: string;
1189
- label: string;
1190
1647
  description: string;
1648
+ label: string;
1191
1649
  role: "vision_projector" | "speculative_drafter";
1192
1650
  file: string;
1193
1651
  required: boolean;
@@ -1198,8 +1656,8 @@ export declare const CatalogSchema: z.ZodObject<{
1198
1656
  minRuntimeBuild?: number | undefined;
1199
1657
  }, {
1200
1658
  id: string;
1201
- label: string;
1202
1659
  description: string;
1660
+ label: string;
1203
1661
  role: "vision_projector" | "speculative_drafter";
1204
1662
  file: string;
1205
1663
  hfRepo?: string | undefined;
@@ -1220,6 +1678,8 @@ export declare const CatalogSchema: z.ZodObject<{
1220
1678
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1221
1679
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1222
1680
  name: z.ZodString;
1681
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1682
+ family: z.ZodOptional<z.ZodString>;
1223
1683
  publisher: z.ZodOptional<z.ZodString>;
1224
1684
  hfRepo: z.ZodString;
1225
1685
  quant: z.ZodString;
@@ -1250,8 +1710,8 @@ export declare const CatalogSchema: z.ZodObject<{
1250
1710
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1251
1711
  }, "strict", z.ZodTypeAny, {
1252
1712
  id: string;
1253
- label: string;
1254
1713
  description: string;
1714
+ label: string;
1255
1715
  role: "vision_projector" | "speculative_drafter";
1256
1716
  file: string;
1257
1717
  required: boolean;
@@ -1262,8 +1722,8 @@ export declare const CatalogSchema: z.ZodObject<{
1262
1722
  minRuntimeBuild?: number | undefined;
1263
1723
  }, {
1264
1724
  id: string;
1265
- label: string;
1266
1725
  description: string;
1726
+ label: string;
1267
1727
  role: "vision_projector" | "speculative_drafter";
1268
1728
  file: string;
1269
1729
  hfRepo?: string | undefined;
@@ -1278,6 +1738,8 @@ export declare const CatalogSchema: z.ZodObject<{
1278
1738
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1279
1739
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1280
1740
  name: z.ZodString;
1741
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1742
+ family: z.ZodOptional<z.ZodString>;
1281
1743
  publisher: z.ZodOptional<z.ZodString>;
1282
1744
  hfRepo: z.ZodString;
1283
1745
  quant: z.ZodString;
@@ -1308,8 +1770,8 @@ export declare const CatalogSchema: z.ZodObject<{
1308
1770
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1309
1771
  }, "strict", z.ZodTypeAny, {
1310
1772
  id: string;
1311
- label: string;
1312
1773
  description: string;
1774
+ label: string;
1313
1775
  role: "vision_projector" | "speculative_drafter";
1314
1776
  file: string;
1315
1777
  required: boolean;
@@ -1320,8 +1782,8 @@ export declare const CatalogSchema: z.ZodObject<{
1320
1782
  minRuntimeBuild?: number | undefined;
1321
1783
  }, {
1322
1784
  id: string;
1323
- label: string;
1324
1785
  description: string;
1786
+ label: string;
1325
1787
  role: "vision_projector" | "speculative_drafter";
1326
1788
  file: string;
1327
1789
  hfRepo?: string | undefined;
@@ -1336,6 +1798,8 @@ export declare const CatalogSchema: z.ZodObject<{
1336
1798
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1337
1799
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1338
1800
  name: z.ZodString;
1801
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1802
+ family: z.ZodOptional<z.ZodString>;
1339
1803
  publisher: z.ZodOptional<z.ZodString>;
1340
1804
  hfRepo: z.ZodString;
1341
1805
  quant: z.ZodString;
@@ -1366,8 +1830,8 @@ export declare const CatalogSchema: z.ZodObject<{
1366
1830
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1367
1831
  }, "strict", z.ZodTypeAny, {
1368
1832
  id: string;
1369
- label: string;
1370
1833
  description: string;
1834
+ label: string;
1371
1835
  role: "vision_projector" | "speculative_drafter";
1372
1836
  file: string;
1373
1837
  required: boolean;
@@ -1378,8 +1842,8 @@ export declare const CatalogSchema: z.ZodObject<{
1378
1842
  minRuntimeBuild?: number | undefined;
1379
1843
  }, {
1380
1844
  id: string;
1381
- label: string;
1382
1845
  description: string;
1846
+ label: string;
1383
1847
  role: "vision_projector" | "speculative_drafter";
1384
1848
  file: string;
1385
1849
  hfRepo?: string | undefined;
@@ -1400,6 +1864,8 @@ export declare const CatalogSchema: z.ZodObject<{
1400
1864
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1401
1865
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1402
1866
  name: z.ZodString;
1867
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1868
+ family: z.ZodOptional<z.ZodString>;
1403
1869
  publisher: z.ZodOptional<z.ZodString>;
1404
1870
  hfRepo: z.ZodString;
1405
1871
  quant: z.ZodString;
@@ -1430,8 +1896,8 @@ export declare const CatalogSchema: z.ZodObject<{
1430
1896
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1431
1897
  }, "strict", z.ZodTypeAny, {
1432
1898
  id: string;
1433
- label: string;
1434
1899
  description: string;
1900
+ label: string;
1435
1901
  role: "vision_projector" | "speculative_drafter";
1436
1902
  file: string;
1437
1903
  required: boolean;
@@ -1442,8 +1908,8 @@ export declare const CatalogSchema: z.ZodObject<{
1442
1908
  minRuntimeBuild?: number | undefined;
1443
1909
  }, {
1444
1910
  id: string;
1445
- label: string;
1446
1911
  description: string;
1912
+ label: string;
1447
1913
  role: "vision_projector" | "speculative_drafter";
1448
1914
  file: string;
1449
1915
  hfRepo?: string | undefined;
@@ -1458,6 +1924,8 @@ export declare const CatalogSchema: z.ZodObject<{
1458
1924
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1459
1925
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1460
1926
  name: z.ZodString;
1927
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1928
+ family: z.ZodOptional<z.ZodString>;
1461
1929
  publisher: z.ZodOptional<z.ZodString>;
1462
1930
  hfRepo: z.ZodString;
1463
1931
  quant: z.ZodString;
@@ -1488,8 +1956,8 @@ export declare const CatalogSchema: z.ZodObject<{
1488
1956
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1489
1957
  }, "strict", z.ZodTypeAny, {
1490
1958
  id: string;
1491
- label: string;
1492
1959
  description: string;
1960
+ label: string;
1493
1961
  role: "vision_projector" | "speculative_drafter";
1494
1962
  file: string;
1495
1963
  required: boolean;
@@ -1500,8 +1968,8 @@ export declare const CatalogSchema: z.ZodObject<{
1500
1968
  minRuntimeBuild?: number | undefined;
1501
1969
  }, {
1502
1970
  id: string;
1503
- label: string;
1504
1971
  description: string;
1972
+ label: string;
1505
1973
  role: "vision_projector" | "speculative_drafter";
1506
1974
  file: string;
1507
1975
  hfRepo?: string | undefined;
@@ -1516,6 +1984,8 @@ export declare const CatalogSchema: z.ZodObject<{
1516
1984
  /** Retired Otto-curated ids this canonical catalog entry replaces. */
1517
1985
  replaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1518
1986
  name: z.ZodString;
1987
+ /** Stable UI family identity. Otto clients resolve this to a monochrome glyph. */
1988
+ family: z.ZodOptional<z.ZodString>;
1519
1989
  publisher: z.ZodOptional<z.ZodString>;
1520
1990
  hfRepo: z.ZodString;
1521
1991
  quant: z.ZodString;
@@ -1546,8 +2016,8 @@ export declare const CatalogSchema: z.ZodObject<{
1546
2016
  minRuntimeBuild: z.ZodOptional<z.ZodNumber>;
1547
2017
  }, "strict", z.ZodTypeAny, {
1548
2018
  id: string;
1549
- label: string;
1550
2019
  description: string;
2020
+ label: string;
1551
2021
  role: "vision_projector" | "speculative_drafter";
1552
2022
  file: string;
1553
2023
  required: boolean;
@@ -1558,8 +2028,8 @@ export declare const CatalogSchema: z.ZodObject<{
1558
2028
  minRuntimeBuild?: number | undefined;
1559
2029
  }, {
1560
2030
  id: string;
1561
- label: string;
1562
2031
  description: string;
2032
+ label: string;
1563
2033
  role: "vision_projector" | "speculative_drafter";
1564
2034
  file: string;
1565
2035
  hfRepo?: string | undefined;