@anchrd/colab-sdk 0.1.23 → 0.1.25

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.
@@ -4,11 +4,8 @@ import { ColumnId, ColumnType, TaskColumn } from "../columns/columns.js";
4
4
  import { idSchema } from "../ids/ids.js";
5
5
  import { InstructionRead, Known } from "../instructions/instructions.js";
6
6
  import { Flag } from "../list-input.js";
7
- import { Missing } from "../missing/missing.js";
8
7
  import { BoardShownKind, BoardSystem, NodeId, NodePerson } from "../nodes/nodes.js";
9
8
  import { IdempotencyKey, Rev } from "../primitives/primitives.js";
10
- import { Schedule } from "../schedule/schedule.js";
11
- import { UserId } from "../users/users.js";
12
9
  import { TicketSubject, TicketSubjectRef } from "../validation/validation.js";
13
10
  import { TaskMove } from "../versions/versions.js";
14
11
  // Boards, their columns and labels, and tasks (#42, Nodes › Board, Nodes › Aufgabe, E38, E40, E41,
@@ -28,11 +25,12 @@ export const LabelId = z
28
25
  // A run of a process (#43). The same id `runs.ts` names `RunId`; written here again because
29
26
  // `runs.ts` builds on this file and the graph between the files stays acyclic (trap C009).
30
27
  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"];
28
+ // What a caller makes a board (#43, #847): a board. The kind process is switched off (E139); a process
29
+ // from before stays readable and is turned back into a board, never made anew.
30
+ export const boardKinds = ["board"];
33
31
  export const BoardKind = z
34
32
  .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).");
33
+ .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
34
  const Name = z.string().max(200);
37
35
  // A column's description (#624), Markdown for every AI working on the board.
38
36
  const ColumnDescription = z.string().max(20_000);
@@ -66,12 +64,7 @@ const BoardInstruction = z.string().max(200_000);
66
64
  export const BoardUpdateInput = z.strictObject({
67
65
  boardId: BoardId,
68
66
  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."),
67
+ kind: BoardKind.optional().describe("Make a process from before goals a board again. Its runs stay readable with intelligence_run_list."),
75
68
  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
69
  columns: Columns.optional(),
77
70
  cardKinds: CardKindsInput.optional(),
@@ -96,61 +89,17 @@ export const BoardColumn = z.object({
96
89
  system: z.literal("new").optional(),
97
90
  });
98
91
  export const BoardLabel = z.object({ labelId: LabelId, name: z.string() });
99
- // What stands between a board and saving it as a process (#43): the UI shows a box for each, and the
100
- // server refuses on its own (trap P066).
101
- export const ProcessCheck = z.object({
102
- // A machine (an Operator) holds write on the board (#334: any machine, whatever its roles).
103
- operator: z.boolean(),
104
- // The first column is of type backlog.
105
- firstColumnBacklog: z.boolean(),
106
- // How many tasks of the template stand outside the first column.
107
- outside: z.number().int(),
108
- // Every machine that is neither locked nor archived, whatever its roles, by name (#148, #334):
109
- // whom the settings offer "Für Operator freigeben". Empty when there is none. Readable with the board,
110
- // without any right in `access`.
111
- operators: z.array(z.object({ userId: z.string(), name: z.string() })),
112
- // The process's responsible writes on the board (E125); true without one and on a board that is
113
- // no process.
114
- responsibleWrites: z.boolean(),
115
- // The template check of a process (#675): what a run of its template needs and Colab can check
116
- // without knowing what a field means, each entry with the card's `taskId`: a card without a kind
117
- // on a board with kinds, an empty required field, an assignee who is gone or does not write on the
118
- // board, a node a link field names that the assignee cannot read. The same entries a save of the
119
- // process and a template card's create answer under `missing`. Empty on a board that is no process.
120
- missing: z.array(Missing),
121
- });
122
- // A process read without `runId` is its template, not a run (#678): said so over MCP, with the runs
123
- // that run now, so an AI works on a run's cards and not on the template's. Absent on a board that is
124
- // no process, and with `runId`.
125
- export const TemplateNote = z.object({
126
- message: z.string(),
127
- runs: z.array(z.object({
128
- runId: RunRef,
129
- startedAt: z.iso.datetime(),
130
- // The moment of the schedule the run stands for; null for one started by hand.
131
- dueAt: z.iso.datetime().nullable(),
132
- })),
133
- });
134
92
  export const BoardDetail = z.object({
135
93
  boardId: NodeId,
136
94
  name: z.string(),
137
95
  kind: BoardShownKind,
138
96
  // A system part with a lock, null for every other board.
139
97
  system: BoardSystem.nullable(),
140
- // A process's or the validation's schedule, its zone filled; null for a board.
141
- schedule: Schedule.nullable(),
142
98
  // The board's instruction (E87, #354; the validation's since #47), Markdown; null without one.
143
99
  instruction: z.string().nullable(),
144
- // The next moment a run falls due, null for a board, a manual process or dates that have passed.
145
- nextRunAt: z.iso.datetime().nullable(),
146
- // The moment a run is owed for now (passed, unanswered, no run open), else null.
147
- dueAt: z.iso.datetime().nullable(),
148
- processCheck: ProcessCheck,
149
100
  // Who carries the validation (E79, #378): the holder of the role `validator` while they can act,
150
101
  // for every reader of the validation board; null without one and for every other board.
151
102
  validator: NodePerson.nullable(),
152
- // Who is responsible for a process (E125); null for nobody and on every board that is no process.
153
- responsible: NodePerson.nullable(),
154
103
  columns: z.array(BoardColumn),
155
104
  // The card kinds with their fields in order (#638, E115); empty on a board of free cards.
156
105
  cardKinds: z.array(CardKind),
@@ -158,8 +107,6 @@ export const BoardDetail = z.object({
158
107
  rights: z.object({ write: z.boolean() }),
159
108
  rev: z.number().int(),
160
109
  updatedAt: z.iso.datetime(),
161
- // Over MCP only, on a process (#678): this is the template, and the runs that run now.
162
- template: TemplateNote.optional(),
163
110
  });
164
111
  // The most one page of a board's tasks holds: a board is read whole for the kanban.
165
112
  const TaskLimit = z.coerce
@@ -175,7 +122,7 @@ export const compactTaskLimit = 50;
175
122
  export const maxBulkTasks = 100;
176
123
  export const BoardTaskListInput = z.strictObject({
177
124
  boardId: BoardId,
178
- runId: RunRef.optional().describe("The run of this process whose tasks and columns to list. Leaving it out lists the template, the board itself."),
125
+ runId: RunRef.optional().describe("The run of a process from before goals whose tasks and columns to read, as intelligence_run_list names it. Leaving it out lists the board itself."),
179
126
  columnId: ColumnId.optional().describe("Only the tasks in this column."),
180
127
  type: ColumnType.optional().describe("Only the tasks in columns of this type. The archive column's tasks are listed only with type archive."),
181
128
  assigneeId: idSchema("user").optional().describe("Only the tasks assigned to this person."),
@@ -250,7 +197,6 @@ const NewTaskEntry = z.strictObject({
250
197
  });
251
198
  export const BoardTaskCreateInput = z.strictObject({
252
199
  boardId: BoardId,
253
- runId: RunRef.optional().describe("Create the task in this running run of the process, in one of the run's columns. Leaving it out creates it in the template. A completed run takes no task."),
254
200
  ...newTask,
255
201
  title: Title.optional().describe("The task's title, for one task. To create several, leave it out and send tasks."),
256
202
  tasks: z
@@ -303,11 +249,10 @@ export const TaskUpdateInput = z.strictObject({
303
249
  .optional()
304
250
  .describe("The editing session the browser keeps while a person stays on the task: its saves go into one version, a move always into its own. Leaving it out makes every change a version of its own, which is right for an AI."),
305
251
  });
306
- // Many tasks of one board or run changed in one call (#625, E114): only by id, each with its rev,
252
+ // Many tasks of one board changed in one call (#625, E114): only by id, each with its rev,
307
253
  // all or nothing.
308
254
  export const BoardTaskUpdateInput = z.strictObject({
309
255
  boardId: BoardId,
310
- runId: RunRef.optional().describe("The running run of the process whose tasks these are. Leaving it out changes tasks of the template, the board itself."),
311
256
  tasks: z
312
257
  .array(TaskUpdateInput)
313
258
  .min(1)
@@ -325,7 +270,8 @@ export const TaskImage = z.union([
325
270
  ]);
326
271
  export const BoardTaskItem = z.object({
327
272
  taskId: NodeId,
328
- // The run the task belongs to, null for a task of the board itself (the template of a process).
273
+ // The run of a process from before goals the task belongs to, read only (#852); null for a task
274
+ // of the board itself.
329
275
  runId: RunRef.nullable(),
330
276
  title: z.string(),
331
277
  column: TaskColumn,
@@ -364,9 +310,6 @@ export const BoardTaskList = z.object({
364
310
  // Over MCP only (#624): every column of the board (of the run, with `runId`) in order, with its
365
311
  // description, once per page.
366
312
  columns: z.array(BoardColumn).optional(),
367
- // Over MCP only, on a process without `runId` (#678): these are the template's cards, and the runs
368
- // that run now.
369
- template: TemplateNote.optional(),
370
313
  });
371
314
  // A card as the list answers it over MCP without `content` (E127, #674): what finds a card and moves
372
315
  // it on, without its text and the rest of the card.
@@ -164,8 +164,6 @@ export declare const GoalCheck: z.ZodObject<{
164
164
  credential_invalid: "credential_invalid";
165
165
  incomplete: "incomplete";
166
166
  no_right: "no_right";
167
- no_kind: "no_kind";
168
- no_assignee: "no_assignee";
169
167
  no_machine: "no_machine";
170
168
  }>;
171
169
  machineId: z.ZodOptional<z.ZodTemplateLiteral<`user_${string}`>>;
@@ -236,8 +234,6 @@ export declare const GoalReady: z.ZodObject<{
236
234
  credential_invalid: "credential_invalid";
237
235
  incomplete: "incomplete";
238
236
  no_right: "no_right";
239
- no_kind: "no_kind";
240
- no_assignee: "no_assignee";
241
237
  no_machine: "no_machine";
242
238
  }>;
243
239
  machineId: z.ZodOptional<z.ZodTemplateLiteral<`user_${string}`>>;
@@ -758,8 +754,6 @@ export declare const GoalDetail: z.ZodObject<{
758
754
  credential_invalid: "credential_invalid";
759
755
  incomplete: "incomplete";
760
756
  no_right: "no_right";
761
- no_kind: "no_kind";
762
- no_assignee: "no_assignee";
763
757
  no_machine: "no_machine";
764
758
  }>;
765
759
  machineId: z.ZodOptional<z.ZodTemplateLiteral<`user_${string}`>>;
@@ -21,6 +21,7 @@ export declare const mcpCatalog: readonly [{
21
21
  readonly url: "https://gmailmcp.googleapis.com/mcp/v1";
22
22
  readonly auth: "oauth";
23
23
  readonly signIn: "Google";
24
+ readonly dynamicRegistration: false;
24
25
  readonly color: "#c5221f";
25
26
  readonly initials: "G";
26
27
  }, {
@@ -29,6 +30,7 @@ export declare const mcpCatalog: readonly [{
29
30
  readonly url: "https://calendarmcp.googleapis.com/mcp/v1";
30
31
  readonly auth: "oauth";
31
32
  readonly signIn: "Google";
33
+ readonly dynamicRegistration: false;
32
34
  readonly color: "#1a73e8";
33
35
  readonly initials: "K";
34
36
  }, {
@@ -37,6 +39,7 @@ export declare const mcpCatalog: readonly [{
37
39
  readonly url: "https://drivemcp.googleapis.com/mcp/v1";
38
40
  readonly auth: "oauth";
39
41
  readonly signIn: "Google";
42
+ readonly dynamicRegistration: false;
40
43
  readonly color: "#188038";
41
44
  readonly initials: "D";
42
45
  }, {
@@ -45,6 +48,7 @@ export declare const mcpCatalog: readonly [{
45
48
  readonly url: "https://mcp.slack.com/mcp";
46
49
  readonly auth: "oauth";
47
50
  readonly signIn: "Slack";
51
+ readonly dynamicRegistration: false;
48
52
  readonly color: "#4a154b";
49
53
  readonly initials: "Sl";
50
54
  }, {
@@ -53,6 +57,7 @@ export declare const mcpCatalog: readonly [{
53
57
  readonly url: "https://agent365.svc.cloud.microsoft/agents/servers/mcp_TeamsServer";
54
58
  readonly auth: "oauth";
55
59
  readonly signIn: "Microsoft";
60
+ readonly dynamicRegistration: false;
56
61
  readonly color: "#5059c9";
57
62
  readonly initials: "T";
58
63
  }, {
@@ -61,6 +66,7 @@ export declare const mcpCatalog: readonly [{
61
66
  readonly url: "https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools";
62
67
  readonly auth: "oauth";
63
68
  readonly signIn: "Microsoft";
69
+ readonly dynamicRegistration: false;
64
70
  readonly color: "#0f6cbd";
65
71
  readonly initials: "O";
66
72
  }, {
@@ -69,6 +75,7 @@ export declare const mcpCatalog: readonly [{
69
75
  readonly url: "https://mcp.hubspot.com";
70
76
  readonly auth: "oauth";
71
77
  readonly signIn: "HubSpot";
78
+ readonly dynamicRegistration: false;
72
79
  readonly color: "#c2410c";
73
80
  readonly initials: "H";
74
81
  }, {
@@ -77,6 +84,7 @@ export declare const mcpCatalog: readonly [{
77
84
  readonly url: "https://mcp.notion.com/mcp";
78
85
  readonly auth: "oauth";
79
86
  readonly signIn: "Notion";
87
+ readonly dynamicRegistration: true;
80
88
  readonly color: "#111111";
81
89
  readonly initials: "N";
82
90
  }];
package/dist/mcps/mcps.js CHANGED
@@ -23,6 +23,12 @@ export const McpState = z.enum(["running", "expired", "unreachable", "pending"])
23
23
  // UI reads them and names each by its `id` in its messages. `signIn` is who the person signs in with
24
24
  // ("angemeldet mit Google"). ⚠️ The addresses are the providers' remote MCP servers as published in
25
25
  // October 2026; each is proven only on the stage with a real account (#35), locally none answers.
26
+ //
27
+ // `dynamicRegistration`: the provider lets Colab register itself as an OAuth client at the sign-in
28
+ // (RFC 7591), so "Verbinden" works without an app registered at the provider. Checked against the
29
+ // providers on 2026-10-29 (#855): only Notion offers it. Google answers no OAuth metadata at all, and
30
+ // Slack, Microsoft and HubSpot name no `registration_endpoint`; they need an app an admin sets up,
31
+ // with client id and secret, which Colab cannot hold yet. Such an entry is shown, not started.
26
32
  export const mcpCatalog = [
27
33
  {
28
34
  id: "gmail",
@@ -30,6 +36,7 @@ export const mcpCatalog = [
30
36
  url: "https://gmailmcp.googleapis.com/mcp/v1",
31
37
  auth: "oauth",
32
38
  signIn: "Google",
39
+ dynamicRegistration: false,
33
40
  color: "#c5221f",
34
41
  initials: "G",
35
42
  },
@@ -39,6 +46,7 @@ export const mcpCatalog = [
39
46
  url: "https://calendarmcp.googleapis.com/mcp/v1",
40
47
  auth: "oauth",
41
48
  signIn: "Google",
49
+ dynamicRegistration: false,
42
50
  color: "#1a73e8",
43
51
  initials: "K",
44
52
  },
@@ -48,6 +56,7 @@ export const mcpCatalog = [
48
56
  url: "https://drivemcp.googleapis.com/mcp/v1",
49
57
  auth: "oauth",
50
58
  signIn: "Google",
59
+ dynamicRegistration: false,
51
60
  color: "#188038",
52
61
  initials: "D",
53
62
  },
@@ -57,6 +66,7 @@ export const mcpCatalog = [
57
66
  url: "https://mcp.slack.com/mcp",
58
67
  auth: "oauth",
59
68
  signIn: "Slack",
69
+ dynamicRegistration: false,
60
70
  color: "#4a154b",
61
71
  initials: "Sl",
62
72
  },
@@ -66,6 +76,7 @@ export const mcpCatalog = [
66
76
  url: "https://agent365.svc.cloud.microsoft/agents/servers/mcp_TeamsServer",
67
77
  auth: "oauth",
68
78
  signIn: "Microsoft",
79
+ dynamicRegistration: false,
69
80
  color: "#5059c9",
70
81
  initials: "T",
71
82
  },
@@ -75,6 +86,7 @@ export const mcpCatalog = [
75
86
  url: "https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools",
76
87
  auth: "oauth",
77
88
  signIn: "Microsoft",
89
+ dynamicRegistration: false,
78
90
  color: "#0f6cbd",
79
91
  initials: "O",
80
92
  },
@@ -84,6 +96,7 @@ export const mcpCatalog = [
84
96
  url: "https://mcp.hubspot.com",
85
97
  auth: "oauth",
86
98
  signIn: "HubSpot",
99
+ dynamicRegistration: false,
87
100
  color: "#c2410c",
88
101
  initials: "H",
89
102
  },
@@ -93,6 +106,7 @@ export const mcpCatalog = [
93
106
  url: "https://mcp.notion.com/mcp",
94
107
  auth: "oauth",
95
108
  signIn: "Notion",
109
+ dynamicRegistration: true,
96
110
  color: "#111111",
97
111
  initials: "N",
98
112
  },
@@ -133,7 +147,7 @@ export const McpGetInput = z.strictObject({ mcpId: McpId });
133
147
  // the person signs in at (`authorizeUrl`).
134
148
  export const McpCreateInput = z
135
149
  .strictObject({
136
- catalogId: McpCatalogId.optional().describe("A prepared MCP of the catalog (gmail, calendar, drive, slack, teams, outlook, hubspot, notion). Leave name, url and auth out then."),
150
+ catalogId: McpCatalogId.optional().describe("A prepared MCP of the catalog (gmail, calendar, drive, slack, teams, outlook, hubspot, notion). Only notion connects today; the others need an app registered at their provider and answer unavailable. Leave name, url and auth out then."),
137
151
  name: McpName.optional(),
138
152
  url: McpUrl.optional(),
139
153
  auth: McpAuth.optional(),
@@ -4,7 +4,7 @@ export declare const Reached: z.ZodObject<{
4
4
  name: z.ZodString;
5
5
  }, z.core.$strip>;
6
6
  export type Reached = z.infer<typeof Reached>;
7
- export declare const missingCodes: readonly ["no_role", "no_folder", "credential_invalid", "test_failed", "incomplete", "no_right", "no_kind", "no_assignee", "no_machine"];
7
+ export declare const missingCodes: readonly ["no_role", "no_folder", "credential_invalid", "test_failed", "incomplete", "no_right", "no_machine"];
8
8
  export declare const MissingCode: z.ZodEnum<{
9
9
  test_failed: "test_failed";
10
10
  no_role: "no_role";
@@ -12,8 +12,6 @@ export declare const MissingCode: z.ZodEnum<{
12
12
  credential_invalid: "credential_invalid";
13
13
  incomplete: "incomplete";
14
14
  no_right: "no_right";
15
- no_kind: "no_kind";
16
- no_assignee: "no_assignee";
17
15
  no_machine: "no_machine";
18
16
  }>;
19
17
  export type MissingCode = z.infer<typeof MissingCode>;
@@ -30,8 +28,6 @@ export declare const Missing: z.ZodObject<{
30
28
  credential_invalid: "credential_invalid";
31
29
  incomplete: "incomplete";
32
30
  no_right: "no_right";
33
- no_kind: "no_kind";
34
- no_assignee: "no_assignee";
35
31
  no_machine: "no_machine";
36
32
  }>;
37
33
  machineId: z.ZodOptional<z.ZodTemplateLiteral<`user_${string}`>>;
@@ -5,10 +5,9 @@ import { MachineId } from "../machines/machines.js";
5
5
  import { NodeId } from "../nodes/nodes.js";
6
6
  import { CredentialId } from "../operators/operators.js";
7
7
  import { UserId } from "../users/users.js";
8
- // What is still missing for what a setting-up tool set up to work (E126, #676, #675): only the six
8
+ // What is still missing for what a setting-up tool set up to work (E126, #676, #675): only the
9
9
  // tools that set up something that runs carry it, from the same check that reading shows, never a
10
- // second. Its own file, apart from `written.ts`: `processCheck` of a board carries the same entries
11
- // (#675), and `boards.ts` must not import `written.ts`, which builds on `runs.ts`, which builds on
10
+ // second. Its own file, apart from `written.ts`, which builds on `runs.ts`, which builds on
12
11
  // `boards.ts` (trap C009).
13
12
  // Someone a write reached, or who can give what is missing, by id and the name they carry today.
14
13
  export const Reached = z.object({ userId: z.string(), name: z.string() });
@@ -18,13 +17,11 @@ export const Reached = z.object({ userId: z.string(), name: z.string() });
18
17
  // - `credential_invalid`: an Operator's credential failed its last test; the Operator pauses.
19
18
  // - `test_failed`: the test right after the setup failed, with the provider's sentence.
20
19
  // - `incomplete`: something lacks what it needs: a connection the fields its connector needs before
21
- // it can be tested, a card of a process's template a required field (#675).
20
+ // it can be tested.
22
21
  // - `no_right`: a right is missing. On a connector: no role holds a right on its tools, so nobody
23
- // uses it. On a node (#675): `userId` lacks `right` on `nodeId`, the assignee of a template card
24
- // write on its board or read on a node a link field names, a machine named in INSTRUCTIONS read on
25
- // their folder.
26
- // - `no_kind`: a card of a process's template has no card kind while its board has kinds (#675).
27
- // - `no_assignee`: the assignee of a card of a process's template is locked or gone (#675).
22
+ // uses it. On a node (#675): `userId` lacks `right` on `nodeId`, a machine named in INSTRUCTIONS
23
+ // read on their folder.
24
+ // The template check of a process (#675) and its codes `no_kind` and `no_assignee` are gone (#852).
28
25
  // - `no_machine`: a section `# @name` of INSTRUCTIONS names no machine, so no AI gets it (#675).
29
26
  export const missingCodes = [
30
27
  "no_role",
@@ -33,8 +30,6 @@ export const missingCodes = [
33
30
  "test_failed",
34
31
  "incomplete",
35
32
  "no_right",
36
- "no_kind",
37
- "no_assignee",
38
33
  "no_machine",
39
34
  ];
40
35
  export const MissingCode = z.enum(missingCodes);
@@ -77,7 +77,7 @@ export const NodeListInput = z.strictObject({
77
77
  section: NodeSection.optional().describe("List a section of the tree instead of a folder: own (what lies in your own root folder), shared (the tops of everything others let you reach) or users (every other person's root folder, only for an admin in admin mode)."),
78
78
  query: NodeQuery.optional(),
79
79
  includeHidden: Flag.optional().describe("Also list nodes whose name starts with a dot. Leaving it out hides them."),
80
- sort: NodeSort.optional().describe("The order: name (default, A to Z), updated (most recently changed first), kind, or status (the type of the column the validation ticket stands in, New read as backlog: backlog, open, progress, done, discarded, blocked, archive, then nodes without a ticket)."),
80
+ sort: NodeSort.optional().describe("The order: name (default, as the tree shows it: folders, documents, tables, boards, gadgets, files, skills, goals, each kind A to Z as in German, 2 before 10, a leading dot not counted), kind (the same), updated (most recently changed first), or status (the type of the column the validation ticket stands in, New read as backlog: backlog, open, progress, done, discarded, blocked, archive, then nodes without a ticket)."),
81
81
  foldersFirst: Flag.optional().describe("Put folders before everything else, each group in the chosen order."),
82
82
  cursor: z
83
83
  .string()
@@ -793,6 +793,7 @@ export declare const OperatorList: z.ZodObject<{
793
793
  "gemini-2.5-flash-lite": "gemini-2.5-flash-lite";
794
794
  }>;
795
795
  }, z.core.$strip>>>;
796
+ personalCredential: z.ZodOptional<z.ZodBoolean>;
796
797
  budget: z.ZodOptional<z.ZodObject<{
797
798
  limitUsd: z.ZodNullable<z.ZodNumber>;
798
799
  spentUsd: z.ZodNumber;
@@ -390,6 +390,10 @@ export const OperatorList = z.object({
390
390
  // For the personal Operators (E143): the models a new one may take, each with its provider, from
391
391
  // the credentials marked personal.
392
392
  models: z.array(z.object({ provider: OperatorProvider, model: OperatorModel })).optional(),
393
+ // Beside models (#860): whether some credential marked personal could serve a personal Operator,
394
+ // an API key or a gateway, never a subscription (E86). False says the company lacks the
395
+ // credential itself; true with no models says only the person's allowed models are empty.
396
+ personalCredential: z.boolean().optional(),
393
397
  // For one's own personal Operators (E143, #804): one's month against one's limit.
394
398
  budget: OperatorBudget.optional(),
395
399
  });
@@ -27,16 +27,6 @@ export declare const RunGetInput: z.ZodObject<{
27
27
  runId: z.ZodTemplateLiteral<`run_${string}`>;
28
28
  }, z.core.$strict>;
29
29
  export type RunGetInput = z.infer<typeof RunGetInput>;
30
- export declare const BoardRunCreateInput: z.ZodObject<{
31
- boardId: z.ZodTemplateLiteral<`node_${string}`>;
32
- idempotencyKey: z.ZodString;
33
- }, z.core.$strict>;
34
- export type BoardRunCreateInput = z.infer<typeof BoardRunCreateInput>;
35
- export declare const RunCompleteInput: z.ZodObject<{
36
- runId: z.ZodTemplateLiteral<`run_${string}`>;
37
- summary: z.ZodOptional<z.ZodString>;
38
- }, z.core.$strict>;
39
- export type RunCompleteInput = z.infer<typeof RunCompleteInput>;
40
30
  export declare const RunItem: z.ZodObject<{
41
31
  runId: z.ZodTemplateLiteral<`run_${string}`>;
42
32
  nodeId: z.ZodTemplateLiteral<`node_${string}`>;
@@ -70,9 +60,6 @@ export declare const RunItem: z.ZodObject<{
70
60
  }>>;
71
61
  }, z.core.$strip>>;
72
62
  summary: z.ZodNullable<z.ZodString>;
73
- rights: z.ZodObject<{
74
- complete: z.ZodBoolean;
75
- }, z.core.$strip>;
76
63
  }, z.core.$strip>;
77
64
  export type RunItem = z.infer<typeof RunItem>;
78
65
  export declare const RunList: z.ZodObject<{
@@ -109,9 +96,6 @@ export declare const RunList: z.ZodObject<{
109
96
  }>>;
110
97
  }, z.core.$strip>>;
111
98
  summary: z.ZodNullable<z.ZodString>;
112
- rights: z.ZodObject<{
113
- complete: z.ZodBoolean;
114
- }, z.core.$strip>;
115
99
  }, z.core.$strip>>;
116
100
  nextCursor: z.ZodNullable<z.ZodString>;
117
101
  }, z.core.$strip>;
@@ -217,8 +201,5 @@ export declare const RunDetail: z.ZodObject<{
217
201
  }>>;
218
202
  }, z.core.$strip>>;
219
203
  summary: z.ZodNullable<z.ZodString>;
220
- rights: z.ZodObject<{
221
- complete: z.ZodBoolean;
222
- }, z.core.$strip>;
223
204
  }, z.core.$strip>;
224
205
  export type RunDetail = z.infer<typeof RunDetail>;
package/dist/runs/runs.js CHANGED
@@ -1,16 +1,13 @@
1
1
  import { z } from "zod";
2
- import { BoardId } from "../boards/boards.js";
3
2
  import { CardKind } from "../card-kinds/card-kinds.js";
4
3
  import { ColumnId, ColumnType } from "../columns/columns.js";
5
4
  import { idSchema } from "../ids/ids.js";
6
5
  import { Limit } from "../list-input.js";
7
6
  import { NodeId, NodePerson } from "../nodes/nodes.js";
8
- import { IdempotencyKey } from "../primitives/primitives.js";
9
- // Runs of a process board and of the validation (#43, Funktionen › Läufe, Nodes › Board › Prozess,
10
- // E42, E45, E67, E70, E119): the inputs of `intelligence_run_list`, `_get`,
11
- // `intelligence_board_run_create`, `intelligence_run_complete`, and the answers. A run is a
12
- // sub-resource of its board when it is made, and a resource of its own afterwards.
13
- export const RunId = idSchema("run").describe("The run's id, `run_…`, as intelligence_board_run_create or intelligence_run_list returned it.");
7
+ // Runs of a process board and of the validation from before goals (#43, Funktionen › Läufe, E42,
8
+ // E45, E67, E70, E119, E139): the inputs of `intelligence_run_list` and `_get`, and the answers. No
9
+ // run starts (#847) or ends (#852) any more; the ones that stand stay readable, frozen as they are.
10
+ export const RunId = idSchema("run").describe("The run's id, `run_…`, as intelligence_run_list returned it.");
14
11
  export const runStatuses = ["running", "done", "open", "error"];
15
12
  export const RunStatus = z
16
13
  .enum(runStatuses)
@@ -29,15 +26,6 @@ export const RunListInput = z.strictObject({
29
26
  limit: Limit.optional().describe("How many runs one page holds, 1 to 100. Leaving it out gives 50."),
30
27
  });
31
28
  export const RunGetInput = z.strictObject({ runId: RunId });
32
- export const BoardRunCreateInput = z.strictObject({
33
- boardId: BoardId.describe("The process board to start a run of, one you can write to. The run is a copy of its columns and of every task of the template, all in the first column."),
34
- idempotencyKey: IdempotencyKey,
35
- });
36
- const Text = z.string().max(20_000);
37
- export const RunCompleteInput = z.strictObject({
38
- runId: RunId,
39
- summary: Text.optional().describe("What the run did, in a few sentences: what people read in the list of runs."),
40
- });
41
29
  export const RunItem = z.object({
42
30
  runId: RunId,
43
31
  nodeId: NodeId,
@@ -51,10 +39,6 @@ export const RunItem = z.object({
51
39
  completedAt: z.iso.datetime().nullable(),
52
40
  completedBy: NodePerson.nullable(),
53
41
  summary: z.string().nullable(),
54
- // `complete`: whether the caller may close this run with intelligence_run_complete, by the same
55
- // check the tool makes (E107): write on a process board; on the validation the holder
56
- // of validator or an admin in admin mode. The UI shows "Lauf beenden" by it.
57
- rights: z.object({ complete: z.boolean() }),
58
42
  });
59
43
  export const RunList = z.object({
60
44
  items: z.array(RunItem),
package/dist/sdk.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- export { ActionAbort, ActionAbortReason, ActionChat, ActionGadget, ActionItem, ActionList, ActionListInput, ActionNotice, ActionNoticeButton, ActionNoticeCrumb, ActionNoticeItem, ActionNoticeKind, ActionNoticeReason, ActionNoticeTitle, ActionProcess, ActionRow, ActionRun, ActionRunHint, ActionRunTask, ActionSection, ActionTask, actionFilters, isNodeRow, MachineInstructions, MachineInstructionsRead, } from "./actions/actions.js";
1
+ export { ActionAbort, ActionAbortReason, ActionChat, ActionGadget, ActionItem, ActionList, ActionListInput, ActionNotice, ActionNoticeButton, ActionNoticeCrumb, ActionNoticeItem, ActionNoticeKind, ActionNoticeReason, ActionNoticeTitle, ActionRow, ActionRunTask, ActionSection, ActionTask, actionFilters, isNodeRow, MachineInstructions, MachineInstructionsRead, } from "./actions/actions.js";
2
2
  export { adminModeHeader, adminModeOn } from "./admin-mode.js";
3
3
  export { App, AppId, AppList, AppListInput, AppRevoked, AppRevokeInput, OwnAppListQuery, OwnSessionListQuery, Session, SessionId, SessionList, SessionListInput, SessionRevokeInput, SessionsRevoked, } from "./apps/apps.js";
4
4
  export { NodeArchived, NodeArchiveInput, NodePurged, NodePurgeInput, NodeRestoreInput, } from "./archive/archive.js";
5
5
  export { PasskeyDeleteInput, SetPasswordInput, SignUpInput, } from "./auth/auth.js";
6
6
  export { AuthorizationRequest, AuthorizationResponse, Identity, Rules, } from "./authorization/authorization.js";
7
- export { BoardColumn, BoardCreateInput, BoardDetail, BoardGetInput, BoardId, BoardKind, BoardLabel, BoardTaskBrief, BoardTaskBriefList, BoardTaskCreated, BoardTaskCreateInput, BoardTaskItem, BoardTaskList, BoardTaskListInput, BoardTaskUpdated, BoardTaskUpdateInput, BoardUpdateInput, boardKinds, compactTaskLimit, LabelId, maxBulkTasks, ProcessCheck, TaskDetail, TaskGetInput, TaskId, TaskImage, TaskUpdateInput, TemplateNote, } from "./boards/boards.js";
7
+ export { BoardColumn, BoardCreateInput, BoardDetail, BoardGetInput, BoardId, BoardKind, BoardLabel, BoardTaskBrief, BoardTaskBriefList, BoardTaskCreated, BoardTaskCreateInput, BoardTaskItem, BoardTaskList, BoardTaskListInput, BoardTaskUpdated, BoardTaskUpdateInput, BoardUpdateInput, boardKinds, compactTaskLimit, LabelId, maxBulkTasks, TaskDetail, TaskGetInput, TaskId, TaskImage, TaskUpdateInput, } from "./boards/boards.js";
8
8
  export { CardField, CardFieldId, CardFieldInput, CardFieldOption, CardFieldType, CardFieldValue, CardKind, CardKindIcon, CardKindId, CardKindInput, CardOptionId, ChecklistItem, cardFieldTypes, cardKindIcons, emptyValue, TaskFields, TaskKind, } from "./card-kinds/card-kinds.js";
9
9
  export { ColumnId, ColumnType, columnTypes, TaskColumn } from "./columns/columns.js";
10
10
  export { Connection, ConnectionCreateInput, ConnectionCredential, ConnectionDetail, ConnectionGetInput, ConnectionId, ConnectionList, ConnectionListInput, ConnectionRevokeInput, ConnectionState, ConnectionTested, ConnectionTestInput, ConnectionTestResult, ConnectionUpdateInput, } from "./connections/connections.js";
@@ -37,16 +37,17 @@ export { PageDetail, PageGetInput, PageHead, PageHeading, PageId, PageList, Page
37
37
  export { IdempotencyKey, Rev } from "./primitives/primitives.js";
38
38
  export { Locale, locales, Name, ProfileImageResponse, ProfileUpdateInput, profileImageMaxBytes, profileImageTypes, Theme, TimeZone, themes, } from "./profile/profile.js";
39
39
  export { GrantChange, PermissionsResponse, RightInCode, RightPath, RightTree, Role, RoleArchiveInput, RoleCreateInput, RoleDetail, RoleGetInput, RoleGrantCreateInput, RoleGrantRevokeInput, RoleId, RoleList, RoleListInput, RoleRestoreInput, RoleUpdateInput, } from "./roles/roles.js";
40
- export { BoardRunCreateInput, RunCompleteInput, RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
40
+ export { RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
41
41
  export { RuntimeConfig } from "./runtime-config.js";
42
42
  export { rhythms, Schedule, WhileOpen, weekdays, weeksOfMonth, whileOpenModes, } from "./schedule/schedule.js";
43
43
  export { NodeSecret, NodeSecretCreateInput, NodeSecretDetail, NodeSecretGetInput, NodeSecretRemoveInput, NodeSecretUpdateInput, NodeUnlocked, NodeUnlockInput, unlockMinutes, } from "./secrets/secrets.js";
44
44
  export { type Authorized, type AuthorizeResult, createServiceClient, type InterfaceDeclaredResult, type InterfaceRemovedResult, type ServiceClient, type ServiceClientDeps, type ServiceClientFailure, } from "./service-client/service-client.js";
45
45
  export { ConsentResource, FunctionId, InterfaceId, RightWord, Service, ServiceArchiveInput, ServiceCreateInput, ServiceFunction, ServiceId, ServiceInterface, ServiceKeyIssued, ServiceList, ServiceListInput, ServiceName, ServicePurged, ServicePurgeInput, ServiceRestoreInput, ServiceRotateInput, ServiceUpdateInput, } from "./services/services.js";
46
- export { SkillCaseResult, SkillCreateInput, SkillDetail, SkillFields, SkillFile, SkillFilePath, SkillGetInput, SkillId, SkillOffer, SkillPoint, SkillRunCall, SkillRunDetail, SkillRunGetInput, SkillRunItem, SkillRunList, SkillRunListInput, SkillTestInput, SkillTestReport, SkillTriggerHit, SkillUpdateInput, skillCaseStatuses, skillFilePattern, skillRunKinds, skillRunStatuses, } from "./skills/skills.js";
46
+ export { SkillCaseResult, SkillCreateInput, SkillDetail, SkillFields, SkillFile, SkillFilePath, SkillGetInput, SkillId, SkillOffer, SkillPoint, SkillRunCall, SkillRunDetail, SkillRunGetInput, SkillRunItem, SkillRunList, SkillRunListInput, SkillTestInput, SkillTestReport, SkillTokens, SkillTriggerHit, SkillUpdateInput, skillCaseStatuses, skillFilePattern, skillRunKinds, skillRunStatuses, } from "./skills/skills.js";
47
47
  export { SignInProviders, Sso, SsoId, SsoList, SsoListInput, SsoRemoveInput, SsoSource, SsoUpdateInput, ssoIds, } from "./sso/sso.js";
48
48
  export { TableColumn, TableColumnChange, TableColumnType, TableCreateInput, TableDetail, TableExcerpt, TableGetInput, TableId, TableSaved, TableUpdateInput, tableColumnTypes, tableFormats, } from "./tables/tables.js";
49
49
  export { type Actor, defineTool, type Permission, type Tool, type ToolAnnotations, type ToolContext, type ToolInput, type ToolSource, } from "./tool.js";
50
+ export { compareTreeNames, treeKindOrder, treeKindRank, } from "./tree-order/tree-order.js";
50
51
  export { IntelligenceUserGetInput, IntelligenceUserUpdateInput, NotifyMode, notifyModes, UserSettings, } from "./user-settings/user-settings.js";
51
52
  export { MachineFacts, MachineKeyFacts, MachineKind, MessageMachine, OperatorProvider, OwnRoleList, SignInMethod, User, UserDetail, UserDisableInput, UserEnableInput, UserGetInput, UserId, UserKind, UserList, UserListInput, UserListItem, UserStatus, UserTestInput, UserTestResult, UserUpdateInput, } from "./users/users.js";
52
53
  export { TicketSubject, TicketSubjectRef, ValidationBoardId, validationBoardId, validationGoalId, } from "./validation/validation.js";
package/dist/sdk.js CHANGED
@@ -1,13 +1,13 @@
1
1
  // The contract between UI, backends and outside services, published as `@anchrd/colab-sdk`. The
2
2
  // package exports only this file, so everything public is named here once.
3
3
  // biome-ignore lint/performance/noBarrelFile: this file IS the entry point of the package.
4
- export { ActionAbort, ActionAbortReason, ActionChat, ActionGadget, ActionItem, ActionList, ActionListInput, ActionNotice, ActionNoticeButton, ActionNoticeCrumb, ActionNoticeItem, ActionNoticeKind, ActionNoticeReason, ActionNoticeTitle, ActionProcess, ActionRow, ActionRun, ActionRunHint, ActionRunTask, ActionSection, ActionTask, actionFilters, isNodeRow, MachineInstructions, MachineInstructionsRead, } from "./actions/actions.js";
4
+ export { ActionAbort, ActionAbortReason, ActionChat, ActionGadget, ActionItem, ActionList, ActionListInput, ActionNotice, ActionNoticeButton, ActionNoticeCrumb, ActionNoticeItem, ActionNoticeKind, ActionNoticeReason, ActionNoticeTitle, ActionRow, ActionRunTask, ActionSection, ActionTask, actionFilters, isNodeRow, MachineInstructions, MachineInstructionsRead, } from "./actions/actions.js";
5
5
  export { adminModeHeader, adminModeOn } from "./admin-mode.js";
6
6
  export { App, AppId, AppList, AppListInput, AppRevoked, AppRevokeInput, OwnAppListQuery, OwnSessionListQuery, Session, SessionId, SessionList, SessionListInput, SessionRevokeInput, SessionsRevoked, } from "./apps/apps.js";
7
7
  export { NodeArchived, NodeArchiveInput, NodePurged, NodePurgeInput, NodeRestoreInput, } from "./archive/archive.js";
8
8
  export { PasskeyDeleteInput, SetPasswordInput, SignUpInput, } from "./auth/auth.js";
9
9
  export { AuthorizationRequest, AuthorizationResponse, Identity, Rules, } from "./authorization/authorization.js";
10
- export { BoardColumn, BoardCreateInput, BoardDetail, BoardGetInput, BoardId, BoardKind, BoardLabel, BoardTaskBrief, BoardTaskBriefList, BoardTaskCreated, BoardTaskCreateInput, BoardTaskItem, BoardTaskList, BoardTaskListInput, BoardTaskUpdated, BoardTaskUpdateInput, BoardUpdateInput, boardKinds, compactTaskLimit, LabelId, maxBulkTasks, ProcessCheck, TaskDetail, TaskGetInput, TaskId, TaskImage, TaskUpdateInput, TemplateNote, } from "./boards/boards.js";
10
+ export { BoardColumn, BoardCreateInput, BoardDetail, BoardGetInput, BoardId, BoardKind, BoardLabel, BoardTaskBrief, BoardTaskBriefList, BoardTaskCreated, BoardTaskCreateInput, BoardTaskItem, BoardTaskList, BoardTaskListInput, BoardTaskUpdated, BoardTaskUpdateInput, BoardUpdateInput, boardKinds, compactTaskLimit, LabelId, maxBulkTasks, TaskDetail, TaskGetInput, TaskId, TaskImage, TaskUpdateInput, } from "./boards/boards.js";
11
11
  export { CardField, CardFieldId, CardFieldInput, CardFieldOption, CardFieldType, CardFieldValue, CardKind, CardKindIcon, CardKindId, CardKindInput, CardOptionId, ChecklistItem, cardFieldTypes, cardKindIcons, emptyValue, TaskFields, TaskKind, } from "./card-kinds/card-kinds.js";
12
12
  export { ColumnId, ColumnType, columnTypes, TaskColumn } from "./columns/columns.js";
13
13
  export { Connection, ConnectionCreateInput, ConnectionCredential, ConnectionDetail, ConnectionGetInput, ConnectionId, ConnectionList, ConnectionListInput, ConnectionRevokeInput, ConnectionState, ConnectionTested, ConnectionTestInput, ConnectionTestResult, ConnectionUpdateInput, } from "./connections/connections.js";
@@ -40,16 +40,17 @@ export { PageDetail, PageGetInput, PageHead, PageHeading, PageId, PageList, Page
40
40
  export { IdempotencyKey, Rev } from "./primitives/primitives.js";
41
41
  export { Locale, locales, Name, ProfileImageResponse, ProfileUpdateInput, profileImageMaxBytes, profileImageTypes, Theme, TimeZone, themes, } from "./profile/profile.js";
42
42
  export { GrantChange, PermissionsResponse, RightInCode, RightPath, RightTree, Role, RoleArchiveInput, RoleCreateInput, RoleDetail, RoleGetInput, RoleGrantCreateInput, RoleGrantRevokeInput, RoleId, RoleList, RoleListInput, RoleRestoreInput, RoleUpdateInput, } from "./roles/roles.js";
43
- export { BoardRunCreateInput, RunCompleteInput, RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
43
+ export { RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
44
44
  export { RuntimeConfig } from "./runtime-config.js";
45
45
  export { rhythms, Schedule, WhileOpen, weekdays, weeksOfMonth, whileOpenModes, } from "./schedule/schedule.js";
46
46
  export { NodeSecret, NodeSecretCreateInput, NodeSecretDetail, NodeSecretGetInput, NodeSecretRemoveInput, NodeSecretUpdateInput, NodeUnlocked, NodeUnlockInput, unlockMinutes, } from "./secrets/secrets.js";
47
47
  export { createServiceClient, } from "./service-client/service-client.js";
48
48
  export { ConsentResource, FunctionId, InterfaceId, RightWord, Service, ServiceArchiveInput, ServiceCreateInput, ServiceFunction, ServiceId, ServiceInterface, ServiceKeyIssued, ServiceList, ServiceListInput, ServiceName, ServicePurged, ServicePurgeInput, ServiceRestoreInput, ServiceRotateInput, ServiceUpdateInput, } from "./services/services.js";
49
- export { SkillCaseResult, SkillCreateInput, SkillDetail, SkillFields, SkillFile, SkillFilePath, SkillGetInput, SkillId, SkillOffer, SkillPoint, SkillRunCall, SkillRunDetail, SkillRunGetInput, SkillRunItem, SkillRunList, SkillRunListInput, SkillTestInput, SkillTestReport, SkillTriggerHit, SkillUpdateInput, skillCaseStatuses, skillFilePattern, skillRunKinds, skillRunStatuses, } from "./skills/skills.js";
49
+ export { SkillCaseResult, SkillCreateInput, SkillDetail, SkillFields, SkillFile, SkillFilePath, SkillGetInput, SkillId, SkillOffer, SkillPoint, SkillRunCall, SkillRunDetail, SkillRunGetInput, SkillRunItem, SkillRunList, SkillRunListInput, SkillTestInput, SkillTestReport, SkillTokens, SkillTriggerHit, SkillUpdateInput, skillCaseStatuses, skillFilePattern, skillRunKinds, skillRunStatuses, } from "./skills/skills.js";
50
50
  export { SignInProviders, Sso, SsoId, SsoList, SsoListInput, SsoRemoveInput, SsoSource, SsoUpdateInput, ssoIds, } from "./sso/sso.js";
51
51
  export { TableColumn, TableColumnChange, TableColumnType, TableCreateInput, TableDetail, TableExcerpt, TableGetInput, TableId, TableSaved, TableUpdateInput, tableColumnTypes, tableFormats, } from "./tables/tables.js";
52
52
  export { defineTool, } from "./tool.js";
53
+ export { compareTreeNames, treeKindOrder, treeKindRank, } from "./tree-order/tree-order.js";
53
54
  export { IntelligenceUserGetInput, IntelligenceUserUpdateInput, NotifyMode, notifyModes, UserSettings, } from "./user-settings/user-settings.js";
54
55
  export { MachineFacts, MachineKeyFacts, MachineKind, MessageMachine, OperatorProvider, OwnRoleList, SignInMethod, User, UserDetail, UserDisableInput, UserEnableInput, UserGetInput, UserId, UserKind, UserList, UserListInput, UserListItem, UserStatus, UserTestInput, UserTestResult, UserUpdateInput, } from "./users/users.js";
55
56
  export { TicketSubject, TicketSubjectRef, ValidationBoardId, validationBoardId, validationGoalId, } from "./validation/validation.js";