@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.
@@ -1,7 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { idSchema } from "../ids/ids.js";
3
- import { Limit } from "../list-input.js";
3
+ import { Flag, Limit } from "../list-input.js";
4
4
  import { MachineId } from "../machines/machines.js";
5
+ import { McpId } from "../mcps/mcps.js";
6
+ import { NodeId } from "../nodes/nodes.js";
5
7
  import { Rev } from "../primitives/primitives.js";
6
8
  import { RoleId } from "../roles/roles.js";
7
9
  import { Schedule } from "../schedule/schedule.js";
@@ -166,10 +168,21 @@ export const CredentialUpdateInput = z
166
168
  name: CredentialName.optional(),
167
169
  value: CredentialValue.optional(),
168
170
  gateway: GatewayTarget.optional(),
171
+ // The place in the order of the credentials (E143, #805): right after this credential, or first
172
+ // with null. The order is the one a run falls back along.
173
+ after: CredentialId.nullable().optional(),
174
+ // "Firma und Persönlich" (true) or "Nur Firma" (false): only the first serve personal
175
+ // Operators. A subscription token never does (E86).
176
+ personal: z.boolean().optional(),
177
+ // Ausweichen (E143, #805): when this credential fails (refused, or its usage limit is reached),
178
+ // the next run takes the next fitting credential in the order. Off by default.
179
+ fallback: z.boolean().optional(),
169
180
  })
170
- .refine((input) => input.name !== undefined || input.value !== undefined, {
171
- message: "Name a field to change: name or value.",
172
- })
181
+ .refine((input) => input.name !== undefined ||
182
+ input.value !== undefined ||
183
+ input.after !== undefined ||
184
+ input.personal !== undefined ||
185
+ input.fallback !== undefined, { message: "Name a field to change: name, value, after, personal or fallback." })
173
186
  .refine((input) => input.gateway === undefined || input.value !== undefined, {
174
187
  message: "A new gateway goes together with a new value.",
175
188
  });
@@ -187,6 +200,14 @@ export const Credential = z.object({
187
200
  checkedAt: z.iso.datetime().nullable(),
188
201
  // When the value was set; never the value.
189
202
  setAt: z.iso.datetime(),
203
+ // The place in the order of the credentials (E143, #805), from 0; the list is sorted by it.
204
+ position: z.int().min(0),
205
+ // "Firma und Persönlich": personal Operators may run with it (never a subscription, E86).
206
+ personal: z.boolean(),
207
+ // Ausweichen: a run that fails on it moves on to the next fitting credential in the order.
208
+ fallback: z.boolean(),
209
+ // When a run last met the provider's usage limit on it; for an hour the order skips it.
210
+ limitedAt: z.iso.datetime().nullable(),
190
211
  // The Operators that use it, archived ones left out: "Genutzt von n Operatoren", and while it is
191
212
  // invalid, the ones that pause because of it.
192
213
  machineIds: z.array(MachineId),
@@ -213,11 +234,18 @@ export const Subagents = z.strictObject({
213
234
  allowed: z.boolean(),
214
235
  max: z.int().min(1).max(10),
215
236
  });
216
- // When an Operator wakes (Springt an): once something changed, after `quietMinutes` without a further
217
- // change; or at fixed times, with the schedule of processes.
237
+ // When an Operator wakes: once something new stands in its Actions, after `quietMinutes` without a
238
+ // further change (E141). An Operator has no schedule of its own since #824 (E139): regular work is the
239
+ // rhythm of a goal, which wakes it by a mention. A row written before still reads `schedule`; it is
240
+ // neither written nor run any more, and wakes on a change like every other.
241
+ export const ChangeTrigger = z.strictObject({
242
+ on: z.literal("change"),
243
+ quietMinutes: z.int().min(0).max(1440),
244
+ });
245
+ // As an answer, loose (E113): an input takes only `ChangeTrigger`.
218
246
  export const Trigger = z.discriminatedUnion("on", [
219
- z.strictObject({ on: z.literal("change"), quietMinutes: z.int().min(0).max(1440) }),
220
- z.strictObject({ on: z.literal("schedule"), schedule: Schedule }),
247
+ z.object({ on: z.literal("change"), quietMinutes: z.int().min(0).max(1440) }),
248
+ z.object({ on: z.literal("schedule"), schedule: Schedule }),
221
249
  ]);
222
250
  // The limits of E81: the longest run in minutes and the most runs a day.
223
251
  export const OperatorLimits = z.strictObject({
@@ -235,22 +263,39 @@ export const operatorDefaults = {
235
263
  export const OperatorState = z.enum(["no_role", "ready", "paused"]);
236
264
  // `manual` by hand, `limit` the daily limit, `failures` three failed runs in a row (#337 sets those
237
265
  // two), `credential` its credential is invalid or gone.
238
- export const PauseReason = z.enum(["manual", "limit", "failures", "credential"]);
266
+ // `owner`: a personal Operator whose person is locked (E143), derived like `credential`.
267
+ // `budget`: its person's limit of the month is reached (E143, #804); it ends on the first of the next
268
+ // month (UTC), or when an admin raises the limit.
269
+ export const PauseReason = z.enum(["manual", "limit", "failures", "credential", "owner", "budget"]);
239
270
  export const MachineListInput = z.strictObject({
271
+ personal: Flag.optional().describe("true: the personal Operators (E143), your own, or every person's for an admin in admin mode. Leaving it out lists the company's Operators; without admin rights you read your own personal ones only, whatever you send."),
240
272
  cursor: MachineId.optional(),
241
273
  limit: Limit.optional(),
242
274
  });
243
275
  export const MachineGetInput = z.strictObject({ machineId: MachineId });
244
276
  // The name and roles go to the machine in `access`; without `roleIds` it has none (E84).
245
- export const OperatorMachineCreateInput = z.strictObject({
277
+ // `personal` (E143, #801): your own Operator, with your rights, name and model only; the provider
278
+ // follows from the model, the credential is chosen per run among those marked "Firma und
279
+ // Persönlich", and it takes no role and no credential.
280
+ export const OperatorMachineCreateInput = z
281
+ .strictObject({
246
282
  name: z.string().trim().min(1).max(64),
283
+ personal: z.boolean().optional(),
247
284
  roleIds: z.array(RoleId).max(50).optional(),
248
- provider: OperatorProvider,
249
- credentialId: CredentialId,
285
+ provider: OperatorProvider.optional(),
286
+ credentialId: CredentialId.optional(),
250
287
  model: OperatorModel.optional(),
251
288
  subagents: Subagents.optional(),
252
- trigger: Trigger.optional(),
289
+ trigger: ChangeTrigger.optional(),
253
290
  limits: OperatorLimits.partial().optional(),
291
+ })
292
+ .refine((input) => input.personal === true
293
+ ? input.model !== undefined &&
294
+ input.provider === undefined &&
295
+ input.credentialId === undefined &&
296
+ input.roleIds === undefined
297
+ : input.provider !== undefined && input.credentialId !== undefined, {
298
+ message: "A personal Operator takes name and model, and no provider, credential or roles; every other one takes provider and credentialId.",
254
299
  });
255
300
  // Every field optional; `responsibleId` hands the machine to another person in `access` (E76).
256
301
  // `rev` is the state the change is based on (E135), as for a node (E70).
@@ -261,9 +306,15 @@ export const OperatorMachineUpdateInput = z
261
306
  credentialId: CredentialId.optional(),
262
307
  model: OperatorModel.optional(),
263
308
  subagents: Subagents.optional(),
264
- trigger: Trigger.optional(),
309
+ trigger: ChangeTrigger.optional(),
265
310
  limits: OperatorLimits.partial().optional(),
266
311
  responsibleId: UserId.optional(),
312
+ // Its name, the machine's in `access`; a personal Operator's section `## Name` in
313
+ // `Eigene › .INSTRUCTIONS` follows (E143).
314
+ name: z.string().trim().min(1).max(64).optional(),
315
+ // The person's own MCPs this personal Operator may use (E144, #802), the whole set; it reaches
316
+ // none other.
317
+ mcpIds: z.array(McpId).max(50).optional(),
267
318
  })
268
319
  .refine((input) => Object.keys(input).some((field) => field !== "machineId" && field !== "rev"), {
269
320
  message: "Name a field to change.",
@@ -273,16 +324,31 @@ export const MachineDisableInput = z.strictObject({ machineId: MachineId });
273
324
  export const MachineEnableInput = z.strictObject({ machineId: MachineId });
274
325
  // Deleting an Operator archives its machine in `access`; nothing is deleted.
275
326
  export const OperatorMachineArchiveInput = z.strictObject({ machineId: MachineId });
327
+ // Bringing a deleted Operator back: its machine comes back under Nutzer, a personal one's section
328
+ // back into `Eigene › .INSTRUCTIONS` (E143).
329
+ export const OperatorMachineRestoreInput = z.strictObject({ machineId: MachineId });
276
330
  export const Operator = z.object({
277
331
  machineId: MachineId,
278
332
  // The machine's name in `access`, read now.
279
333
  name: z.string(),
280
334
  provider: OperatorProvider,
281
335
  credentialId: CredentialId.nullable(),
336
+ // The person a personal Operator works for, with their rights (E143); null for the company's.
337
+ ownerId: UserId.nullable(),
338
+ // What waits on a personal Operator now, the rows of its Actions ("1 offen", #801); null for the
339
+ // company's, whose Actions its page does not count.
340
+ open: z.int().min(0).nullable(),
282
341
  model: OperatorModel,
283
342
  subagents: Subagents,
284
343
  trigger: Trigger,
285
344
  limits: OperatorLimits,
345
+ // The goals whose rhythm wakes it (#824, E139), with their next run: "Wird geweckt von".
346
+ wokenBy: z.array(z.object({
347
+ goalId: NodeId,
348
+ name: z.string(),
349
+ rhythm: Schedule,
350
+ nextRunAt: z.iso.datetime().nullable(),
351
+ })),
286
352
  state: OperatorState,
287
353
  pausedReason: PauseReason.nullable(),
288
354
  pausedAt: z.iso.datetime().nullable(),
@@ -292,13 +358,84 @@ export const Operator = z.object({
292
358
  archivedAt: z.iso.datetime().nullable(),
293
359
  // The state a save names (E135): `operator_machine_update` takes it and counts it up.
294
360
  rev: z.number().int(),
361
+ // A personal Operator's model is one its person may take now (E143, #804); false when an admin no
362
+ // longer allows it: it keeps running, its page says so. Null for the company's.
363
+ modelAllowed: z.boolean().nullable(),
364
+ // A personal Operator's INSTRUCTIONS as its run reads them, the part under no heading and its own
365
+ // section `## Name`, with the document's path and version (E143, #804): only in the answer of
366
+ // `operator_machine_get`, so an admin reads them without opening the person's own folder. Null
367
+ // when it has none; absent in a list and for the company's.
368
+ instructions: z
369
+ .object({ path: z.string(), markdown: z.string(), version: z.int().min(1).nullable() })
370
+ .nullable()
371
+ .optional(),
372
+ // A personal Operator's MCPs (E144, #802), by name: never their address or sign-in, which only
373
+ // their person sees. Empty for the company's.
374
+ mcps: z.array(z.object({ mcpId: McpId, name: z.string() })),
295
375
  createdAt: z.iso.datetime(),
296
376
  createdBy: UserId.nullable(),
297
377
  updatedAt: z.iso.datetime(),
298
378
  });
379
+ // A person's month with their personal Operators (E143, #804): the limit that counts for them in
380
+ // dollars (null: none), what their Operators cost since the first of the month (UTC), and whether
381
+ // the limit is reached, which pauses them until the first of the next month.
382
+ export const OperatorBudget = z.object({
383
+ limitUsd: z.number().nullable(),
384
+ spentUsd: z.number(),
385
+ reached: z.boolean(),
386
+ });
299
387
  export const OperatorList = z.object({
300
388
  items: z.array(Operator),
301
389
  nextCursor: MachineId.nullable(),
390
+ // For the personal Operators (E143): the models a new one may take, each with its provider, from
391
+ // the credentials marked personal.
392
+ models: z.array(z.object({ provider: OperatorProvider, model: OperatorModel })).optional(),
393
+ // For one's own personal Operators (E143, #804): one's month against one's limit.
394
+ budget: OperatorBudget.optional(),
395
+ });
396
+ // ---------------------------------------------------------------------------------------------
397
+ // The people with personal Operators and their limits (E143, #804, Organisation › Operatoren ›
398
+ // Anbieter › Mitarbeiter). The company's defaults, and per person what deviates: a limit in dollars
399
+ // per month, and the models their Operators may take. Amounts are dollars, as every amount in
400
+ // Colab; the screens' euro is the same field.
401
+ // Null: no limit, every model a credential marked personal offers.
402
+ const UserLimitUsd = z.number().min(0).max(1_000_000).nullable();
403
+ const UserModels = z.array(OperatorModel).min(1).max(50).nullable();
404
+ export const OperatorUserListInput = z.strictObject({
405
+ cursor: UserId.optional(),
406
+ limit: Limit.optional(),
407
+ });
408
+ // Without `userId` the company's defaults; with it one person's own values, where null follows the
409
+ // defaults again. Raising a limit lifts the pause it caused at once.
410
+ export const OperatorUserUpdateInput = z
411
+ .strictObject({
412
+ userId: UserId.optional().describe("The person whose own values change, `user_…`. Leaving it out changes the defaults for every person."),
413
+ limitUsd: UserLimitUsd.optional().describe("The limit of a month in dollars for all personal Operators of a person together. null: no limit for the defaults; for a person, the defaults again."),
414
+ models: UserModels.optional().describe("The models a person's Operators may take. null: every model a credential marked personal offers for the defaults; for a person, the defaults again."),
415
+ })
416
+ .refine((input) => input.limitUsd !== undefined || input.models !== undefined, {
417
+ message: "Name a field to change: limitUsd or models.",
418
+ });
419
+ export const OperatorUser = z.object({
420
+ userId: UserId,
421
+ name: z.string(),
422
+ // Locked or archived under Nutzer: their Operators pause or are archived, their runs stay.
423
+ present: z.boolean(),
424
+ // Their own values, null where they follow the defaults.
425
+ own: z.object({ limitUsd: z.number().nullable(), models: z.array(OperatorModel).nullable() }),
426
+ // What counts for them: their own value, else the default.
427
+ models: z.array(OperatorModel).nullable(),
428
+ budget: OperatorBudget,
429
+ // Their personal Operators, deleted ones included (a deleted one keeps its runs in the sums).
430
+ machineIds: z.array(MachineId),
431
+ });
432
+ export const OperatorUserList = z.object({
433
+ defaults: z.object({
434
+ limitUsd: z.number().nullable(),
435
+ models: z.array(OperatorModel).nullable(),
436
+ }),
437
+ items: z.array(OperatorUser),
438
+ nextCursor: UserId.nullable(),
302
439
  });
303
440
  // ---------------------------------------------------------------------------------------------
304
441
  // The runs of an Operator (#337, Einstellungen › Operator › Protokoll und Nutzung, E75, E81, E82).
@@ -344,6 +481,13 @@ export const OperatorRunInstructions = z.object({
344
481
  status: z.string().nullable(),
345
482
  cut: z.boolean(),
346
483
  });
484
+ export const OperatorRunWoken = z.object({
485
+ kind: z.enum(["open", "mention"]),
486
+ title: z.string(),
487
+ // Who mentioned it, by name; null for a task in Open.
488
+ by: z.string().nullable(),
489
+ });
490
+ export const OperatorRunFallbackReason = z.enum(["credential", "limit"]);
347
491
  export const OperatorRunAgents = z.object({
348
492
  started: z.int().min(0),
349
493
  running: z.int().min(0),
@@ -387,6 +531,13 @@ export const OperatorRun = z.object({
387
531
  agents: OperatorRunAgents.nullable(),
388
532
  // Who stopped it (E112), named by the backend; null unless `status` is `stopped`.
389
533
  stoppedBy: z.object({ userId: UserId, name: z.string() }).nullable(),
534
+ // What woke it (E141, #801): a task that came into Open, or a mention, with the node's name and
535
+ // who mentioned; null for a run before #801 or where its Actions named neither.
536
+ woken: OperatorRunWoken.nullable(),
537
+ // The credential it ran with, by name, and the switch that led there (E143, #805): the credential
538
+ // it fell back from and why (`credential` refused, `limit` its usage limit); null without a switch.
539
+ credentialName: z.string().nullable(),
540
+ fallback: z.object({ fromName: z.string(), reason: OperatorRunFallbackReason }).nullable(),
390
541
  startedAt: z.iso.datetime(),
391
542
  endedAt: z.iso.datetime().nullable(),
392
543
  durationMs: z.int().nullable(),
@@ -394,6 +545,8 @@ export const OperatorRun = z.object({
394
545
  const RunMoment = z.iso.datetime({ offset: true });
395
546
  export const OperatorRunListInput = z.strictObject({
396
547
  machineId: MachineId.optional().describe("Only this Operator's runs, `user_…`. An Operator without admin rights reads its own runs only, whatever it names here."),
548
+ ownerId: UserId.optional().describe("Only the runs of this person's personal Operators, deleted ones included, `user_…`."),
549
+ personal: Flag.optional().describe("true: only the runs of personal Operators; false: only those of the company's Operators."),
397
550
  provider: OperatorProvider.optional().describe("Only the runs of this provider's Operators: claude, codex or gemini."),
398
551
  status: OperatorRunStatus.optional().describe("Only runs in this status."),
399
552
  from: RunMoment.optional().describe("Runs started at or after this moment, ISO."),
@@ -411,6 +564,13 @@ export const OperatorRunListInput = z.strictObject({
411
564
  export const OperatorRunGetInput = z.strictObject({ runId: OperatorRunId });
412
565
  // Stopping a run by hand (E112): its container ends, the run ends `stopped`.
413
566
  export const RunCancelInput = z.strictObject({ runId: OperatorRunId });
567
+ // Marks the technical abort of a run read (E141, #825), like a chat: its row leaves the Actions.
568
+ export const RunUpdateInput = z.strictObject({
569
+ runId: OperatorRunId,
570
+ read: z
571
+ .literal(true)
572
+ .describe("true: you have seen that this run broke off. Its row leaves your Actions; a later run that completes takes it away by itself."),
573
+ });
414
574
  // One step of a run as its CLI's output showed it (E112): what the model wrote, a tool it called
415
575
  // with a short form of the input, the shortened result, a subagent's start and end. `agentId` is
416
576
  // the id of the call that started the subagent the step belongs to (`parent_tool_use_id` of Claude
@@ -468,9 +628,23 @@ const UsageSums = {
468
628
  // day (UTC), per credential kind, so cost and API equivalent stand apart, and per provider, so the
469
629
  // tokens of Codex and Gemini, which report no amount, stand apart from Claude's (#455). `costUsd`
470
630
  // sums the runs that carry an amount: Claude's, and every run through the AI Gateway (#470).
631
+ //
632
+ // `byMachine` names each Operator's person (`ownerId`, `ownerName`; null for the company's) and its
633
+ // model, so the month groups organisation and people (#803). `byMachineDay` splits each Operator's
634
+ // sums per day for the stacked bars; only over the API, left out over MCP, where it would only grow
635
+ // the answer (E127).
471
636
  export const OperatorRunUsage = z.object({
472
637
  ...UsageSums,
473
- byMachine: z.array(z.object({ ...RunMachine, ...UsageSums })),
638
+ byMachine: z.array(z.object({
639
+ ...RunMachine,
640
+ ownerId: UserId.nullable(),
641
+ ownerName: z.string().nullable(),
642
+ model: OperatorModel.nullable(),
643
+ ...UsageSums,
644
+ })),
645
+ byMachineDay: z
646
+ .array(z.object({ machineId: MachineId, day: z.iso.date(), ...UsageSums }))
647
+ .optional(),
474
648
  byDay: z.array(z.object({ day: z.iso.date(), ...UsageSums })),
475
649
  byKind: z.array(z.object({ kind: CredentialKind, ...UsageSums })),
476
650
  byProvider: z.array(z.object({ provider: OperatorProvider, ...UsageSums })),
@@ -27,11 +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
30
  export declare const RunCompleteInput: z.ZodObject<{
36
31
  runId: z.ZodTemplateLiteral<`run_${string}`>;
37
32
  summary: z.ZodOptional<z.ZodString>;
@@ -149,13 +144,13 @@ export declare const RunDetail: z.ZodObject<{
149
144
  package: "package";
150
145
  target: "target";
151
146
  search: "search";
147
+ calendar: "calendar";
152
148
  flag: "flag";
153
149
  route: "route";
154
150
  "arrow-right": "arrow-right";
155
151
  "square-check": "square-check";
156
152
  "file-text": "file-text";
157
153
  bulb: "bulb";
158
- calendar: "calendar";
159
154
  star: "star";
160
155
  bolt: "bolt";
161
156
  bug: "bug";
package/dist/runs/runs.js CHANGED
@@ -1,16 +1,14 @@
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`, `_get`,
9
+ // `intelligence_run_complete`, and the answers. No run starts any more (#847); the ones that stand
10
+ // stay readable, and an open one is still closed.
11
+ export const RunId = idSchema("run").describe("The run's id, `run_…`, as intelligence_run_list returned it.");
14
12
  export const runStatuses = ["running", "done", "open", "error"];
15
13
  export const RunStatus = z
16
14
  .enum(runStatuses)
@@ -29,10 +27,6 @@ export const RunListInput = z.strictObject({
29
27
  limit: Limit.optional().describe("How many runs one page holds, 1 to 100. Leaving it out gives 50."),
30
28
  });
31
29
  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
30
  const Text = z.string().max(20_000);
37
31
  export const RunCompleteInput = z.strictObject({
38
32
  runId: RunId,
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export declare const rhythms: readonly ["manual", "daily", "weekly", "monthly", "dates"];
3
3
  export declare const weekdays: readonly ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
4
+ export declare const weeksOfMonth: readonly ["first", "second", "third", "fourth", "last"];
4
5
  export declare const whileOpenModes: readonly ["wait", "continue"];
5
6
  export declare const WhileOpen: z.ZodEnum<{
6
7
  wait: "wait";
@@ -25,6 +26,24 @@ export declare const Schedule: z.ZodObject<{
25
26
  sunday: "sunday";
26
27
  }>>>;
27
28
  dayOfMonth: z.ZodOptional<z.ZodArray<z.ZodInt>>;
29
+ weekdayOfMonth: z.ZodOptional<z.ZodObject<{
30
+ week: z.ZodEnum<{
31
+ first: "first";
32
+ last: "last";
33
+ second: "second";
34
+ third: "third";
35
+ fourth: "fourth";
36
+ }>;
37
+ day: z.ZodEnum<{
38
+ monday: "monday";
39
+ tuesday: "tuesday";
40
+ wednesday: "wednesday";
41
+ thursday: "thursday";
42
+ friday: "friday";
43
+ saturday: "saturday";
44
+ sunday: "sunday";
45
+ }>;
46
+ }, z.core.$strict>>;
28
47
  times: z.ZodOptional<z.ZodArray<z.ZodString>>;
29
48
  dates: z.ZodOptional<z.ZodArray<z.ZodString>>;
30
49
  zone: z.ZodOptional<z.ZodString>;
@@ -22,16 +22,21 @@ const TimeOfDay = z
22
22
  const LocalMoment = z
23
23
  .string()
24
24
  .regex(/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T([01]\d|2[0-3]):[0-5]\d$/, "A date is YYYY-MM-DDTHH:MM on the schedule's clock, like 2026-10-15T08:00.");
25
+ // The place of a weekday in its month (#830): the first to the fourth, or the last, which is the
26
+ // fourth or the fifth.
27
+ export const weeksOfMonth = ["first", "second", "third", "fourth", "last"];
25
28
  // Which fields each rhythm takes; every other one is refused, so nothing lies stored that no rhythm
26
- // reads.
29
+ // reads. A monthly rhythm takes days of the month OR a weekday of the month, never both (#830).
27
30
  const rhythmFields = {
28
31
  manual: [],
29
32
  daily: ["times"],
30
33
  weekly: ["days", "times"],
31
- monthly: ["dayOfMonth", "times"],
34
+ monthly: ["dayOfMonth", "weekdayOfMonth", "times"],
32
35
  dates: ["dates"],
33
36
  };
34
- const scheduleFields = ["days", "dayOfMonth", "times", "dates"];
37
+ const scheduleFields = ["days", "dayOfMonth", "weekdayOfMonth", "times", "dates"];
38
+ // The fields of which a rhythm takes exactly one.
39
+ const oneOf = ["dayOfMonth", "weekdayOfMonth"];
35
40
  // What happens when a run falls due while the last one is still open (E75, Funktionen › Läufe):
36
41
  // wait (the default) starts none until the last is completed, continue starts it anyway and the
37
42
  // open ones stay open.
@@ -43,7 +48,7 @@ export const Schedule = z
43
48
  .strictObject({
44
49
  rhythm: z
45
50
  .enum(rhythms)
46
- .describe("How often a run falls due: manual (a person starts it), daily, weekly (on days), monthly (on dayOfMonth), or dates (fixed moments, each once)."),
51
+ .describe("How often a run falls due: manual (a person starts it), daily, weekly (on days), monthly (on dayOfMonth or weekdayOfMonth), or dates (fixed moments, each once)."),
47
52
  days: z
48
53
  .array(z.enum(weekdays))
49
54
  .min(1)
@@ -56,6 +61,15 @@ export const Schedule = z
56
61
  .max(31)
57
62
  .optional()
58
63
  .describe("The days of the month of a monthly rhythm, like [1, 15]. A month without that day is skipped, never moved to its last day. Only with monthly."),
64
+ weekdayOfMonth: z
65
+ .strictObject({
66
+ week: z
67
+ .enum(weeksOfMonth)
68
+ .describe("Which one in the month: first to fourth, or last (the fourth or the fifth)."),
69
+ day: z.enum(weekdays).describe("The weekday, like monday."),
70
+ })
71
+ .optional()
72
+ .describe("A weekday of the month of a monthly rhythm instead of dayOfMonth, like { week: last, day: monday } for the last Monday. week is first to fourth or last. Only with monthly."),
59
73
  times: z
60
74
  .array(TimeOfDay)
61
75
  .min(1)
@@ -73,9 +87,18 @@ export const Schedule = z
73
87
  })
74
88
  .superRefine((schedule, ctx) => {
75
89
  const wanted = rhythmFields[schedule.rhythm];
90
+ const either = oneOf.filter((field) => wanted.includes(field));
91
+ const given = either.filter((field) => schedule[field] !== undefined);
92
+ if (either.length > 0 && given.length !== 1) {
93
+ ctx.addIssue({
94
+ code: "custom",
95
+ path: [either[0]],
96
+ message: `A ${schedule.rhythm} rhythm needs either dayOfMonth, like [1, 15], or weekdayOfMonth, like { week: last, day: monday }; this one has ${given.length === 0 ? "none" : "both"}.`,
97
+ });
98
+ }
76
99
  for (const field of scheduleFields) {
77
100
  const present = schedule[field] !== undefined;
78
- if (wanted.includes(field) && !present) {
101
+ if (wanted.includes(field) && !present && !either.includes(field)) {
79
102
  ctx.addIssue({
80
103
  code: "custom",
81
104
  path: [field],
package/dist/sdk.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { ActionChat, ActionGadget, ActionItem, ActionList, ActionListInput, ActionNotice, ActionNoticeButton, ActionNoticeCrumb, ActionNoticeItem, ActionNoticeKind, ActionNoticeReason, ActionNoticeTitle, ActionProcess, ActionRow, ActionRun, ActionRunHint, ActionRunTask, ActionSection, ActionTask, ActionValidation, actionFilters, isNodeRow, MachineInstructions, MachineInstructionsRead, } from "./actions/actions.js";
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";
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";
@@ -18,6 +18,7 @@ export { ExcerptCursor, excerptChars, RowsExcerpt, TextExcerpt } from "./excerpt
18
18
  export { FileCreateInput, FileDetail, type FileFormat, FileGetInput, FileId, FileTextState, FileUpdateInput, FileUpload, fileFormatExtensions, fileFormatOf, fileTextStates, maxFileBytes, UploadTicket, uploadTicketHeader, uploadTicketLifetimeMs, } from "./files/files.js";
19
19
  export { FunctionRemoved, ServiceInterfaceFunctionCreateInput, ServiceInterfaceFunctionRemoveInput, ServiceInterfaceFunctionUpdateInput, } from "./functions/functions.js";
20
20
  export { GadgetCall, GadgetCallCreateInput, GadgetCallEntry, GadgetCallGetInput, GadgetCallItem, GadgetCallList, GadgetCallListInput, GadgetCallStatus, GadgetChange, GadgetClientLog, GadgetConsoleLine, GadgetCreateInput, GadgetDetail, GadgetFile, GadgetFilePath, GadgetFunction, GadgetFunctionName, GadgetGetInput, GadgetLevel, GadgetManifest, GadgetPublishInput, GadgetSettings, GadgetTestInput, GadgetTestResult, GadgetTestRun, GadgetToolUse, GadgetUpdateInput, GadgetVersionRef, gadgetLimits, gadgetLogDays, } from "./gadgets/gadgets.js";
21
+ export { GoalCheck, GoalCreateInput, GoalDetail, GoalFields, GoalFollowUp, GoalGetInput, GoalId, GoalPlanning, GoalPlanStep, GoalReady, GoalReport, GoalRunCancelInput, GoalRunCompleteInput, GoalRunCreateInput, GoalRunDetail, GoalRunGetInput, GoalRunItem, GoalRunList, GoalRunListInput, GoalRunStatus, GoalRunTrigger, GoalRunUpdateInput, GoalSession, GoalUpdateInput, goalPlannings, goalRunStatuses, } from "./goals/goals.js";
21
22
  export { type Action, actions, hasRoute, isAction, isPackage, isWord, type Package, packages, parseConnectorFunction, parseToolName, type Resource, type Route, resources, type ToolName, toolAnnotations, toolEvent, toolPermission, toolRoute, toolSchemaName, verbs, } from "./grammar/grammar.js";
22
23
  export { GrantId, GrantRight, NodeGrant, NodeGrantList, NodeGrantListInput, NodeGrantRevoked, NodeGrantRevokeInput, NodeShared, NodeShareInput, } from "./grants/grants.js";
23
24
  export { createId, type Id, idSchema } from "./ids/ids.js";
@@ -27,25 +28,27 @@ export { Delivery, Invitation, InvitationAcceptInput, InvitationCreateInput, Inv
27
28
  export { defaultLinkDays, LinkId, LinkStatus, maxLinkDays, NodeLink, NodeLinkCreateInput, NodeLinkList, NodeLinkListInput, NodeLinkRevokeInput, NodeLinkUpdateInput, publicLinkPath, } from "./links/links.js";
28
29
  export { Flag, Limit } from "./list-input.js";
29
30
  export { MachineArchiveInput, MachineCreateInput, MachineId, MachineKey, MachinePurged, MachinePurgeInput, MachineRestoreInput, MachineRotateInput, MachineUpdateInput, } from "./machines/machines.js";
31
+ export { Mcp, McpAuth, McpCall, McpCallAction, McpCallList, McpCallListInput, type McpCatalogEntry, McpCatalogId, McpCreateInput, McpGetInput, McpId, McpList, McpListInput, McpRevokeInput, McpState, McpTestInput, McpTool, McpUpdateInput, mcpCatalog, } from "./mcps/mcps.js";
30
32
  export { ChatRead, ChatUpdateInput, Message, MessageAuthor, MessageCreateInput, MessageId, MessageList, MessageListInput, messageMaxLength, } from "./messages/messages.js";
31
33
  export { Missing, MissingCall, MissingCode, missingCodes, Reached, } from "./missing/missing.js";
32
34
  export { BoardShownKind, BoardSystem, FolderCreated, FolderCreateInput, IntelligenceUser, IntelligenceUserList, IntelligenceUserListInput, NodeDetail, NodeGetInput, NodeHit, NodeHitFoundIn, NodeHitGroup, NodeId, NodeKind, NodeList, NodeListInput, NodeListItem, NodeMoved, NodeMoveInput, NodePath, NodePerson, NodeQuery, NodeReader, NodeSearch, NodeSection, NodeSort, NodeUpdateInput, NodeValidation, nodeKinds, responsibleKinds, SearchIndexState, SecretFields, SecretId, } from "./nodes/nodes.js";
33
- export { Credential, CredentialCreateInput, CredentialGetInput, CredentialId, CredentialKind, CredentialList, CredentialListInput, CredentialRevokeInput, CredentialState, CredentialTested, CredentialTestInput, CredentialTestResult, CredentialUpdateInput, compactRunLimit, GatewayTarget, MachineDisableInput, MachineEnableInput, MachineGetInput, MachineListInput, modelsOf, Operator, OperatorLimits, OperatorList, OperatorMachineArchiveInput, OperatorMachineCreateInput, OperatorMachineUpdateInput, OperatorModel, type OperatorProviderEntry, OperatorRun, OperatorRunAgents, OperatorRunGetInput, OperatorRunId, OperatorRunInstructions, OperatorRunList, OperatorRunListInput, OperatorRunReason, OperatorRunStatus, OperatorRunStep, OperatorRunStepKind, OperatorRunStepList, OperatorRunTokens, OperatorRunTouched, OperatorRunTrigger, OperatorRunUsage, OperatorState, operatorDefaults, operatorProviders, PauseReason, RunCancelInput, RunStepListInput, runSummaryChars, Subagents, Trigger, } from "./operators/operators.js";
35
+ export { ChangeTrigger, Credential, CredentialCreateInput, CredentialGetInput, CredentialId, CredentialKind, CredentialList, CredentialListInput, CredentialRevokeInput, CredentialState, CredentialTested, CredentialTestInput, CredentialTestResult, CredentialUpdateInput, compactRunLimit, GatewayTarget, MachineDisableInput, MachineEnableInput, MachineGetInput, MachineListInput, modelsOf, Operator, OperatorBudget, OperatorLimits, OperatorList, OperatorMachineArchiveInput, OperatorMachineCreateInput, OperatorMachineRestoreInput, OperatorMachineUpdateInput, OperatorModel, type OperatorProviderEntry, OperatorRun, OperatorRunAgents, OperatorRunFallbackReason, OperatorRunGetInput, OperatorRunId, OperatorRunInstructions, OperatorRunList, OperatorRunListInput, OperatorRunReason, OperatorRunStatus, OperatorRunStep, OperatorRunStepKind, OperatorRunStepList, OperatorRunTokens, OperatorRunTouched, OperatorRunTrigger, OperatorRunUsage, OperatorRunWoken, OperatorState, OperatorUser, OperatorUserList, OperatorUserListInput, OperatorUserUpdateInput, operatorDefaults, operatorProviders, PauseReason, RunCancelInput, RunStepListInput, RunUpdateInput, runSummaryChars, Subagents, Trigger, } from "./operators/operators.js";
34
36
  export { PageDetail, PageGetInput, PageHead, PageHeading, PageId, PageList, PageListInput, PageSummary, } from "./pages/pages.js";
35
37
  export { IdempotencyKey, Rev } from "./primitives/primitives.js";
36
38
  export { Locale, locales, Name, ProfileImageResponse, ProfileUpdateInput, profileImageMaxBytes, profileImageTypes, Theme, TimeZone, themes, } from "./profile/profile.js";
37
39
  export { GrantChange, PermissionsResponse, RightInCode, RightPath, RightTree, Role, RoleArchiveInput, RoleCreateInput, RoleDetail, RoleGetInput, RoleGrantCreateInput, RoleGrantRevokeInput, RoleId, RoleList, RoleListInput, RoleRestoreInput, RoleUpdateInput, } from "./roles/roles.js";
38
- export { BoardRunCreateInput, RunCompleteInput, RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
40
+ export { RunCompleteInput, RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
39
41
  export { RuntimeConfig } from "./runtime-config.js";
40
- export { rhythms, Schedule, WhileOpen, weekdays, whileOpenModes } from "./schedule/schedule.js";
42
+ export { rhythms, Schedule, WhileOpen, weekdays, weeksOfMonth, whileOpenModes, } from "./schedule/schedule.js";
41
43
  export { NodeSecret, NodeSecretCreateInput, NodeSecretDetail, NodeSecretGetInput, NodeSecretRemoveInput, NodeSecretUpdateInput, NodeUnlocked, NodeUnlockInput, unlockMinutes, } from "./secrets/secrets.js";
42
44
  export { type Authorized, type AuthorizeResult, createServiceClient, type InterfaceDeclaredResult, type InterfaceRemovedResult, type ServiceClient, type ServiceClientDeps, type ServiceClientFailure, } from "./service-client/service-client.js";
43
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, SkillTokens, SkillTriggerHit, SkillUpdateInput, skillCaseStatuses, skillFilePattern, skillRunKinds, skillRunStatuses, } from "./skills/skills.js";
44
47
  export { SignInProviders, Sso, SsoId, SsoList, SsoListInput, SsoRemoveInput, SsoSource, SsoUpdateInput, ssoIds, } from "./sso/sso.js";
45
48
  export { TableColumn, TableColumnChange, TableColumnType, TableCreateInput, TableDetail, TableExcerpt, TableGetInput, TableId, TableSaved, TableUpdateInput, tableColumnTypes, tableFormats, } from "./tables/tables.js";
46
49
  export { type Actor, defineTool, type Permission, type Tool, type ToolAnnotations, type ToolContext, type ToolInput, type ToolSource, } from "./tool.js";
47
50
  export { IntelligenceUserGetInput, IntelligenceUserUpdateInput, NotifyMode, notifyModes, UserSettings, } from "./user-settings/user-settings.js";
48
51
  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";
49
- export { TicketSubject, TicketSubjectRef, ValidationBoardId, validationBoardId, } from "./validation/validation.js";
52
+ export { TicketSubject, TicketSubjectRef, ValidationBoardId, validationBoardId, validationGoalId, } from "./validation/validation.js";
50
53
  export { MoveColumn, NodeVersion, NodeVersionCreateInput, NodeVersionDetail, NodeVersionExcerpt, NodeVersionGetInput, NodeVersionList, NodeVersionListInput, TaskMove, TaskVersionChange, taskVersionChanges, VersionId, VersionMove, versionKinds, } from "./versions/versions.js";
51
54
  export { Changed, Effects, Unblocked, Written, } from "./written/written.js";
package/dist/sdk.js CHANGED
@@ -1,7 +1,7 @@
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 { ActionChat, ActionGadget, ActionItem, ActionList, ActionListInput, ActionNotice, ActionNoticeButton, ActionNoticeCrumb, ActionNoticeItem, ActionNoticeKind, ActionNoticeReason, ActionNoticeTitle, ActionProcess, ActionRow, ActionRun, ActionRunHint, ActionRunTask, ActionSection, ActionTask, ActionValidation, actionFilters, isNodeRow, MachineInstructions, MachineInstructionsRead, } from "./actions/actions.js";
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";
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";
@@ -21,6 +21,7 @@ export { ExcerptCursor, excerptChars, RowsExcerpt, TextExcerpt } from "./excerpt
21
21
  export { FileCreateInput, FileDetail, FileGetInput, FileId, FileTextState, FileUpdateInput, FileUpload, fileFormatExtensions, fileFormatOf, fileTextStates, maxFileBytes, UploadTicket, uploadTicketHeader, uploadTicketLifetimeMs, } from "./files/files.js";
22
22
  export { FunctionRemoved, ServiceInterfaceFunctionCreateInput, ServiceInterfaceFunctionRemoveInput, ServiceInterfaceFunctionUpdateInput, } from "./functions/functions.js";
23
23
  export { GadgetCall, GadgetCallCreateInput, GadgetCallEntry, GadgetCallGetInput, GadgetCallItem, GadgetCallList, GadgetCallListInput, GadgetCallStatus, GadgetChange, GadgetClientLog, GadgetConsoleLine, GadgetCreateInput, GadgetDetail, GadgetFile, GadgetFilePath, GadgetFunction, GadgetFunctionName, GadgetGetInput, GadgetLevel, GadgetManifest, GadgetPublishInput, GadgetSettings, GadgetTestInput, GadgetTestResult, GadgetTestRun, GadgetToolUse, GadgetUpdateInput, GadgetVersionRef, gadgetLimits, gadgetLogDays, } from "./gadgets/gadgets.js";
24
+ export { GoalCheck, GoalCreateInput, GoalDetail, GoalFields, GoalFollowUp, GoalGetInput, GoalId, GoalPlanning, GoalPlanStep, GoalReady, GoalReport, GoalRunCancelInput, GoalRunCompleteInput, GoalRunCreateInput, GoalRunDetail, GoalRunGetInput, GoalRunItem, GoalRunList, GoalRunListInput, GoalRunStatus, GoalRunTrigger, GoalRunUpdateInput, GoalSession, GoalUpdateInput, goalPlannings, goalRunStatuses, } from "./goals/goals.js";
24
25
  export { actions, hasRoute, isAction, isPackage, isWord, packages, parseConnectorFunction, parseToolName, resources, toolAnnotations, toolEvent, toolPermission, toolRoute, toolSchemaName, verbs, } from "./grammar/grammar.js";
25
26
  export { GrantId, GrantRight, NodeGrant, NodeGrantList, NodeGrantListInput, NodeGrantRevoked, NodeGrantRevokeInput, NodeShared, NodeShareInput, } from "./grants/grants.js";
26
27
  export { createId, idSchema } from "./ids/ids.js";
@@ -30,25 +31,27 @@ export { Delivery, Invitation, InvitationAcceptInput, InvitationCreateInput, Inv
30
31
  export { defaultLinkDays, LinkId, LinkStatus, maxLinkDays, NodeLink, NodeLinkCreateInput, NodeLinkList, NodeLinkListInput, NodeLinkRevokeInput, NodeLinkUpdateInput, publicLinkPath, } from "./links/links.js";
31
32
  export { Flag, Limit } from "./list-input.js";
32
33
  export { MachineArchiveInput, MachineCreateInput, MachineId, MachineKey, MachinePurged, MachinePurgeInput, MachineRestoreInput, MachineRotateInput, MachineUpdateInput, } from "./machines/machines.js";
34
+ export { Mcp, McpAuth, McpCall, McpCallAction, McpCallList, McpCallListInput, McpCatalogId, McpCreateInput, McpGetInput, McpId, McpList, McpListInput, McpRevokeInput, McpState, McpTestInput, McpTool, McpUpdateInput, mcpCatalog, } from "./mcps/mcps.js";
33
35
  export { ChatRead, ChatUpdateInput, Message, MessageAuthor, MessageCreateInput, MessageId, MessageList, MessageListInput, messageMaxLength, } from "./messages/messages.js";
34
36
  export { Missing, MissingCall, MissingCode, missingCodes, Reached, } from "./missing/missing.js";
35
37
  export { BoardShownKind, BoardSystem, FolderCreated, FolderCreateInput, IntelligenceUser, IntelligenceUserList, IntelligenceUserListInput, NodeDetail, NodeGetInput, NodeHit, NodeHitFoundIn, NodeHitGroup, NodeId, NodeKind, NodeList, NodeListInput, NodeListItem, NodeMoved, NodeMoveInput, NodePath, NodePerson, NodeQuery, NodeReader, NodeSearch, NodeSection, NodeSort, NodeUpdateInput, NodeValidation, nodeKinds, responsibleKinds, SearchIndexState, SecretFields, SecretId, } from "./nodes/nodes.js";
36
- export { Credential, CredentialCreateInput, CredentialGetInput, CredentialId, CredentialKind, CredentialList, CredentialListInput, CredentialRevokeInput, CredentialState, CredentialTested, CredentialTestInput, CredentialTestResult, CredentialUpdateInput, compactRunLimit, GatewayTarget, MachineDisableInput, MachineEnableInput, MachineGetInput, MachineListInput, modelsOf, Operator, OperatorLimits, OperatorList, OperatorMachineArchiveInput, OperatorMachineCreateInput, OperatorMachineUpdateInput, OperatorModel, OperatorRun, OperatorRunAgents, OperatorRunGetInput, OperatorRunId, OperatorRunInstructions, OperatorRunList, OperatorRunListInput, OperatorRunReason, OperatorRunStatus, OperatorRunStep, OperatorRunStepKind, OperatorRunStepList, OperatorRunTokens, OperatorRunTouched, OperatorRunTrigger, OperatorRunUsage, OperatorState, operatorDefaults, operatorProviders, PauseReason, RunCancelInput, RunStepListInput, runSummaryChars, Subagents, Trigger, } from "./operators/operators.js";
38
+ export { ChangeTrigger, Credential, CredentialCreateInput, CredentialGetInput, CredentialId, CredentialKind, CredentialList, CredentialListInput, CredentialRevokeInput, CredentialState, CredentialTested, CredentialTestInput, CredentialTestResult, CredentialUpdateInput, compactRunLimit, GatewayTarget, MachineDisableInput, MachineEnableInput, MachineGetInput, MachineListInput, modelsOf, Operator, OperatorBudget, OperatorLimits, OperatorList, OperatorMachineArchiveInput, OperatorMachineCreateInput, OperatorMachineRestoreInput, OperatorMachineUpdateInput, OperatorModel, OperatorRun, OperatorRunAgents, OperatorRunFallbackReason, OperatorRunGetInput, OperatorRunId, OperatorRunInstructions, OperatorRunList, OperatorRunListInput, OperatorRunReason, OperatorRunStatus, OperatorRunStep, OperatorRunStepKind, OperatorRunStepList, OperatorRunTokens, OperatorRunTouched, OperatorRunTrigger, OperatorRunUsage, OperatorRunWoken, OperatorState, OperatorUser, OperatorUserList, OperatorUserListInput, OperatorUserUpdateInput, operatorDefaults, operatorProviders, PauseReason, RunCancelInput, RunStepListInput, RunUpdateInput, runSummaryChars, Subagents, Trigger, } from "./operators/operators.js";
37
39
  export { PageDetail, PageGetInput, PageHead, PageHeading, PageId, PageList, PageListInput, PageSummary, } from "./pages/pages.js";
38
40
  export { IdempotencyKey, Rev } from "./primitives/primitives.js";
39
41
  export { Locale, locales, Name, ProfileImageResponse, ProfileUpdateInput, profileImageMaxBytes, profileImageTypes, Theme, TimeZone, themes, } from "./profile/profile.js";
40
42
  export { GrantChange, PermissionsResponse, RightInCode, RightPath, RightTree, Role, RoleArchiveInput, RoleCreateInput, RoleDetail, RoleGetInput, RoleGrantCreateInput, RoleGrantRevokeInput, RoleId, RoleList, RoleListInput, RoleRestoreInput, RoleUpdateInput, } from "./roles/roles.js";
41
- export { BoardRunCreateInput, RunCompleteInput, RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
43
+ export { RunCompleteInput, RunDetail, RunGetInput, RunId, RunItem, RunList, RunListInput, RunStatus, runStatuses, } from "./runs/runs.js";
42
44
  export { RuntimeConfig } from "./runtime-config.js";
43
- export { rhythms, Schedule, WhileOpen, weekdays, whileOpenModes } from "./schedule/schedule.js";
45
+ export { rhythms, Schedule, WhileOpen, weekdays, weeksOfMonth, whileOpenModes, } from "./schedule/schedule.js";
44
46
  export { NodeSecret, NodeSecretCreateInput, NodeSecretDetail, NodeSecretGetInput, NodeSecretRemoveInput, NodeSecretUpdateInput, NodeUnlocked, NodeUnlockInput, unlockMinutes, } from "./secrets/secrets.js";
45
47
  export { createServiceClient, } from "./service-client/service-client.js";
46
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, SkillTokens, SkillTriggerHit, SkillUpdateInput, skillCaseStatuses, skillFilePattern, skillRunKinds, skillRunStatuses, } from "./skills/skills.js";
47
50
  export { SignInProviders, Sso, SsoId, SsoList, SsoListInput, SsoRemoveInput, SsoSource, SsoUpdateInput, ssoIds, } from "./sso/sso.js";
48
51
  export { TableColumn, TableColumnChange, TableColumnType, TableCreateInput, TableDetail, TableExcerpt, TableGetInput, TableId, TableSaved, TableUpdateInput, tableColumnTypes, tableFormats, } from "./tables/tables.js";
49
52
  export { defineTool, } from "./tool.js";
50
53
  export { IntelligenceUserGetInput, IntelligenceUserUpdateInput, NotifyMode, notifyModes, UserSettings, } from "./user-settings/user-settings.js";
51
54
  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
- export { TicketSubject, TicketSubjectRef, ValidationBoardId, validationBoardId, } from "./validation/validation.js";
55
+ export { TicketSubject, TicketSubjectRef, ValidationBoardId, validationBoardId, validationGoalId, } from "./validation/validation.js";
53
56
  export { MoveColumn, NodeVersion, NodeVersionCreateInput, NodeVersionDetail, NodeVersionExcerpt, NodeVersionGetInput, NodeVersionList, NodeVersionListInput, TaskMove, TaskVersionChange, taskVersionChanges, VersionId, VersionMove, versionKinds, } from "./versions/versions.js";
54
57
  export { Changed, Effects, Unblocked, Written, } from "./written/written.js";