@cat-factory/contracts 0.232.0 → 0.233.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.
@@ -0,0 +1,140 @@
1
+ import * as v from 'valibot';
2
+ // A run's PROVENANCE: how it entered the system, whether it may land its work, and where it
3
+ // actually executed. Three small vocabularies that answer questions about the run rather than
4
+ // about the work, all of them riding the run's `detail` JSON rather than a column, and all read
5
+ // by policy (admission, the merge decision, the clarification writeback) or by an investigator
6
+ // after the fact. Split out of `execution.ts`, which describes the STEPS.
7
+ /**
8
+ * How a run entered the system. See `ExecutionInstance.intakeOrigin`.
9
+ *
10
+ * - `ui`: someone started it in the app, on their own board. The read-time default, and what
11
+ * every legacy run is.
12
+ * - `public-api`: started headlessly through the `/api/v1` surface.
13
+ * - `tracker`: dispatched from a pushed ticket by a per-ticket issue-intake schedule.
14
+ * - `schedule`: a recurring schedule fired it, either on its cadence or because a tracker push
15
+ * drained its queue early. Both are the same run against the same reused block (ADR 0032), so
16
+ * they deliberately share one origin; what differs is only what made the tick happen.
17
+ *
18
+ * `ui` is the DEFAULT, which makes it a positive claim that a human is watching in the app, not
19
+ * a catch-all for "nothing said". Every UNATTENDED start path names itself, so a path that
20
+ * states nothing is the app: the one caller allowed to rely on the default. That rule exists
21
+ * because the opposite reading is silent, and it already cost one bug (a webhook-dispatched run
22
+ * defaulted into `ui` and its parked review's questions never reached the requester's ticket).
23
+ */
24
+ export const intakeOriginSchema = v.picklist(['ui', 'public-api', 'tracker', 'schedule']);
25
+ /**
26
+ * Whether an intake origin means the run's questions have to be pushed back OUT to where it came
27
+ * from, because there is no human overseer in the app to answer them (the parked requirements
28
+ * review's questions, above all).
29
+ *
30
+ * A `Record` rather than a `!== 'ui'` test on purpose: this is the classification the whole
31
+ * clarification writeback keys off, and a new intake surface must state which side of it falls
32
+ * on rather than inheriting an answer by being new. Adding a member to the picklist above fails
33
+ * to compile until it is answered here.
34
+ *
35
+ * `schedule` is the entry worth explaining, because "unattended" would predict `true` and the
36
+ * answer is `false`. A cadence fire runs against the schedule's REUSED block, and in queue mode
37
+ * `BugIntakeService` REPLACE-links each pick onto it: the block's linked ticket is dropped and
38
+ * re-pointed on the next fire, by design, so the block never accumulates stale context. Posting
39
+ * questions there would open a conversation on a channel that closes underneath it, since a
40
+ * reply arriving after the link moved resolves to no block and is dropped. What the writeback
41
+ * needs is not "was anyone present" but "is there a STABLE place to hold a conversation", and a
42
+ * reused block does not have one. Per-ticket dispatch does, which is why it is `true`: one
43
+ * permanent block per ticket. Giving queue mode the same treatment is a change to the LINKAGE
44
+ * (a per-run link, or a block per pick), never a flip of this flag.
45
+ */
46
+ const HEADLESS_INTAKE = {
47
+ ui: false,
48
+ 'public-api': true,
49
+ tracker: true,
50
+ schedule: false,
51
+ };
52
+ /**
53
+ * Whether a run entered headlessly ({@link HEADLESS_INTAKE}). `undefined` is every legacy run
54
+ * and degrades to `ui`, the safe reading: no outbound writeback for a run whose intake cannot
55
+ * be proven headless.
56
+ *
57
+ * `=== true` rather than the bare lookup, which the type says is already a `boolean`. The value
58
+ * reaches here off a run's persisted `detail` JSON, and the picklist is a CLOSED vocabulary whose
59
+ * members outlive their retirement in stored rows: a run written under a member later dropped
60
+ * from the type indexes to `undefined` at runtime, and the declared `boolean` would be a lie the
61
+ * caller reads as "not headless" anyway. Saying so explicitly makes unrecognised and absent one
62
+ * answer on purpose rather than by luck.
63
+ */
64
+ export function isHeadlessIntake(origin) {
65
+ return origin != null && HEADLESS_INTAKE[origin] === true;
66
+ }
67
+ /**
68
+ * Whether a run may LAND its work. `live` (the default, and every run before this existed) is the
69
+ * historical behaviour. `dry_run` is the sandboxed mode: the pipeline runs in full and opens its
70
+ * pull request, so the human sees a real diff on a real branch, but nothing merges: neither the
71
+ * `merger` step's auto-merge nor the manual merge endpoint.
72
+ *
73
+ * The PR is deliberately still opened. The deliverable a non-developer initiator needs to SEE is the diff,
74
+ * and withholding the push would leave them reading prose about work they cannot inspect; what
75
+ * makes the mode a sandbox is that the change cannot reach the default branch, not that it stays
76
+ * invisible.
77
+ *
78
+ * Requested per run at start, and FORCED for the roles a task's merge preset lists in
79
+ * `dryRunRoles`. The two compose one way only: a live request from a sandboxed role is a dry run,
80
+ * and there is no way to ask out of it, or the setting would be advisory.
81
+ */
82
+ export const runModeSchema = v.picklist(['live', 'dry_run']);
83
+ /**
84
+ * Whether a run is sandboxed. A helper rather than `=== 'dry_run'` scattered across the merge path
85
+ * and the SPA, so every place that must refuse to land work (or must say that a run will never
86
+ * land any) reads the mode the same way, and so a run persisted before the mode existed
87
+ * (absent ⇒ `live`) can never be mistaken for one.
88
+ */
89
+ export function isDryRun(mode) {
90
+ return mode === 'dry_run';
91
+ }
92
+ /**
93
+ * Per-run diagnostic context captured for AFTER-THE-FACT investigation of a run (esp. a
94
+ * failure): the "where/what did this run actually execute on" facts that were previously
95
+ * spread across the DB (repo↔service↔installation joins), the harness transcript (model), or
96
+ * lost entirely (which backend a step ran on). Stamped by the engine at dispatch and refined
97
+ * on the first poll; it reflects the MOST RECENT container-step dispatch (the step most likely
98
+ * relevant to a failure), not a per-step history. Rides in the run's `detail` JSON (no dedicated
99
+ * column), like `ExecutionInstance.notes`/`frontendBindings`. Absent on legacy runs and on
100
+ * runs with no container step (pure inline/gate pipelines). NEVER carries a token or secret.
101
+ */
102
+ export const runDiagnosticsSchema = v.object({
103
+ /** Context of the most recent container-step dispatch. */
104
+ lastDispatch: v.optional(v.object({
105
+ /** Index of the dispatched step within the pipeline. */
106
+ stepIndex: v.number(),
107
+ /** The step's agent kind (`coder`, `merger`, a custom kind, …). */
108
+ agentKind: v.string(),
109
+ /** Resolved model ref `provider:model` (e.g. `anthropic:claude-opus-4-8`); null if unresolved. */
110
+ model: v.optional(v.nullable(v.string())),
111
+ /**
112
+ * Which runner backend the step actually ran on, the datum that distinguishes a native
113
+ * host-process run from a sandboxed container: `local-native` | `local-container` |
114
+ * `runner-pool` | `cloudflare-container`. Filled on the first poll (the transport reports
115
+ * it); absent until then or on an older runtime.
116
+ */
117
+ executionBackend: v.optional(v.string()),
118
+ /** The repo the step operated on. */
119
+ repo: v.optional(v.object({
120
+ owner: v.string(),
121
+ name: v.string(),
122
+ /** The base branch the work branched from. */
123
+ baseBranch: v.optional(v.string()),
124
+ /** VCS provider (`github` | `gitlab`), resolved from the run's repo origin. */
125
+ provider: v.optional(v.string()),
126
+ })),
127
+ /** Epoch ms the dispatch was recorded. */
128
+ at: v.number(),
129
+ })),
130
+ /**
131
+ * The control-plane (orchestrator) host running the engine, NOT necessarily where the agent
132
+ * ran (a container step runs elsewhere; see `lastDispatch.executionBackend`). `platform` is the
133
+ * orchestrator's `process.platform` (e.g. `win32` pins a Windows local deployment, the class
134
+ * of host that surfaced the native-Windows git-auth break). Best-effort.
135
+ */
136
+ host: v.optional(v.object({
137
+ platform: v.optional(v.string()),
138
+ })),
139
+ });
140
+ //# sourceMappingURL=run-provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-provenance.js","sourceRoot":"","sources":["../src/run-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,4FAA4F;AAC5F,8FAA8F;AAC9F,gGAAgG;AAChG,+FAA+F;AAC/F,0EAA0E;AAE1E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;AAGzF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,eAAe,GAAkC;IACrD,EAAE,EAAE,KAAK;IACT,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK;CAChB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAgC;IAC/D,OAAO,MAAM,IAAI,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAG5D;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgC;IACvD,OAAO,IAAI,KAAK,SAAS,CAAA;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,0DAA0D;IAC1D,YAAY,EAAE,CAAC,CAAC,QAAQ,CACtB,CAAC,CAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,mEAAmE;QACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,kGAAkG;QAClG,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC;;;;;WAKG;QACH,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,qCAAqC;QACrC,IAAI,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,8CAA8C;YAC9C,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,+EAA+E;YAC/E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjC,CAAC,CACH;QACD,0CAA0C;QAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC,CACH;IACD;;;;;OAKG;IACH,IAAI,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjC,CAAC,CACH;CACF,CAAC,CAAA"}
@@ -1456,7 +1456,7 @@ export declare const workspaceSnapshotSchema: v.ObjectSchema<{
1456
1456
  readonly initiatedBy: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1457
1457
  readonly initiatedByRole: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>, undefined>, undefined>;
1458
1458
  readonly mode: v.OptionalSchema<v.PicklistSchema<["live", "dry_run"], undefined>, undefined>;
1459
- readonly intakeOrigin: v.OptionalSchema<v.PicklistSchema<["ui", "public-api"], undefined>, undefined>;
1459
+ readonly intakeOrigin: v.OptionalSchema<v.PicklistSchema<["ui", "public-api", "tracker", "schedule"], undefined>, undefined>;
1460
1460
  readonly createdAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1461
1461
  readonly rev: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1462
1462
  readonly diagnostics: v.OptionalSchema<v.ObjectSchema<{
package/dist/tracker.d.ts CHANGED
@@ -25,9 +25,10 @@ export declare const trackerSettingsSchema: v.ObjectSchema<{
25
25
  * issue(s), so the loop is answerable from where the work was requested. Per-task
26
26
  * overridable via `Block.trackerQuestionsOnPark`. Default off.
27
27
  *
28
- * Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is `public-api`:
29
- * a task started in the SPA has a human overseer in the app and its clarification
30
- * surface is unchanged (see `docs/initiatives/headless-clarification-loop.md`).
28
+ * Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is HEADLESS
29
+ * (`isHeadlessIntake`: a `/api/v1` start or a per-ticket tracker dispatch): a task started
30
+ * in the SPA has a human overseer in the app and its clarification surface is unchanged
31
+ * (see `docs/initiatives/headless-clarification-loop.md`).
31
32
  */
32
33
  readonly writebackQuestionsOnPark: v.BooleanSchema<undefined>;
33
34
  readonly updatedAt: v.NumberSchema<undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAY5B,eAAO,MAAM,iBAAiB,2DAA2C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,oFAAoF;AACpF,eAAO,MAAM,qBAAqB;;IAEhC,mFAAmF;;IAEnF,uEAAuE;;IAEvE;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;;;;;OASG;;;aAGH,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,iDAAiD;AACjD,eAAO,MAAM,wBAAwB;;;;;;;aAOnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAY5B,eAAO,MAAM,iBAAiB,2DAA2C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,oFAAoF;AACpF,eAAO,MAAM,qBAAqB;;IAEhC,mFAAmF;;IAEnF,uEAAuE;;IAEvE;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;;;;;;OAUG;;;aAGH,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,iDAAiD;AACjD,eAAO,MAAM,wBAAwB;;;;;;;aAOnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
package/dist/tracker.js CHANGED
@@ -33,9 +33,10 @@ export const trackerSettingsSchema = v.object({
33
33
  * issue(s), so the loop is answerable from where the work was requested. Per-task
34
34
  * overridable via `Block.trackerQuestionsOnPark`. Default off.
35
35
  *
36
- * Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is `public-api`:
37
- * a task started in the SPA has a human overseer in the app and its clarification
38
- * surface is unchanged (see `docs/initiatives/headless-clarification-loop.md`).
36
+ * Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is HEADLESS
37
+ * (`isHeadlessIntake`: a `/api/v1` start or a per-ticket tracker dispatch): a task started
38
+ * in the SPA has a human overseer in the app and its clarification surface is unchanged
39
+ * (see `docs/initiatives/headless-clarification-loop.md`).
39
40
  */
40
41
  writebackQuestionsOnPark: v.boolean(),
41
42
  updatedAt: v.number(),
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,yEAAyE;AACzE,kFAAkF;AAClF,0EAA0E;AAC1E,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAGzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,mFAAmF;IACnF,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,uEAAuE;IACvE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE;IACpC;;;;;;;;;OASG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAGF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,uBAAuB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CAClD,CAAC,CAAA"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,yEAAyE;AACzE,kFAAkF;AAClF,0EAA0E;AAC1E,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAGzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,mFAAmF;IACnF,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,uEAAuE;IACvE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE;IACpC;;;;;;;;;;OAUG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAGF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,uBAAuB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CAClD,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/contracts",
3
- "version": "0.232.0",
3
+ "version": "0.233.0",
4
4
  "description": "Valibot wire contract shared between the Agent Architecture Board frontend and backend.",
5
5
  "repository": {
6
6
  "type": "git",