@lerianstudio/matcher-mcp 5.0.0-beta.65 → 5.0.0-beta.66

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 (177) hide show
  1. package/dist/auth/request-token.js +11 -69
  2. package/dist/auth/request-token.js.map +1 -1
  3. package/dist/config.js +5 -20
  4. package/dist/config.js.map +1 -1
  5. package/dist/copilot/agent.js +5 -9
  6. package/dist/copilot/agent.js.map +1 -1
  7. package/dist/copilot/provider-anthropic.js +2 -16
  8. package/dist/copilot/provider-anthropic.js.map +1 -1
  9. package/dist/copilot/provider-openrouter.js +5 -18
  10. package/dist/copilot/provider-openrouter.js.map +1 -1
  11. package/dist/copilot/provider-shared.js +11 -0
  12. package/dist/copilot/provider-shared.js.map +1 -1
  13. package/dist/copilot/speech-provider.js +84 -0
  14. package/dist/copilot/speech-provider.js.map +1 -0
  15. package/dist/copilot/sse.js +5 -0
  16. package/dist/copilot/sse.js.map +1 -1
  17. package/dist/copilot/test_helpers.js +50 -0
  18. package/dist/copilot/test_helpers.js.map +1 -0
  19. package/dist/copilot/tools.js +14 -65
  20. package/dist/copilot/tools.js.map +1 -1
  21. package/dist/copilot/transcribe-handler.js +8 -93
  22. package/dist/copilot/transcribe-handler.js.map +1 -1
  23. package/dist/copilot/turn-request.js +76 -0
  24. package/dist/copilot/turn-request.js.map +1 -0
  25. package/dist/copilot/turns-handler.js +11 -102
  26. package/dist/copilot/turns-handler.js.map +1 -1
  27. package/dist/observability/otel.js +7 -29
  28. package/dist/observability/otel.js.map +1 -1
  29. package/dist/server.js +12 -81
  30. package/dist/server.js.map +1 -1
  31. package/dist/spec/enum-policy.js +9 -41
  32. package/dist/spec/enum-policy.js.map +1 -1
  33. package/dist/spec/schema-parity.js +4 -18
  34. package/dist/spec/schema-parity.js.map +1 -1
  35. package/dist/tools/context/list.js +7 -34
  36. package/dist/tools/context/list.js.map +1 -1
  37. package/dist/tools/context/shared.js +3 -29
  38. package/dist/tools/context/shared.js.map +1 -1
  39. package/dist/tools/context/update.js +2 -3
  40. package/dist/tools/context/update.js.map +1 -1
  41. package/dist/tools/dashboard/aggregates.js +2 -8
  42. package/dist/tools/dashboard/aggregates.js.map +1 -1
  43. package/dist/tools/dashboard/cash-impact.js +2 -8
  44. package/dist/tools/dashboard/cash-impact.js.map +1 -1
  45. package/dist/tools/dashboard/match-rate.js +2 -8
  46. package/dist/tools/dashboard/match-rate.js.map +1 -1
  47. package/dist/tools/dashboard/metrics.js +2 -8
  48. package/dist/tools/dashboard/metrics.js.map +1 -1
  49. package/dist/tools/dashboard/shared.js +5 -26
  50. package/dist/tools/dashboard/shared.js.map +1 -1
  51. package/dist/tools/dashboard/sla.js +2 -8
  52. package/dist/tools/dashboard/sla.js.map +1 -1
  53. package/dist/tools/dashboard/source-breakdown.js +2 -8
  54. package/dist/tools/dashboard/source-breakdown.js.map +1 -1
  55. package/dist/tools/dashboard/volume.js +2 -8
  56. package/dist/tools/dashboard/volume.js.map +1 -1
  57. package/dist/tools/dispute/close.js +2 -3
  58. package/dist/tools/dispute/close.js.map +1 -1
  59. package/dist/tools/dispute/list.js +16 -46
  60. package/dist/tools/dispute/list.js.map +1 -1
  61. package/dist/tools/dispute/shared.js +3 -29
  62. package/dist/tools/dispute/shared.js.map +1 -1
  63. package/dist/tools/dispute/submit-evidence.js +2 -3
  64. package/dist/tools/dispute/submit-evidence.js.map +1 -1
  65. package/dist/tools/exception/adjust-entry.js +2 -3
  66. package/dist/tools/exception/adjust-entry.js.map +1 -1
  67. package/dist/tools/exception/history.js +6 -23
  68. package/dist/tools/exception/history.js.map +1 -1
  69. package/dist/tools/exception/list.js +9 -53
  70. package/dist/tools/exception/list.js.map +1 -1
  71. package/dist/tools/exception/shared.js +3 -29
  72. package/dist/tools/exception/shared.js.map +1 -1
  73. package/dist/tools/fee-rule/create.js +2 -3
  74. package/dist/tools/fee-rule/create.js.map +1 -1
  75. package/dist/tools/fee-rule/list.js +7 -28
  76. package/dist/tools/fee-rule/list.js.map +1 -1
  77. package/dist/tools/fee-rule/shared.js +3 -29
  78. package/dist/tools/fee-rule/shared.js.map +1 -1
  79. package/dist/tools/fee-rule/update.js +2 -3
  80. package/dist/tools/fee-rule/update.js.map +1 -1
  81. package/dist/tools/fee-schedule/list.js +6 -23
  82. package/dist/tools/fee-schedule/list.js.map +1 -1
  83. package/dist/tools/fee-schedule/shared.js +3 -29
  84. package/dist/tools/fee-schedule/shared.js.map +1 -1
  85. package/dist/tools/fee-schedule/simulate.js +2 -3
  86. package/dist/tools/fee-schedule/simulate.js.map +1 -1
  87. package/dist/tools/fee-schedule/update.js +2 -3
  88. package/dist/tools/fee-schedule/update.js.map +1 -1
  89. package/dist/tools/field-map/get.js +2 -5
  90. package/dist/tools/field-map/get.js.map +1 -1
  91. package/dist/tools/field-map/list.js +7 -28
  92. package/dist/tools/field-map/list.js.map +1 -1
  93. package/dist/tools/field-map/shared.js +3 -29
  94. package/dist/tools/field-map/shared.js.map +1 -1
  95. package/dist/tools/generic/invoke.js +4 -26
  96. package/dist/tools/generic/invoke.js.map +1 -1
  97. package/dist/tools/ingestion/job-errors-list.js +2 -5
  98. package/dist/tools/ingestion/job-errors-list.js.map +1 -1
  99. package/dist/tools/ingestion/job-get.js +2 -5
  100. package/dist/tools/ingestion/job-get.js.map +1 -1
  101. package/dist/tools/ingestion/job-transactions-list.js +8 -39
  102. package/dist/tools/ingestion/job-transactions-list.js.map +1 -1
  103. package/dist/tools/ingestion/jobs-list.js +7 -34
  104. package/dist/tools/ingestion/jobs-list.js.map +1 -1
  105. package/dist/tools/ingestion/shared.js +3 -29
  106. package/dist/tools/ingestion/shared.js.map +1 -1
  107. package/dist/tools/ingestion/transaction-ignore.js +2 -5
  108. package/dist/tools/ingestion/transaction-ignore.js.map +1 -1
  109. package/dist/tools/ingestion/transactions-search.js +7 -43
  110. package/dist/tools/ingestion/transactions-search.js.map +1 -1
  111. package/dist/tools/input-fields.js +36 -0
  112. package/dist/tools/input-fields.js.map +1 -0
  113. package/dist/tools/match-rule/delete.js +2 -4
  114. package/dist/tools/match-rule/delete.js.map +1 -1
  115. package/dist/tools/match-rule/get.js +2 -4
  116. package/dist/tools/match-rule/get.js.map +1 -1
  117. package/dist/tools/match-rule/list.js +7 -31
  118. package/dist/tools/match-rule/list.js.map +1 -1
  119. package/dist/tools/match-rule/shared.js +3 -29
  120. package/dist/tools/match-rule/shared.js.map +1 -1
  121. package/dist/tools/match-rule/update.js +4 -8
  122. package/dist/tools/match-rule/update.js.map +1 -1
  123. package/dist/tools/matching/groups.js +3 -12
  124. package/dist/tools/matching/groups.js.map +1 -1
  125. package/dist/tools/matching/list.js +7 -31
  126. package/dist/tools/matching/list.js.map +1 -1
  127. package/dist/tools/matching/shared.js +3 -31
  128. package/dist/tools/matching/shared.js.map +1 -1
  129. package/dist/tools/query-handler.js +8 -0
  130. package/dist/tools/query-handler.js.map +1 -0
  131. package/dist/tools/report/count-exceptions.js +2 -8
  132. package/dist/tools/report/count-exceptions.js.map +1 -1
  133. package/dist/tools/report/count-matched.js +2 -8
  134. package/dist/tools/report/count-matched.js.map +1 -1
  135. package/dist/tools/report/count-transactions.js +2 -8
  136. package/dist/tools/report/count-transactions.js.map +1 -1
  137. package/dist/tools/report/count-unmatched.js +2 -8
  138. package/dist/tools/report/count-unmatched.js.map +1 -1
  139. package/dist/tools/report/export-exceptions.js +2 -8
  140. package/dist/tools/report/export-exceptions.js.map +1 -1
  141. package/dist/tools/report/export-matched.js +2 -8
  142. package/dist/tools/report/export-matched.js.map +1 -1
  143. package/dist/tools/report/export-summary.js +2 -8
  144. package/dist/tools/report/export-summary.js.map +1 -1
  145. package/dist/tools/report/export-unmatched.js +2 -8
  146. package/dist/tools/report/export-unmatched.js.map +1 -1
  147. package/dist/tools/report/export-variance.js +2 -8
  148. package/dist/tools/report/export-variance.js.map +1 -1
  149. package/dist/tools/report/matched.js +2 -8
  150. package/dist/tools/report/matched.js.map +1 -1
  151. package/dist/tools/report/shared.js +9 -55
  152. package/dist/tools/report/shared.js.map +1 -1
  153. package/dist/tools/report/summary.js +2 -8
  154. package/dist/tools/report/summary.js.map +1 -1
  155. package/dist/tools/report/unmatched.js +2 -8
  156. package/dist/tools/report/unmatched.js.map +1 -1
  157. package/dist/tools/report/variance.js +2 -8
  158. package/dist/tools/report/variance.js.map +1 -1
  159. package/dist/tools/request-fields.js +17 -0
  160. package/dist/tools/request-fields.js.map +1 -0
  161. package/dist/tools/shared-dispatch.js +38 -0
  162. package/dist/tools/shared-dispatch.js.map +1 -0
  163. package/dist/tools/source/archive.js +2 -5
  164. package/dist/tools/source/archive.js.map +1 -1
  165. package/dist/tools/source/create.js +2 -3
  166. package/dist/tools/source/create.js.map +1 -1
  167. package/dist/tools/source/get.js +2 -5
  168. package/dist/tools/source/get.js.map +1 -1
  169. package/dist/tools/source/list.js +7 -31
  170. package/dist/tools/source/list.js.map +1 -1
  171. package/dist/tools/source/restore.js +2 -5
  172. package/dist/tools/source/restore.js.map +1 -1
  173. package/dist/tools/source/shared.js +3 -29
  174. package/dist/tools/source/shared.js.map +1 -1
  175. package/dist/tools/source/update.js +4 -9
  176. package/dist/tools/source/update.js.map +1 -1
  177. package/package.json +1 -1
@@ -1,27 +1,9 @@
1
- // The tool surface over the matcher operation index, in THREE categories.
2
- //
3
- // 1. READS — one def per GET operation (`buildReadToolDefs`). The GET filter IS
4
- // the read gate: a mutation can never enter that list.
5
- // 2. WRITES — one def per `WRITE_ALLOWLIST` member (`buildWriteToolDefs`). The
6
- // agent loop PROPOSES these and ends the turn; a human confirms.
7
- // 3. ADVISORY — one def per `ADVISORY_ALLOWLIST` member
8
- // (`buildAdvisoryToolDefs`). POST-shaped operations that COMPUTE an answer and
9
- // persist nothing, so they execute INLINE like a read: no proposal, no turn
10
- // end. A confirmation click on "show me what this fee would compute" is
11
- // friction with no safety value.
12
- //
13
- // The advisory list is enumerated BY HAND and never derived from a spec heuristic
14
- // — "the summary says simulate" is not a safety property. Its whole risk is that a
15
- // member which actually writes would write with NO human in the loop, so the
16
- // widening ships with a behavioural guard rather than a textual one:
17
- // `tests/integration/server/copilot_advisory_no_write_test.go` reads this list,
18
- // invokes every member against a live matcher, and fails if any row count in the
19
- // database moved. A positive control in the same test writes on purpose, so a
20
- // broken snapshot cannot pass the guard vacuously.
21
- //
22
- // The index is parsed once and memoized (`getIndex`), mirroring server.ts's
23
- // boot-index memo so the tool-list builder and the executor share one parse and
24
- // importing this module never touches the filesystem.
1
+ // Copilot tools: GET reads execute inline; allowlisted writes become proposals
2
+ // requiring human confirmation; explicitly allowlisted non-persistent POSTs run
3
+ // inline as advisory tools. Never infer advisory safety from spec descriptions.
4
+ // tests/integration/server/copilot_advisory_no_write_test.go verifies every
5
+ // advisory operation leaves database row counts unchanged, with a writing control.
6
+ // The immutable operation index is loaded lazily and shared by builders/executors.
25
7
  import { requireMatcherClient } from '../auth/request-token.js';
26
8
  import { loadSpec } from '../spec/load.js';
27
9
  import { InvokeError, Invoker } from '../tools/generic/invoke.js';
@@ -36,11 +18,8 @@ export function getIndex() {
36
18
  return indexCache;
37
19
  }
38
20
  /**
39
- * The read + write + advisory tool-def lists derived from an operation index,
40
- * memoized by the index's IDENTITY. `getIndex()` returns one stable object, so the
41
- * production path is built once; an injected index (tests) is memoized under its
42
- * own identity, so it never returns another index's stale lists. The def-array
43
- * synthesis is pure over the immutable index, so caching it is sound.
21
+ * Cache pure tool definitions by immutable index identity, never across distinct
22
+ * injected indexes. The production index is stable for the process lifetime.
44
23
  */
45
24
  const toolDefsCache = new WeakMap();
46
25
  export function getToolDefs(index) {
@@ -56,20 +35,9 @@ export function getToolDefs(index) {
56
35
  return cached;
57
36
  }
58
37
  /**
59
- * The config write surface the copilot may PROPOSE (never execute). Every entry
60
- * is a non-GET operation over one of the seven configuration resource families —
61
- * match rules, reconciliation contexts, fee schedules, fee rules, sources, field
62
- * maps, and source bindings — across the create/update/delete/archive/restore/
63
- * reorder/clone verbs the spec declares. This set is the write-barrier's positive
64
- * gate: an operationId absent from it produces NO write tool def
65
- * (`buildWriteToolDefs`) and the agent loop never routes a call to the proposal
66
- * path — structurally unproposable, mirroring how a non-GET op is unreadable.
67
- * Exception, match-run, ingestion, discovery, governance and scheduling
68
- * mutations are deliberately excluded. The simulate/preview POST-shaped "reads"
69
- * are excluded from THIS list for the opposite reason — they mutate nothing, so
70
- * there is nothing to confirm; two of them (`proposeMapping`,
71
- * `simulateFeeSchedule`) are advertised and executed inline through
72
- * `ADVISORY_ALLOWLIST` below, and the rest are advertised nowhere.
38
+ * Configuration writes the agent may PROPOSE, never execute. Membership gates
39
+ * both advertised write tools and proposal routing. Other mutation families are
40
+ * excluded; non-persistent advisory operations have their own disjoint allowlist.
73
41
  */
74
42
  export const WRITE_ALLOWLIST = new Set([
75
43
  // match rules
@@ -106,28 +74,9 @@ export const WRITE_ALLOWLIST = new Set([
106
74
  'deleteSourceBinding',
107
75
  ]);
108
76
  /**
109
- * The advisory surface the copilot may EXECUTE inline: POST-shaped operations
110
- * verified to persist nothing. Both derive an answer the operator would otherwise
111
- * have to guess:
112
- *
113
- * - `proposeMapping` — the deterministic column-mapping engine. Refusing it does
114
- * not remove the mapping decision, it moves it from an engine in production to
115
- * a language model's reading of a pasted header, at the exact step where being
116
- * wrong means reconciling the wrong column against money.
117
- * - `simulateFeeSchedule` — computes a fee breakdown for a gross amount.
118
- *
119
- * MEMBERSHIP IS THE WHOLE RISK: an advisory member bypasses the proposal barrier,
120
- * so a member that writes would write with no confirmation. Two rules follow, and
121
- * both are asserted rather than documented — see this module's header for the
122
- * behavioural database guard, and `tools.test.ts` for the disjointness assertion
123
- * against `WRITE_ALLOWLIST`. Gate ORDERING in `runAgentTurn` is load-bearing:
124
- * `WRITE_ALLOWLIST` is consulted first, so an id on both lists would take the
125
- * proposal path and stop the turn — failing toward the human gate, but silently
126
- * breaking this list's execute-inline contract. The disjointness assertion is
127
- * what keeps that state unrepresentable rather than order-dependent.
128
- *
129
- * `suggestMatchRules` is NOT here and must not be: it persists a PENDING_REVIEW
130
- * row, so it is a write. Advisory means genuinely non-persistent, not "low stakes".
77
+ * Inline advisory POSTs must persist nothing and remain disjoint from writes
78
+ * (tools.test.ts). The write gate runs first as a fail-safe, not a substitute for
79
+ * disjointness. `suggestMatchRules` persists PENDING_REVIEW and is not advisory.
131
80
  */
132
81
  export const ADVISORY_ALLOWLIST = new Set([
133
82
  'proposeMapping',
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/copilot/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/copilot/tools.ts"],"names":[],"mappings":"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"}
@@ -27,90 +27,10 @@
27
27
  import { getRequestTenantId, requireMatcherClient, UnauthenticatedError, } from '../auth/request-token.js';
28
28
  import { BodyTooLargeError, readBodyBytes } from '../transport/body-limit.js';
29
29
  import { RateLimiter } from './rate-limit.js';
30
+ import { createHttpTranscriber, describeSpeechCapability, SpeechUnconfiguredError, TranscriptionProviderError, } from './speech-provider.js';
30
31
  import { probeMatcherAuth } from './turns-handler.js';
31
- /** Thrown by the default transcriber when the endpoint answers badly. Carries a
32
- * status only — never any part of the request or the response body. */
33
- export class TranscriptionProviderError extends Error {
34
- status;
35
- constructor(status) {
36
- super(status === undefined
37
- ? 'the transcription endpoint could not be reached'
38
- : `the transcription endpoint answered ${status}`);
39
- this.name = 'TranscriptionProviderError';
40
- this.status = status;
41
- }
42
- }
43
- /** Raised when no transcription capability is configured on this deployment. */
44
- export class SpeechUnconfiguredError extends Error {
45
- constructor() {
46
- super('no transcription capability is configured on this server');
47
- this.name = 'SpeechUnconfiguredError';
48
- }
49
- }
50
- /** Describe the capability for the console's pre-flight probe. */
51
- export function describeSpeechCapability(config) {
52
- return {
53
- available: config.speechTranscriptionEndpoint !== undefined,
54
- region: config.speechTranscriptionRegion,
55
- };
56
- }
57
- /**
58
- * The default transcriber: POST the raw bytes to the configured in-region
59
- * endpoint with the region and locale as query parameters, and read back
60
- * `{ "text": "…" }`. Deliberately generic — no vendor SDK, no vendor name. A
61
- * concrete adapter replaces this behind the same seam once a provider is chosen.
62
- */
63
- export function createHttpTranscriber(config) {
64
- const endpoint = config.speechTranscriptionEndpoint;
65
- if (endpoint === undefined) {
66
- throw new SpeechUnconfiguredError();
67
- }
68
- return {
69
- async transcribe(audio, request) {
70
- const url = new URL(endpoint);
71
- url.searchParams.set('region', request.region);
72
- if (request.locale !== undefined) {
73
- url.searchParams.set('locale', request.locale);
74
- }
75
- const headers = { 'Content-Type': request.contentType };
76
- if (config.speechTranscriptionApiKey !== undefined) {
77
- headers.Authorization = `Bearer ${config.speechTranscriptionApiKey}`;
78
- }
79
- let response;
80
- try {
81
- // Bounded like every other outbound call this server makes: a hung
82
- // provider must not pin the request — and the audio buffer with it —
83
- // open indefinitely. The abort surfaces as the same generic provider
84
- // error, so no transport detail reaches the caller.
85
- response = await fetch(url, {
86
- method: 'POST',
87
- headers,
88
- body: audio,
89
- signal: AbortSignal.timeout(config.timeoutMs),
90
- // The configured endpoint is validated HTTPS-only, but a redirect is a
91
- // second destination that validation never saw: a 307/308 would forward
92
- // the recording — and the bearer key — wherever the provider points.
93
- // Refuse redirects outright; the failure surfaces as the same generic
94
- // provider error every other transport fault maps to.
95
- redirect: 'error',
96
- });
97
- }
98
- catch {
99
- // The transport error is swallowed on purpose: an undici/agent error can
100
- // carry the request (headers, body) in its cause chain.
101
- throw new TranscriptionProviderError();
102
- }
103
- if (!response.ok) {
104
- throw new TranscriptionProviderError(response.status);
105
- }
106
- const payload = (await response.json());
107
- if (typeof payload.text !== 'string') {
108
- throw new TranscriptionProviderError(response.status);
109
- }
110
- return payload.text;
111
- },
112
- };
113
- }
32
+ // Preserve the module's existing public imports while separating HTTP concerns.
33
+ export * from './speech-provider.js';
114
34
  /**
115
35
  * Per-tenant bound on transcription requests, sharing the copilot's configured
116
36
  * rate. Each call spends money at an external provider, so an authenticated but
@@ -200,13 +120,11 @@ export async function handleTranscribe(config, req, res, deps = {}) {
200
120
  }
201
121
  const contentType = (req.headers['content-type'] ?? '').toLowerCase();
202
122
  if (!contentType.startsWith('audio/')) {
203
- fail(res, 415, 'unsupported_media_type', 'content-type must be an audio media type');
204
- return;
123
+ return fail(res, 415, 'unsupported_media_type', 'content-type must be an audio media type');
205
124
  }
206
125
  const decision = (deps.rateLimiter ?? transcribeRateLimiter).check(getRequestTenantId() ?? RATE_LIMIT_ANON_KEY, config.copilotRateLimitPerMin, config.copilotRateLimitBurst);
207
126
  if (!decision.allowed) {
208
- fail(res, 429, 'rate_limited', `too many transcription requests; retry in ${decision.retryAfterSeconds}s`);
209
- return;
127
+ return fail(res, 429, 'rate_limited', `too many transcription requests; retry in ${decision.retryAfterSeconds}s`);
210
128
  }
211
129
  let transcriber;
212
130
  try {
@@ -214,8 +132,7 @@ export async function handleTranscribe(config, req, res, deps = {}) {
214
132
  }
215
133
  catch (err) {
216
134
  if (err instanceof SpeechUnconfiguredError) {
217
- fail(res, 503, 'speech_unconfigured', 'voice input is not available on this deployment');
218
- return;
135
+ return fail(res, 503, 'speech_unconfigured', 'voice input is not available on this deployment');
219
136
  }
220
137
  throw err;
221
138
  }
@@ -227,14 +144,12 @@ export async function handleTranscribe(config, req, res, deps = {}) {
227
144
  if (err instanceof BodyTooLargeError) {
228
145
  // The guard rejects before the over-limit chunk is retained, so the
229
146
  // partial recording is already gone; the message carries byte counts only.
230
- fail(res, 413, 'payload_too_large', 'the utterance is too long');
231
- return;
147
+ return fail(res, 413, 'payload_too_large', 'the utterance is too long');
232
148
  }
233
149
  throw err;
234
150
  }
235
151
  if (audio.length === 0) {
236
- fail(res, 400, 'bad_request', 'the request carried no audio');
237
- return;
152
+ return fail(res, 400, 'bad_request', 'the request carried no audio');
238
153
  }
239
154
  const locale = req.headers['x-locale'];
240
155
  const text = await transcriber.transcribe(audio, {
@@ -1 +1 @@
1
- {"version":3,"file":"transcribe-handler.js","sourceRoot":"","sources":["../../src/copilot/transcribe-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcribe-handler.js","sourceRoot":"","sources":["../../src/copilot/transcribe-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The messages the agent loop receives. Browser-supplied `screenContext` is
3
+ * injected as a synthetic FIRST user message — the SAME (untrusted) trust tier as
4
+ * the operator's own input — rather than folded into the system prompt, so a
5
+ * crafted route/summary can never reach the higher-trust system tier. The label
6
+ * is a plain statement of fact, not an instruction.
7
+ */
8
+ export function buildTurnMessages(request) {
9
+ const { screenContext } = request;
10
+ if (screenContext === undefined) {
11
+ return request.messages;
12
+ }
13
+ const parts = [`route ${screenContext.route}`];
14
+ if (screenContext.contextId !== undefined) {
15
+ parts.push(`reconciliation context ${screenContext.contextId}`);
16
+ }
17
+ if (screenContext.summary !== undefined) {
18
+ parts.push(screenContext.summary);
19
+ }
20
+ return [
21
+ {
22
+ role: 'user',
23
+ content: `[screen context] The operator is currently viewing: ${parts.join(' — ')}.`,
24
+ },
25
+ ...request.messages,
26
+ ];
27
+ }
28
+ /**
29
+ * Validate an unknown parsed body as an `AgentTurnRequest`. Returns the typed
30
+ * request on success, or `undefined` when the shape is wrong (non-empty
31
+ * `messages` of `{role,content}` with role in {user,assistant}). A malformed
32
+ * `screenContext` is dropped rather than rejecting the turn.
33
+ */
34
+ export function parseAgentTurnRequest(body) {
35
+ if (typeof body !== 'object' || body === null) {
36
+ return undefined;
37
+ }
38
+ const record = body;
39
+ const { messages } = record;
40
+ if (!Array.isArray(messages) || messages.length === 0) {
41
+ return undefined;
42
+ }
43
+ for (const message of messages) {
44
+ if (typeof message !== 'object' || message === null) {
45
+ return undefined;
46
+ }
47
+ const { role, content } = message;
48
+ if (role !== 'user' && role !== 'assistant') {
49
+ return undefined;
50
+ }
51
+ if (typeof content !== 'string') {
52
+ return undefined;
53
+ }
54
+ }
55
+ const screenContext = parseScreenContext(record.screenContext);
56
+ return {
57
+ messages: messages,
58
+ ...(screenContext !== undefined ? { screenContext } : {}),
59
+ };
60
+ }
61
+ /** Parse an optional `screenContext`; drops it unless it carries a string `route`. */
62
+ function parseScreenContext(raw) {
63
+ if (typeof raw !== 'object' || raw === null) {
64
+ return undefined;
65
+ }
66
+ const record = raw;
67
+ if (typeof record.route !== 'string') {
68
+ return undefined;
69
+ }
70
+ return {
71
+ route: record.route,
72
+ ...(typeof record.contextId === 'string' ? { contextId: record.contextId } : {}),
73
+ ...(typeof record.summary === 'string' ? { summary: record.summary } : {}),
74
+ };
75
+ }
76
+ //# sourceMappingURL=turn-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-request.js","sourceRoot":"","sources":["../../src/copilot/turn-request.ts"],"names":[],"mappings":"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"}
@@ -22,10 +22,11 @@ import { BodyTooLargeError, readBody } from '../transport/body-limit.js';
22
22
  import { runAgentTurn } from './agent.js';
23
23
  import { CopilotUnconfiguredError, getProvider } from './provider-factory.js';
24
24
  import { RateLimiter } from './rate-limit.js';
25
- import { createSseSink } from './sse.js';
25
+ import { createSseSink, finishWithError } from './sse.js';
26
26
  import { buildSystemPrompt } from './system-prompt.js';
27
27
  import { resolveCopilotConfig } from './tenant-config.js';
28
28
  import { getIndex, getToolDefs } from './tools.js';
29
+ import { buildTurnMessages, parseAgentTurnRequest } from './turn-request.js';
29
30
  /**
30
31
  * Process-lifetime rate limiter shared across turns. Buckets are keyed on the
31
32
  * key-only tenant id; a turn with no decodable tenant shares one bucket under
@@ -110,81 +111,6 @@ export async function probeMatcherAuth(client) {
110
111
  }
111
112
  return true;
112
113
  }
113
- /**
114
- * The messages the agent loop receives. Browser-supplied `screenContext` is
115
- * injected as a synthetic FIRST user message — the SAME (untrusted) trust tier as
116
- * the operator's own input — rather than folded into the system prompt, so a
117
- * crafted route/summary can never reach the higher-trust system tier. The label
118
- * is a plain statement of fact, not an instruction.
119
- */
120
- function buildTurnMessages(request) {
121
- const { screenContext } = request;
122
- if (screenContext === undefined) {
123
- return request.messages;
124
- }
125
- const parts = [`route ${screenContext.route}`];
126
- if (screenContext.contextId !== undefined) {
127
- parts.push(`reconciliation context ${screenContext.contextId}`);
128
- }
129
- if (screenContext.summary !== undefined) {
130
- parts.push(screenContext.summary);
131
- }
132
- return [
133
- {
134
- role: 'user',
135
- content: `[screen context] The operator is currently viewing: ${parts.join(' — ')}.`,
136
- },
137
- ...request.messages,
138
- ];
139
- }
140
- /**
141
- * Validate an unknown parsed body as an `AgentTurnRequest`. Returns the typed
142
- * request on success, or `undefined` when the shape is wrong (non-empty
143
- * `messages` of `{role,content}` with role in {user,assistant}). A malformed
144
- * `screenContext` is dropped rather than rejecting the turn.
145
- */
146
- function parseAgentTurnRequest(body) {
147
- if (typeof body !== 'object' || body === null) {
148
- return undefined;
149
- }
150
- const record = body;
151
- const { messages } = record;
152
- if (!Array.isArray(messages) || messages.length === 0) {
153
- return undefined;
154
- }
155
- for (const message of messages) {
156
- if (typeof message !== 'object' || message === null) {
157
- return undefined;
158
- }
159
- const { role, content } = message;
160
- if (role !== 'user' && role !== 'assistant') {
161
- return undefined;
162
- }
163
- if (typeof content !== 'string') {
164
- return undefined;
165
- }
166
- }
167
- const screenContext = parseScreenContext(record.screenContext);
168
- return {
169
- messages: messages,
170
- ...(screenContext !== undefined ? { screenContext } : {}),
171
- };
172
- }
173
- /** Parse an optional `screenContext`; drops it unless it carries a string `route`. */
174
- function parseScreenContext(raw) {
175
- if (typeof raw !== 'object' || raw === null) {
176
- return undefined;
177
- }
178
- const record = raw;
179
- if (typeof record.route !== 'string') {
180
- return undefined;
181
- }
182
- return {
183
- route: record.route,
184
- ...(typeof record.contextId === 'string' ? { contextId: record.contextId } : {}),
185
- ...(typeof record.summary === 'string' ? { summary: record.summary } : {}),
186
- };
187
- }
188
114
  /**
189
115
  * Handle one `POST /agent/turns` request, streaming the turn over SSE. Resolves
190
116
  * once the turn is fully written (a terminal `done` has been emitted). Does not
@@ -206,17 +132,13 @@ export async function handleAgentTurn(config, req, res, deps = {}) {
206
132
  }
207
133
  catch (err) {
208
134
  if (err instanceof UnauthenticatedError) {
209
- sink.error('unauthenticated', err.message);
210
- sink.done('end');
211
- return;
135
+ return finishWithError(sink, 'unauthenticated', err.message);
212
136
  }
213
137
  throw err;
214
138
  }
215
139
  const contentType = (req.headers['content-type'] ?? '').toLowerCase();
216
140
  if (!contentType.includes('application/json')) {
217
- sink.error('bad_request', 'content-type must be application/json');
218
- sink.done('end');
219
- return;
141
+ return finishWithError(sink, 'bad_request', 'content-type must be application/json');
220
142
  }
221
143
  let body;
222
144
  try {
@@ -225,20 +147,14 @@ export async function handleAgentTurn(config, req, res, deps = {}) {
225
147
  }
226
148
  catch (err) {
227
149
  if (err instanceof BodyTooLargeError) {
228
- sink.error('payload_too_large', 'request body is too large');
229
- sink.done('end');
230
- return;
150
+ return finishWithError(sink, 'payload_too_large', 'request body is too large');
231
151
  }
232
152
  // JSON parse failure or a read error — a client fault, no internal detail.
233
- sink.error('bad_request', 'request body is not valid JSON');
234
- sink.done('end');
235
- return;
153
+ return finishWithError(sink, 'bad_request', 'request body is not valid JSON');
236
154
  }
237
155
  const request = parseAgentTurnRequest(body);
238
156
  if (request === undefined) {
239
- sink.error('bad_request', 'messages must be a non-empty array of {role,content}, role one of user|assistant');
240
- sink.done('end');
241
- return;
157
+ return finishWithError(sink, 'bad_request', 'messages must be a non-empty array of {role,content}, role one of user|assistant');
242
158
  }
243
159
  // Probe matcher's `Authorize` with the relayed token BEFORE any tenant-derived
244
160
  // work AND before constructing the paid provider (M1): a JWT-shaped-but-
@@ -249,9 +165,7 @@ export async function handleAgentTurn(config, req, res, deps = {}) {
249
165
  // `requireMatcherClient`. A fresh cached verdict (keyed by token hash) skips the
250
166
  // probe entirely.
251
167
  if (!(await probeMatcherAuth(matcherClient))) {
252
- sink.error('unauthenticated', PROBE_REJECTED_REMEDIATION);
253
- sink.done('end');
254
- return;
168
+ return finishWithError(sink, 'unauthenticated', PROBE_REJECTED_REMEDIATION);
255
169
  }
256
170
  // Resolve the per-tenant config slice from the key-only tenant id decoded off
257
171
  // the relayed JWT (getRequestTenantId). The token is already matcher-verified by
@@ -270,9 +184,7 @@ export async function handleAgentTurn(config, req, res, deps = {}) {
270
184
  // forged token is rejected as `unauthenticated` before it can touch a bucket.
271
185
  const decision = (deps.rateLimiter ?? turnRateLimiter).check(tenantId ?? RATE_LIMIT_ANON_KEY, resolvedConfig.copilotRateLimitPerMin, resolvedConfig.copilotRateLimitBurst);
272
186
  if (!decision.allowed) {
273
- sink.error('rate_limited', `too many copilot requests; retry in ${decision.retryAfterSeconds}s`);
274
- sink.done('end');
275
- return;
187
+ return finishWithError(sink, 'rate_limited', `too many copilot requests; retry in ${decision.retryAfterSeconds}s`);
276
188
  }
277
189
  let provider;
278
190
  try {
@@ -280,9 +192,7 @@ export async function handleAgentTurn(config, req, res, deps = {}) {
280
192
  }
281
193
  catch (err) {
282
194
  if (err instanceof CopilotUnconfiguredError) {
283
- sink.error('copilot_unconfigured', 'the copilot is not configured on this server');
284
- sink.done('end');
285
- return;
195
+ return finishWithError(sink, 'copilot_unconfigured', 'the copilot is not configured on this server');
286
196
  }
287
197
  throw err;
288
198
  }
@@ -313,8 +223,7 @@ export async function handleAgentTurn(config, req, res, deps = {}) {
313
223
  }
314
224
  catch (err) {
315
225
  // Last-resort guard: a single safe SSE error + done, never a token or stack.
316
- sink.error('internal', 'the copilot encountered an internal error');
317
- sink.done('end');
226
+ finishWithError(sink, 'internal', 'the copilot encountered an internal error');
318
227
  // Log only the message string, never the raw error object — a provider-SDK
319
228
  // error can carry request context (headers, config) we must not log wholesale.
320
229
  console.error('matcher-mcp agent turn failed:', err instanceof Error ? err.message : String(err));
@@ -1 +1 @@
1
- {"version":3,"file":"turns-handler.js","sourceRoot":"","sources":["../../src/copilot/turns-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turns-handler.js","sourceRoot":"","sources":["../../src/copilot/turns-handler.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,iFAAiF;AACjF,kBAAkB;AAClB,iFAAiF;AACjF,kFAAkF;AAClF,mFAAmF;AACnF,EAAE;AACF,8EAA8E;AAC9E,kFAAkF;AAClF,iFAAiF;AACjF,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,eAAe,EAA2C,MAAM,sBAAsB,CAAA;AAE/F,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAI5E;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,IAAI,WAAW,EAAE,CAAA;AAEzC,mFAAmF;AACnF,MAAM,mBAAmB,GAAG,eAAe,CAAA;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG,KAAK,CAAA;AAChC,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAA;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;AAErD;;;;;GAKG;AACH,MAAM,kBAAkB,GAAmB;IACzC,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;CACpB,CAAA;AAED,mFAAmF;AACnF,MAAM,0BAA0B,GAC9B,8EAA8E;IAC9E,iFAAiF;IACjF,kBAAkB,CAAA;AAEpB;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAqB;IAC1D,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAA;IACrC,MAAM,QAAQ,GACZ,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAClD,CAAC,CAAC,SAAS,CAAA;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;QACtE,OAAO,IAAI,CAAA,CAAC,+CAA+C;IAC7D,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IACE,GAAG,YAAY,eAAe;YAC9B,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAC1C,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,gFAAgF;QAChF,gFAAgF;QAChF,sEAAsE;QACtE,IAAI,YAAY,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;YACjD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;gBACzC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;oBAClB,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,kBAAkB,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,GAAoB,EACpB,GAAmB,EACnB,OAA4B,EAAE;IAE9B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,CAAC;QACH,0EAA0E;QAC1E,0EAA0E;QAC1E,4EAA4E;QAC5E,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,aAA4B,CAAA;QAChC,IAAI,CAAC;YACH,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa;gBACjC,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;gBACxC,OAAO,eAAe,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YAC9D,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QACrE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9C,OAAO,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,uCAAuC,CAAC,CAAA;QACtF,CAAC;QAED,IAAI,IAAa,CAAA;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YACpD,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;gBACrC,OAAO,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAA;YAChF,CAAC;YACD,2EAA2E;YAC3E,OAAO,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,gCAAgC,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,eAAe,CACpB,IAAI,EACJ,aAAa,EACb,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,+EAA+E;QAC/E,yEAAyE;QACzE,8EAA8E;QAC9E,+EAA+E;QAC/E,iFAAiF;QACjF,iEAAiE;QACjE,iFAAiF;QACjF,kBAAkB;QAClB,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,eAAe,CAAC,IAAI,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,CAAA;QAC7E,CAAC;QAED,8EAA8E;QAC9E,iFAAiF;QACjF,6EAA6E;QAC7E,yEAAyE;QACzE,+EAA+E;QAC/E,8EAA8E;QAC9E,gFAAgF;QAChF,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAA;QACrC,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAE7D,iFAAiF;QACjF,+EAA+E;QAC/E,yEAAyE;QACzE,+EAA+E;QAC/E,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,CAAC,KAAK,CAC1D,QAAQ,IAAI,mBAAmB,EAC/B,cAAc,CAAC,sBAAsB,EACrC,cAAc,CAAC,qBAAqB,CACrC,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,eAAe,CACpB,IAAI,EACJ,cAAc,EACd,uCAAuC,QAAQ,CAAC,iBAAiB,GAAG,CACrE,CAAA;QACH,CAAC;QAED,IAAI,QAAqB,CAAA;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,WAAW,CAAC,CAAC,cAAc,CAAC,CAAA;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;gBAC5C,OAAO,eAAe,CAAC,IAAI,EAAE,sBAAsB,EAAE,8CAA8C,CAAC,CAAA;YACtG,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAA;QACtC,6EAA6E;QAC7E,wEAAwE;QACxE,6EAA6E;QAC7E,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,CAAC;YACnC,QAAQ;YACR,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;YACvC,KAAK;YACL,MAAM,EAAE,iBAAiB,EAAE;YAC3B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC;YACpC,IAAI;YACJ,aAAa,EAAE,cAAc,CAAC,wBAAwB;YACtD,aAAa,EAAE,cAAc,CAAC,oBAAoB;YAClD,6EAA6E;YAC7E,yEAAyE;YACzE,YAAY,EAAE,cAAc,CAAC,eAAe;YAC5C,GAAG,CAAC,cAAc,CAAC,YAAY,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,YAAY,EAAE;gBACxC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6EAA6E;QAC7E,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,2CAA2C,CAAC,CAAA;QAC9E,2EAA2E;QAC3E,+EAA+E;QAC/E,OAAO,CAAC,KAAK,CACX,gCAAgC,EAChC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAA;IACH,CAAC;AACH,CAAC"}