@cat-factory/kernel 0.243.1 → 0.245.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.
Files changed (55) hide show
  1. package/dist/domain/agent-capabilities.d.ts +100 -1
  2. package/dist/domain/agent-capabilities.d.ts.map +1 -1
  3. package/dist/domain/agent-capabilities.js +4 -0
  4. package/dist/domain/agent-capabilities.js.map +1 -1
  5. package/dist/domain/audit-log.d.ts +95 -0
  6. package/dist/domain/audit-log.d.ts.map +1 -0
  7. package/dist/domain/audit-log.js +142 -0
  8. package/dist/domain/audit-log.js.map +1 -0
  9. package/dist/domain/catalog.d.ts +10 -0
  10. package/dist/domain/catalog.d.ts.map +1 -1
  11. package/dist/domain/catalog.js +13 -1
  12. package/dist/domain/catalog.js.map +1 -1
  13. package/dist/domain/judge-registry.d.ts +40 -1
  14. package/dist/domain/judge-registry.d.ts.map +1 -1
  15. package/dist/domain/judge-registry.js.map +1 -1
  16. package/dist/domain/tool-call-rollup.d.ts +53 -0
  17. package/dist/domain/tool-call-rollup.d.ts.map +1 -0
  18. package/dist/domain/tool-call-rollup.js +117 -0
  19. package/dist/domain/tool-call-rollup.js.map +1 -0
  20. package/dist/domain/types.d.ts +2 -2
  21. package/dist/domain/types.d.ts.map +1 -1
  22. package/dist/domain/workspace-cascade.d.ts +1 -1
  23. package/dist/domain/workspace-cascade.d.ts.map +1 -1
  24. package/dist/domain/workspace-cascade.js +1 -0
  25. package/dist/domain/workspace-cascade.js.map +1 -1
  26. package/dist/index.d.ts +5 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/ports/agent-tool-calls.d.ts +50 -2
  31. package/dist/ports/agent-tool-calls.d.ts.map +1 -1
  32. package/dist/ports/agent-tools.d.ts +63 -1
  33. package/dist/ports/agent-tools.d.ts.map +1 -1
  34. package/dist/ports/audit.d.ts +139 -0
  35. package/dist/ports/audit.d.ts.map +1 -0
  36. package/dist/ports/audit.js +10 -0
  37. package/dist/ports/audit.js.map +1 -0
  38. package/dist/ports/caching.d.ts +18 -0
  39. package/dist/ports/caching.d.ts.map +1 -1
  40. package/dist/ports/caching.js.map +1 -1
  41. package/dist/ports/index.d.ts +7 -2
  42. package/dist/ports/index.d.ts.map +1 -1
  43. package/dist/ports/index.js +2 -0
  44. package/dist/ports/index.js.map +1 -1
  45. package/dist/ports/mcp-oauth-repositories.d.ts +58 -0
  46. package/dist/ports/mcp-oauth-repositories.d.ts.map +1 -0
  47. package/dist/ports/mcp-oauth-repositories.js +18 -0
  48. package/dist/ports/mcp-oauth-repositories.js.map +1 -0
  49. package/dist/ports/sso.d.ts +59 -0
  50. package/dist/ports/sso.d.ts.map +1 -0
  51. package/dist/ports/sso.js +32 -0
  52. package/dist/ports/sso.js.map +1 -0
  53. package/dist/ports/user-repositories.d.ts +8 -1
  54. package/dist/ports/user-repositories.d.ts.map +1 -1
  55. package/package.json +2 -2
@@ -129,6 +129,85 @@ export interface McpSecretRef {
129
129
  */
130
130
  usage?: string;
131
131
  }
132
+ /**
133
+ * How a REMOTE (`http`) tool server's access token is obtained, when the server authenticates with
134
+ * OAuth 2.1 rather than a static credential.
135
+ *
136
+ * This is the declaration half only: the deployment states which OAuth client it is and what it
137
+ * wants, and everything mutable (the tokens, their expiry, the refresh) lives per WORKSPACE in the
138
+ * sealed grant store. That split is deliberate and mirrors {@link McpSecretRef}: a static
139
+ * credential's declaration is a key NAME and its value is per-tenant, and an OAuth credential's
140
+ * declaration is a client and its GRANT is per-tenant. A deployment therefore registers a vendor's
141
+ * remote server once, and each board authorises its own account against it.
142
+ *
143
+ * The two grants cover the two shapes a remote server comes in, and they differ in whether a HUMAN
144
+ * is involved at all, which is why they are one field rather than two definitions:
145
+ *
146
+ * - `authorization_code` — the vendor case (Linear, Atlassian, Figma). Someone with
147
+ * `secrets.manage` presses Connect, authorises in the vendor's own UI, and the workspace holds
148
+ * the resulting refresh token. PKCE is always used, so a PUBLIC client (no
149
+ * {@link McpOAuthConfig.clientSecretKey}) is a supported and common shape.
150
+ * - `client_credentials` — a machine grant against an internal or partner server. No browser, no
151
+ * grant UI, nothing per-tenant except the client secret: the token is minted on demand and
152
+ * cached in the same store. This is what makes an OAuth-protected INTERNAL server reachable on a
153
+ * deployment that has no one to press a button (a cron-driven install, a CI environment).
154
+ */
155
+ export interface McpOAuthConfig {
156
+ grant: 'authorization_code' | 'client_credentials';
157
+ /**
158
+ * The OAuth client id this deployment registered with the server's authorization server.
159
+ *
160
+ * Static on purpose: dynamic client registration (RFC 7591) is not performed, because a
161
+ * client registered at runtime is deployment state with no home in a composition-root
162
+ * registration and no operator-visible identity at the vendor. Register the client once in the
163
+ * vendor's console and name it here.
164
+ */
165
+ clientId: string;
166
+ /**
167
+ * The LOOKUP key for the client SECRET, resolved through the very same `ToolSecretResolver`
168
+ * chain a {@link McpSecretRef} uses — so a workspace can bring its own OAuth client through the
169
+ * capability-credential checklist, and a single-tenant deployment can set an environment
170
+ * variable, with no second credential mechanism to learn.
171
+ *
172
+ * Omitted ⇒ a PUBLIC client: the token requests carry the client id and PKCE and no secret,
173
+ * which is what most remote MCP servers expect. Held to the same reserved-key floor as every
174
+ * other capability credential (`isReservedPlatformEnvKey`), for the same reason: a definition
175
+ * names both the key it wants and the endpoint that key is sent to.
176
+ */
177
+ clientSecretKey?: string;
178
+ /**
179
+ * The authorization endpoint. Omitted ⇒ DISCOVERED from the server url (RFC 9728 protected
180
+ * resource metadata, then RFC 8414 authorization-server metadata), which is what the MCP
181
+ * authorization spec prescribes and what makes a vendor server connectable without an operator
182
+ * hunting endpoint URLs out of a changelog.
183
+ *
184
+ * Declared, it WINS over discovery: a deployment that pins its endpoints is stating that it does
185
+ * not want a third party's metadata document deciding where its tokens are sent.
186
+ */
187
+ authorizationUrl?: string;
188
+ /** The token endpoint. Omitted ⇒ discovered, as {@link McpOAuthConfig.authorizationUrl}. */
189
+ tokenUrl?: string;
190
+ /** Scopes requested at authorization. Omitted ⇒ whatever the server grants by default. */
191
+ scopes?: string[];
192
+ /**
193
+ * The RFC 8707 `resource` indicator sent with the authorization and token requests, which the
194
+ * MCP authorization spec requires so a token minted for one MCP server cannot be replayed
195
+ * against another behind the same authorization server. Omitted ⇒ the server's own url, which is
196
+ * the right answer whenever the server is its own resource.
197
+ */
198
+ resource?: string;
199
+ /**
200
+ * The request header the access token rides, and its template. Default `Authorization` /
201
+ * `Bearer {value}`, which is what every OAuth-protected MCP server expects; the override exists
202
+ * for a gateway that reads the token somewhere else, exactly as {@link McpSecretRef.header} does.
203
+ */
204
+ header?: string;
205
+ headerTemplate?: string;
206
+ }
207
+ /** The header an OAuth access token rides when the declaration does not say otherwise. */
208
+ export declare const MCP_OAUTH_DEFAULT_HEADER = "Authorization";
209
+ /** The template that header's value uses when the declaration does not say otherwise. */
210
+ export declare const MCP_OAUTH_DEFAULT_HEADER_TEMPLATE = "Bearer {value}";
132
211
  /**
133
212
  * A tool server (MCP) an agent kind can be given. Registered on the `AgentKindRegistry` by id and
134
213
  * referenced from any number of kinds, or declared inline on a single kind.
@@ -178,6 +257,17 @@ export interface McpServerDefinition {
178
257
  harnesses?: HarnessKind[];
179
258
  /** Credentials the server needs, by name. Resolved at dispatch; never rendered into a prompt. */
180
259
  secretKeys?: McpSecretRef[];
260
+ /**
261
+ * OAuth, for a remote server that authenticates with a granted token rather than a static one.
262
+ * `http` transport only — a `stdio` server is a child process with no request to authorise, and
263
+ * boot validation refuses the combination rather than letting it read as configured.
264
+ *
265
+ * Composes with {@link McpServerDefinition.secretKeys} rather than replacing them: a server may
266
+ * want a granted token AND a static tenant header, and each rides the channel its own
267
+ * declaration named. The access token's header is the one place they can collide, which boot
268
+ * validation names.
269
+ */
270
+ oauth?: McpOAuthConfig;
181
271
  }
182
272
  /**
183
273
  * The prompt-facing projection of a tool server that was actually wired for this dispatch. Carried
@@ -213,8 +303,17 @@ export interface UnavailableToolServer {
213
303
  * `harnesses` list, not a different harness.
214
304
  * - `over_budget` says the server was declared, servable and credentialed, and lost to a cap.
215
305
  * Nothing about the server is wrong; the KIND declares more than a job body carries.
306
+ * - `oauth_not_connected` is kept apart from `missing_secret` because the fix is not a value to
307
+ * type: nobody has AUTHORISED this workspace against the server yet, and the remedy is a
308
+ * person pressing Connect and signing in at the vendor. An operator who read "credential not
309
+ * configured" would go looking for a variable that does not exist.
310
+ * - `oauth_token_failed` says a grant (or a client-credentials client) IS on file and the
311
+ * platform could not turn it into an access token: a revoked or expired refresh token, an
312
+ * authorization server that would not answer, a rotated client secret. Apart from
313
+ * `oauth_not_connected` because "never connected" and "the connection stopped working" send an
314
+ * operator to different places, and only the second is ever transient.
216
315
  */
217
- reason: 'harness_unsupported' | 'transport_unsupported' | 'missing_secret' | 'reserved_secret' | 'over_budget';
316
+ reason: 'harness_unsupported' | 'transport_unsupported' | 'missing_secret' | 'reserved_secret' | 'oauth_not_connected' | 'oauth_token_failed' | 'over_budget';
218
317
  }
219
318
  /**
220
319
  * Which MCP transports each harness's CLI can actually reach. An exhaustive `Record` over
@@ -1 +1 @@
1
- {"version":3,"file":"agent-capabilities.d.ts","sourceRoot":"","sources":["../../src/domain/agent-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-capabilities.d.ts","sourceRoot":"","sources":["../../src/domain/agent-capabilities.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /** The header an OAuth access token rides when the declaration does not say otherwise. */
2
+ export const MCP_OAUTH_DEFAULT_HEADER = 'Authorization';
3
+ /** The template that header's value uses when the declaration does not say otherwise. */
4
+ export const MCP_OAUTH_DEFAULT_HEADER_TEMPLATE = 'Bearer {value}';
1
5
  /**
2
6
  * Which MCP transports each harness's CLI can actually reach. An exhaustive `Record` over
3
7
  * `HarnessKind`, so a new harness cannot be added without stating its answer: an omitted entry
@@ -1 +1 @@
1
- {"version":3,"file":"agent-capabilities.js","sourceRoot":"","sources":["../../src/domain/agent-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-capabilities.js","sourceRoot":"","sources":["../../src/domain/agent-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import type { AuditEventDetails } from '@cat-factory/contracts';
2
+ import type { AuditActor, AuditEventRecord, AuditEventView } from '../ports/audit.js';
3
+ /** Default page size when a caller names none. */
4
+ export declare const AUDIT_PAGE_LIMIT_DEFAULT = 50;
5
+ /** Hard ceiling, so a caller-supplied `limit` can't ask for the whole table. */
6
+ export declare const AUDIT_PAGE_LIMIT_MAX = 200;
7
+ /** The (at, id) pair a cursor points just past. */
8
+ export interface AuditCursor {
9
+ at: number;
10
+ id: string;
11
+ }
12
+ /** Clamp a caller's requested page size into the allowed range. */
13
+ export declare function auditPageLimit(limit?: number): number;
14
+ /**
15
+ * Encode the last row of a page as the next page's cursor. `at` and `id` TOGETHER, because `at`
16
+ * alone is not unique: two events recorded in the same millisecond would straddle the boundary
17
+ * and be served twice or skipped.
18
+ */
19
+ export declare function encodeAuditCursor(row: AuditCursor): string;
20
+ /**
21
+ * Decode a cursor, or null when there is none / it is unreadable.
22
+ *
23
+ * A malformed cursor reads as "start from the newest" rather than throwing: cursors are opaque
24
+ * and round-trip through a URL, so a truncated one is a client bug that should cost a page
25
+ * position, not a 500. It cannot widen a read either way, because the account scope is a
26
+ * separate argument that no cursor carries.
27
+ */
28
+ export declare function decodeAuditCursor(cursor?: string | null): AuditCursor | null;
29
+ /**
30
+ * The persisted actor columns as a discriminated {@link AuditActor}.
31
+ *
32
+ * Anything that is not a complete `user` or `apiKey` principal reads as `system`: that is the
33
+ * honest rendering of "no principal is recorded on this row", and it never invents a user id,
34
+ * which is the single outcome that would misattribute an action to a person.
35
+ */
36
+ export declare function rowToAuditActor(row: {
37
+ actor_kind: string;
38
+ actor_user_id: string | null;
39
+ actor_api_key_id: string | null;
40
+ }): AuditActor;
41
+ /** The two nullable actor columns for a principal, for an INSERT. */
42
+ export declare function auditActorColumns(actor: AuditActor): {
43
+ actor_kind: AuditActor['kind'];
44
+ actor_user_id: string | null;
45
+ actor_api_key_id: string | null;
46
+ };
47
+ /** An event's `details` as the single TEXT column both stores keep it in. */
48
+ export declare function encodeAuditDetails(details: AuditEventDetails): string;
49
+ /**
50
+ * The `details` column as fields again, or an EMPTY set when the blob is unreadable.
51
+ *
52
+ * Empty rather than a throw, deliberately, and it is the one place in this module where the
53
+ * lenient branch is the strict choice: who acted, on what, and when are the irreplaceable parts
54
+ * of an audit row, and losing the whole row (or the whole PAGE) because one event's values no
55
+ * longer parse is the single failure a viewer must not have. The values are what the viewer
56
+ * interpolates, so their absence shows up as a row that states less, never as a row that is not
57
+ * there. A non-object blob (`"null"`, `"3"`, `"[]"`) counts as unreadable for the same reason it
58
+ * would break interpolation.
59
+ */
60
+ export declare function decodeAuditDetails(raw: string | null): AuditEventDetails;
61
+ /** The snake_case columns both stores keep an audit event in, as WRITTEN. */
62
+ export interface AuditEventColumns {
63
+ id: string;
64
+ account_id: string;
65
+ workspace_id: string | null;
66
+ actor_kind: string;
67
+ actor_user_id: string | null;
68
+ actor_api_key_id: string | null;
69
+ action: string;
70
+ target_type: string;
71
+ target_id: string;
72
+ details: string;
73
+ at: number;
74
+ }
75
+ /**
76
+ * The same row as READ BACK. Identical but for `details`, which the reader tolerates as NULL
77
+ * even though both schemas declare it NOT NULL: a driver, a hand-run statement or a future
78
+ * lineage can still hand one over, and the row is worth more than its values (see
79
+ * {@link decodeAuditDetails}). The WRITE type admits no null, so nothing here can produce one.
80
+ */
81
+ export interface AuditEventRow extends Omit<AuditEventColumns, 'details'> {
82
+ details: string | null;
83
+ }
84
+ /** Every column of an audit event, for an INSERT. */
85
+ export declare function auditEventColumns(event: AuditEventRecord): AuditEventColumns;
86
+ /**
87
+ * A persisted row as the event a viewer renders.
88
+ *
89
+ * Shaped structurally (a plain snake_case object) rather than against either driver's row type,
90
+ * so both facades map through this one function. `action` and `target_type` go through the
91
+ * contracts readers, so a member retired since the row was written arrives NAMED as retired
92
+ * rather than dropped or guessed at.
93
+ */
94
+ export declare function rowToAuditEventView(row: AuditEventRow): AuditEventView;
95
+ //# sourceMappingURL=audit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/domain/audit-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAiBrF,kDAAkD;AAClD,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAC1C,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,MAAM,CAAA;AAEvC,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACX;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAE1D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAO5E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC,GAAG,UAAU,CAQb;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG;IACpD,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC,CAMA;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAErE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,CAWxE;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAY5E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,cAAc,CAYtE"}
@@ -0,0 +1,142 @@
1
+ import { readAuditAction, readAuditTargetType } from '@cat-factory/contracts';
2
+ // ---------------------------------------------------------------------------
3
+ // The audit log's pure rules: how a page is bounded, how a cursor names the row it continues
4
+ // from, and how a persisted row reads back as an event.
5
+ //
6
+ // In kernel rather than in either facade because BOTH implement `AuditEventRepository` and must
7
+ // agree byte-for-byte about all of it. A cursor is opaque to its caller, which is exactly why a
8
+ // per-facade copy of its encoding is dangerous: nothing about a mismatched cursor looks wrong at
9
+ // the boundary, it just silently starts a page somewhere else. The row mapping is here for a
10
+ // related reason: it holds three decisions a reader could get subtly wrong on its own (which
11
+ // actor column belongs to which kind, what a retired vocabulary member renders as, what an
12
+ // unreadable `details` blob does), and a facade that re-derived any of them would diverge in a
13
+ // way only that runtime's users would ever see. The conformance suite drives both repositories
14
+ // through the same assertions, so a divergence would have to be a divergence in code they share.
15
+ // ---------------------------------------------------------------------------
16
+ /** Default page size when a caller names none. */
17
+ export const AUDIT_PAGE_LIMIT_DEFAULT = 50;
18
+ /** Hard ceiling, so a caller-supplied `limit` can't ask for the whole table. */
19
+ export const AUDIT_PAGE_LIMIT_MAX = 200;
20
+ /** Clamp a caller's requested page size into the allowed range. */
21
+ export function auditPageLimit(limit) {
22
+ if (limit === undefined || !Number.isFinite(limit) || limit < 1)
23
+ return AUDIT_PAGE_LIMIT_DEFAULT;
24
+ return Math.min(Math.floor(limit), AUDIT_PAGE_LIMIT_MAX);
25
+ }
26
+ /**
27
+ * Encode the last row of a page as the next page's cursor. `at` and `id` TOGETHER, because `at`
28
+ * alone is not unique: two events recorded in the same millisecond would straddle the boundary
29
+ * and be served twice or skipped.
30
+ */
31
+ export function encodeAuditCursor(row) {
32
+ return `${row.at}:${row.id}`;
33
+ }
34
+ /**
35
+ * Decode a cursor, or null when there is none / it is unreadable.
36
+ *
37
+ * A malformed cursor reads as "start from the newest" rather than throwing: cursors are opaque
38
+ * and round-trip through a URL, so a truncated one is a client bug that should cost a page
39
+ * position, not a 500. It cannot widen a read either way, because the account scope is a
40
+ * separate argument that no cursor carries.
41
+ */
42
+ export function decodeAuditCursor(cursor) {
43
+ if (!cursor)
44
+ return null;
45
+ const split = cursor.indexOf(':');
46
+ if (split <= 0 || split === cursor.length - 1)
47
+ return null;
48
+ const at = Number(cursor.slice(0, split));
49
+ if (!Number.isSafeInteger(at))
50
+ return null;
51
+ return { at, id: cursor.slice(split + 1) };
52
+ }
53
+ /**
54
+ * The persisted actor columns as a discriminated {@link AuditActor}.
55
+ *
56
+ * Anything that is not a complete `user` or `apiKey` principal reads as `system`: that is the
57
+ * honest rendering of "no principal is recorded on this row", and it never invents a user id,
58
+ * which is the single outcome that would misattribute an action to a person.
59
+ */
60
+ export function rowToAuditActor(row) {
61
+ if (row.actor_kind === 'user' && row.actor_user_id) {
62
+ return { kind: 'user', userId: row.actor_user_id };
63
+ }
64
+ if (row.actor_kind === 'apiKey' && row.actor_api_key_id) {
65
+ return { kind: 'apiKey', apiKeyId: row.actor_api_key_id };
66
+ }
67
+ return { kind: 'system' };
68
+ }
69
+ /** The two nullable actor columns for a principal, for an INSERT. */
70
+ export function auditActorColumns(actor) {
71
+ return {
72
+ actor_kind: actor.kind,
73
+ actor_user_id: actor.kind === 'user' ? actor.userId : null,
74
+ actor_api_key_id: actor.kind === 'apiKey' ? actor.apiKeyId : null,
75
+ };
76
+ }
77
+ /** An event's `details` as the single TEXT column both stores keep it in. */
78
+ export function encodeAuditDetails(details) {
79
+ return JSON.stringify(details);
80
+ }
81
+ /**
82
+ * The `details` column as fields again, or an EMPTY set when the blob is unreadable.
83
+ *
84
+ * Empty rather than a throw, deliberately, and it is the one place in this module where the
85
+ * lenient branch is the strict choice: who acted, on what, and when are the irreplaceable parts
86
+ * of an audit row, and losing the whole row (or the whole PAGE) because one event's values no
87
+ * longer parse is the single failure a viewer must not have. The values are what the viewer
88
+ * interpolates, so their absence shows up as a row that states less, never as a row that is not
89
+ * there. A non-object blob (`"null"`, `"3"`, `"[]"`) counts as unreadable for the same reason it
90
+ * would break interpolation.
91
+ */
92
+ export function decodeAuditDetails(raw) {
93
+ if (!raw)
94
+ return {};
95
+ try {
96
+ const parsed = JSON.parse(raw);
97
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
98
+ return {};
99
+ return parsed;
100
+ }
101
+ catch {
102
+ // An unparseable value blob must not cost the row it belongs to, and the empty result is
103
+ // itself the report: the viewer renders the action with no values.
104
+ return {};
105
+ }
106
+ }
107
+ /** Every column of an audit event, for an INSERT. */
108
+ export function auditEventColumns(event) {
109
+ return {
110
+ id: event.id,
111
+ account_id: event.accountId,
112
+ workspace_id: event.workspaceId ?? null,
113
+ ...auditActorColumns(event.actor),
114
+ action: event.action,
115
+ target_type: event.targetType,
116
+ target_id: event.targetId,
117
+ details: encodeAuditDetails(event.details),
118
+ at: event.at,
119
+ };
120
+ }
121
+ /**
122
+ * A persisted row as the event a viewer renders.
123
+ *
124
+ * Shaped structurally (a plain snake_case object) rather than against either driver's row type,
125
+ * so both facades map through this one function. `action` and `target_type` go through the
126
+ * contracts readers, so a member retired since the row was written arrives NAMED as retired
127
+ * rather than dropped or guessed at.
128
+ */
129
+ export function rowToAuditEventView(row) {
130
+ return {
131
+ id: row.id,
132
+ accountId: row.account_id,
133
+ workspaceId: row.workspace_id,
134
+ actor: rowToAuditActor(row),
135
+ action: readAuditAction(row.action),
136
+ targetType: readAuditTargetType(row.target_type),
137
+ targetId: row.target_id,
138
+ details: decodeAuditDetails(row.details),
139
+ at: row.at,
140
+ };
141
+ }
142
+ //# sourceMappingURL=audit-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/domain/audit-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAG7E,8EAA8E;AAC9E,6FAA6F;AAC7F,wDAAwD;AACxD,EAAE;AACF,gGAAgG;AAChG,gGAAgG;AAChG,iGAAiG;AACjG,6FAA6F;AAC7F,6FAA6F;AAC7F,2FAA2F;AAC3F,+FAA+F;AAC/F,+FAA+F;AAC/F,iGAAiG;AACjG,8EAA8E;AAE9E,kDAAkD;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAA;AAC1C,gFAAgF;AAChF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAQvC,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,wBAAwB,CAAA;IAChG,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAgB;IAChD,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1C,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAA;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAI/B;IACC,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,CAAA;IACpD,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC3D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC3B,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IAKjD,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,IAAI;QACtB,aAAa,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC1D,gBAAgB,EAAE,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;KAClE,CAAA;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAkB;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAA;QAC7E,OAAO,MAA2B,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,yFAAyF;QACzF,mEAAmE;QACnE,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AA2BD,qDAAqD;AACrD,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,UAAU,EAAE,KAAK,CAAC,SAAS;QAC3B,YAAY,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;QACvC,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,KAAK,CAAC,UAAU;QAC7B,SAAS,EAAE,KAAK,CAAC,QAAQ;QACzB,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,EAAE,EAAE,KAAK,CAAC,EAAE;KACb,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAkB;IACpD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC;QAC3B,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,UAAU,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;QAChD,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;QACxC,EAAE,EAAE,GAAG,CAAC,EAAE;KACX,CAAA;AACH,CAAC"}
@@ -201,6 +201,16 @@ export declare const DEFAULT_MODEL_PRESET: ModelPresetSeed;
201
201
  * Cloudflare-runnable default that holds even before the preset library is materialised.
202
202
  */
203
203
  export declare function modelForKindFromPreset(preset: ModelPreset | ModelPresetSeed | null | undefined, agentKind: string): string;
204
+ /**
205
+ * The model a preset NAMES for an agent kind, or undefined when it says nothing about that kind
206
+ * and {@link modelForKindFromPreset} would answer with its base model.
207
+ *
208
+ * The distinction the two answers collapse is load-bearing for anything that carries a model
209
+ * default of its own (a judge registration pins the model its rubric was authored for): a base
210
+ * model is a blanket statement about every kind, so losing to it would make such a default
211
+ * unreachable, while an override NAMES the kind and must win.
212
+ */
213
+ export declare function presetOverrideForKind(preset: ModelPreset | ModelPresetSeed | null | undefined, agentKind: string): string | undefined;
204
214
  /** Human-facing label per block type, used when titling freshly dropped frames. */
205
215
  export declare const BLOCK_TYPE_LABEL: Record<BlockType, string>;
206
216
  //# sourceMappingURL=catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/domain/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/domain/catalog.ts"],"names":[],"mappings":"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"}
@@ -273,7 +273,19 @@ export const DEFAULT_MODEL_PRESET = DEFAULT_MODEL_PRESETS.find((p) => p.id === D
273
273
  */
274
274
  export function modelForKindFromPreset(preset, agentKind) {
275
275
  const p = preset ?? DEFAULT_MODEL_PRESET;
276
- return p.overrides[agentKind] ?? p.baseModelId;
276
+ return presetOverrideForKind(p, agentKind) ?? p.baseModelId;
277
+ }
278
+ /**
279
+ * The model a preset NAMES for an agent kind, or undefined when it says nothing about that kind
280
+ * and {@link modelForKindFromPreset} would answer with its base model.
281
+ *
282
+ * The distinction the two answers collapse is load-bearing for anything that carries a model
283
+ * default of its own (a judge registration pins the model its rubric was authored for): a base
284
+ * model is a blanket statement about every kind, so losing to it would make such a default
285
+ * unreachable, while an override NAMES the kind and must win.
286
+ */
287
+ export function presetOverrideForKind(preset, agentKind) {
288
+ return (preset ?? DEFAULT_MODEL_PRESET).overrides[agentKind];
277
289
  }
278
290
  /** Human-facing label per block type, used when titling freshly dropped frames. */
279
291
  export const BLOCK_TYPE_LABEL = {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/domain/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/domain/catalog.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Block, JudgeVerdict, PipelineStep, RiskPolicy } from './types.js';
1
+ import type { Block, JudgeModelPin, JudgeVerdict, PipelineStep, RiskPolicy } from './types.js';
2
2
  import type { RaiseNotificationInput } from '../ports/notification-channel.js';
3
3
  import type { Clock } from '../ports/runtime.js';
4
4
  import type { RunInitiatorScope } from '../ports/user-secret-repositories.js';
@@ -41,6 +41,12 @@ export interface JudgeSubject {
41
41
  }[];
42
42
  /** The rework feedback from an earlier bounce round, when this is a re-judgement. */
43
43
  previousFindings?: JudgeVerdict | null;
44
+ /**
45
+ * The catalog model id the registration pinned for this rubric ({@link JudgeDefinition.modelId}),
46
+ * passed through so the assessor resolves it under the deployment's own catalog and route
47
+ * order. Absent ⇒ the judge named no model.
48
+ */
49
+ modelId?: string;
44
50
  }
45
51
  /**
46
52
  * The seam that actually produces a verdict. The engine's default implementation is an
@@ -59,10 +65,15 @@ export interface JudgeAssessor {
59
65
  * Produce ONE verdict. Returns the RAW value plus the model that produced it; the engine
60
66
  * parses it against the registration's schema (so a registration owns its own shape) and
61
67
  * treats a parse failure as a failing verdict rather than a crashed run.
68
+ *
69
+ * `modelPin` reports what became of {@link JudgeSubject.modelId}: applied, overridden by a
70
+ * more specific choice, or unresolvable in this deployment. The engine records it on the step
71
+ * verbatim; an assessor that resolves no model of its own (a test fake) simply omits it.
62
72
  */
63
73
  assess(subject: JudgeSubject): Promise<{
64
74
  verdict: unknown;
65
75
  model: string;
76
+ modelPin?: JudgeModelPin;
66
77
  }>;
67
78
  }
68
79
  /**
@@ -75,6 +86,34 @@ export interface JudgeDefinition {
75
86
  kind: string;
76
87
  /** The rubric this judge assesses against. */
77
88
  rubric: JudgeRubric;
89
+ /**
90
+ * The CATALOG MODEL ID this rubric was authored for (e.g. `claude-opus`), when the judgement
91
+ * needs a particular model rather than whatever the workspace runs its ordinary steps on. A
92
+ * doc-completeness rubric and a security rubric are not the same ask, and a registration is
93
+ * the only thing that knows which of the two it is.
94
+ *
95
+ * A catalog id rather than a `ModelRef`, deliberately: an id is resolved through the
96
+ * deployment's own catalog under the ROUTE ORDER the task's preset states, so a pinned judge
97
+ * still honours a residency-constrained preset. A `provider:model` pair would bypass both.
98
+ *
99
+ * It is a DEFAULT, not an override. The model resolves in this order, most specific first:
100
+ *
101
+ * 1. the task's own pinned model (`Block.modelId`);
102
+ * 2. a workspace preset override NAMING this judge's kind (`overrides['scope-adherence']`);
103
+ * 3. this pin;
104
+ * 4. the preset's base model, then the deployment's routing default.
105
+ *
106
+ * It sits above the preset BASE model on purpose: a base is a blanket statement about every
107
+ * kind, so a pin placed under it could never be reached. It sits below an override that names
108
+ * the kind for the same reason the threshold lives on the merge preset rather than here: a
109
+ * deployment-global constant no workspace could relax is not a policy, and the model-defaults
110
+ * panel already lists every registered judge as its own row.
111
+ *
112
+ * An id this deployment cannot serve is NOT a silent fallback: the assessment runs on the
113
+ * default and `step.judge.modelPin` records `unavailable`, because a rubric scored by a model
114
+ * its author rejected otherwise reads exactly like one it approved.
115
+ */
116
+ modelId?: string;
78
117
  /**
79
118
  * Parse the raw assessment into a verdict. Defaults to the contract's `judgeVerdictSchema`
80
119
  * (via `parseJudgeVerdict`) when omitted; a registration with a richer rubric shape passes
@@ -1 +1 @@
1
- {"version":3,"file":"judge-registry.d.ts","sourceRoot":"","sources":["../../src/domain/judge-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"judge-registry.d.ts","sourceRoot":"","sources":["../../src/domain/judge-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"judge-registry.js","sourceRoot":"","sources":["../../src/domain/judge-registry.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,GAGxB,MAAM,wBAAwB,CAAA;AAsM/B;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IACP,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAA;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,IAAY,EAAE,OAAqB;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACzE,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,aAAa,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAS,GAA0B,EAAE,EACrC,gBAAgB,GAAqB,uBAAuB,EAAE;IAE9D,OAAO;QACL,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACvB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC1B,iBAAiB,EAAE,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QAC7C,iBAAiB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACjC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QACnD,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,GAAG,SAAS;KACb,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"judge-registry.js","sourceRoot":"","sources":["../../src/domain/judge-registry.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,GAGxB,MAAM,wBAAwB,CAAA;AA8O/B;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IACP,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAA;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,IAAY,EAAE,OAAqB;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACzE,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,aAAa,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAS,GAA0B,EAAE,EACrC,gBAAgB,GAAqB,uBAAuB,EAAE;IAE9D,OAAO;QACL,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACvB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC1B,iBAAiB,EAAE,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QAC7C,iBAAiB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACjC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QACnD,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,GAAG,SAAS;KACb,CAAA;AACH,CAAC"}