@cat-factory/contracts 0.147.0 → 0.148.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.
@@ -20,12 +20,15 @@ export declare const agentPresentationSchema: v.ObjectSchema<{
20
20
  /** Palette section; omitted ⇒ the kind is not a standalone palette block (e.g. a companion). */
21
21
  readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
22
22
  /**
23
- * Id of a dedicated result-view component to open instead of the generic prose panel
24
- * (e.g. `generic-structured` for a custom structured agent). One of the canonical
25
- * {@link RESULT_VIEW_IDS} — an unknown id fails validation here rather than silently
26
- * falling back to prose. Omitted the generic step-detail panel.
23
+ * Id of a dedicated result-view component to open instead of the generic prose panel.
24
+ * Either a canonical BUILT-IN id ({@link RESULT_VIEW_IDS}, e.g. `generic-structured`) OR
25
+ * a CONSUMER-namespaced id (`<ns>:<name>`, e.g. `acme:security-report`) that a deployment
26
+ * registers a frontend component for through the modular `resultViews` slot. A bare id that
27
+ * is not a built-in still fails validation (the typo guardrail); a namespaced id is trusted
28
+ * to the deployment and paired on the frontend (an unpaired one degrades to the generic
29
+ * panel — the `pairById` `missing` bucket). Omitted ⇒ the generic step-detail panel.
27
30
  */
28
- readonly resultView: v.OptionalSchema<v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, undefined>;
31
+ readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer result-view id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
29
32
  }, undefined>;
30
33
  export type AgentPresentation = v.InferOutput<typeof agentPresentationSchema>;
31
34
  /** A registered agent kind's id + presentation + whether it runs in a container — the
@@ -49,12 +52,15 @@ export declare const customAgentKindSchema: v.ObjectSchema<{
49
52
  /** Palette section; omitted ⇒ the kind is not a standalone palette block (e.g. a companion). */
50
53
  readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
51
54
  /**
52
- * Id of a dedicated result-view component to open instead of the generic prose panel
53
- * (e.g. `generic-structured` for a custom structured agent). One of the canonical
54
- * {@link RESULT_VIEW_IDS} — an unknown id fails validation here rather than silently
55
- * falling back to prose. Omitted the generic step-detail panel.
55
+ * Id of a dedicated result-view component to open instead of the generic prose panel.
56
+ * Either a canonical BUILT-IN id ({@link RESULT_VIEW_IDS}, e.g. `generic-structured`) OR
57
+ * a CONSUMER-namespaced id (`<ns>:<name>`, e.g. `acme:security-report`) that a deployment
58
+ * registers a frontend component for through the modular `resultViews` slot. A bare id that
59
+ * is not a built-in still fails validation (the typo guardrail); a namespaced id is trusted
60
+ * to the deployment and paired on the frontend (an unpaired one degrades to the generic
61
+ * panel — the `pairById` `missing` bucket). Omitted ⇒ the generic step-detail panel.
56
62
  */
57
- readonly resultView: v.OptionalSchema<v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, undefined>;
63
+ readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer result-view id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
58
64
  }, undefined>;
59
65
  /** Whether the kind runs in a container (vs an inline LLM call). */
60
66
  readonly container: v.BooleanSchema<undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-presentation.d.ts","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAY5B,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,qFAO9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB;IAClC,4CAA4C;;IAE5C,2CAA2C;;IAE3C,uCAAuC;;IAEvC;;;;;OAKG;;IAEH,gGAAgG;;IAEhG;;;;;OAKG;;aAEH,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;6DAC6D;AAC7D,eAAO,MAAM,qBAAqB;;;QA3BhC,4CAA4C;;QAE5C,2CAA2C;;QAE3C,uCAAuC;;QAEvC;;;;;WAKG;;QAEH,gGAAgG;;QAEhG;;;;;WAKG;;;IAUH,oEAAoE;;aAEpE,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA"}
1
+ {"version":3,"file":"agent-presentation.d.ts","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAY5B,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,qFAO9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAiBrE,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB;IAClC,4CAA4C;;IAE5C,2CAA2C;;IAE3C,uCAAuC;;IAEvC;;;;;OAKG;;IAEH,gGAAgG;;IAEhG;;;;;;;;OAQG;;aAEH,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;6DAC6D;AAC7D,eAAO,MAAM,qBAAqB;;;QA9BhC,4CAA4C;;QAE5C,2CAA2C;;QAE3C,uCAAuC;;QAEvC;;;;;WAKG;;QAEH,gGAAgG;;QAEhG;;;;;;;;WAQG;;;IAUH,oEAAoE;;aAEpE,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import * as v from 'valibot';
2
2
  import { agentKindSchema } from './primitives.js';
3
- import { RESULT_VIEW_IDS } from './result-views.js';
3
+ import { NAMESPACED_RESULT_VIEW_ID_PATTERN, RESULT_VIEW_IDS } from './result-views.js';
4
4
  // ---------------------------------------------------------------------------
5
5
  // Presentation metadata for an agent kind — the display fields the SPA palette,
6
6
  // timeline and result-view host render. A registered (custom) agent supplies this so
@@ -17,6 +17,14 @@ export const agentCategorySchema = v.picklist([
17
17
  'docs',
18
18
  'gates',
19
19
  ]);
20
+ /**
21
+ * A CONSUMER-namespaced result-view id: `<ns>:<name>`, each segment a lowercase
22
+ * `a-z0-9`(-separated) token (e.g. `acme:security-report`). The colon distinguishes it
23
+ * from a bare built-in id, so a namespaced consumer view is accepted while a typo'd
24
+ * built-in (no colon, not in the picklist) is still rejected. The frontend pairs it to a
25
+ * deployment-registered component; an unpaired id degrades to the generic panel.
26
+ */
27
+ const namespacedResultViewId = v.pipe(v.string(), v.regex(NAMESPACED_RESULT_VIEW_ID_PATTERN, 'Consumer result-view id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)'));
20
28
  /** Display metadata for one agent kind (the wire shape sent to the SPA). */
21
29
  export const agentPresentationSchema = v.object({
22
30
  /** Human label, e.g. `Security Auditor`. */
@@ -35,12 +43,15 @@ export const agentPresentationSchema = v.object({
35
43
  /** Palette section; omitted ⇒ the kind is not a standalone palette block (e.g. a companion). */
36
44
  category: v.optional(agentCategorySchema),
37
45
  /**
38
- * Id of a dedicated result-view component to open instead of the generic prose panel
39
- * (e.g. `generic-structured` for a custom structured agent). One of the canonical
40
- * {@link RESULT_VIEW_IDS} — an unknown id fails validation here rather than silently
41
- * falling back to prose. Omitted the generic step-detail panel.
46
+ * Id of a dedicated result-view component to open instead of the generic prose panel.
47
+ * Either a canonical BUILT-IN id ({@link RESULT_VIEW_IDS}, e.g. `generic-structured`) OR
48
+ * a CONSUMER-namespaced id (`<ns>:<name>`, e.g. `acme:security-report`) that a deployment
49
+ * registers a frontend component for through the modular `resultViews` slot. A bare id that
50
+ * is not a built-in still fails validation (the typo guardrail); a namespaced id is trusted
51
+ * to the deployment and paired on the frontend (an unpaired one degrades to the generic
52
+ * panel — the `pairById` `missing` bucket). Omitted ⇒ the generic step-detail panel.
42
53
  */
43
- resultView: v.optional(v.picklist(RESULT_VIEW_IDS)),
54
+ resultView: v.optional(v.union([v.picklist(RESULT_VIEW_IDS), namespacedResultViewId])),
44
55
  });
45
56
  /** A registered agent kind's id + presentation + whether it runs in a container — the
46
57
  * snapshot entry the SPA merges into its palette catalog. */
@@ -1 +1 @@
1
- {"version":3,"file":"agent-presentation.js","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,8EAA8E;AAC9E,gFAAgF;AAChF,qFAAqF;AACrF,uFAAuF;AACvF,sFAAsF;AACtF,mFAAmF;AACnF,8EAA8E;AAE9E,0FAA0F;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5C,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC,CAAA;AAGF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpE,2CAA2C;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3E,gGAAgG;IAChG,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzC;;;;;OAKG;IACH,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;CACpD,CAAC,CAAA;AAGF;6DAC6D;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,eAAe;IACrB,YAAY,EAAE,uBAAuB;IACrC,oEAAoE;IACpE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;CACvB,CAAC,CAAA"}
1
+ {"version":3,"file":"agent-presentation.js","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEtF,8EAA8E;AAC9E,gFAAgF;AAChF,qFAAqF;AACrF,uFAAuF;AACvF,sFAAsF;AACtF,mFAAmF;AACnF,8EAA8E;AAE9E,0FAA0F;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5C,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC,CAAA;AAGF;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CACnC,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,KAAK,CACL,iCAAiC,EACjC,uFAAuF,CACxF,CACF,CAAA;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpE,2CAA2C;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3E,gGAAgG;IAChG,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzC;;;;;;;;OAQG;IACH,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC;CACvF,CAAC,CAAA;AAGF;6DAC6D;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,eAAe;IACrB,YAAY,EAAE,uBAAuB;IACrC,oEAAoE;IACpE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;CACvB,CAAC,CAAA"}
@@ -24,6 +24,8 @@ export declare const publicApiKeySchema: v.ObjectSchema<{
24
24
  readonly label: v.StringSchema<undefined>;
25
25
  /** What the key is allowed to do on `/api/v1` (read ⊂ write ⊂ admin). */
26
26
  readonly scope: v.PicklistSchema<readonly ["read", "write", "admin"], undefined>;
27
+ /** The user who minted the key (`usr_*`), for audit/UI attribution; `null` when unknown. */
28
+ readonly createdByUserId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
27
29
  readonly createdAt: v.NumberSchema<undefined>;
28
30
  readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
29
31
  /** Set when the key was revoked (tombstone); a revoked key never authenticates. */
@@ -39,6 +41,8 @@ export declare const publicApiKeyListResultSchema: v.ObjectSchema<{
39
41
  readonly label: v.StringSchema<undefined>;
40
42
  /** What the key is allowed to do on `/api/v1` (read ⊂ write ⊂ admin). */
41
43
  readonly scope: v.PicklistSchema<readonly ["read", "write", "admin"], undefined>;
44
+ /** The user who minted the key (`usr_*`), for audit/UI attribution; `null` when unknown. */
45
+ readonly createdByUserId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
42
46
  readonly createdAt: v.NumberSchema<undefined>;
43
47
  readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
44
48
  /** Set when the key was revoked (tombstone); a revoked key never authenticates. */
@@ -70,6 +74,8 @@ export declare const createdPublicApiKeySchema: v.ObjectSchema<{
70
74
  readonly label: v.StringSchema<undefined>;
71
75
  /** What the key is allowed to do on `/api/v1` (read ⊂ write ⊂ admin). */
72
76
  readonly scope: v.PicklistSchema<readonly ["read", "write", "admin"], undefined>;
77
+ /** The user who minted the key (`usr_*`), for audit/UI attribution; `null` when unknown. */
78
+ readonly createdByUserId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
73
79
  readonly createdAt: v.NumberSchema<undefined>;
74
80
  readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
75
81
  /** Set when the key was revoked (tombstone); a revoked key never authenticates. */
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-keys.d.ts","sourceRoot":"","sources":["../src/public-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAiB5B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,YAAI,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA;AACpE,eAAO,MAAM,oBAAoB,kEAAgC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,kFAAkF;AAClF,eAAO,MAAM,kBAAkB;IAC7B,uEAAuE;;;;;IAKvE,yEAAyE;;;;IAIzE,mFAAmF;;aAEnF,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,4BAA4B;;QAdvC,uEAAuE;;;;;QAKvE,yEAAyE;;;;QAIzE,mFAAmF;;;aAKM,CAAA;AAC3F,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;aAGnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEpF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;QAjCpC,uEAAuE;;;;;QAKvE,yEAAyE;;;;QAIzE,mFAAmF;;;IA0BnF,sEAAsE;;aAEtE,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
1
+ {"version":3,"file":"public-api-keys.d.ts","sourceRoot":"","sources":["../src/public-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAiB5B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,YAAI,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA;AACpE,eAAO,MAAM,oBAAoB,kEAAgC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,kFAAkF;AAClF,eAAO,MAAM,kBAAkB;IAC7B,uEAAuE;;;;;IAKvE,yEAAyE;;IAEzE,4FAA4F;;;;IAI5F,mFAAmF;;aAEnF,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,4BAA4B;;QAhBvC,uEAAuE;;;;;QAKvE,yEAAyE;;QAEzE,4FAA4F;;;;QAI5F,mFAAmF;;;aAKM,CAAA;AAC3F,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;aAGnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEpF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;QAnCpC,uEAAuE;;;;;QAKvE,yEAAyE;;QAEzE,4FAA4F;;;;QAI5F,mFAAmF;;;IA0BnF,sEAAsE;;aAEtE,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
@@ -37,6 +37,8 @@ export const publicApiKeySchema = v.object({
37
37
  label: v.string(),
38
38
  /** What the key is allowed to do on `/api/v1` (read ⊂ write ⊂ admin). */
39
39
  scope: publicApiScopeSchema,
40
+ /** The user who minted the key (`usr_*`), for audit/UI attribution; `null` when unknown. */
41
+ createdByUserId: v.nullable(v.string()),
40
42
  createdAt: v.number(),
41
43
  lastUsedAt: v.nullable(v.number()),
42
44
  /** Set when the key was revoked (tombstone); a revoked key never authenticates. */
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-keys.js","sourceRoot":"","sources":["../src/public-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,yCAAyC;AACzC,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,wEAAwE;AACxE,gFAAgF;AAChF,gEAAgE;AAChE,EAAE;AACF,+EAA+E;AAC/E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;AAGjE,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,uEAAuE;IACvE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,yEAAyE;IACzE,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,mFAAmF;IACnF,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAClC,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;AAG3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACjD,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,GAAG,EAAE,kBAAkB;IACvB,sEAAsE;IACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAA"}
1
+ {"version":3,"file":"public-api-keys.js","sourceRoot":"","sources":["../src/public-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,yCAAyC;AACzC,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,wEAAwE;AACxE,gFAAgF;AAChF,gEAAgE;AAChE,EAAE;AACF,+EAA+E;AAC/E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;AAGjE,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,uEAAuE;IACvE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,yEAAyE;IACzE,KAAK,EAAE,oBAAoB;IAC3B,4FAA4F;IAC5F,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,mFAAmF;IACnF,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAClC,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;AAG3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACjD,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,GAAG,EAAE,kBAAkB;IACvB,sEAAsE;IACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAA"}
@@ -2,4 +2,29 @@ export declare const RESULT_VIEW_IDS: readonly ['requirements-review', 'clarity-
2
2
  export type ResultViewId = (typeof RESULT_VIEW_IDS)[number];
3
3
  /** Set form, for `O(1)` membership checks (e.g. boot-time registration validation). */
4
4
  export declare const RESULT_VIEW_ID_SET: ReadonlySet<string>;
5
+ /**
6
+ * A CONSUMER-namespaced result-view id: `<ns>:<name>`, each segment a lowercase
7
+ * `a-z0-9` dash-separated token (e.g. `acme:security-report`). The colon distinguishes a
8
+ * deployment-provided view id from a bare built-in one. The SINGLE source of truth for the
9
+ * rule, shared by `agentPresentationSchema` (wire validation) and the backend registration
10
+ * validator so they can't drift.
11
+ */
12
+ export declare const NAMESPACED_RESULT_VIEW_ID_PATTERN: RegExp;
13
+ /** Whether `id` is a well-formed consumer-namespaced result-view id (`<ns>:<name>`). */
14
+ export declare function isNamespacedResultViewId(id: string): boolean;
15
+ /**
16
+ * Whether `id` is an acceptable `presentation.resultView`: a canonical BUILT-IN id (drawn from
17
+ * `builtInIds`, defaulting to {@link RESULT_VIEW_ID_SET}) OR a consumer-namespaced one. A bare id
18
+ * that is not a built-in is rejected (the typo guardrail).
19
+ *
20
+ * This is the SINGLE composed rule the backend registration validator (`validateRegistrations`)
21
+ * checks against — it must not re-open-code `has(id) || isNamespacedResultViewId(id)`. The wire
22
+ * schema (`agentPresentationSchema.resultView`) expresses the SAME rule as a valibot union
23
+ * (`picklist ∪ namespaced`) rather than calling this, because the union keeps the built-in
24
+ * picklist's literal-type narrowing that a boolean predicate would erase. Both sides share the
25
+ * underlying atoms — {@link RESULT_VIEW_ID_SET} and {@link NAMESPACED_RESULT_VIEW_ID_PATTERN} —
26
+ * so they can't drift. The `builtInIds` parameter lets the validator inject its (overridable)
27
+ * known-id set while keeping the composition here.
28
+ */
29
+ export declare function isValidResultViewId(id: string, builtInIds?: ReadonlySet<string>): boolean;
5
30
  //# sourceMappingURL=result-views.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"result-views.d.ts","sourceRoot":"","sources":["../src/result-views.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,eAAe,YAC1B,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,WAAW,EACX,YAAY,CACJ,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3D,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAA4B,CAAA"}
1
+ {"version":3,"file":"result-views.d.ts","sourceRoot":"","sources":["../src/result-views.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,eAAe,YAC1B,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,WAAW,EACX,YAAY,CACJ,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3D,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAA4B,CAAA;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,QACS,CAAA;AAEvD,wFAAwF;AACxF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,UAAU,GAAE,WAAW,CAAC,MAAM,CAAsB,GACnD,OAAO,CAET"}
@@ -1,17 +1,22 @@
1
1
  // ---------------------------------------------------------------------------
2
- // The canonical set of dedicated result-view ids — the components the SPA's
3
- // `StepResultViewHost.vue` can mount for an agent step (`presentation.resultView`).
2
+ // The canonical set of BUILT-IN dedicated result-view ids — the windows the SPA's
3
+ // `StepResultViewHost.vue` mounts for an agent step (`presentation.resultView`).
4
4
  //
5
- // This is the SHARED source of truth across the wire boundary: the frontend's
6
- // `STEP_RESULT_VIEWS` map is keyed by exactly these ids, and `agentPresentationSchema`'s
7
- // `resultView` is a `picklist` of them so a custom kind that declares an unknown view id
8
- // fails validation at registration / snapshot time (a typed picklist) instead of silently
9
- // falling back to the prose panel. Adding a NEW bespoke view is a two-step contract:
5
+ // This is the SHARED source of truth for the built-ins across the wire boundary: the
6
+ // frontend's first-party `resultViews`-slot module (`app/modular/result-views.ts`)
7
+ // contributes exactly these ids, and `agentPresentationSchema`'s `resultView` accepts one of
8
+ // them OR a consumer-namespaced id (`<ns>:<name>`). A BARE id that is not a built-in still
9
+ // fails validation at registration / snapshot time (the typo guardrail), while a NAMESPACED
10
+ // consumer id is trusted to the deployment and paired on the frontend against its own
11
+ // `registerAppModule`-contributed component. Adding a NEW built-in bespoke view is a two-step
12
+ // contract:
10
13
  // 1. add its id here, and
11
- // 2. register `'<id>': <Component>` in `StepResultViewHost.vue`.
14
+ // 2. contribute `{ id: '<id>', component }` to the first-party `resultViews` slot.
12
15
  //
13
16
  // A custom structured agent that doesn't ship its own component uses `generic-structured`
14
- // (the shared read-only JSON viewer) and needs no frontend change at all.
17
+ // (the shared read-only JSON viewer) and needs no frontend change at all. A consumer that
18
+ // DOES ship its own window registers both the agent kind and the view component through the
19
+ // modular `agentKinds` / `resultViews` slots — no built-in id needed here.
15
20
  // ---------------------------------------------------------------------------
16
21
  export const RESULT_VIEW_IDS = [
17
22
  'requirements-review',
@@ -35,4 +40,33 @@ export const RESULT_VIEW_IDS = [
35
40
  ];
36
41
  /** Set form, for `O(1)` membership checks (e.g. boot-time registration validation). */
37
42
  export const RESULT_VIEW_ID_SET = new Set(RESULT_VIEW_IDS);
43
+ /**
44
+ * A CONSUMER-namespaced result-view id: `<ns>:<name>`, each segment a lowercase
45
+ * `a-z0-9` dash-separated token (e.g. `acme:security-report`). The colon distinguishes a
46
+ * deployment-provided view id from a bare built-in one. The SINGLE source of truth for the
47
+ * rule, shared by `agentPresentationSchema` (wire validation) and the backend registration
48
+ * validator so they can't drift.
49
+ */
50
+ export const NAMESPACED_RESULT_VIEW_ID_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*:[a-z0-9]+(?:-[a-z0-9]+)*$/;
51
+ /** Whether `id` is a well-formed consumer-namespaced result-view id (`<ns>:<name>`). */
52
+ export function isNamespacedResultViewId(id) {
53
+ return NAMESPACED_RESULT_VIEW_ID_PATTERN.test(id);
54
+ }
55
+ /**
56
+ * Whether `id` is an acceptable `presentation.resultView`: a canonical BUILT-IN id (drawn from
57
+ * `builtInIds`, defaulting to {@link RESULT_VIEW_ID_SET}) OR a consumer-namespaced one. A bare id
58
+ * that is not a built-in is rejected (the typo guardrail).
59
+ *
60
+ * This is the SINGLE composed rule the backend registration validator (`validateRegistrations`)
61
+ * checks against — it must not re-open-code `has(id) || isNamespacedResultViewId(id)`. The wire
62
+ * schema (`agentPresentationSchema.resultView`) expresses the SAME rule as a valibot union
63
+ * (`picklist ∪ namespaced`) rather than calling this, because the union keeps the built-in
64
+ * picklist's literal-type narrowing that a boolean predicate would erase. Both sides share the
65
+ * underlying atoms — {@link RESULT_VIEW_ID_SET} and {@link NAMESPACED_RESULT_VIEW_ID_PATTERN} —
66
+ * so they can't drift. The `builtInIds` parameter lets the validator inject its (overridable)
67
+ * known-id set while keeping the composition here.
68
+ */
69
+ export function isValidResultViewId(id, builtInIds = RESULT_VIEW_ID_SET) {
70
+ return builtInIds.has(id) || isNamespacedResultViewId(id);
71
+ }
38
72
  //# sourceMappingURL=result-views.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"result-views.js","sourceRoot":"","sources":["../src/result-views.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,oFAAoF;AACpF,EAAE;AACF,8EAA8E;AAC9E,yFAAyF;AACzF,2FAA2F;AAC3F,0FAA0F;AAC1F,qFAAqF;AACrF,4BAA4B;AAC5B,mEAAmE;AACnE,EAAE;AACF,0FAA0F;AAC1F,0EAA0E;AAC1E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,qBAAqB;IACrB,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,MAAM;IACN,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,oBAAoB;IACpB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,WAAW;IACX,YAAY;CACJ,CAAA;AAIV,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,eAAe,CAAC,CAAA"}
1
+ {"version":3,"file":"result-views.js","sourceRoot":"","sources":["../src/result-views.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kFAAkF;AAClF,iFAAiF;AACjF,EAAE;AACF,qFAAqF;AACrF,mFAAmF;AACnF,6FAA6F;AAC7F,2FAA2F;AAC3F,4FAA4F;AAC5F,sFAAsF;AACtF,8FAA8F;AAC9F,YAAY;AACZ,4BAA4B;AAC5B,qFAAqF;AACrF,EAAE;AACF,0FAA0F;AAC1F,0FAA0F;AAC1F,4FAA4F;AAC5F,2EAA2E;AAC3E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,qBAAqB;IACrB,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,MAAM;IACN,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,oBAAoB;IACpB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,WAAW;IACX,YAAY;CACJ,CAAA;AAIV,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,eAAe,CAAC,CAAA;AAE/E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAC5C,qDAAqD,CAAA;AAEvD,wFAAwF;AACxF,MAAM,UAAU,wBAAwB,CAAC,EAAU;IACjD,OAAO,iCAAiC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACnD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAU,EACV,UAAU,GAAwB,kBAAkB;IAEpD,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,wBAAwB,CAAC,EAAE,CAAC,CAAA;AAC3D,CAAC"}
@@ -32,6 +32,7 @@ export declare const listPublicApiKeysContract: {
32
32
  readonly workspaceId: import("valibot").StringSchema<undefined>;
33
33
  readonly label: import("valibot").StringSchema<undefined>;
34
34
  readonly scope: import("valibot").PicklistSchema<readonly ["read", "write", "admin"], undefined>;
35
+ readonly createdByUserId: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
35
36
  readonly createdAt: import("valibot").NumberSchema<undefined>;
36
37
  readonly lastUsedAt: import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>;
37
38
  readonly revokedAt: import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>;
@@ -76,6 +77,7 @@ export declare const createPublicApiKeyContract: {
76
77
  readonly workspaceId: import("valibot").StringSchema<undefined>;
77
78
  readonly label: import("valibot").StringSchema<undefined>;
78
79
  readonly scope: import("valibot").PicklistSchema<readonly ["read", "write", "admin"], undefined>;
80
+ readonly createdByUserId: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
79
81
  readonly createdAt: import("valibot").NumberSchema<undefined>;
80
82
  readonly lastUsedAt: import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>;
81
83
  readonly revokedAt: import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../src/routes/public-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAyC3E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIpC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKrC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKrC,CAAA;AAIF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK/B,CAAA;AAIF,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIrC,CAAA;AAEF,qCAAqC;AACrC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnC,CAAA;AAEF,0FAA0F;AAC1F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKzC,CAAA;AAEF,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKhC,CAAA;AAEF,0BAA0B;AAC1B,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMlC,CAAA;AAEF,yDAAyD;AACzD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnC,CAAA;AAEF,gGAAgG;AAChG,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMjC,CAAA;AAEF,iCAAiC;AACjC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMlC,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK/B,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKnC,CAAA;AAIF,kFAAkF;AAClF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAItC,CAAA;AASF,2DAA2D;AAC3D,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI1C,CAAA;AAEF,mGAAmG;AACnG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMxC,CAAA;AAEF,mDAAmD;AACnD,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM5C,CAAA"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../src/routes/public-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAyC3E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIpC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKrC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKrC,CAAA;AAIF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK/B,CAAA;AAIF,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIrC,CAAA;AAEF,qCAAqC;AACrC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnC,CAAA;AAEF,0FAA0F;AAC1F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKzC,CAAA;AAEF,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKhC,CAAA;AAEF,0BAA0B;AAC1B,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMlC,CAAA;AAEF,yDAAyD;AACzD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnC,CAAA;AAEF,gGAAgG;AAChG,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMjC,CAAA;AAEF,iCAAiC;AACjC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMlC,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK/B,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKnC,CAAA;AAIF,kFAAkF;AAClF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAItC,CAAA;AASF,2DAA2D;AAC3D,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI1C,CAAA;AAEF,mGAAmG;AACnG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMxC,CAAA;AAEF,mDAAmD;AACnD,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM5C,CAAA"}
@@ -2001,7 +2001,7 @@ export declare const createWorkspaceContract: {
2001
2001
  readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
2002
2002
  readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
2003
2003
  readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
2004
- readonly resultView: v.OptionalSchema<v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, undefined>;
2004
+ readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer result-view id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
2005
2005
  }, undefined>;
2006
2006
  readonly container: v.BooleanSchema<undefined>;
2007
2007
  }, undefined>, undefined>, undefined>;
@@ -4244,7 +4244,7 @@ export declare const getWorkspaceContract: {
4244
4244
  readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
4245
4245
  readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4246
4246
  readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
4247
- readonly resultView: v.OptionalSchema<v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, undefined>;
4247
+ readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer result-view id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
4248
4248
  }, undefined>;
4249
4249
  readonly container: v.BooleanSchema<undefined>;
4250
4250
  }, undefined>, undefined>, undefined>;
@@ -2045,7 +2045,7 @@ export declare const workspaceSnapshotSchema: v.ObjectSchema<{
2045
2045
  readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
2046
2046
  readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
2047
2047
  readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
2048
- readonly resultView: v.OptionalSchema<v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, undefined>;
2048
+ readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer result-view id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
2049
2049
  }, undefined>;
2050
2050
  readonly container: v.BooleanSchema<undefined>;
2051
2051
  }, undefined>, undefined>, undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/contracts",
3
- "version": "0.147.0",
3
+ "version": "0.148.0",
4
4
  "description": "Valibot wire contract shared between the Agent Architecture Board frontend and backend.",
5
5
  "repository": {
6
6
  "type": "git",