@fnndsc/menu 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # @fnndsc/menu
2
+
3
+ The mise wire contract: what a command returns, what a session exchanges, and
4
+ the vocabularies both narrow to.
5
+
6
+ A menu declares what may be ordered and what arrives. A surface can ask for
7
+ anything on it and nothing off it, which is the architectural claim this
8
+ package exists to make structural: no capability exists outside the kernel and
9
+ the wire, while every surface is free to compose and present as it likes above
10
+ that line.
11
+
12
+ ## What's in it
13
+
14
+ | Module | Contents |
15
+ | --- | --- |
16
+ | `envelope.ts` | `CommandEnvelope` and its parts — status, typed model slot, error stack, resolution trace |
17
+ | `messages.ts` | The session protocol: attach, execute, complete, output, progress, prompt, pipe, shell, edit |
18
+ | `validate.ts` | Boundary parsing that never throws — a `ParseResult`, so a caller can answer rather than crash |
19
+ | `version.ts` | `CONTRACT_VERSION` and its exact-major compatibility rule |
20
+ | `progress.ts` | The structured-progress vocabulary |
21
+ | `proc.ts` | Prompt-facing process-index state |
22
+
23
+ ## Why it is its own package
24
+
25
+ A surface author depends on the contract, not on the daemon that happens to
26
+ serve it. Before this package the contract was a subpath of `@fnndsc/calypso`,
27
+ which meant a third-party surface took a dependency on the session host to
28
+ learn the shape of a result.
29
+
30
+ It imports nothing from the stack — `zod` and nothing else — and sits below
31
+ `cumin`, so both the engine that produces envelopes and the browser that renders
32
+ them can load it.
33
+
34
+ ## Rules that hold here
35
+
36
+ **Open world.** An envelope's `model.kind` is a free string: a surface narrows
37
+ what it recognises and falls back to `rendered` for the rest. Unknown enum
38
+ values degrade rather than reject — an unknown progress operation reads as
39
+ `task`, an unknown phase as `working` — because a dropped message is invisible
40
+ and a generic indicator is not.
41
+
42
+ **Never `.strict()`.** A plain `z.object()` strips unknown keys, so a field
43
+ added by a newer peer is ignored rather than fatal. `.strict()` looks like
44
+ rigour and is a compatibility break.
45
+
46
+ **A new enum value ships with a fallback.** `safeParse` fails a whole message on
47
+ one unknown value. When you add to an enum on the wire, give it a `.catch()` in
48
+ the same change if it has none.
49
+
50
+ **Types are inferred, never declared twice.** Payload types come from
51
+ `z.infer<typeof schema>`. The envelope and the wire once carried separate
52
+ declarations held together by a compile-time assertion; one inferred type makes
53
+ that drift impossible rather than detected.
54
+
55
+ ## See also
56
+
57
+ - `docs/menu.adoc` — the design record and the plan this package is part of
58
+ - `docs/principles.adoc` — the normative architecture
59
+ - `docs/structured-progress.md` — the progress contract in detail
package/dist/dag.d.ts ADDED
@@ -0,0 +1,629 @@
1
+ /**
2
+ * @file The DAG model vocabulary: compute graphs as typed envelope payloads.
3
+ *
4
+ * ChRIS is a data-state machine and the execution DAG is its central object:
5
+ * nodes are plugin (instances), edges are data states flowing between their
6
+ * directories. Two commands project that object onto the wire — a registered
7
+ * pipeline's authored template (`pipeline.diagram`) and a feed's live
8
+ * instance graph (`feed.dag`) — and both share one structural core so a
9
+ * renderer owns a single traversal and layout path.
10
+ *
11
+ * Models carry topology, addresses, status, and metrics — never layout.
12
+ * How a graph is drawn (ranked tiers, a force-settled molecule, a header
13
+ * miniature) is a surface concern; the model must serve them all.
14
+ *
15
+ * @module
16
+ */
17
+ import { z } from 'zod';
18
+ /**
19
+ * The structural core every DAG node shares: identity, a label, and its
20
+ * incoming edges. `parentIds` carries the primary data-flow edges;
21
+ * `joinParentIds` carries additional (topological join) edges, drawn
22
+ * differently but traversed the same.
23
+ */
24
+ export declare const dagNodeCoreSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ label: z.ZodString;
27
+ parentIds: z.ZodArray<z.ZodString, "many">;
28
+ joinParentIds: z.ZodArray<z.ZodString, "many">;
29
+ }, "strip", z.ZodTypeAny, {
30
+ id: string;
31
+ label: string;
32
+ parentIds: string[];
33
+ joinParentIds: string[];
34
+ }, {
35
+ id: string;
36
+ label: string;
37
+ parentIds: string[];
38
+ joinParentIds: string[];
39
+ }>;
40
+ /** One stored default argument on an authored pipeline node. */
41
+ export declare const dagArgumentSchema: z.ZodObject<{
42
+ name: z.ZodString;
43
+ value: z.ZodUnknown;
44
+ }, "strip", z.ZodTypeAny, {
45
+ name: string;
46
+ value?: unknown;
47
+ }, {
48
+ name: string;
49
+ value?: unknown;
50
+ }>;
51
+ /** A node in a registered pipeline's authored template. */
52
+ export declare const pipelineDiagramNodeSchema: z.ZodObject<{
53
+ id: z.ZodString;
54
+ label: z.ZodString;
55
+ parentIds: z.ZodArray<z.ZodString, "many">;
56
+ joinParentIds: z.ZodArray<z.ZodString, "many">;
57
+ } & {
58
+ pluginName: z.ZodString;
59
+ pluginVersion: z.ZodOptional<z.ZodString>;
60
+ arguments: z.ZodOptional<z.ZodArray<z.ZodObject<{
61
+ name: z.ZodString;
62
+ value: z.ZodUnknown;
63
+ }, "strip", z.ZodTypeAny, {
64
+ name: string;
65
+ value?: unknown;
66
+ }, {
67
+ name: string;
68
+ value?: unknown;
69
+ }>, "many">>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ id: string;
72
+ label: string;
73
+ parentIds: string[];
74
+ joinParentIds: string[];
75
+ pluginName: string;
76
+ pluginVersion?: string | undefined;
77
+ arguments?: {
78
+ name: string;
79
+ value?: unknown;
80
+ }[] | undefined;
81
+ }, {
82
+ id: string;
83
+ label: string;
84
+ parentIds: string[];
85
+ joinParentIds: string[];
86
+ pluginName: string;
87
+ pluginVersion?: string | undefined;
88
+ arguments?: {
89
+ name: string;
90
+ value?: unknown;
91
+ }[] | undefined;
92
+ }>;
93
+ /**
94
+ * The `pipeline.diagram` model: a registered pipeline's authored DAG.
95
+ * Static — it describes what would run, not anything running.
96
+ */
97
+ export declare const pipelineDiagramModelSchema: z.ZodObject<{
98
+ name: z.ZodString;
99
+ pipelineId: z.ZodOptional<z.ZodNumber>;
100
+ nodes: z.ZodArray<z.ZodObject<{
101
+ id: z.ZodString;
102
+ label: z.ZodString;
103
+ parentIds: z.ZodArray<z.ZodString, "many">;
104
+ joinParentIds: z.ZodArray<z.ZodString, "many">;
105
+ } & {
106
+ pluginName: z.ZodString;
107
+ pluginVersion: z.ZodOptional<z.ZodString>;
108
+ arguments: z.ZodOptional<z.ZodArray<z.ZodObject<{
109
+ name: z.ZodString;
110
+ value: z.ZodUnknown;
111
+ }, "strip", z.ZodTypeAny, {
112
+ name: string;
113
+ value?: unknown;
114
+ }, {
115
+ name: string;
116
+ value?: unknown;
117
+ }>, "many">>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ id: string;
120
+ label: string;
121
+ parentIds: string[];
122
+ joinParentIds: string[];
123
+ pluginName: string;
124
+ pluginVersion?: string | undefined;
125
+ arguments?: {
126
+ name: string;
127
+ value?: unknown;
128
+ }[] | undefined;
129
+ }, {
130
+ id: string;
131
+ label: string;
132
+ parentIds: string[];
133
+ joinParentIds: string[];
134
+ pluginName: string;
135
+ pluginVersion?: string | undefined;
136
+ arguments?: {
137
+ name: string;
138
+ value?: unknown;
139
+ }[] | undefined;
140
+ }>, "many">;
141
+ }, "strip", z.ZodTypeAny, {
142
+ name: string;
143
+ nodes: {
144
+ id: string;
145
+ label: string;
146
+ parentIds: string[];
147
+ joinParentIds: string[];
148
+ pluginName: string;
149
+ pluginVersion?: string | undefined;
150
+ arguments?: {
151
+ name: string;
152
+ value?: unknown;
153
+ }[] | undefined;
154
+ }[];
155
+ pipelineId?: number | undefined;
156
+ }, {
157
+ name: string;
158
+ nodes: {
159
+ id: string;
160
+ label: string;
161
+ parentIds: string[];
162
+ joinParentIds: string[];
163
+ pluginName: string;
164
+ pluginVersion?: string | undefined;
165
+ arguments?: {
166
+ name: string;
167
+ value?: unknown;
168
+ }[] | undefined;
169
+ }[];
170
+ pipelineId?: number | undefined;
171
+ }>;
172
+ /**
173
+ * A live node's execution state. Open-world: an unrecognized status from a
174
+ * newer daemon degrades to 'unknown' rather than failing the parse.
175
+ */
176
+ export declare const DAG_NODE_STATUSES: readonly ["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"];
177
+ export declare const dagNodeStatusSchema: z.ZodCatch<z.ZodEnum<["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"]>>;
178
+ /**
179
+ * Roll-up of an isomorphic ×N group collapsed behind one rendered node.
180
+ * Present only when `count > 1`; error visibility is not optional — a group
181
+ * carrying failures lists its first anomalous members for jump-to-error.
182
+ */
183
+ export declare const dagNodeTallySchema: z.ZodObject<{
184
+ count: z.ZodNumber;
185
+ done: z.ZodNumber;
186
+ error: z.ZodNumber;
187
+ running: z.ZodNumber;
188
+ other: z.ZodNumber;
189
+ anomalies: z.ZodOptional<z.ZodArray<z.ZodObject<{
190
+ id: z.ZodString;
191
+ status: z.ZodCatch<z.ZodEnum<["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"]>>;
192
+ }, "strip", z.ZodTypeAny, {
193
+ id: string;
194
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
195
+ }, {
196
+ id: string;
197
+ status?: unknown;
198
+ }>, "many">>;
199
+ }, "strip", z.ZodTypeAny, {
200
+ count: number;
201
+ done: number;
202
+ error: number;
203
+ running: number;
204
+ other: number;
205
+ anomalies?: {
206
+ id: string;
207
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
208
+ }[] | undefined;
209
+ }, {
210
+ count: number;
211
+ done: number;
212
+ error: number;
213
+ running: number;
214
+ other: number;
215
+ anomalies?: {
216
+ id: string;
217
+ status?: unknown;
218
+ }[] | undefined;
219
+ }>;
220
+ export type DagNodeTally = z.infer<typeof dagNodeTallySchema>;
221
+ /** Per-node measurables that scale a molecule rendering. */
222
+ export declare const dagNodeMetricsSchema: z.ZodObject<{
223
+ computeSeconds: z.ZodOptional<z.ZodNumber>;
224
+ dataBytes: z.ZodOptional<z.ZodNumber>;
225
+ }, "strip", z.ZodTypeAny, {
226
+ computeSeconds?: number | undefined;
227
+ dataBytes?: number | undefined;
228
+ }, {
229
+ computeSeconds?: number | undefined;
230
+ dataBytes?: number | undefined;
231
+ }>;
232
+ /**
233
+ * A node in a feed's live instance graph. `vfsPath` is the node's data
234
+ * space — the same address the terminal and the files panel navigate, which
235
+ * is what makes "fly into a node" a `cd` rather than a new machine.
236
+ */
237
+ export declare const feedDagNodeSchema: z.ZodObject<{
238
+ id: z.ZodString;
239
+ label: z.ZodString;
240
+ parentIds: z.ZodArray<z.ZodString, "many">;
241
+ joinParentIds: z.ZodArray<z.ZodString, "many">;
242
+ } & {
243
+ instanceId: z.ZodNumber;
244
+ pluginName: z.ZodString;
245
+ pluginVersion: z.ZodOptional<z.ZodString>;
246
+ status: z.ZodCatch<z.ZodEnum<["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"]>>;
247
+ vfsPath: z.ZodString;
248
+ metrics: z.ZodOptional<z.ZodObject<{
249
+ computeSeconds: z.ZodOptional<z.ZodNumber>;
250
+ dataBytes: z.ZodOptional<z.ZodNumber>;
251
+ }, "strip", z.ZodTypeAny, {
252
+ computeSeconds?: number | undefined;
253
+ dataBytes?: number | undefined;
254
+ }, {
255
+ computeSeconds?: number | undefined;
256
+ dataBytes?: number | undefined;
257
+ }>>;
258
+ tally: z.ZodOptional<z.ZodObject<{
259
+ count: z.ZodNumber;
260
+ done: z.ZodNumber;
261
+ error: z.ZodNumber;
262
+ running: z.ZodNumber;
263
+ other: z.ZodNumber;
264
+ anomalies: z.ZodOptional<z.ZodArray<z.ZodObject<{
265
+ id: z.ZodString;
266
+ status: z.ZodCatch<z.ZodEnum<["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"]>>;
267
+ }, "strip", z.ZodTypeAny, {
268
+ id: string;
269
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
270
+ }, {
271
+ id: string;
272
+ status?: unknown;
273
+ }>, "many">>;
274
+ }, "strip", z.ZodTypeAny, {
275
+ count: number;
276
+ done: number;
277
+ error: number;
278
+ running: number;
279
+ other: number;
280
+ anomalies?: {
281
+ id: string;
282
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
283
+ }[] | undefined;
284
+ }, {
285
+ count: number;
286
+ done: number;
287
+ error: number;
288
+ running: number;
289
+ other: number;
290
+ anomalies?: {
291
+ id: string;
292
+ status?: unknown;
293
+ }[] | undefined;
294
+ }>>;
295
+ /** Where the job ran; `mixed` for a group whose members ran on different resources. */
296
+ computeResource: z.ZodOptional<z.ZodString>;
297
+ }, "strip", z.ZodTypeAny, {
298
+ id: string;
299
+ label: string;
300
+ parentIds: string[];
301
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
302
+ joinParentIds: string[];
303
+ pluginName: string;
304
+ instanceId: number;
305
+ vfsPath: string;
306
+ pluginVersion?: string | undefined;
307
+ metrics?: {
308
+ computeSeconds?: number | undefined;
309
+ dataBytes?: number | undefined;
310
+ } | undefined;
311
+ tally?: {
312
+ count: number;
313
+ done: number;
314
+ error: number;
315
+ running: number;
316
+ other: number;
317
+ anomalies?: {
318
+ id: string;
319
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
320
+ }[] | undefined;
321
+ } | undefined;
322
+ computeResource?: string | undefined;
323
+ }, {
324
+ id: string;
325
+ label: string;
326
+ parentIds: string[];
327
+ joinParentIds: string[];
328
+ pluginName: string;
329
+ instanceId: number;
330
+ vfsPath: string;
331
+ status?: unknown;
332
+ pluginVersion?: string | undefined;
333
+ metrics?: {
334
+ computeSeconds?: number | undefined;
335
+ dataBytes?: number | undefined;
336
+ } | undefined;
337
+ tally?: {
338
+ count: number;
339
+ done: number;
340
+ error: number;
341
+ running: number;
342
+ other: number;
343
+ anomalies?: {
344
+ id: string;
345
+ status?: unknown;
346
+ }[] | undefined;
347
+ } | undefined;
348
+ computeResource?: string | undefined;
349
+ }>;
350
+ /**
351
+ * The `feed.dag` model: one feed's live execution graph. Topology arrives
352
+ * once on the command envelope; status changes ride the typed progress
353
+ * channel rather than re-sending the graph.
354
+ */
355
+ export declare const feedDagModelSchema: z.ZodObject<{
356
+ feedId: z.ZodNumber;
357
+ feedName: z.ZodString;
358
+ nodes: z.ZodArray<z.ZodObject<{
359
+ id: z.ZodString;
360
+ label: z.ZodString;
361
+ parentIds: z.ZodArray<z.ZodString, "many">;
362
+ joinParentIds: z.ZodArray<z.ZodString, "many">;
363
+ } & {
364
+ instanceId: z.ZodNumber;
365
+ pluginName: z.ZodString;
366
+ pluginVersion: z.ZodOptional<z.ZodString>;
367
+ status: z.ZodCatch<z.ZodEnum<["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"]>>;
368
+ vfsPath: z.ZodString;
369
+ metrics: z.ZodOptional<z.ZodObject<{
370
+ computeSeconds: z.ZodOptional<z.ZodNumber>;
371
+ dataBytes: z.ZodOptional<z.ZodNumber>;
372
+ }, "strip", z.ZodTypeAny, {
373
+ computeSeconds?: number | undefined;
374
+ dataBytes?: number | undefined;
375
+ }, {
376
+ computeSeconds?: number | undefined;
377
+ dataBytes?: number | undefined;
378
+ }>>;
379
+ tally: z.ZodOptional<z.ZodObject<{
380
+ count: z.ZodNumber;
381
+ done: z.ZodNumber;
382
+ error: z.ZodNumber;
383
+ running: z.ZodNumber;
384
+ other: z.ZodNumber;
385
+ anomalies: z.ZodOptional<z.ZodArray<z.ZodObject<{
386
+ id: z.ZodString;
387
+ status: z.ZodCatch<z.ZodEnum<["created", "waiting", "scheduled", "started", "registeringFiles", "finishedSuccessfully", "finishedWithError", "cancelled", "unknown"]>>;
388
+ }, "strip", z.ZodTypeAny, {
389
+ id: string;
390
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
391
+ }, {
392
+ id: string;
393
+ status?: unknown;
394
+ }>, "many">>;
395
+ }, "strip", z.ZodTypeAny, {
396
+ count: number;
397
+ done: number;
398
+ error: number;
399
+ running: number;
400
+ other: number;
401
+ anomalies?: {
402
+ id: string;
403
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
404
+ }[] | undefined;
405
+ }, {
406
+ count: number;
407
+ done: number;
408
+ error: number;
409
+ running: number;
410
+ other: number;
411
+ anomalies?: {
412
+ id: string;
413
+ status?: unknown;
414
+ }[] | undefined;
415
+ }>>;
416
+ /** Where the job ran; `mixed` for a group whose members ran on different resources. */
417
+ computeResource: z.ZodOptional<z.ZodString>;
418
+ }, "strip", z.ZodTypeAny, {
419
+ id: string;
420
+ label: string;
421
+ parentIds: string[];
422
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
423
+ joinParentIds: string[];
424
+ pluginName: string;
425
+ instanceId: number;
426
+ vfsPath: string;
427
+ pluginVersion?: string | undefined;
428
+ metrics?: {
429
+ computeSeconds?: number | undefined;
430
+ dataBytes?: number | undefined;
431
+ } | undefined;
432
+ tally?: {
433
+ count: number;
434
+ done: number;
435
+ error: number;
436
+ running: number;
437
+ other: number;
438
+ anomalies?: {
439
+ id: string;
440
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
441
+ }[] | undefined;
442
+ } | undefined;
443
+ computeResource?: string | undefined;
444
+ }, {
445
+ id: string;
446
+ label: string;
447
+ parentIds: string[];
448
+ joinParentIds: string[];
449
+ pluginName: string;
450
+ instanceId: number;
451
+ vfsPath: string;
452
+ status?: unknown;
453
+ pluginVersion?: string | undefined;
454
+ metrics?: {
455
+ computeSeconds?: number | undefined;
456
+ dataBytes?: number | undefined;
457
+ } | undefined;
458
+ tally?: {
459
+ count: number;
460
+ done: number;
461
+ error: number;
462
+ running: number;
463
+ other: number;
464
+ anomalies?: {
465
+ id: string;
466
+ status?: unknown;
467
+ }[] | undefined;
468
+ } | undefined;
469
+ computeResource?: string | undefined;
470
+ }>, "many">;
471
+ }, "strip", z.ZodTypeAny, {
472
+ nodes: {
473
+ id: string;
474
+ label: string;
475
+ parentIds: string[];
476
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
477
+ joinParentIds: string[];
478
+ pluginName: string;
479
+ instanceId: number;
480
+ vfsPath: string;
481
+ pluginVersion?: string | undefined;
482
+ metrics?: {
483
+ computeSeconds?: number | undefined;
484
+ dataBytes?: number | undefined;
485
+ } | undefined;
486
+ tally?: {
487
+ count: number;
488
+ done: number;
489
+ error: number;
490
+ running: number;
491
+ other: number;
492
+ anomalies?: {
493
+ id: string;
494
+ status: "unknown" | "created" | "waiting" | "scheduled" | "started" | "registeringFiles" | "finishedSuccessfully" | "finishedWithError" | "cancelled";
495
+ }[] | undefined;
496
+ } | undefined;
497
+ computeResource?: string | undefined;
498
+ }[];
499
+ feedId: number;
500
+ feedName: string;
501
+ }, {
502
+ nodes: {
503
+ id: string;
504
+ label: string;
505
+ parentIds: string[];
506
+ joinParentIds: string[];
507
+ pluginName: string;
508
+ instanceId: number;
509
+ vfsPath: string;
510
+ status?: unknown;
511
+ pluginVersion?: string | undefined;
512
+ metrics?: {
513
+ computeSeconds?: number | undefined;
514
+ dataBytes?: number | undefined;
515
+ } | undefined;
516
+ tally?: {
517
+ count: number;
518
+ done: number;
519
+ error: number;
520
+ running: number;
521
+ other: number;
522
+ anomalies?: {
523
+ id: string;
524
+ status?: unknown;
525
+ }[] | undefined;
526
+ } | undefined;
527
+ computeResource?: string | undefined;
528
+ }[];
529
+ feedId: number;
530
+ feedName: string;
531
+ }>;
532
+ export type DagNodeCore = z.infer<typeof dagNodeCoreSchema>;
533
+ export type PipelineDiagramNode = z.infer<typeof pipelineDiagramNodeSchema>;
534
+ export type PipelineDiagramModel = z.infer<typeof pipelineDiagramModelSchema>;
535
+ export type DagNodeStatus = z.infer<typeof dagNodeStatusSchema>;
536
+ export type DagNodeMetrics = z.infer<typeof dagNodeMetricsSchema>;
537
+ export type FeedDagNode = z.infer<typeof feedDagNodeSchema>;
538
+ export type FeedDagModel = z.infer<typeof feedDagModelSchema>;
539
+ /** The envelope model kinds this vocabulary defines. */
540
+ export declare const DAG_MODEL_KINDS: {
541
+ readonly pipelineDiagram: "pipeline.diagram";
542
+ readonly feedDag: "feed.dag";
543
+ };
544
+ /** One feed in the titled chooser list, from the process cache. */
545
+ export declare const feedListEntrySchema: z.ZodObject<{
546
+ id: z.ZodNumber;
547
+ title: z.ZodString;
548
+ owner: z.ZodString;
549
+ status: z.ZodString;
550
+ createdAt: z.ZodString;
551
+ /** Total output bytes across the feed's nodes; absent until its topology is resident. */
552
+ sizeBytes: z.ZodOptional<z.ZodNumber>;
553
+ /** Wall span in seconds, first node start to last node end (or now, while running); absent until resident. */
554
+ wallSeconds: z.ZodOptional<z.ZodNumber>;
555
+ }, "strip", z.ZodTypeAny, {
556
+ id: number;
557
+ status: string;
558
+ title: string;
559
+ owner: string;
560
+ createdAt: string;
561
+ sizeBytes?: number | undefined;
562
+ wallSeconds?: number | undefined;
563
+ }, {
564
+ id: number;
565
+ status: string;
566
+ title: string;
567
+ owner: string;
568
+ createdAt: string;
569
+ sizeBytes?: number | undefined;
570
+ wallSeconds?: number | undefined;
571
+ }>;
572
+ /**
573
+ * The `feed.list` model: the cache-resident feed roster — id, title, and
574
+ * derived status, with no CUBE round-trip. The DAG pane's chooser reads it;
575
+ * the terminal reads the same command's rendered lines.
576
+ */
577
+ export declare const feedListModelSchema: z.ZodObject<{
578
+ feeds: z.ZodArray<z.ZodObject<{
579
+ id: z.ZodNumber;
580
+ title: z.ZodString;
581
+ owner: z.ZodString;
582
+ status: z.ZodString;
583
+ createdAt: z.ZodString;
584
+ /** Total output bytes across the feed's nodes; absent until its topology is resident. */
585
+ sizeBytes: z.ZodOptional<z.ZodNumber>;
586
+ /** Wall span in seconds, first node start to last node end (or now, while running); absent until resident. */
587
+ wallSeconds: z.ZodOptional<z.ZodNumber>;
588
+ }, "strip", z.ZodTypeAny, {
589
+ id: number;
590
+ status: string;
591
+ title: string;
592
+ owner: string;
593
+ createdAt: string;
594
+ sizeBytes?: number | undefined;
595
+ wallSeconds?: number | undefined;
596
+ }, {
597
+ id: number;
598
+ status: string;
599
+ title: string;
600
+ owner: string;
601
+ createdAt: string;
602
+ sizeBytes?: number | undefined;
603
+ wallSeconds?: number | undefined;
604
+ }>, "many">;
605
+ }, "strip", z.ZodTypeAny, {
606
+ feeds: {
607
+ id: number;
608
+ status: string;
609
+ title: string;
610
+ owner: string;
611
+ createdAt: string;
612
+ sizeBytes?: number | undefined;
613
+ wallSeconds?: number | undefined;
614
+ }[];
615
+ }, {
616
+ feeds: {
617
+ id: number;
618
+ status: string;
619
+ title: string;
620
+ owner: string;
621
+ createdAt: string;
622
+ sizeBytes?: number | undefined;
623
+ wallSeconds?: number | undefined;
624
+ }[];
625
+ }>;
626
+ export type FeedListEntry = z.infer<typeof feedListEntrySchema>;
627
+ export type FeedListModel = z.infer<typeof feedListModelSchema>;
628
+ /** The chooser model's envelope kind. */
629
+ export declare const FEED_LIST_MODEL_KIND: "feed.list";