@qontinui/shared-types 2.5.0 → 3.0.0

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.
@@ -252,6 +252,52 @@ interface ConditionStatus {
252
252
  */
253
253
  type CatchUpPolicy = "run" | "skip" | "run_once";
254
254
 
255
+ /* eslint-disable */
256
+ /**
257
+ * This file was automatically generated.
258
+ * DO NOT MODIFY IT BY HAND. Regenerate with
259
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
260
+ */
261
+
262
+ /**
263
+ * Provenance of a [`ScheduledTask`] that the runner reconciles from a
264
+ * fleet-wide declaration (plan
265
+ * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
266
+ *
267
+ * `(source, tenant_id, agent)` is the managed key: the runner holds at most
268
+ * one task per key. What the reconciler compares to decide whether a task is
269
+ * current is `digest`, never `version` — a catalog fix in coord's code moves
270
+ * no row version, and a deleted-and-recreated agent restarts its version at 1.
271
+ */
272
+ interface ManagedBy {
273
+ /**
274
+ * The recurring agent's name — its join key across coord's status, run
275
+ * requests and this managed task (coord forbids renames).
276
+ */
277
+ agent: string;
278
+ /**
279
+ * sha256 (64 lowercase hex) of the resolved spec coord served when this
280
+ * task was applied. `None` = applied from a declaration that carried no
281
+ * digest.
282
+ */
283
+ digest?: string | null;
284
+ /**
285
+ * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
286
+ * A plain string rather than an enum, so a stored task from a newer
287
+ * source still loads; the consumer decides what it recognises.
288
+ */
289
+ source: string;
290
+ /**
291
+ * The coord tenant (UUID) whose declaration this task applies. A device
292
+ * bound to several tenants holds one managed task per tenant and agent.
293
+ */
294
+ tenantId: string;
295
+ /**
296
+ * The declaration's row version when applied. History and display only.
297
+ */
298
+ version: number;
299
+ }
300
+
255
301
  /* eslint-disable */
256
302
  /**
257
303
  * This file was automatically generated.
@@ -643,44 +689,6 @@ interface ScheduledTask {
643
689
  */
644
690
  timezone?: string | null;
645
691
  }
646
- /**
647
- * Provenance of a [`ScheduledTask`] that the runner reconciles from a
648
- * fleet-wide declaration (plan
649
- * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
650
- *
651
- * `(source, tenant_id, agent)` is the managed key: the runner holds at most
652
- * one task per key. What the reconciler compares to decide whether a task is
653
- * current is `digest`, never `version` — a catalog fix in coord's code moves
654
- * no row version, and a deleted-and-recreated agent restarts its version at 1.
655
- */
656
- interface ManagedBy {
657
- /**
658
- * The recurring agent's name — its join key across coord's status, run
659
- * requests and this managed task (coord forbids renames).
660
- */
661
- agent: string;
662
- /**
663
- * sha256 (64 lowercase hex) of the resolved spec coord served when this
664
- * task was applied. `None` = applied from a declaration that carried no
665
- * digest.
666
- */
667
- digest?: string | null;
668
- /**
669
- * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
670
- * A plain string rather than an enum, so a stored task from a newer
671
- * source still loads; the consumer decides what it recognises.
672
- */
673
- source: string;
674
- /**
675
- * The coord tenant (UUID) whose declaration this task applies. A device
676
- * bound to several tenants holds one managed task per tenant and agent.
677
- */
678
- tenantId: string;
679
- /**
680
- * The declaration's row version when applied. History and display only.
681
- */
682
- version: number;
683
- }
684
692
 
685
693
  /* eslint-disable */
686
694
  /**
@@ -252,6 +252,52 @@ interface ConditionStatus {
252
252
  */
253
253
  type CatchUpPolicy = "run" | "skip" | "run_once";
254
254
 
255
+ /* eslint-disable */
256
+ /**
257
+ * This file was automatically generated.
258
+ * DO NOT MODIFY IT BY HAND. Regenerate with
259
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
260
+ */
261
+
262
+ /**
263
+ * Provenance of a [`ScheduledTask`] that the runner reconciles from a
264
+ * fleet-wide declaration (plan
265
+ * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
266
+ *
267
+ * `(source, tenant_id, agent)` is the managed key: the runner holds at most
268
+ * one task per key. What the reconciler compares to decide whether a task is
269
+ * current is `digest`, never `version` — a catalog fix in coord's code moves
270
+ * no row version, and a deleted-and-recreated agent restarts its version at 1.
271
+ */
272
+ interface ManagedBy {
273
+ /**
274
+ * The recurring agent's name — its join key across coord's status, run
275
+ * requests and this managed task (coord forbids renames).
276
+ */
277
+ agent: string;
278
+ /**
279
+ * sha256 (64 lowercase hex) of the resolved spec coord served when this
280
+ * task was applied. `None` = applied from a declaration that carried no
281
+ * digest.
282
+ */
283
+ digest?: string | null;
284
+ /**
285
+ * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
286
+ * A plain string rather than an enum, so a stored task from a newer
287
+ * source still loads; the consumer decides what it recognises.
288
+ */
289
+ source: string;
290
+ /**
291
+ * The coord tenant (UUID) whose declaration this task applies. A device
292
+ * bound to several tenants holds one managed task per tenant and agent.
293
+ */
294
+ tenantId: string;
295
+ /**
296
+ * The declaration's row version when applied. History and display only.
297
+ */
298
+ version: number;
299
+ }
300
+
255
301
  /* eslint-disable */
256
302
  /**
257
303
  * This file was automatically generated.
@@ -643,44 +689,6 @@ interface ScheduledTask {
643
689
  */
644
690
  timezone?: string | null;
645
691
  }
646
- /**
647
- * Provenance of a [`ScheduledTask`] that the runner reconciles from a
648
- * fleet-wide declaration (plan
649
- * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
650
- *
651
- * `(source, tenant_id, agent)` is the managed key: the runner holds at most
652
- * one task per key. What the reconciler compares to decide whether a task is
653
- * current is `digest`, never `version` — a catalog fix in coord's code moves
654
- * no row version, and a deleted-and-recreated agent restarts its version at 1.
655
- */
656
- interface ManagedBy {
657
- /**
658
- * The recurring agent's name — its join key across coord's status, run
659
- * requests and this managed task (coord forbids renames).
660
- */
661
- agent: string;
662
- /**
663
- * sha256 (64 lowercase hex) of the resolved spec coord served when this
664
- * task was applied. `None` = applied from a declaration that carried no
665
- * digest.
666
- */
667
- digest?: string | null;
668
- /**
669
- * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
670
- * A plain string rather than an enum, so a stored task from a newer
671
- * source still loads; the consumer decides what it recognises.
672
- */
673
- source: string;
674
- /**
675
- * The coord tenant (UUID) whose declaration this task applies. A device
676
- * bound to several tenants holds one managed task per tenant and agent.
677
- */
678
- tenantId: string;
679
- /**
680
- * The declaration's row version when applied. History and display only.
681
- */
682
- version: number;
683
- }
684
692
 
685
693
  /* eslint-disable */
686
694
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qontinui/shared-types",
3
- "version": "2.5.0",
3
+ "version": "3.0.0",
4
4
  "description": "Shared TypeScript types for the Qontinui ecosystem",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -11,6 +11,11 @@ import type { VerificationCategoryKind } from "./VerificationCategoryKind";
11
11
  /**
12
12
  * Drive a state machine through recorded transitions from a playbook.
13
13
  *
14
+ * The playbook travels inline in `content`, the only body the runner's
15
+ * executor reads. There is no path form: a `playbookPath` key on a stored
16
+ * step is ignored when it is decoded and dropped when the step is written
17
+ * back.
18
+ *
14
19
  * Wire tag: `"execute_playbook"`.
15
20
  */
16
21
  export interface ExecutePlaybookStep {
@@ -50,10 +55,6 @@ export interface ExecutePlaybookStep {
50
55
  * Display name for the step. Absent or `null` reads as `""`.
51
56
  */
52
57
  name: string;
53
- /**
54
- * Path to a playbook file.
55
- */
56
- playbookPath?: string | null;
57
58
  /**
58
59
  * Whether this step is required (default: `true` on consumer side).
59
60
  */
@@ -0,0 +1,45 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * Provenance of a [`ScheduledTask`] that the runner reconciles from a
10
+ * fleet-wide declaration (plan
11
+ * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
12
+ *
13
+ * `(source, tenant_id, agent)` is the managed key: the runner holds at most
14
+ * one task per key. What the reconciler compares to decide whether a task is
15
+ * current is `digest`, never `version` — a catalog fix in coord's code moves
16
+ * no row version, and a deleted-and-recreated agent restarts its version at 1.
17
+ */
18
+ export interface ManagedBy {
19
+ /**
20
+ * The recurring agent's name — its join key across coord's status, run
21
+ * requests and this managed task (coord forbids renames).
22
+ */
23
+ agent: string;
24
+ /**
25
+ * sha256 (64 lowercase hex) of the resolved spec coord served when this
26
+ * task was applied. `None` = applied from a declaration that carried no
27
+ * digest.
28
+ */
29
+ digest?: string | null;
30
+ /**
31
+ * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
32
+ * A plain string rather than an enum, so a stored task from a newer
33
+ * source still loads; the consumer decides what it recognises.
34
+ */
35
+ source: string;
36
+ /**
37
+ * The coord tenant (UUID) whose declaration this task applies. A device
38
+ * bound to several tenants holds one managed task per tenant and agent.
39
+ */
40
+ tenantId: string;
41
+ /**
42
+ * The declaration's row version when applied. History and display only.
43
+ */
44
+ version: number;
45
+ }
@@ -0,0 +1,11 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * A device's dispatch role, in coord's vocabulary (`dispatch_role.rs`).
10
+ */
11
+ export type RecurringAgentDispatchRole = "workhorse" | "bench" | "ci_node";
@@ -0,0 +1,20 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * An [`RecurringAgentParamKind::IntegerSet`] value the entry refuses.
10
+ */
11
+ export interface RecurringAgentExcludedValue {
12
+ /**
13
+ * Why it is refused.
14
+ */
15
+ reason: string;
16
+ /**
17
+ * The refused value.
18
+ */
19
+ value: number;
20
+ }
@@ -0,0 +1,11 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * An operating system a [`RecurringAgentTarget::Os`] target selects.
10
+ */
11
+ export type RecurringAgentOs = "linux" | "windows" | "macos";
@@ -0,0 +1,48 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { ConditionScheduleConfig } from "./ConditionScheduleConfig";
9
+ import type { IdleCondition } from "./IdleCondition";
10
+ import type { McpConnectionRef } from "./McpConnectionRef";
11
+ import type { ProbeCondition } from "./ProbeCondition";
12
+ import type { RepositoryInactiveCondition } from "./RepositoryInactiveCondition";
13
+ import type { RepositoryWatch } from "./RepositoryWatch";
14
+ import type { ScheduleConditions } from "./ScheduleConditions";
15
+ import type { ScheduleExpression } from "./ScheduleExpression";
16
+ import type { ScheduledTaskType } from "./ScheduledTaskType";
17
+
18
+ /**
19
+ * A local override of a managed task on one machine (plan D6), stored by the
20
+ * runner and reported to coord so the web shows it. Only the fields set are
21
+ * overridden; the rest follow the fleet declaration.
22
+ */
23
+ export interface RecurringAgentOverride {
24
+ /**
25
+ * Replacement conditions (e.g. require idle / repo inactive).
26
+ */
27
+ conditions?: ScheduleConditions | null;
28
+ /**
29
+ * ISO 8601 timestamp when the override was made.
30
+ */
31
+ created_at: string;
32
+ /**
33
+ * Free-form note from whoever made the override.
34
+ */
35
+ note?: string | null;
36
+ /**
37
+ * Replacement schedule.
38
+ */
39
+ schedule?: ScheduleExpression | null;
40
+ /**
41
+ * Replacement task.
42
+ */
43
+ task?: ScheduledTaskType | null;
44
+ /**
45
+ * Replacement IANA time zone.
46
+ */
47
+ timezone?: string | null;
48
+ }
@@ -0,0 +1,100 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { RecurringAgentExcludedValue } from "./RecurringAgentExcludedValue";
9
+
10
+ /**
11
+ * One parameter a catalog entry's prompt is rendered from (plan D2), e.g.
12
+ * cleanup-steward's `mode` enum or return-to-main's `daily_cap` integer.
13
+ */
14
+ export type RecurringAgentParamDef = {
15
+ /**
16
+ * Human-readable explanation, shown beside the form control.
17
+ */
18
+ description: string;
19
+ /**
20
+ * The key a value is supplied under in [`RecurringAgentSpec::params`].
21
+ */
22
+ name: string;
23
+ /**
24
+ * A required parameter with no default must be supplied by the tenant
25
+ * row before the entry renders at all (strategic-pulse's tenant slug).
26
+ */
27
+ required: boolean;
28
+ [k: string]: unknown;
29
+ } & (
30
+ | {
31
+ /**
32
+ * The value used when the tenant sets none.
33
+ */
34
+ default: boolean;
35
+ type: "boolean";
36
+ [k: string]: unknown;
37
+ }
38
+ | {
39
+ /**
40
+ * The value used when the tenant sets none. Within the bounds.
41
+ */
42
+ default: number;
43
+ /**
44
+ * Largest allowed value.
45
+ */
46
+ maximum: number;
47
+ /**
48
+ * Smallest allowed value.
49
+ */
50
+ minimum: number;
51
+ type: "integer";
52
+ [k: string]: unknown;
53
+ }
54
+ | {
55
+ /**
56
+ * The value used when the tenant sets none. One of `values`.
57
+ */
58
+ default: string;
59
+ type: "enum";
60
+ /**
61
+ * The allowed values, in display order. Non-empty, no duplicates.
62
+ */
63
+ values: string[];
64
+ [k: string]: unknown;
65
+ }
66
+ | {
67
+ /**
68
+ * The values a tenant may pick from. Non-empty, no duplicates.
69
+ */
70
+ allowed: number[];
71
+ /**
72
+ * The set used when the tenant sets none. Non-empty, drawn from
73
+ * `allowed`, none of it excluded.
74
+ */
75
+ default: number[];
76
+ /**
77
+ * Values that exist but this entry refuses, each with why — shown
78
+ * greyed out in the form rather than hidden.
79
+ */
80
+ excluded: RecurringAgentExcludedValue[];
81
+ type: "integer_set";
82
+ [k: string]: unknown;
83
+ }
84
+ | {
85
+ /**
86
+ * The value used when the tenant sets none.
87
+ */
88
+ default: string | null;
89
+ type: "uuid";
90
+ [k: string]: unknown;
91
+ }
92
+ | {
93
+ /**
94
+ * The value used when the tenant sets none. `None` = no default.
95
+ */
96
+ default: string | null;
97
+ type: "slug";
98
+ [k: string]: unknown;
99
+ }
100
+ );
@@ -0,0 +1,89 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { RecurringAgentExcludedValue } from "./RecurringAgentExcludedValue";
9
+
10
+ /**
11
+ * The type, default and bounds of one catalog parameter — exactly the shape
12
+ * coord serves in each catalog entry's `params` array
13
+ * (`recurring_agents::param_schema_json` in qontinui-coord).
14
+ *
15
+ * Tagged by `type` and FLATTENED into its [`RecurringAgentParamDef`], so one
16
+ * served parameter reads
17
+ * `{"name":"mode","description":"…","required":false,"type":"enum","values":["reap","report"],"default":"reap"}`.
18
+ */
19
+ export type RecurringAgentParamKind =
20
+ | {
21
+ /**
22
+ * The value used when the tenant sets none.
23
+ */
24
+ default: boolean;
25
+ type: "boolean";
26
+ [k: string]: unknown;
27
+ }
28
+ | {
29
+ /**
30
+ * The value used when the tenant sets none. Within the bounds.
31
+ */
32
+ default: number;
33
+ /**
34
+ * Largest allowed value.
35
+ */
36
+ maximum: number;
37
+ /**
38
+ * Smallest allowed value.
39
+ */
40
+ minimum: number;
41
+ type: "integer";
42
+ [k: string]: unknown;
43
+ }
44
+ | {
45
+ /**
46
+ * The value used when the tenant sets none. One of `values`.
47
+ */
48
+ default: string;
49
+ type: "enum";
50
+ /**
51
+ * The allowed values, in display order. Non-empty, no duplicates.
52
+ */
53
+ values: string[];
54
+ [k: string]: unknown;
55
+ }
56
+ | {
57
+ /**
58
+ * The values a tenant may pick from. Non-empty, no duplicates.
59
+ */
60
+ allowed: number[];
61
+ /**
62
+ * The set used when the tenant sets none. Non-empty, drawn from
63
+ * `allowed`, none of it excluded.
64
+ */
65
+ default: number[];
66
+ /**
67
+ * Values that exist but this entry refuses, each with why — shown
68
+ * greyed out in the form rather than hidden.
69
+ */
70
+ excluded: RecurringAgentExcludedValue[];
71
+ type: "integer_set";
72
+ [k: string]: unknown;
73
+ }
74
+ | {
75
+ /**
76
+ * The value used when the tenant sets none.
77
+ */
78
+ default: string | null;
79
+ type: "uuid";
80
+ [k: string]: unknown;
81
+ }
82
+ | {
83
+ /**
84
+ * The value used when the tenant sets none. `None` = no default.
85
+ */
86
+ default: string | null;
87
+ type: "slug";
88
+ [k: string]: unknown;
89
+ };
@@ -0,0 +1,16 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { RecurringAgentExcludedValue } from "./RecurringAgentExcludedValue";
9
+ import type { RecurringAgentParamDef } from "./RecurringAgentParamDef";
10
+
11
+ /**
12
+ * The parameter form of one catalog entry: the typed parameters a tenant may
13
+ * set instead of editing prompt text (plan D2, D10). Serialized as the bare
14
+ * array coord serves under a catalog entry's `params` key.
15
+ */
16
+ export type RecurringAgentParamSchema = RecurringAgentParamDef[];
@@ -0,0 +1,91 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { CatchUpPolicy } from "./CatchUpPolicy";
9
+ import type { ConditionScheduleConfig } from "./ConditionScheduleConfig";
10
+ import type { IdleCondition } from "./IdleCondition";
11
+ import type { McpConnectionRef } from "./McpConnectionRef";
12
+ import type { ProbeCondition } from "./ProbeCondition";
13
+ import type { RecurringAgentDispatchRole } from "./RecurringAgentDispatchRole";
14
+ import type { RecurringAgentOs } from "./RecurringAgentOs";
15
+ import type { RecurringAgentTarget } from "./RecurringAgentTarget";
16
+ import type { RepositoryInactiveCondition } from "./RepositoryInactiveCondition";
17
+ import type { RepositoryWatch } from "./RepositoryWatch";
18
+ import type { ScheduleConditions } from "./ScheduleConditions";
19
+ import type { ScheduleExpression } from "./ScheduleExpression";
20
+ import type { ScheduledTaskType } from "./ScheduledTaskType";
21
+
22
+ /**
23
+ * One recurring agent as coord serves it: a catalog entry merged with the
24
+ * tenant's overrides, or a custom agent's full spec (plan D2).
25
+ *
26
+ * On coord's device read route `task_spec` carries the resolved task (for a
27
+ * catalog agent, the template rendered from `params`; a working directory may
28
+ * still be the `{workspace_root}` token, which the runner resolves). A
29
+ * custom agent (no `catalog_ref`) must carry a `RemoteAgent` task and no
30
+ * `requireProbe` condition (D9): `Script` and probe commands come only from
31
+ * the catalog, and the runner applies them only when they equal its own
32
+ * bundled pin.
33
+ */
34
+ export interface RecurringAgentSpec {
35
+ /**
36
+ * The catalog entry this agent is, or overrides. `None` = a custom agent.
37
+ */
38
+ catalog_ref?: string | null;
39
+ /**
40
+ * What to do about slots missed while a runner was down.
41
+ */
42
+ catch_up_policy?: CatchUpPolicy & string;
43
+ /**
44
+ * Conditions the task waits for before running.
45
+ */
46
+ conditions?: ScheduleConditions | null;
47
+ /**
48
+ * sha256 (64 lowercase hex) of the device-independent resolved spec,
49
+ * computed by coord. What a runner stores as `managed.digest` and echoes
50
+ * back as `applied_digest`.
51
+ */
52
+ digest?: string | null;
53
+ /**
54
+ * Whether the agent is enabled for the tenant.
55
+ */
56
+ enabled: boolean;
57
+ /**
58
+ * The agent's name — unique per tenant, and the join key for device
59
+ * status, run requests and managed tasks (coord forbids renames).
60
+ */
61
+ name: string;
62
+ /**
63
+ * Values for the catalog entry's [`RecurringAgentParamSchema`]. Always a
64
+ * JSON object; empty = every parameter at its default.
65
+ */
66
+ params: {
67
+ [k: string]: unknown;
68
+ };
69
+ /**
70
+ * When the agent runs.
71
+ */
72
+ schedule: ScheduleExpression;
73
+ /**
74
+ * Which devices the agent applies to.
75
+ */
76
+ target: RecurringAgentTarget;
77
+ /**
78
+ * The task to run. Required for a custom agent; for a catalog agent, the
79
+ * resolved template when coord serves it to a device.
80
+ */
81
+ task_spec?: ScheduledTaskType | null;
82
+ /**
83
+ * IANA time zone for `schedule`. `None` = each device's scheduler zone.
84
+ */
85
+ timezone?: string | null;
86
+ /**
87
+ * The declaration's row version (starts at 1). History and display only —
88
+ * compare `digest`, never `version`, to decide whether a device is current.
89
+ */
90
+ version: number;
91
+ }
@@ -0,0 +1,13 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * What a device did with one recurring agent — the
10
+ * `coord.recurring_agent_device_status.state` vocabulary.
11
+ */
12
+ export type RecurringAgentState =
13
+ "applied" | "paused" | "overridden" | "unapplied" | "refused";
@@ -0,0 +1,79 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { ConditionScheduleConfig } from "./ConditionScheduleConfig";
9
+ import type { IdleCondition } from "./IdleCondition";
10
+ import type { McpConnectionRef } from "./McpConnectionRef";
11
+ import type { ProbeCondition } from "./ProbeCondition";
12
+ import type { RecurringAgentOverride } from "./RecurringAgentOverride";
13
+ import type { RecurringAgentState } from "./RecurringAgentState";
14
+ import type { RepositoryInactiveCondition } from "./RepositoryInactiveCondition";
15
+ import type { RepositoryWatch } from "./RepositoryWatch";
16
+ import type { ScheduleConditions } from "./ScheduleConditions";
17
+ import type { ScheduleExpression } from "./ScheduleExpression";
18
+ import type { ScheduledTaskStatus } from "./ScheduledTaskStatus";
19
+ import type { ScheduledTaskType } from "./ScheduledTaskType";
20
+ import type { TaskExecutionRecord } from "./TaskExecutionRecord";
21
+
22
+ /**
23
+ * One device's status for one recurring agent — a
24
+ * `coord.recurring_agent_device_status` row (plan D7).
25
+ */
26
+ export interface RecurringAgentStatus {
27
+ /**
28
+ * The `request_id` of the newest "Run now" request the device ran,
29
+ * echoed so coord can stop serving it as pending (plan D10).
30
+ */
31
+ acknowledged_request_id?: string | null;
32
+ /**
33
+ * The digest of the spec applied. `None` = none applied.
34
+ */
35
+ applied_digest?: string | null;
36
+ /**
37
+ * The declaration version applied. Display only.
38
+ */
39
+ applied_version?: number | null;
40
+ /**
41
+ * ISO 8601 end of the newest completed run. `None` = none known.
42
+ */
43
+ last_completed_at?: string | null;
44
+ /**
45
+ * The newest run.
46
+ */
47
+ last_run?: TaskExecutionRecord | null;
48
+ /**
49
+ * ISO 8601 end of the newest successful run. `None` = none known.
50
+ */
51
+ last_success_at?: string | null;
52
+ /**
53
+ * The agent's name.
54
+ */
55
+ name: string;
56
+ /**
57
+ * ISO 8601 next scheduled run.
58
+ */
59
+ next_run?: string | null;
60
+ /**
61
+ * The local override record. Required when `state` is `overridden`; a
62
+ * `paused` task may also carry one.
63
+ */
64
+ override?: RecurringAgentOverride | null;
65
+ /**
66
+ * The last N runs, newest first.
67
+ */
68
+ recent_runs?: TaskExecutionRecord[];
69
+ /**
70
+ * What the device did with the agent.
71
+ */
72
+ state: RecurringAgentState;
73
+ /**
74
+ * Why the agent is `unapplied` or `refused` (e.g.
75
+ * [`UNAPPLIED_WORKSPACE_ROOT_UNSET`], [`REFUSED_COMMAND`]). Present
76
+ * exactly for those two states.
77
+ */
78
+ unapplied_reason?: string | null;
79
+ }
@@ -0,0 +1,48 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { ConditionScheduleConfig } from "./ConditionScheduleConfig";
9
+ import type { IdleCondition } from "./IdleCondition";
10
+ import type { McpConnectionRef } from "./McpConnectionRef";
11
+ import type { ProbeCondition } from "./ProbeCondition";
12
+ import type { RecurringAgentOverride } from "./RecurringAgentOverride";
13
+ import type { RecurringAgentState } from "./RecurringAgentState";
14
+ import type { RecurringAgentStatus } from "./RecurringAgentStatus";
15
+ import type { RepositoryInactiveCondition } from "./RepositoryInactiveCondition";
16
+ import type { RepositoryWatch } from "./RepositoryWatch";
17
+ import type { ScheduleConditions } from "./ScheduleConditions";
18
+ import type { ScheduleExpression } from "./ScheduleExpression";
19
+ import type { ScheduledTaskStatus } from "./ScheduledTaskStatus";
20
+ import type { ScheduledTaskType } from "./ScheduledTaskType";
21
+ import type { TaskExecutionRecord } from "./TaskExecutionRecord";
22
+
23
+ /**
24
+ * What a runner posts to coord after every reconcile and every run
25
+ * (`POST /coord/recurring-agents/status/:device_id`, plan D7): one entry per
26
+ * recurring agent the tenant's declaration targets at this device.
27
+ */
28
+ export interface RecurringAgentStatusReport {
29
+ /**
30
+ * The device's "accept managed tasks" setting (D9; default on). When
31
+ * off, the runner applies nothing and reports each agent `unapplied`
32
+ * with [`UNAPPLIED_MANAGED_TASKS_REFUSED`].
33
+ */
34
+ accepts_managed: boolean;
35
+ /**
36
+ * One entry per agent, names unique.
37
+ */
38
+ agents: RecurringAgentStatus[];
39
+ /**
40
+ * RFC 3339 timestamp when the device built this report.
41
+ */
42
+ reported_at: string;
43
+ /**
44
+ * The tenant (UUID) the reported agents were declared by. A device bound
45
+ * to several tenants posts one report per proven tenant.
46
+ */
47
+ tenant_id: string;
48
+ }
@@ -0,0 +1,78 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { RecurringAgentDispatchRole } from "./RecurringAgentDispatchRole";
9
+ import type { RecurringAgentOs } from "./RecurringAgentOs";
10
+
11
+ /**
12
+ * Which devices a recurring agent applies to (plan D4).
13
+ *
14
+ * Always serialized as a JSON object tagged by `kind` — `{"kind":"all"}`,
15
+ * never the bare string `"all"` — because coord's
16
+ * `ck_recurring_agents_target_object` refuses a non-object. coord resolves the
17
+ * target per device on its read route, so a runner never evaluates it.
18
+ *
19
+ * Unknown fields are refused on deserialization (not only in the schema): a
20
+ * misspelt `exclude_devices` silently ignored would widen the target to
21
+ * devices the author meant to exclude. A runner that cannot parse a target
22
+ * keeps its last-applied set (the reconciler's fail-safe), which is the safe
23
+ * side of that failure.
24
+ */
25
+ export type RecurringAgentTarget =
26
+ | {
27
+ /**
28
+ * Device ids (UUIDs) removed from the target.
29
+ */
30
+ exclude_devices?: string[];
31
+ kind: "all";
32
+ }
33
+ | {
34
+ /**
35
+ * Device ids (UUIDs). May be empty: coord's catalog defaults for a
36
+ * one-box agent are `{"kind":"devices","devices":[]}` — the agent
37
+ * targets no device until an operator picks one.
38
+ */
39
+ devices: string[];
40
+ /**
41
+ * Device ids (UUIDs) removed from the target.
42
+ */
43
+ exclude_devices?: string[];
44
+ kind: "devices";
45
+ }
46
+ | {
47
+ /**
48
+ * Device ids (UUIDs) removed from the target.
49
+ */
50
+ exclude_devices?: string[];
51
+ kind: "dispatch_role";
52
+ /**
53
+ * The role a device must hold.
54
+ */
55
+ role: RecurringAgentDispatchRole;
56
+ }
57
+ | {
58
+ /**
59
+ * Required capabilities (containment). Must be non-empty.
60
+ */
61
+ capabilities: string[];
62
+ /**
63
+ * Device ids (UUIDs) removed from the target.
64
+ */
65
+ exclude_devices?: string[];
66
+ kind: "capabilities";
67
+ }
68
+ | {
69
+ /**
70
+ * Device ids (UUIDs) removed from the target.
71
+ */
72
+ exclude_devices?: string[];
73
+ kind: "os";
74
+ /**
75
+ * Selected operating systems. Must be non-empty.
76
+ */
77
+ os: RecurringAgentOs[];
78
+ };
@@ -9,6 +9,7 @@ import type { CatchUpPolicy } from "./CatchUpPolicy";
9
9
  import type { ConditionScheduleConfig } from "./ConditionScheduleConfig";
10
10
  import type { ConditionStatus } from "./ConditionStatus";
11
11
  import type { IdleCondition } from "./IdleCondition";
12
+ import type { ManagedBy } from "./ManagedBy";
12
13
  import type { McpConnectionRef } from "./McpConnectionRef";
13
14
  import type { ProbeCondition } from "./ProbeCondition";
14
15
  import type { RepositoryInactiveCondition } from "./RepositoryInactiveCondition";
@@ -123,41 +124,3 @@ export interface ScheduledTask {
123
124
  */
124
125
  timezone?: string | null;
125
126
  }
126
- /**
127
- * Provenance of a [`ScheduledTask`] that the runner reconciles from a
128
- * fleet-wide declaration (plan
129
- * `2026-10-29-recurring-agents-declared-in-coord-reconciled-by-runner`, D5).
130
- *
131
- * `(source, tenant_id, agent)` is the managed key: the runner holds at most
132
- * one task per key. What the reconciler compares to decide whether a task is
133
- * current is `digest`, never `version` — a catalog fix in coord's code moves
134
- * no row version, and a deleted-and-recreated agent restarts its version at 1.
135
- */
136
- export interface ManagedBy {
137
- /**
138
- * The recurring agent's name — its join key across coord's status, run
139
- * requests and this managed task (coord forbids renames).
140
- */
141
- agent: string;
142
- /**
143
- * sha256 (64 lowercase hex) of the resolved spec coord served when this
144
- * task was applied. `None` = applied from a declaration that carried no
145
- * digest.
146
- */
147
- digest?: string | null;
148
- /**
149
- * Which declaration store the task came from — [`MANAGED_SOURCE_COORD`].
150
- * A plain string rather than an enum, so a stored task from a newer
151
- * source still loads; the consumer decides what it recognises.
152
- */
153
- source: string;
154
- /**
155
- * The coord tenant (UUID) whose declaration this task applies. A device
156
- * bound to several tenants holds one managed task per tenant and agent.
157
- */
158
- tenantId: string;
159
- /**
160
- * The declaration's row version when applied. History and display only.
161
- */
162
- version: number;
163
- }
@@ -285,6 +285,7 @@ export type { LegacyTransition } from './LegacyTransition';
285
285
  export type { LogSourceSelection } from './LogSourceSelection';
286
286
  export type { LoopInstanceStatus } from './LoopInstanceStatus';
287
287
  export type { LoopPhase } from './LoopPhase';
288
+ export type { ManagedBy } from './ManagedBy';
288
289
  export type { MappingRow } from './MappingRow';
289
290
  export type { MatchAdjustment } from './MatchAdjustment';
290
291
  export type { MatchLocation } from './MatchLocation';
@@ -377,6 +378,18 @@ export type { RagProgressEvent } from './RagProgressEvent';
377
378
  export type { ReadConfigResponse } from './ReadConfigResponse';
378
379
  export type { RecommendedState } from './RecommendedState';
379
380
  export type { RecordGitOpRequest } from './RecordGitOpRequest';
381
+ export type { RecurringAgentDispatchRole } from './RecurringAgentDispatchRole';
382
+ export type { RecurringAgentExcludedValue } from './RecurringAgentExcludedValue';
383
+ export type { RecurringAgentOs } from './RecurringAgentOs';
384
+ export type { RecurringAgentOverride } from './RecurringAgentOverride';
385
+ export type { RecurringAgentParamDef } from './RecurringAgentParamDef';
386
+ export type { RecurringAgentParamKind } from './RecurringAgentParamKind';
387
+ export type { RecurringAgentParamSchema } from './RecurringAgentParamSchema';
388
+ export type { RecurringAgentSpec } from './RecurringAgentSpec';
389
+ export type { RecurringAgentState } from './RecurringAgentState';
390
+ export type { RecurringAgentStatus } from './RecurringAgentStatus';
391
+ export type { RecurringAgentStatusReport } from './RecurringAgentStatusReport';
392
+ export type { RecurringAgentTarget } from './RecurringAgentTarget';
380
393
  export type { ReflectionFixOutput } from './ReflectionFixOutput';
381
394
  export type { Refusal } from './Refusal';
382
395
  export type { RefusalCode } from './RefusalCode';