@anchrd/colab-sdk 0.1.22 → 0.1.24

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.
@@ -7,7 +7,9 @@ import { Digest, InstructionsLink, Known, KnownText } from "../instructions/inst
7
7
  import { Limit as PageSize } from "../list-input.js";
8
8
  import { MessageAuthor, MessageId } from "../messages/messages.js";
9
9
  import { BoardShownKind, NodeId, NodeKind, NodePath } from "../nodes/nodes.js";
10
+ import { OperatorRunId } from "../operators/operators.js";
10
11
  import { RunId, RunStatus } from "../runs/runs.js";
12
+ import { SkillOffer } from "../skills/skills.js";
11
13
  import { UserId } from "../users/users.js";
12
14
  // Actions (#46, Seiten › Actions, E43, E67): one list over every board and chat with what waits on a
13
15
  // person. Every row is a node shown live, never a copy, and a node is one row, never two: a task of
@@ -18,7 +20,7 @@ export const ActionListInput = z.strictObject({
18
20
  filter: z
19
21
  .enum(actionFilters)
20
22
  .optional()
21
- .describe("Which rows: all, tasks (tasks, due processes, open runs, the validation's tickets in New for the holder of validator, and broken gadgets you answer for) or chats (rows with something unread, a task's chat included). Notices of other parts of Colab come only with all. Leaving it out gives all. count always counts all."),
23
+ .describe("Which rows: all, tasks (tasks, open runs and broken gadgets you answer for) or chats (rows with something unread, a task's chat included). Notices of other parts of Colab come only with all. Leaving it out gives all. count always counts all."),
22
24
  userId: UserId.optional().describe("Whose Actions to read, `user_…`. Only an admin in admin mode reads another person's, to see where they are stuck; anyone else gets not_found. Leaving it out reads your own."),
23
25
  cursor: z
24
26
  .string()
@@ -41,9 +43,12 @@ export const ActionTask = z.object({
41
43
  handedOver: z.boolean(),
42
44
  // The task's rev (E70, #671): intelligence_task_update takes it without reading the task first.
43
45
  rev: z.number().int(),
44
- // Its start date was reached within the last 24 hours (E124): the row says "starts today", and
46
+ // Its start date was reached within the last 24 hours (E141): the row says "starts today", and
45
47
  // `since` is that moment when it came later than the task into its column. Absent otherwise.
46
48
  startsToday: z.literal(true).optional(),
49
+ // Its due date (`endsAt`) was reached within the last 24 hours (E141): "due today", like
50
+ // `startsToday`. Absent otherwise.
51
+ dueToday: z.literal(true).optional(),
47
52
  });
48
53
  export const ActionChat = z.object({
49
54
  // The messages of others not read yet, by the person themselves (not their AI).
@@ -56,7 +61,8 @@ export const ActionChat = z.object({
56
61
  createdAt: z.iso.datetime(),
57
62
  }),
58
63
  });
59
- // A process board that is due for its Operator.
64
+ // A process board that was due for its Operator; null on every row since #847 (no process falls
65
+ // due), kept one version for clients that read it.
60
66
  export const ActionProcess = z.object({
61
67
  kind: z.enum(["board"]),
62
68
  // The moment of the schedule the next run stands for.
@@ -78,8 +84,7 @@ export const ActionRun = z.object({
78
84
  runId: RunId,
79
85
  status: RunStatus,
80
86
  // The cards of this run assigned to the reader, in every column, in the order of the run's columns
81
- // and their position; never another's. Empty without one, and always for the validation, whose run
82
- // copies no cards.
87
+ // and their position; never another's. Empty without one.
83
88
  tasks: z.array(ActionRunTask),
84
89
  // Only for the responsible of the run's process, while the run waits on them (E124, E125).
85
90
  hint: ActionRunHint.optional(),
@@ -99,17 +104,8 @@ export const ActionGadget = z.object({
99
104
  // Nobody is responsible: the row reaches the publisher only to name one.
100
105
  hint: z.boolean(),
101
106
  });
102
- // The tickets of the validation that wait on the holder of `validator` (E132): its latest run found
103
- // tickets in New, and they still lie there, so the holder goes on until they are checked. On the
104
- // validation board's row, beside its open run or its due moment, or alone.
105
- export const ActionValidation = z.object({
106
- // How many tickets lie in New now (a column of type backlog of the validation board), those that
107
- // came after the run started included.
108
- newTickets: z.number().int().positive(),
109
- });
110
107
  // One row: the node, where it waits, since when, and what makes it wait. Exactly one of task,
111
108
  // process, run and gadget, or none of them on a row that is a chat alone; chat beside any of them.
112
- // `validation` stands on the validation board's row only, beside process or run or alone.
113
109
  export const ActionItem = z.object({
114
110
  node: z.object({
115
111
  nodeId: NodeId,
@@ -119,7 +115,8 @@ export const ActionItem = z.object({
119
115
  // A ticket of the validation board (#47) is called after its node, its crumb is the board.
120
116
  path: NodePath,
121
117
  // The validation status (#47): the type of the column the ticket of a document, table or file
122
- // stands in, and a ticket's own; null for every other node.
118
+ // stands in, and a ticket's own; null for every other node. ⚠️ A ticket in New reads `backlog`
119
+ // (unchecked) although New is a column of type open (#814, E141).
123
120
  status: ColumnType.nullable(),
124
121
  // What a board is, like `NodeListItem.boardKind` (#227); null for every other kind.
125
122
  boardKind: BoardShownKind.nullable(),
@@ -127,17 +124,13 @@ export const ActionItem = z.object({
127
124
  section: ActionSection,
128
125
  // Since when it waits: a task since it came into its column (or its start date was reached), a
129
126
  // chat since its first unread message, a due process since its moment, an open run since it
130
- // started, a run that stands since its last task left Open or In progress, the tickets left in
131
- // New since the run that found them ended.
127
+ // started, a run that stands since its last task left Open or In progress.
132
128
  since: z.iso.datetime(),
133
129
  task: ActionTask.nullable(),
134
130
  chat: ActionChat.nullable(),
135
131
  process: ActionProcess.nullable(),
136
132
  run: ActionRun.nullable(),
137
133
  gadget: ActionGadget.nullable(),
138
- // Absent on every row but the validation board's of the holder of `validator`, and there too
139
- // once no ticket its latest run found lies in New any more.
140
- validation: ActionValidation.optional(),
141
134
  });
142
135
  // What another package puts into a person's Actions (#334, E81, E82): "access invalid" for every
143
136
  // admin, "Operator paused" for its responsible person. Gathered when asked like every row, never
@@ -146,16 +139,33 @@ export const ActionItem = z.object({
146
139
  //
147
140
  // Every text is a closed word with its values, never a sentence (#379, E22): the UI words it in the
148
141
  // reader's language, and the AI reads the same structure.
149
- // What the notice is, for its icon: an access that stopped working, a paused Operator.
150
- export const ActionNoticeKind = z.enum(["credential", "paused"]);
142
+ // A technical abort of an Operator's run (E141, #825): a timeout, a crash or a container that did
143
+ // not start, a run without its closing result, an error of Colab's own, or a provider that failed
144
+ // or set a limit. Never a wanted stop (the Operator waits, a person stops it, the budget or the
145
+ // daily limit), and never a refused credential or a locked Operator, which have their own rows.
146
+ export const ActionAbortReason = z.enum([
147
+ "timeout",
148
+ "crash",
149
+ "container",
150
+ "noresult",
151
+ "error",
152
+ "provider",
153
+ ]);
154
+ // What the notice is, for its icon: an access that stopped working, a paused Operator, a run that
155
+ // broke off for a technical reason (E141, #825).
156
+ export const ActionNoticeKind = z.enum(["credential", "paused", "abort"]);
151
157
  // Its title: which notice, and the name it is about.
152
158
  export const ActionNoticeTitle = z.discriminatedUnion("text", [
153
159
  // "Access invalid: <the credential's name>".
154
160
  z.object({ text: z.literal("credentialInvalid"), name: z.string() }),
155
161
  // "Operator paused: daily limit reached".
156
162
  z.object({ text: z.literal("pausedLimit") }),
163
+ // "Monthly limit reached": a person's personal Operators pause (E143, #804).
164
+ z.object({ text: z.literal("pausedBudget") }),
157
165
  // "Operator paused: <failures> failures".
158
166
  z.object({ text: z.literal("pausedFailures"), failures: z.number().int().positive() }),
167
+ // "Run aborted: <reason>" (E141, #825).
168
+ z.object({ text: z.literal("runAborted"), reason: ActionAbortReason }),
159
169
  ]);
160
170
  // One step of the grey path below the title: a word the UI translates, or a name shown as it is.
161
171
  export const ActionNoticeCrumb = z.union([
@@ -180,6 +190,13 @@ export const ActionNoticeReason = z.object({
180
190
  limit: z.number().int().positive(),
181
191
  until: z.iso.datetime(),
182
192
  }),
193
+ // "<spentUsd> of <limitUsd> this month. Your Operators go on on <until>." (E143, #804)
194
+ z.object({
195
+ text: z.literal("budgetReached"),
196
+ spentUsd: z.number().nonnegative(),
197
+ limitUsd: z.number().nonnegative(),
198
+ until: z.iso.datetime(),
199
+ }),
183
200
  // "Last at <at>: <detail>", the last failed run; null without one.
184
201
  z.object({
185
202
  text: z.literal("lastFailure"),
@@ -190,9 +207,17 @@ export const ActionNoticeReason = z.object({
190
207
  });
191
208
  // A button of the row: its word and where it leads, a path within Colab. The first is the primary.
192
209
  export const ActionNoticeButton = z.object({
193
- label: z.enum(["replaceCredential", "resume", "changeLimit", "viewLog"]),
210
+ label: z.enum(["replaceCredential", "resume", "changeLimit", "viewLog", "viewRun"]),
194
211
  href: z.string(),
195
212
  });
213
+ // What the abort row carries over `/mcp` (Seiten › Actions): why, the run, and the cards the run
214
+ // stood at that are still In progress, each with its rev, so the Operator tidies them up first when
215
+ // it is woken next. The row itself wakes nobody and starts no run.
216
+ export const ActionAbort = z.object({
217
+ reason: ActionAbortReason,
218
+ runId: OperatorRunId,
219
+ tasks: z.array(ActionRunTask),
220
+ });
196
221
  export const ActionNotice = z.object({
197
222
  // The package that names it.
198
223
  package: z.enum(packages),
@@ -205,6 +230,8 @@ export const ActionNotice = z.object({
205
230
  // Where the row leads: the page of the access or the Operator, a path within Colab.
206
231
  href: z.string(),
207
232
  buttons: z.array(ActionNoticeButton).max(3),
233
+ // Only on a row of the kind `abort`; operator_run_update with read: true marks it read.
234
+ abort: ActionAbort.optional(),
208
235
  });
209
236
  export const ActionNoticeItem = z.object({
210
237
  notice: ActionNotice,
@@ -239,4 +266,8 @@ export const ActionList = z.object({
239
266
  // root folder as one link of #39's chain with its version, empty when there is none (traps P033,
240
267
  // P034); only the reference when it sent their digest under `known` (E123).
241
268
  instructions: MachineInstructionsRead.optional(),
269
+ // Only for a machine reading its own Actions over MCP (E140, #817): name and trigger of every
270
+ // readable skill with its trigger on, from `.Skills` and the folders above the nodes of its rows.
271
+ // An Operator gets them at the start of a run and decides itself which to load.
272
+ skills: z.array(SkillOffer).optional(),
242
273
  });
@@ -5,10 +5,9 @@ export declare const TaskId: z.ZodTemplateLiteral<`node_${string}`>;
5
5
  export type TaskId = z.infer<typeof TaskId>;
6
6
  export declare const LabelId: z.ZodTemplateLiteral<`label_${string}`>;
7
7
  export type LabelId = z.infer<typeof LabelId>;
8
- export declare const boardKinds: readonly ["board", "process"];
8
+ export declare const boardKinds: readonly ["board"];
9
9
  export declare const BoardKind: z.ZodEnum<{
10
10
  board: "board";
11
- process: "process";
12
11
  }>;
13
12
  export type BoardKind = z.infer<typeof BoardKind>;
14
13
  export declare const BoardCreateInput: z.ZodObject<{
@@ -38,13 +37,13 @@ export declare const BoardCreateInput: z.ZodObject<{
38
37
  package: "package";
39
38
  target: "target";
40
39
  search: "search";
40
+ calendar: "calendar";
41
41
  flag: "flag";
42
42
  route: "route";
43
43
  "arrow-right": "arrow-right";
44
44
  "square-check": "square-check";
45
45
  "file-text": "file-text";
46
46
  bulb: "bulb";
47
- calendar: "calendar";
48
47
  star: "star";
49
48
  bolt: "bolt";
50
49
  bug: "bug";
@@ -85,35 +84,7 @@ export declare const BoardUpdateInput: z.ZodObject<{
85
84
  rev: z.ZodNumber;
86
85
  kind: z.ZodOptional<z.ZodEnum<{
87
86
  board: "board";
88
- process: "process";
89
87
  }>>;
90
- responsibleId: z.ZodOptional<z.ZodNullable<z.ZodTemplateLiteral<`user_${string}`>>>;
91
- schedule: z.ZodOptional<z.ZodObject<{
92
- rhythm: z.ZodEnum<{
93
- manual: "manual";
94
- daily: "daily";
95
- weekly: "weekly";
96
- monthly: "monthly";
97
- dates: "dates";
98
- }>;
99
- days: z.ZodOptional<z.ZodArray<z.ZodEnum<{
100
- monday: "monday";
101
- tuesday: "tuesday";
102
- wednesday: "wednesday";
103
- thursday: "thursday";
104
- friday: "friday";
105
- saturday: "saturday";
106
- sunday: "sunday";
107
- }>>>;
108
- dayOfMonth: z.ZodOptional<z.ZodArray<z.ZodInt>>;
109
- times: z.ZodOptional<z.ZodArray<z.ZodString>>;
110
- dates: z.ZodOptional<z.ZodArray<z.ZodString>>;
111
- zone: z.ZodOptional<z.ZodString>;
112
- whileOpen: z.ZodOptional<z.ZodEnum<{
113
- wait: "wait";
114
- continue: "continue";
115
- }>>;
116
- }, z.core.$strict>>;
117
88
  instruction: z.ZodOptional<z.ZodString>;
118
89
  columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
119
90
  columnId: z.ZodOptional<z.ZodTemplateLiteral<`column_${string}`>>;
@@ -139,13 +110,13 @@ export declare const BoardUpdateInput: z.ZodObject<{
139
110
  package: "package";
140
111
  target: "target";
141
112
  search: "search";
113
+ calendar: "calendar";
142
114
  flag: "flag";
143
115
  route: "route";
144
116
  "arrow-right": "arrow-right";
145
117
  "square-check": "square-check";
146
118
  "file-text": "file-text";
147
119
  bulb: "bulb";
148
- calendar: "calendar";
149
120
  star: "star";
150
121
  bolt: "bolt";
151
122
  bug: "bug";
@@ -194,6 +165,7 @@ export declare const BoardColumn: z.ZodObject<{
194
165
  }>;
195
166
  visible: z.ZodBoolean;
196
167
  description: z.ZodString;
168
+ system: z.ZodOptional<z.ZodLiteral<"new">>;
197
169
  }, z.core.$strip>;
198
170
  export type BoardColumn = z.infer<typeof BoardColumn>;
199
171
  export declare const BoardLabel: z.ZodObject<{
@@ -281,6 +253,24 @@ export declare const BoardDetail: z.ZodObject<{
281
253
  sunday: "sunday";
282
254
  }>>>;
283
255
  dayOfMonth: z.ZodOptional<z.ZodArray<z.ZodInt>>;
256
+ weekdayOfMonth: z.ZodOptional<z.ZodObject<{
257
+ week: z.ZodEnum<{
258
+ first: "first";
259
+ last: "last";
260
+ second: "second";
261
+ third: "third";
262
+ fourth: "fourth";
263
+ }>;
264
+ day: z.ZodEnum<{
265
+ monday: "monday";
266
+ tuesday: "tuesday";
267
+ wednesday: "wednesday";
268
+ thursday: "thursday";
269
+ friday: "friday";
270
+ saturday: "saturday";
271
+ sunday: "sunday";
272
+ }>;
273
+ }, z.core.$strict>>;
284
274
  times: z.ZodOptional<z.ZodArray<z.ZodString>>;
285
275
  dates: z.ZodOptional<z.ZodArray<z.ZodString>>;
286
276
  zone: z.ZodOptional<z.ZodString>;
@@ -363,6 +353,7 @@ export declare const BoardDetail: z.ZodObject<{
363
353
  }>;
364
354
  visible: z.ZodBoolean;
365
355
  description: z.ZodString;
356
+ system: z.ZodOptional<z.ZodLiteral<"new">>;
366
357
  }, z.core.$strip>>;
367
358
  cardKinds: z.ZodArray<z.ZodObject<{
368
359
  kindId: z.ZodTemplateLiteral<`kind_${string}`>;
@@ -373,13 +364,13 @@ export declare const BoardDetail: z.ZodObject<{
373
364
  package: "package";
374
365
  target: "target";
375
366
  search: "search";
367
+ calendar: "calendar";
376
368
  flag: "flag";
377
369
  route: "route";
378
370
  "arrow-right": "arrow-right";
379
371
  "square-check": "square-check";
380
372
  "file-text": "file-text";
381
373
  bulb: "bulb";
382
- calendar: "calendar";
383
374
  star: "star";
384
375
  bolt: "bolt";
385
376
  bug: "bug";
@@ -609,13 +600,13 @@ export declare const BoardTaskItem: z.ZodObject<{
609
600
  package: "package";
610
601
  target: "target";
611
602
  search: "search";
603
+ calendar: "calendar";
612
604
  flag: "flag";
613
605
  route: "route";
614
606
  "arrow-right": "arrow-right";
615
607
  "square-check": "square-check";
616
608
  "file-text": "file-text";
617
609
  bulb: "bulb";
618
- calendar: "calendar";
619
610
  star: "star";
620
611
  bolt: "bolt";
621
612
  bug: "bug";
@@ -636,6 +627,8 @@ export declare const BoardTaskItem: z.ZodObject<{
636
627
  board: "board";
637
628
  task: "task";
638
629
  gadget: "gadget";
630
+ goal: "goal";
631
+ skill: "skill";
639
632
  }>;
640
633
  path: z.ZodObject<{
641
634
  section: z.ZodEnum<{
@@ -709,13 +702,13 @@ export declare const BoardTaskList: z.ZodObject<{
709
702
  package: "package";
710
703
  target: "target";
711
704
  search: "search";
705
+ calendar: "calendar";
712
706
  flag: "flag";
713
707
  route: "route";
714
708
  "arrow-right": "arrow-right";
715
709
  "square-check": "square-check";
716
710
  "file-text": "file-text";
717
711
  bulb: "bulb";
718
- calendar: "calendar";
719
712
  star: "star";
720
713
  bolt: "bolt";
721
714
  bug: "bug";
@@ -736,6 +729,8 @@ export declare const BoardTaskList: z.ZodObject<{
736
729
  board: "board";
737
730
  task: "task";
738
731
  gadget: "gadget";
732
+ goal: "goal";
733
+ skill: "skill";
739
734
  }>;
740
735
  path: z.ZodObject<{
741
736
  section: z.ZodEnum<{
@@ -779,6 +774,7 @@ export declare const BoardTaskList: z.ZodObject<{
779
774
  }>;
780
775
  visible: z.ZodBoolean;
781
776
  description: z.ZodString;
777
+ system: z.ZodOptional<z.ZodLiteral<"new">>;
782
778
  }, z.core.$strip>>>;
783
779
  template: z.ZodOptional<z.ZodObject<{
784
780
  message: z.ZodString;
@@ -840,6 +836,7 @@ export declare const BoardTaskBriefList: z.ZodObject<{
840
836
  }>;
841
837
  visible: z.ZodBoolean;
842
838
  description: z.ZodString;
839
+ system: z.ZodOptional<z.ZodLiteral<"new">>;
843
840
  }, z.core.$strip>>>;
844
841
  template: z.ZodOptional<z.ZodObject<{
845
842
  message: z.ZodString;
@@ -962,13 +959,13 @@ export declare const TaskDetail: z.ZodObject<{
962
959
  package: "package";
963
960
  target: "target";
964
961
  search: "search";
962
+ calendar: "calendar";
965
963
  flag: "flag";
966
964
  route: "route";
967
965
  "arrow-right": "arrow-right";
968
966
  "square-check": "square-check";
969
967
  "file-text": "file-text";
970
968
  bulb: "bulb";
971
- calendar: "calendar";
972
969
  star: "star";
973
970
  bolt: "bolt";
974
971
  bug: "bug";
@@ -1004,13 +1001,13 @@ export declare const TaskDetail: z.ZodObject<{
1004
1001
  package: "package";
1005
1002
  target: "target";
1006
1003
  search: "search";
1004
+ calendar: "calendar";
1007
1005
  flag: "flag";
1008
1006
  route: "route";
1009
1007
  "arrow-right": "arrow-right";
1010
1008
  "square-check": "square-check";
1011
1009
  "file-text": "file-text";
1012
1010
  bulb: "bulb";
1013
- calendar: "calendar";
1014
1011
  star: "star";
1015
1012
  bolt: "bolt";
1016
1013
  bug: "bug";
@@ -1035,13 +1032,13 @@ export declare const TaskDetail: z.ZodObject<{
1035
1032
  package: "package";
1036
1033
  target: "target";
1037
1034
  search: "search";
1035
+ calendar: "calendar";
1038
1036
  flag: "flag";
1039
1037
  route: "route";
1040
1038
  "arrow-right": "arrow-right";
1041
1039
  "square-check": "square-check";
1042
1040
  "file-text": "file-text";
1043
1041
  bulb: "bulb";
1044
- calendar: "calendar";
1045
1042
  star: "star";
1046
1043
  bolt: "bolt";
1047
1044
  bug: "bug";
@@ -1076,6 +1073,8 @@ export declare const TaskDetail: z.ZodObject<{
1076
1073
  board: "board";
1077
1074
  task: "task";
1078
1075
  gadget: "gadget";
1076
+ goal: "goal";
1077
+ skill: "skill";
1079
1078
  }>;
1080
1079
  name: z.ZodString;
1081
1080
  path: z.ZodObject<{
@@ -1161,6 +1160,7 @@ export declare const TaskDetail: z.ZodObject<{
1161
1160
  }>;
1162
1161
  visible: z.ZodBoolean;
1163
1162
  description: z.ZodString;
1163
+ system: z.ZodOptional<z.ZodLiteral<"new">>;
1164
1164
  current: z.ZodBoolean;
1165
1165
  }, z.core.$strip>>>;
1166
1166
  }, z.core.$strip>;
@@ -8,7 +8,6 @@ import { Missing } from "../missing/missing.js";
8
8
  import { BoardShownKind, BoardSystem, NodeId, NodePerson } from "../nodes/nodes.js";
9
9
  import { IdempotencyKey, Rev } from "../primitives/primitives.js";
10
10
  import { Schedule } from "../schedule/schedule.js";
11
- import { UserId } from "../users/users.js";
12
11
  import { TicketSubject, TicketSubjectRef } from "../validation/validation.js";
13
12
  import { TaskMove } from "../versions/versions.js";
14
13
  // Boards, their columns and labels, and tasks (#42, Nodes › Board, Nodes › Aufgabe, E38, E40, E41,
@@ -28,11 +27,12 @@ export const LabelId = z
28
27
  // A run of a process (#43). The same id `runs.ts` names `RunId`; written here again because
29
28
  // `runs.ts` builds on this file and the graph between the files stays acyclic (trap C009).
30
29
  const RunRef = idSchema("run");
31
- // What a board is (#43, Nodes › Board › Prozess): a board, or a process whose runs are copies of it.
32
- export const boardKinds = ["board", "process"];
30
+ // What a caller makes a board (#43, #847): a board. The kind process is switched off (E139); a process
31
+ // from before stays readable and is turned back into a board, never made anew.
32
+ export const boardKinds = ["board"];
33
33
  export const BoardKind = z
34
34
  .enum(boardKinds)
35
- .describe("board: a board people work on. process: a template whose runs the Operator works through, each a copy of its columns and tasks; it needs a machine (an Operator) with write on it, a first column of type backlog, every task of the template in that first column, and a responsible who writes on it (or none).");
35
+ .describe("board: a board people work on. A process from before goals is made a board again with it; no board becomes a process any more, a goal does what a process did.");
36
36
  const Name = z.string().max(200);
37
37
  // A column's description (#624), Markdown for every AI working on the board.
38
38
  const ColumnDescription = z.string().max(20_000);
@@ -66,12 +66,7 @@ const BoardInstruction = z.string().max(200_000);
66
66
  export const BoardUpdateInput = z.strictObject({
67
67
  boardId: BoardId,
68
68
  rev: Rev,
69
- kind: BoardKind.optional().describe("Make the board a process or a board again. Saving a process is refused with conflict while no machine can write on the board, the first column is not of type backlog, a task of the template stands outside the first column, or its responsible no longer writes on the board."),
70
- // E125: a process has one responsible, a board none.
71
- responsibleId: UserId.nullable()
72
- .optional()
73
- .describe("The process's responsible: a person or machine who writes on the board, `user_…`; null for nobody, then whoever made it a process gets the hints. They get the start of a run and a run that stands as an Action and open its first checkpoints. Only with a process. Leaving it out keeps it; a board made a process without one gets whoever makes it a process, when they write on it."),
74
- schedule: Schedule.optional().describe("When a run of the process or of the validation falls due (Ausführung). Leaving it out keeps it; a board made a process without one runs by hand."),
69
+ kind: BoardKind.optional().describe("Make a process from before goals a board again. Its runs stay readable with intelligence_run_list."),
75
70
  instruction: BoardInstruction.optional().describe("The board's instruction, Markdown: what the board is about and how every AI working on it goes about it. It comes along with every read of the board and its tasks over MCP, as only its digest where the read sends that digest under known. On the validation board only an admin in admin mode changes it. An empty text removes it; leaving it out keeps it."),
76
71
  columns: Columns.optional(),
77
72
  cardKinds: CardKindsInput.optional(),
@@ -91,6 +86,9 @@ export const BoardColumn = z.object({
91
86
  visible: z.boolean(),
92
87
  // Markdown, empty without one (#624).
93
88
  description: z.string(),
89
+ // `new` on the validation board's New only (#814): a column of type open where every ticket starts,
90
+ // shown unchecked (grey, dashed) like the status of its tickets. Absent on every other column.
91
+ system: z.literal("new").optional(),
94
92
  });
95
93
  export const BoardLabel = z.object({ labelId: LabelId, name: z.string() });
96
94
  // What stands between a board and saving it as a process (#43): the UI shows a box for each, and the
@@ -138,9 +136,10 @@ export const BoardDetail = z.object({
138
136
  schedule: Schedule.nullable(),
139
137
  // The board's instruction (E87, #354; the validation's since #47), Markdown; null without one.
140
138
  instruction: z.string().nullable(),
141
- // The next moment a run falls due, null for a board, a manual process or dates that have passed.
139
+ // The next moment a run falls due; null since no process runs any more (#847), kept one version
140
+ // for clients that read it.
142
141
  nextRunAt: z.iso.datetime().nullable(),
143
- // The moment a run is owed for now (passed, unanswered, no run open), else null.
142
+ // The moment a run was owed; null since #847, like `nextRunAt`.
144
143
  dueAt: z.iso.datetime().nullable(),
145
144
  processCheck: ProcessCheck,
146
145
  // Who carries the validation (E79, #378): the holder of the role `validator` while they can act,
@@ -23,13 +23,13 @@ export declare const CardKindIcon: z.ZodEnum<{
23
23
  package: "package";
24
24
  target: "target";
25
25
  search: "search";
26
+ calendar: "calendar";
26
27
  flag: "flag";
27
28
  route: "route";
28
29
  "arrow-right": "arrow-right";
29
30
  "square-check": "square-check";
30
31
  "file-text": "file-text";
31
32
  bulb: "bulb";
32
- calendar: "calendar";
33
33
  star: "star";
34
34
  bolt: "bolt";
35
35
  bug: "bug";
@@ -70,13 +70,13 @@ export declare const CardKindInput: z.ZodObject<{
70
70
  package: "package";
71
71
  target: "target";
72
72
  search: "search";
73
+ calendar: "calendar";
73
74
  flag: "flag";
74
75
  route: "route";
75
76
  "arrow-right": "arrow-right";
76
77
  "square-check": "square-check";
77
78
  "file-text": "file-text";
78
79
  bulb: "bulb";
79
- calendar: "calendar";
80
80
  star: "star";
81
81
  bolt: "bolt";
82
82
  bug: "bug";
@@ -115,13 +115,13 @@ export declare const CardKindsInput: z.ZodArray<z.ZodObject<{
115
115
  package: "package";
116
116
  target: "target";
117
117
  search: "search";
118
+ calendar: "calendar";
118
119
  flag: "flag";
119
120
  route: "route";
120
121
  "arrow-right": "arrow-right";
121
122
  "square-check": "square-check";
122
123
  "file-text": "file-text";
123
124
  bulb: "bulb";
124
- calendar: "calendar";
125
125
  star: "star";
126
126
  bolt: "bolt";
127
127
  bug: "bug";
@@ -185,13 +185,13 @@ export declare const CardKind: z.ZodObject<{
185
185
  package: "package";
186
186
  target: "target";
187
187
  search: "search";
188
+ calendar: "calendar";
188
189
  flag: "flag";
189
190
  route: "route";
190
191
  "arrow-right": "arrow-right";
191
192
  "square-check": "square-check";
192
193
  "file-text": "file-text";
193
194
  bulb: "bulb";
194
- calendar: "calendar";
195
195
  star: "star";
196
196
  bolt: "bolt";
197
197
  bug: "bug";
@@ -230,13 +230,13 @@ export declare const TaskKind: z.ZodObject<{
230
230
  package: "package";
231
231
  target: "target";
232
232
  search: "search";
233
+ calendar: "calendar";
233
234
  flag: "flag";
234
235
  route: "route";
235
236
  "arrow-right": "arrow-right";
236
237
  "square-check": "square-check";
237
238
  "file-text": "file-text";
238
239
  bulb: "bulb";
239
- calendar: "calendar";
240
240
  star: "star";
241
241
  bolt: "bolt";
242
242
  bug: "bug";
@@ -3,8 +3,8 @@ export declare const ConnectionId: z.ZodTemplateLiteral<`connection_${string}`>;
3
3
  export declare const ConnectionState: z.ZodEnum<{
4
4
  expired: "expired";
5
5
  running: "running";
6
- not_connected: "not_connected";
7
6
  unreachable: "unreachable";
7
+ not_connected: "not_connected";
8
8
  }>;
9
9
  export type ConnectionState = z.infer<typeof ConnectionState>;
10
10
  export declare const ConnectionListInput: z.ZodObject<{
@@ -49,8 +49,8 @@ export declare const Connection: z.ZodObject<{
49
49
  state: z.ZodEnum<{
50
50
  expired: "expired";
51
51
  running: "running";
52
- not_connected: "not_connected";
53
52
  unreachable: "unreachable";
53
+ not_connected: "not_connected";
54
54
  }>;
55
55
  checkedAt: z.ZodNullable<z.ZodISODateTime>;
56
56
  expiredAt: z.ZodNullable<z.ZodISODateTime>;
@@ -70,8 +70,8 @@ export declare const ConnectionDetail: z.ZodObject<{
70
70
  state: z.ZodEnum<{
71
71
  expired: "expired";
72
72
  running: "running";
73
- not_connected: "not_connected";
74
73
  unreachable: "unreachable";
74
+ not_connected: "not_connected";
75
75
  }>;
76
76
  checkedAt: z.ZodNullable<z.ZodISODateTime>;
77
77
  expiredAt: z.ZodNullable<z.ZodISODateTime>;
@@ -93,8 +93,8 @@ export declare const ConnectionList: z.ZodObject<{
93
93
  state: z.ZodEnum<{
94
94
  expired: "expired";
95
95
  running: "running";
96
- not_connected: "not_connected";
97
96
  unreachable: "unreachable";
97
+ not_connected: "not_connected";
98
98
  }>;
99
99
  checkedAt: z.ZodNullable<z.ZodISODateTime>;
100
100
  expiredAt: z.ZodNullable<z.ZodISODateTime>;
@@ -125,8 +125,8 @@ export declare const ConnectionTested: z.ZodObject<{
125
125
  state: z.ZodEnum<{
126
126
  expired: "expired";
127
127
  running: "running";
128
- not_connected: "not_connected";
129
128
  unreachable: "unreachable";
129
+ not_connected: "not_connected";
130
130
  }>;
131
131
  checkedAt: z.ZodNullable<z.ZodISODateTime>;
132
132
  expiredAt: z.ZodNullable<z.ZodISODateTime>;
@@ -50,8 +50,8 @@ export declare const fileTextStates: readonly ["reading", "done", "failed", "non
50
50
  export declare const FileTextState: z.ZodEnum<{
51
51
  done: "done";
52
52
  failed: "failed";
53
- reading: "reading";
54
53
  none: "none";
54
+ reading: "reading";
55
55
  }>;
56
56
  export type FileTextState = z.infer<typeof FileTextState>;
57
57
  export declare const FileDetail: z.ZodObject<{
@@ -69,8 +69,8 @@ export declare const FileDetail: z.ZodObject<{
69
69
  textState: z.ZodEnum<{
70
70
  done: "done";
71
71
  failed: "failed";
72
- reading: "reading";
73
72
  none: "none";
73
+ reading: "reading";
74
74
  }>;
75
75
  excerpt: z.ZodOptional<z.ZodObject<{
76
76
  offset: z.ZodNumber;