agentlock-shared 0.2.0 → 0.3.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 (169) hide show
  1. package/dist/__tests__/billing.test.d.ts +2 -0
  2. package/dist/__tests__/billing.test.d.ts.map +1 -0
  3. package/dist/__tests__/billing.test.js +31 -0
  4. package/dist/__tests__/billing.test.js.map +1 -0
  5. package/dist/__tests__/dns-pinning.test.d.ts +2 -0
  6. package/dist/__tests__/dns-pinning.test.d.ts.map +1 -0
  7. package/dist/__tests__/dns-pinning.test.js +33 -0
  8. package/dist/__tests__/dns-pinning.test.js.map +1 -0
  9. package/dist/__tests__/llm-classifier-cache-store.test.d.ts +2 -0
  10. package/dist/__tests__/llm-classifier-cache-store.test.d.ts.map +1 -0
  11. package/dist/__tests__/llm-classifier-cache-store.test.js +65 -0
  12. package/dist/__tests__/llm-classifier-cache-store.test.js.map +1 -0
  13. package/dist/__tests__/llm-classifier-cache.test.d.ts +2 -0
  14. package/dist/__tests__/llm-classifier-cache.test.d.ts.map +1 -0
  15. package/dist/__tests__/llm-classifier-cache.test.js +44 -0
  16. package/dist/__tests__/llm-classifier-cache.test.js.map +1 -0
  17. package/dist/__tests__/llm-classifier.test.d.ts +2 -0
  18. package/dist/__tests__/llm-classifier.test.d.ts.map +1 -0
  19. package/dist/__tests__/llm-classifier.test.js +167 -0
  20. package/dist/__tests__/llm-classifier.test.js.map +1 -0
  21. package/dist/__tests__/plans-classifier-limits.test.d.ts +2 -0
  22. package/dist/__tests__/plans-classifier-limits.test.d.ts.map +1 -0
  23. package/dist/__tests__/plans-classifier-limits.test.js +22 -0
  24. package/dist/__tests__/plans-classifier-limits.test.js.map +1 -0
  25. package/dist/__tests__/policy-category-floor.test.d.ts +2 -0
  26. package/dist/__tests__/policy-category-floor.test.d.ts.map +1 -0
  27. package/dist/__tests__/policy-category-floor.test.js +46 -0
  28. package/dist/__tests__/policy-category-floor.test.js.map +1 -0
  29. package/dist/__tests__/policy-claude-bash.test.d.ts +2 -0
  30. package/dist/__tests__/policy-claude-bash.test.d.ts.map +1 -0
  31. package/dist/__tests__/policy-claude-bash.test.js +401 -0
  32. package/dist/__tests__/policy-claude-bash.test.js.map +1 -0
  33. package/dist/__tests__/policy-llm-floor.test.d.ts +2 -0
  34. package/dist/__tests__/policy-llm-floor.test.d.ts.map +1 -0
  35. package/dist/__tests__/policy-llm-floor.test.js +107 -0
  36. package/dist/__tests__/policy-llm-floor.test.js.map +1 -0
  37. package/dist/__tests__/policy-ssh-e2e.test.d.ts +2 -0
  38. package/dist/__tests__/policy-ssh-e2e.test.d.ts.map +1 -0
  39. package/dist/__tests__/policy-ssh-e2e.test.js +89 -0
  40. package/dist/__tests__/policy-ssh-e2e.test.js.map +1 -0
  41. package/dist/__tests__/policy-ssh-sessions.test.d.ts +2 -0
  42. package/dist/__tests__/policy-ssh-sessions.test.d.ts.map +1 -0
  43. package/dist/__tests__/policy-ssh-sessions.test.js +139 -0
  44. package/dist/__tests__/policy-ssh-sessions.test.js.map +1 -0
  45. package/dist/__tests__/policy-ssh.test.d.ts +2 -0
  46. package/dist/__tests__/policy-ssh.test.d.ts.map +1 -0
  47. package/dist/__tests__/policy-ssh.test.js +180 -0
  48. package/dist/__tests__/policy-ssh.test.js.map +1 -0
  49. package/dist/__tests__/policy.test.js +400 -2
  50. package/dist/__tests__/policy.test.js.map +1 -1
  51. package/dist/__tests__/redact.test.js +76 -0
  52. package/dist/__tests__/redact.test.js.map +1 -1
  53. package/dist/__tests__/signing.test.js +89 -0
  54. package/dist/__tests__/signing.test.js.map +1 -1
  55. package/dist/__tests__/ssh-fingerprint.test.d.ts +2 -0
  56. package/dist/__tests__/ssh-fingerprint.test.d.ts.map +1 -0
  57. package/dist/__tests__/ssh-fingerprint.test.js +19 -0
  58. package/dist/__tests__/ssh-fingerprint.test.js.map +1 -0
  59. package/dist/__tests__/vpn-route.test.d.ts +2 -0
  60. package/dist/__tests__/vpn-route.test.d.ts.map +1 -0
  61. package/dist/__tests__/vpn-route.test.js +72 -0
  62. package/dist/__tests__/vpn-route.test.js.map +1 -0
  63. package/dist/__tests__/wireguard.test.d.ts +2 -0
  64. package/dist/__tests__/wireguard.test.d.ts.map +1 -0
  65. package/dist/__tests__/wireguard.test.js +114 -0
  66. package/dist/__tests__/wireguard.test.js.map +1 -0
  67. package/dist/billing.d.ts +12 -0
  68. package/dist/billing.d.ts.map +1 -0
  69. package/dist/billing.js +41 -0
  70. package/dist/billing.js.map +1 -0
  71. package/dist/crypto.d.ts +5 -0
  72. package/dist/crypto.d.ts.map +1 -1
  73. package/dist/crypto.js +80 -23
  74. package/dist/crypto.js.map +1 -1
  75. package/dist/dns-pinning.d.ts +28 -0
  76. package/dist/dns-pinning.d.ts.map +1 -0
  77. package/dist/dns-pinning.js +113 -0
  78. package/dist/dns-pinning.js.map +1 -0
  79. package/dist/index.d.ts +6 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +9 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/llm-classifier-cache-store.d.ts +49 -0
  84. package/dist/llm-classifier-cache-store.d.ts.map +1 -0
  85. package/dist/llm-classifier-cache-store.js +63 -0
  86. package/dist/llm-classifier-cache-store.js.map +1 -0
  87. package/dist/llm-classifier-cache.d.ts +6 -0
  88. package/dist/llm-classifier-cache.d.ts.map +1 -0
  89. package/dist/llm-classifier-cache.js +52 -0
  90. package/dist/llm-classifier-cache.js.map +1 -0
  91. package/dist/llm-classifier.d.ts +29 -0
  92. package/dist/llm-classifier.d.ts.map +1 -0
  93. package/dist/llm-classifier.js +191 -0
  94. package/dist/llm-classifier.js.map +1 -0
  95. package/dist/observability.d.ts +36 -0
  96. package/dist/observability.d.ts.map +1 -0
  97. package/dist/observability.js +75 -0
  98. package/dist/observability.js.map +1 -0
  99. package/dist/plans.d.ts +17 -0
  100. package/dist/plans.d.ts.map +1 -1
  101. package/dist/plans.js +36 -14
  102. package/dist/plans.js.map +1 -1
  103. package/dist/policy.d.ts +173 -3
  104. package/dist/policy.d.ts.map +1 -1
  105. package/dist/policy.js +910 -42
  106. package/dist/policy.js.map +1 -1
  107. package/dist/redact.d.ts.map +1 -1
  108. package/dist/redact.js +83 -3
  109. package/dist/redact.js.map +1 -1
  110. package/dist/regex-safety.d.ts +21 -0
  111. package/dist/regex-safety.d.ts.map +1 -0
  112. package/dist/regex-safety.js +49 -0
  113. package/dist/regex-safety.js.map +1 -0
  114. package/dist/sanitize.d.ts +31 -0
  115. package/dist/sanitize.d.ts.map +1 -0
  116. package/dist/sanitize.js +54 -0
  117. package/dist/sanitize.js.map +1 -0
  118. package/dist/schemas.d.ts +202 -10
  119. package/dist/schemas.d.ts.map +1 -1
  120. package/dist/schemas.js +91 -1
  121. package/dist/schemas.js.map +1 -1
  122. package/dist/signing.d.ts +15 -0
  123. package/dist/signing.d.ts.map +1 -1
  124. package/dist/signing.js +53 -4
  125. package/dist/signing.js.map +1 -1
  126. package/dist/ssh-fingerprint.d.ts +10 -0
  127. package/dist/ssh-fingerprint.d.ts.map +1 -0
  128. package/dist/ssh-fingerprint.js +52 -0
  129. package/dist/ssh-fingerprint.js.map +1 -0
  130. package/dist/ssrf.d.ts +36 -0
  131. package/dist/ssrf.d.ts.map +1 -0
  132. package/dist/ssrf.js +140 -0
  133. package/dist/ssrf.js.map +1 -0
  134. package/dist/types.d.ts +130 -0
  135. package/dist/types.d.ts.map +1 -1
  136. package/dist/wireguard.d.ts +63 -0
  137. package/dist/wireguard.d.ts.map +1 -0
  138. package/dist/wireguard.js +226 -0
  139. package/dist/wireguard.js.map +1 -0
  140. package/package.json +42 -29
  141. package/.turbo/turbo-build.log +0 -4
  142. package/.turbo/turbo-test.log +0 -76
  143. package/dist/__tests__/content-crypto.test.d.ts +0 -2
  144. package/dist/__tests__/content-crypto.test.d.ts.map +0 -1
  145. package/dist/__tests__/content-crypto.test.js +0 -117
  146. package/dist/__tests__/content-crypto.test.js.map +0 -1
  147. package/dist/__tests__/signing.test (# Edit conflict 2026-04-01 z3etfmC #).js +0 -51
  148. package/dist/__tests__/signing.test.js (# Edit conflict 2026-04-01 4rndy9C #).map +0 -1
  149. package/dist/content-crypto.d.ts +0 -24
  150. package/dist/content-crypto.d.ts.map +0 -1
  151. package/dist/content-crypto.js +0 -58
  152. package/dist/content-crypto.js.map +0 -1
  153. package/src/__tests__/crypto.test.ts +0 -169
  154. package/src/__tests__/messaging.test.ts +0 -83
  155. package/src/__tests__/policy.test.ts +0 -222
  156. package/src/__tests__/redact.test.ts +0 -41
  157. package/src/__tests__/signing.test.ts +0 -55
  158. package/src/crypto.ts +0 -235
  159. package/src/index.ts +0 -8
  160. package/src/mcp-catalog.ts +0 -181
  161. package/src/plans.ts +0 -116
  162. package/src/policy.ts +0 -216
  163. package/src/redact.ts +0 -131
  164. package/src/schemas.ts +0 -121
  165. package/src/signing.ts +0 -120
  166. package/src/types.ts +0 -213
  167. package/test-gateway.mjs +0 -47
  168. package/tsconfig.json +0 -10
  169. package/vitest.config.ts +0 -8
package/dist/policy.d.ts CHANGED
@@ -1,10 +1,180 @@
1
- import type { PolicyRules, AgentActionRequest, PolicyEvaluationResult } from './types.js';
1
+ import type { PolicyRules, AgentActionRequest, PolicyEvaluationResult, PolicyDecision, ActionType } from './types.js';
2
+ /** Returns the more restrictive of two categories. */
3
+ export declare function maxCategory(a: ActionType, b: ActionType): ActionType;
4
+ /**
5
+ * Derive the minimum (floor) category for a given tool + payload, independent
6
+ * of what the agent declared. See comment above for rationale.
7
+ *
8
+ * Returns `undefined` when no opinion — caller treats that as "trust declared".
9
+ */
10
+ export declare function getCategoryFloor(tool: string, payload: Record<string, unknown>): ActionType;
2
11
  export declare const DEFAULT_POLICY_RULES: PolicyRules;
3
- export declare function evaluatePolicy(action: AgentActionRequest, rules: PolicyRules): PolicyEvaluationResult;
4
- export declare function buildActionPreview(action: AgentActionRequest): {
12
+ export declare function compileSshPattern(raw: string): RegExp;
13
+ /**
14
+ * Compile a user-supplied Claude Code Bash pattern into a RegExp.
15
+ *
16
+ * Same semantics as the SSH `commandRules` evaluator (single source of
17
+ * truth — `compileSshPattern`), so admins only learn one pattern dialect.
18
+ * Default: full-string match with `*` and `?` as glob wildcards.
19
+ *
20
+ * - `grep` → exact match only ("grep" with no args)
21
+ * - `grep *` → grep followed by a space and any args
22
+ * - `grep /home/*`→ grep with args starting with `/home/`
23
+ * - `^git push` → starts-with-regex (regex hint chars trigger raw mode)
24
+ * - `/.../` → fully raw regex (escape hatch for advanced cases)
25
+ *
26
+ * The exact-by-default behaviour is the safer choice: forgetting the `*`
27
+ * means your rule is narrower than expected, not wider.
28
+ */
29
+ export declare const compileClaudeBashPattern: typeof compileSshPattern;
30
+ export interface ClaudeBashEvalOutcome {
31
+ decision: PolicyDecision;
32
+ reason: string;
33
+ matchedPattern: string;
34
+ /**
35
+ * Per-rule two-person approval flag, copied from the matched rule. The
36
+ * routing endpoint forwards this to the gateway so the resulting
37
+ * approval_request inherits it instead of falling back to the
38
+ * surrounding `permission.claude_code` rule's flag. `undefined` means
39
+ * the rule didn't set it — caller falls back to the matched_rule's
40
+ * own value.
41
+ */
42
+ require_two_approvals?: boolean;
43
+ /**
44
+ * Per-rule approver allowlist, copied from the matched rule. Same
45
+ * fallback semantics as `require_two_approvals`. Empty/undefined ⇒ no
46
+ * per-rule restriction.
47
+ */
48
+ allowed_approvers?: string[];
49
+ }
50
+ /**
51
+ * Optional context the routing endpoint passes to
52
+ * {@link evaluateClaudeBashRules}. Currently only used to surface the
53
+ * shell-metachar safety gate's classification context in audit/log output;
54
+ * no admin-class auto-escalation is performed because the editor's linter
55
+ * already warns admins about high-risk ALLOWs and an explicit ALLOW must
56
+ * be honoured.
57
+ */
58
+ export interface ClaudeBashEvalOptions {
59
+ /**
60
+ * What the hardcoded pattern classifier (the one in the routing endpoint)
61
+ * thinks this command is. Currently informational — kept on the option
62
+ * type so the gateway can pass it without conditional plumbing and so a
63
+ * future auditing/logging change can surface it without another schema
64
+ * bump.
65
+ */
66
+ hardcodedActionType?: ActionType;
67
+ /**
68
+ * Workspace's high-risk auto-approval opt-in. Retained on the type for
69
+ * compatibility with existing callers; no longer consulted by the Bash
70
+ * rule evaluator (admin-class auto-escalation has been removed — see the
71
+ * docstring on {@link evaluateClaudeBashRules}).
72
+ */
73
+ allowHighRiskAutoApproval?: {
74
+ admin?: boolean;
75
+ financial?: boolean;
76
+ };
77
+ }
78
+ /**
79
+ * Evaluate a Bash command against the workspace's user-defined Claude Code
80
+ * rules. Returns the first matching rule's outcome, or — when no rule
81
+ * matches — the policy's `defaultDecision`. Returns `null` to signal "no
82
+ * opinion" (caller should fall back to the hardcoded classifier) when the
83
+ * rules block is undefined or the rules array is empty AND no
84
+ * `defaultDecision` is set.
85
+ *
86
+ * Rules are evaluated in order; the FIRST match wins. ReDoS-suspect
87
+ * patterns and patterns that fail to compile are silently skipped (the
88
+ * Zod schema rejects them at save time, but we re-check at evaluation
89
+ * to stay safe against rules that pre-date the validation).
90
+ *
91
+ * Safety gates (only applied to ALLOW outcomes — BLOCK and
92
+ * REQUIRE_APPROVAL are always honoured as written so admins keep the
93
+ * ability to stop a command unconditionally):
94
+ *
95
+ * 1. **Shell-meta escalation** — if the command contains shell-control
96
+ * chars (`;`, `&&`, `||`, `|`, `` ` ``, `$()`, `>`, `<`) and the
97
+ * matched pattern is a literal prefix (not `/.../`), the rule is
98
+ * escalated to `REQUIRE_APPROVAL`. Keeps `ALLOW: git status` from
99
+ * silently approving `git status; rm -rf /` — the admin almost
100
+ * certainly didn't mean to grant an arbitrary suffix.
101
+ *
102
+ * Admin-class commands (`rm -rf`, `git push`, `kubectl apply`, …) are
103
+ * NOT auto-escalated. If an admin writes `ALLOW: git push *`, the rule
104
+ * fires as written. The policy editor's linter still flags such ALLOWs
105
+ * as a recommendation to double-check, but runtime respects the explicit
106
+ * intent — silent escalation surprised users more than it protected them.
107
+ */
108
+ export declare function evaluateClaudeBashRules(command: string, rules: NonNullable<PolicyRules['claudeBash']> | undefined | null, options?: ClaudeBashEvalOptions): ClaudeBashEvalOutcome | null;
109
+ /**
110
+ * Options for {@link evaluatePolicy}. Kept narrow — most callers pass none.
111
+ */
112
+ export interface EvaluatePolicyOptions {
113
+ /**
114
+ * When true, skip the server-side category floor and use the agent's
115
+ * self-declared `action_type` as-is. Set by the gateway when the agent
116
+ * record has `trust_declared_action_type = true`.
117
+ *
118
+ * DANGER: Only enable for fully trusted agents with a narrow allowed_tools
119
+ * list. A compromised agent with this flag set can downgrade any request
120
+ * (including stripe.charge, admin.delete_user) to `read` and bypass the
121
+ * financial/admin safety rails.
122
+ */
123
+ skipCategoryFloor?: boolean;
124
+ /**
125
+ * When true, signals that the caller has already verified an active
126
+ * `browser_sessions` row matching the request's `session_id`. The blanket
127
+ * "Browser actions require an active session" BLOCK for `browser.*`
128
+ * (non-`browser.open`) is then skipped so the request falls through to
129
+ * per-tool rule matching — allowing admins to BLOCK specific browser tools
130
+ * (e.g. `browser.fill_credentials`) from a policy without those rules being
131
+ * shadowed by the catch-all.
132
+ *
133
+ * Only set this when the session has been validated against the DB by a
134
+ * trusted caller (the gateway), not from unverified client input.
135
+ */
136
+ hasActiveSession?: boolean;
137
+ }
138
+ export declare function evaluatePolicy(action: AgentActionRequest, rules: PolicyRules, options?: EvaluatePolicyOptions): PolicyEvaluationResult;
139
+ export declare function buildActionPreview(action: AgentActionRequest, effectiveActionType?: ActionType): {
5
140
  summary: string;
6
141
  target?: string;
7
142
  impact?: string;
8
143
  cost_estimate?: number;
144
+ declared_action_type?: ActionType;
145
+ effective_action_type?: ActionType;
146
+ command?: string;
147
+ claude_tool?: string;
9
148
  };
149
+ /**
150
+ * Suggest a Claude Code Bash policy pattern from a raw command string. Used
151
+ * by the "Approve and remember" affordance in the approval UI to pre-fill
152
+ * the rule-creation form with a sensible default; admins can edit the
153
+ * suggestion before submitting.
154
+ *
155
+ * Heuristic (in order):
156
+ * - Empty / whitespace-only → empty string (UI handles this).
157
+ * - Quoted segments (`"..."`, `'...'`) are removed before tokenising so
158
+ * `git commit -m "fix bug"` → tokens `[git, commit, -m]`, not five
159
+ * fragmented strings.
160
+ * - Single token → `<token>` (exact match for that bare command).
161
+ * - Two tokens, second is a flag (`-x`, `--long`) → `<first> *`.
162
+ * - Two tokens, second looks like a path (starts with `/`, `.`, `~`, `\\`)
163
+ * → `<first> *`. Pinning the path makes the rule too narrow; dropping
164
+ * it makes nothing match. Falling back to `<first> *` is the safest
165
+ * middle ground; the admin can tighten further if they want.
166
+ * - Two+ tokens, second is non-flag → `<first> <second> *` (typical
167
+ * subcommand form: `git push *`, `kubectl apply *`).
168
+ *
169
+ * The output is always a glob the routing endpoint understands. Admins
170
+ * can switch to a regex via `/.../` if they need finer control.
171
+ */
172
+ export declare function suggestClaudeBashPattern(command: string): string;
173
+ /** Return the vpnCredentialId matching `host`, or `undefined` if no route
174
+ * matches (or `host`/`routes` is missing/empty). */
175
+ export declare function resolveVpnRoute(host: string | undefined | null, routes: PolicyRules['vpnRoutes']): string | undefined;
176
+ /** Parse a URL string and return its hostname in lowercase, or `undefined`
177
+ * if the input isn't a parseable URL. Used by the runner to extract the
178
+ * routing key for http.request / browser.open actions. */
179
+ export declare function hostnameFromUrl(url: string | undefined | null): string | undefined;
10
180
  //# sourceMappingURL=policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAUpB,eAAO,MAAM,oBAAoB,EAAE,WAiBlC,CAAC;AASF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,WAAW,GACjB,sBAAsB,CAsHxB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CA6CA"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EAEtB,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AA+BpB,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAEpE;AAuED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,UAAU,CAqDZ;AAED,eAAO,MAAM,oBAAoB,EAAE,WA2ClC,CAAC;AAqBF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAarD;AAQD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB,0BAAoB,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACtE;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,EAChE,OAAO,GAAE,qBAA0B,GAClC,qBAAqB,GAAG,IAAI,CA6G9B;AA2CD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,qBAA0B,GAClC,sBAAsB,CAmXxB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,mBAAmB,CAAC,EAAE,UAAU,GAC/B;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAClC,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAwIA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBhE;AAqBD;qDACqD;AACrD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC/B,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,MAAM,GAAG,SAAS,CAqBpB;AAED;;2DAE2D;AAC3D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAOlF"}