@lerianstudio/matcher-mcp 1.3.0 → 1.4.0-beta.2

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 (45) hide show
  1. package/README.md +26 -0
  2. package/dist/auth/request-token.js +50 -2
  3. package/dist/auth/request-token.js.map +1 -1
  4. package/dist/config.js +61 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/copilot/agent.js +181 -0
  7. package/dist/copilot/agent.js.map +1 -0
  8. package/dist/copilot/provider-anthropic.js +151 -0
  9. package/dist/copilot/provider-anthropic.js.map +1 -0
  10. package/dist/copilot/provider-factory.js +46 -0
  11. package/dist/copilot/provider-factory.js.map +1 -0
  12. package/dist/copilot/provider-openrouter.js +154 -0
  13. package/dist/copilot/provider-openrouter.js.map +1 -0
  14. package/dist/copilot/provider-shared.js +23 -0
  15. package/dist/copilot/provider-shared.js.map +1 -0
  16. package/dist/copilot/provider.js +15 -0
  17. package/dist/copilot/provider.js.map +1 -0
  18. package/dist/copilot/rate-limit.js +77 -0
  19. package/dist/copilot/rate-limit.js.map +1 -0
  20. package/dist/copilot/sse.js +69 -0
  21. package/dist/copilot/sse.js.map +1 -0
  22. package/dist/copilot/system-prompt.js +113 -0
  23. package/dist/copilot/system-prompt.js.map +1 -0
  24. package/dist/copilot/tenant-config.js +145 -0
  25. package/dist/copilot/tenant-config.js.map +1 -0
  26. package/dist/copilot/tools.js +241 -0
  27. package/dist/copilot/tools.js.map +1 -0
  28. package/dist/copilot/turns-handler.js +322 -0
  29. package/dist/copilot/turns-handler.js.map +1 -0
  30. package/dist/observability/otel.js +184 -2
  31. package/dist/observability/otel.js.map +1 -1
  32. package/dist/spec/openapi.yaml +82 -1
  33. package/dist/tools/context/create.js +3 -1
  34. package/dist/tools/context/create.js.map +1 -1
  35. package/dist/tools/context/index.js +3 -1
  36. package/dist/tools/context/index.js.map +1 -1
  37. package/dist/tools/context/next-step.js +93 -0
  38. package/dist/tools/context/next-step.js.map +1 -0
  39. package/dist/tools/source/create.js +3 -1
  40. package/dist/tools/source/create.js.map +1 -1
  41. package/dist/transport/body-limit.js +27 -0
  42. package/dist/transport/body-limit.js.map +1 -1
  43. package/dist/transport/http.js +35 -25
  44. package/dist/transport/http.js.map +1 -1
  45. package/package.json +3 -1
@@ -19,8 +19,14 @@
19
19
  // Token-relay rule (NON-NEGOTIABLE): telemetry records ONLY the tool name, the
20
20
  // call outcome (ok / error), and — on a matcher API failure — the matcher HTTP
21
21
  // status. It NEVER records the caller's bearer token, raw arguments, or request
22
- // headers, in any span attribute, metric attribute, event, or log. No tenant
23
- // identifier is read or emitted anywhere.
22
+ // headers, in any span attribute, metric attribute, event, or log.
23
+ //
24
+ // Tenant labelling (copilot loop, task 4.2.1): the copilot span tree MAY carry a
25
+ // `copilot.tenant` attribute — the UNVERIFIED, key-only org identifier decoded
26
+ // from the relayed JWT (getRequestTenantId). It is an organization label for
27
+ // scoping/aggregation, token-free and not a credential; matcher still owns
28
+ // enforcement via the relayed token. It is kept on SPANS only (per-turn), never
29
+ // pushed as a metric label (cardinality), and NEVER accompanies a token/secret.
24
30
  import { context, metrics, propagation, SpanStatusCode, trace, ValueType, } from '@opentelemetry/api';
25
31
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
26
32
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
@@ -35,6 +41,17 @@ const INSTRUMENTATION_SCOPE = 'matcher-mcp';
35
41
  const ATTR_TOOL_NAME = 'mcp.tool.name';
36
42
  const ATTR_OUTCOME = 'mcp.tool.outcome';
37
43
  const ATTR_MATCHER_STATUS = 'matcher.http.status';
44
+ /**
45
+ * Copilot-loop attribute keys (task 4.2.1). `copilot.tenant` is the key-only org
46
+ * identifier — a span label only, never a metric label or a credential.
47
+ */
48
+ const ATTR_COPILOT_PROVIDER = 'copilot.provider';
49
+ const ATTR_COPILOT_MODEL = 'copilot.model';
50
+ const ATTR_COPILOT_TENANT = 'copilot.tenant';
51
+ const ATTR_COPILOT_MAX_ITERATIONS = 'copilot.max_iterations';
52
+ const ATTR_COPILOT_STOP = 'copilot.stop';
53
+ const ATTR_COPILOT_TOOL_OUTCOME = 'copilot.tool.outcome';
54
+ const ATTR_COPILOT_TOKEN_DIRECTION = 'copilot.token.direction';
38
55
  /** Outcome attribute values — the only two states a tool call reports. */
39
56
  const OUTCOME_OK = 'ok';
40
57
  const OUTCOME_ERROR = 'error';
@@ -205,6 +222,171 @@ export async function instrumentToolCall(name, fn) {
205
222
  }
206
223
  });
207
224
  }
225
+ // --- Copilot agent-loop instrumentation (task 4.2.1) ---------------------------
226
+ //
227
+ // The copilot loop opens a `copilot.turn` parent span with `copilot.provider.stream`
228
+ // and `copilot.tool.<name>` children. Wrapping the tool execution in an ACTIVE
229
+ // child span ALSO fixes the previously-dead matcher trace correlation: with a
230
+ // span active, `injectTraceContext` in the matcher client writes a real
231
+ // traceparent instead of an empty context.
232
+ //
233
+ // The tool wrapper deliberately does NOT reuse `instrumentToolCall`: the copilot
234
+ // read executor (`executeReadTool`) swallows every error into an `isError` result
235
+ // rather than throwing, so `instrumentToolCall`'s catch never fires and every
236
+ // span would falsely read `ok`. `instrumentCopilotTool` inspects the returned
237
+ // result's `isError` instead.
238
+ /** Lazily-created copilot metrics, shared across turns (no-op when telemetry off). */
239
+ let copilotTurnCounter;
240
+ let copilotTurnDuration;
241
+ let copilotTokenCounter;
242
+ function getCopilotTurnCounter() {
243
+ copilotTurnCounter ??= getMeter().createCounter('copilot.turns', {
244
+ description: 'Count of copilot agent turns, labeled by provider + stop reason.',
245
+ valueType: ValueType.INT,
246
+ });
247
+ return copilotTurnCounter;
248
+ }
249
+ function getCopilotTurnDuration() {
250
+ copilotTurnDuration ??= getMeter().createHistogram('copilot.turn.duration', {
251
+ description: 'Latency of a copilot agent turn in milliseconds.',
252
+ unit: 'ms',
253
+ valueType: ValueType.DOUBLE,
254
+ });
255
+ return copilotTurnDuration;
256
+ }
257
+ function getCopilotTokenCounter() {
258
+ copilotTokenCounter ??= getMeter().createCounter('copilot.tokens', {
259
+ description: 'Copilot LLM token usage, labeled by provider + direction (input/output).',
260
+ valueType: ValueType.INT,
261
+ });
262
+ return copilotTokenCounter;
263
+ }
264
+ /**
265
+ * Wrap one agent turn in a `copilot.turn` active parent span + turn metrics. The
266
+ * span carries provider/model/tenant/max_iterations and, set on exit via the
267
+ * `setStop` callback, `copilot.stop` (`end` | `proposal` | `token_limit` |
268
+ * `iteration_limit` | `aborted`). Records `copilot.turns` + `copilot.turn.duration`
269
+ * labeled by provider + stop (tenant is NOT a metric label — cardinality). No-op
270
+ * safe: with telemetry disabled this is just `fn(setStop)`.
271
+ */
272
+ export async function instrumentCopilotTurn(attrs, fn) {
273
+ const tracer = getTracer();
274
+ const counter = getCopilotTurnCounter();
275
+ const histogram = getCopilotTurnDuration();
276
+ const startedAt = Date.now();
277
+ let stop = 'end';
278
+ const setStop = (next) => {
279
+ stop = next;
280
+ };
281
+ return tracer.startActiveSpan('copilot.turn', async (span) => {
282
+ span.setAttribute(ATTR_COPILOT_PROVIDER, attrs.provider);
283
+ if (attrs.model !== undefined) {
284
+ span.setAttribute(ATTR_COPILOT_MODEL, attrs.model);
285
+ }
286
+ if (attrs.tenant !== undefined) {
287
+ span.setAttribute(ATTR_COPILOT_TENANT, attrs.tenant);
288
+ }
289
+ span.setAttribute(ATTR_COPILOT_MAX_ITERATIONS, attrs.maxIterations);
290
+ try {
291
+ await fn(setStop);
292
+ span.setStatus({ code: SpanStatusCode.OK });
293
+ }
294
+ catch (err) {
295
+ // A crashed turn is its own terminal label: without this it defaults to
296
+ // 'end' and records under the clean-completion series, hiding the error
297
+ // rate in the very copilot.turns counter that scopes it.
298
+ stop = 'error';
299
+ span.setStatus({ code: SpanStatusCode.ERROR });
300
+ throw err;
301
+ }
302
+ finally {
303
+ span.setAttribute(ATTR_COPILOT_STOP, stop);
304
+ counter.add(1, { [ATTR_COPILOT_PROVIDER]: attrs.provider, [ATTR_COPILOT_STOP]: stop });
305
+ histogram.record(Date.now() - startedAt, { [ATTR_COPILOT_PROVIDER]: attrs.provider });
306
+ span.end();
307
+ }
308
+ });
309
+ }
310
+ /**
311
+ * Wrap one provider round-trip in a `copilot.provider.stream` child span. Records
312
+ * only provider/model (no prompt content, no token). No-op safe.
313
+ */
314
+ export async function instrumentProviderStream(attrs, fn) {
315
+ const tracer = getTracer();
316
+ return tracer.startActiveSpan('copilot.provider.stream', async (span) => {
317
+ span.setAttribute(ATTR_COPILOT_PROVIDER, attrs.provider);
318
+ if (attrs.model !== undefined) {
319
+ span.setAttribute(ATTR_COPILOT_MODEL, attrs.model);
320
+ }
321
+ try {
322
+ const result = await fn();
323
+ span.setStatus({ code: SpanStatusCode.OK });
324
+ return result;
325
+ }
326
+ catch (err) {
327
+ span.setStatus({ code: SpanStatusCode.ERROR });
328
+ throw err;
329
+ }
330
+ finally {
331
+ span.end();
332
+ }
333
+ });
334
+ }
335
+ /**
336
+ * Wrap one tool execution in a `copilot.tool.<name>` active child span. The tool
337
+ * result is inspected for `isError` (the read executor never throws — it swallows
338
+ * every error into `isError`), so a swallowed matcher failure records
339
+ * `outcome=error`, not a false `ok`. The active span also gives the inner matcher
340
+ * HTTP call a real parent for trace correlation. No-op safe. Rethrows only on an
341
+ * unexpected throw (defensive; the executor does not throw).
342
+ */
343
+ export async function instrumentCopilotTool(name, fn) {
344
+ const tracer = getTracer();
345
+ return tracer.startActiveSpan(`copilot.tool.${name}`, async (span) => {
346
+ span.setAttribute(ATTR_TOOL_NAME, name);
347
+ try {
348
+ const result = await fn();
349
+ const outcome = result.isError === true ? OUTCOME_ERROR : OUTCOME_OK;
350
+ span.setAttribute(ATTR_COPILOT_TOOL_OUTCOME, outcome);
351
+ span.setStatus({
352
+ code: result.isError === true ? SpanStatusCode.ERROR : SpanStatusCode.OK,
353
+ });
354
+ return result;
355
+ }
356
+ catch (err) {
357
+ span.setAttribute(ATTR_COPILOT_TOOL_OUTCOME, OUTCOME_ERROR);
358
+ span.setStatus({ code: SpanStatusCode.ERROR });
359
+ throw err;
360
+ }
361
+ finally {
362
+ span.end();
363
+ }
364
+ });
365
+ }
366
+ /**
367
+ * Record a round's token usage on the `copilot.tokens` counter, split by
368
+ * direction (input/output) and labeled by provider. A no-op when usage is
369
+ * undefined (a provider that omits it) — metering fails open, never throws.
370
+ */
371
+ export function recordCopilotTokens(provider, usage) {
372
+ if (usage === undefined) {
373
+ return;
374
+ }
375
+ const counter = getCopilotTokenCounter();
376
+ // Coalesce a non-finite field to 0 — symmetric with the running-sum path's
377
+ // usageTokens (agent.ts). Providers already coalesce, so this is defense in
378
+ // depth: a misreporting NaN/±Infinity never reaches the counter as NaN.
379
+ const input = Number.isFinite(usage.inputTokens) ? usage.inputTokens : 0;
380
+ const output = Number.isFinite(usage.outputTokens) ? usage.outputTokens : 0;
381
+ counter.add(input, {
382
+ [ATTR_COPILOT_PROVIDER]: provider,
383
+ [ATTR_COPILOT_TOKEN_DIRECTION]: 'input',
384
+ });
385
+ counter.add(output, {
386
+ [ATTR_COPILOT_PROVIDER]: provider,
387
+ [ATTR_COPILOT_TOKEN_DIRECTION]: 'output',
388
+ });
389
+ }
208
390
  /**
209
391
  * Inject the current W3C trace context into an outbound header object so the
210
392
  * matcher call is a child of the tool-call span (MCP → matcher correlation in
@@ -1 +1 @@
1
- {"version":3,"file":"otel.js","sourceRoot":"","sources":["../../src/observability/otel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../../src/observability/otel.ts"],"names":[],"mappings":"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"}
@@ -3834,7 +3834,7 @@ components:
3834
3834
  droppedDuplicateReason:
3835
3835
  description: "Display-only explanation of why droppedDuplicateRows rows were dropped: names the (source, external_id) collapsing key and the field mapping to check so the count does not read as silent data loss. Empty unless droppedDuplicateRows > 0"
3836
3836
  examples:
3837
- - Rows repeated a (source, external_id) key already present in this source and were dropped under the keep-first policy.
3837
+ - Rows repeated a (source, external_id) key already present in this source and were dropped as duplicates. If unexpected, verify the field mapped to external_id is unique per row (a coarse or truncated mapping collapses distinct rows onto one key).
3838
3838
  type: string
3839
3839
  droppedDuplicateRows:
3840
3840
  description: Number of rows dropped as duplicates under the keep-first policy (same external_id within the upload or already persisted)
@@ -6279,6 +6279,66 @@ components:
6279
6279
  required:
6280
6280
  - total
6281
6281
  type: object
6282
+ SetupProgressNextResponse:
6283
+ additionalProperties: false
6284
+ properties:
6285
+ action:
6286
+ description: Stable semantic label of the action.
6287
+ enum:
6288
+ - add_left_source
6289
+ - add_right_source
6290
+ - add_field_map
6291
+ - add_match_rule
6292
+ examples:
6293
+ - add_left_source
6294
+ type: string
6295
+ forSource:
6296
+ $ref: "#/components/schemas/SetupProgressSourceRef"
6297
+ description: Source the action targets; set only for the field_maps action, naming the unmapped source.
6298
+ method:
6299
+ description: HTTP method of the create endpoint.
6300
+ examples:
6301
+ - POST
6302
+ type: string
6303
+ operationId:
6304
+ description: OpenAPI operationId of the create endpoint to call.
6305
+ examples:
6306
+ - createSource
6307
+ type: string
6308
+ path:
6309
+ description: Path template of the create endpoint.
6310
+ examples:
6311
+ - /v1/contexts/{contextId}/sources
6312
+ type: string
6313
+ requiredFields:
6314
+ description: Names of the fields the create request requires; the caller supplies the values.
6315
+ examples:
6316
+ - - name
6317
+ - type
6318
+ - side
6319
+ items:
6320
+ type: string
6321
+ type:
6322
+ - array
6323
+ - "null"
6324
+ slug:
6325
+ description: Readiness slug this action satisfies.
6326
+ enum:
6327
+ - sources_left
6328
+ - sources_right
6329
+ - field_maps
6330
+ - match_rules
6331
+ examples:
6332
+ - sources_left
6333
+ type: string
6334
+ required:
6335
+ - slug
6336
+ - action
6337
+ - operationId
6338
+ - method
6339
+ - path
6340
+ - requiredFields
6341
+ type: object
6282
6342
  SetupProgressReadinessResponse:
6283
6343
  additionalProperties: false
6284
6344
  properties:
@@ -6318,6 +6378,9 @@ components:
6318
6378
  matchRules:
6319
6379
  $ref: "#/components/schemas/SetupProgressMatchRulesResponse"
6320
6380
  description: Match-rule count for the context.
6381
+ next:
6382
+ $ref: "#/components/schemas/SetupProgressNextResponse"
6383
+ description: Deterministic next setup action derived from readiness; null when the context is ready.
6321
6384
  readiness:
6322
6385
  $ref: "#/components/schemas/SetupProgressReadinessResponse"
6323
6386
  description: Activation readiness summary.
@@ -6346,6 +6409,7 @@ components:
6346
6409
  - schedules
6347
6410
  - lastRun
6348
6411
  - readiness
6412
+ - next
6349
6413
  type: object
6350
6414
  SetupProgressSchedulesResponse:
6351
6415
  additionalProperties: false
@@ -6359,6 +6423,23 @@ components:
6359
6423
  required:
6360
6424
  - total
6361
6425
  type: object
6426
+ SetupProgressSourceRef:
6427
+ additionalProperties: false
6428
+ properties:
6429
+ id:
6430
+ description: Identifier of the referenced source.
6431
+ examples:
6432
+ - 550e8400-e29b-41d4-a716-446655440000
6433
+ type: string
6434
+ name:
6435
+ description: Human-readable name of the referenced source.
6436
+ examples:
6437
+ - Bank statement
6438
+ type: string
6439
+ required:
6440
+ - id
6441
+ - name
6442
+ type: object
6362
6443
  SetupProgressSourcesResponse:
6363
6444
  additionalProperties: false
6364
6445
  properties:
@@ -106,7 +106,9 @@ export function registerContextCreateTool(server) {
106
106
  'open-item aging (agedBreakThresholdDays business-day SLA + ' +
107
107
  'agedBreakCalendar, e.g. BR_ANBIMA), and inline rules[] (≤50) / ' +
108
108
  'sources[] (≤10). Returns the created context, or a structured RFC 9457 ' +
109
- 'error.',
109
+ 'error. A bare create is a DRAFT that cannot activate; after applying, ' +
110
+ 'call next_step with the returned contextId and perform the action it ' +
111
+ 'names, repeating until ready.',
110
112
  inputSchema: createContextInputShape,
111
113
  }, async (args, extra) => {
112
114
  return dispatchContext({ method: 'POST', path: CONTEXTS_PATH, body: args }, extra);
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/context/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/context/create.ts"],"names":[],"mappings":"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"}
@@ -15,14 +15,16 @@
15
15
  import { registerContextCreateTool } from './create.js';
16
16
  import { registerContextGetTool } from './get.js';
17
17
  import { registerContextListTool } from './list.js';
18
+ import { registerContextNextStepTool } from './next-step.js';
18
19
  import { registerContextSetupProgressTool } from './setup-progress.js';
19
20
  import { registerContextUpdateTool } from './update.js';
20
- /** Register all five curated context tools on the given server. */
21
+ /** Register all six curated context tools on the given server. */
21
22
  export function registerContextTools(server) {
22
23
  registerContextCreateTool(server);
23
24
  registerContextListTool(server);
24
25
  registerContextGetTool(server);
25
26
  registerContextUpdateTool(server);
26
27
  registerContextSetupProgressTool(server);
28
+ registerContextNextStepTool(server);
27
29
  }
28
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/context/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,0EAA0E;AAC1E,qEAAqE;AACrE,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,iEAAiE;AACjE,4DAA4D;AAI5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjC,uBAAuB,CAAC,MAAM,CAAC,CAAA;IAC/B,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjC,gCAAgC,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/context/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,0EAA0E;AAC1E,qEAAqE;AACrE,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,iEAAiE;AACjE,4DAA4D;AAI5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjC,uBAAuB,CAAC,MAAM,CAAC,CAAA;IAC/B,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjC,gCAAgC,CAAC,MAAM,CAAC,CAAA;IACxC,2BAA2B,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC"}
@@ -0,0 +1,93 @@
1
+ // `next_step` — curated GET /v1/contexts/{contextId}/setup-progress projected
2
+ // to the ONE thing an operator-driving LLM needs to advance setup:
3
+ // `{ ready, next, thenCall }`.
4
+ //
5
+ // `context_setup_progress` already relays the FULL setup-progress blob (counts,
6
+ // last-run, readiness, next), so this tool's value is NOT "make `next` visible"
7
+ // — it is the focused shape plus the auto-conduction (`thenCall`) that tells the
8
+ // caller to loop. The auto-conduction is the only agent-specific knowledge here
9
+ // and it is STATIC (no per-context values are ever invented): the deterministic
10
+ // `next` action itself comes verbatim from the backend readiness gate (Phase 1).
11
+ //
12
+ // Because it projects, it does NOT use the shared dispatchContext stringify-
13
+ // everything path; it resolves the client the same fail-closed way
14
+ // (requireMatcherClient) and maps a matcher error through the SAME toToolError as
15
+ // its siblings. contextId is the only input (a UUID path param); no tenant field
16
+ // is accepted (matcher scopes to the relayed token's tenant).
17
+ import { z } from 'zod';
18
+ import { requireMatcherClient, UnauthenticatedError, } from '../../auth/request-token.js';
19
+ import { isMatcherApiError, toToolError } from '../tool-error.js';
20
+ import { contextSetupProgressPath } from './setup-progress.js';
21
+ /**
22
+ * Static auto-conduction string returned alongside a non-null `next`. It never
23
+ * carries per-context values — just the loop instruction. The concrete action to
24
+ * take is the backend `next`, not this string.
25
+ */
26
+ export const NEXT_STEP_CONDUCTION = 'After applying this action, call next_step again with the same contextId to ' +
27
+ 'get the following step. Repeat until ready is true.';
28
+ /** Zod raw shape for `next_step` input — just the context id. */
29
+ export const nextStepInputShape = {
30
+ contextId: z
31
+ .string()
32
+ .min(1)
33
+ .describe('The reconciliation context id (UUID) to get the next setup step for.'),
34
+ };
35
+ /**
36
+ * Register `next_step`. Fetches setup-progress through the fail-closed relay and
37
+ * projects it to `{ ready, next, thenCall }`. A matcher error (e.g. 404) surfaces
38
+ * via the shared toToolError; a missing credential fails closed identically to
39
+ * the sibling context tools.
40
+ */
41
+ export function registerContextNextStepTool(server) {
42
+ server.registerTool('next_step', {
43
+ description: 'Get the deterministic next setup action for a context, projected from ' +
44
+ 'its readiness gate. Provide contextId (UUID path param, not a tenant ' +
45
+ 'field). Returns { ready, next, thenCall }: ready is true only when the ' +
46
+ 'context satisfies every activation requirement; next is the exact ' +
47
+ 'action to take (slug, action, operationId, method, path, requiredFields ' +
48
+ '— field NAMES only, never values; you supply the values), or null when ' +
49
+ 'ready; thenCall instructs you to apply next and call next_step again ' +
50
+ 'with the same contextId, repeating until ready is true (null when ' +
51
+ 'ready). Prefer this over context_setup_progress when you just need the ' +
52
+ 'next action to advance setup. Returns a structured RFC 9457 error on ' +
53
+ 'failure (e.g. 404 if the context does not exist or is not yours).',
54
+ inputSchema: nextStepInputShape,
55
+ }, async (args, extra) => {
56
+ let client;
57
+ try {
58
+ // Fail-closed on a missing / empty / non-Bearer credential.
59
+ client = requireMatcherClient(extra);
60
+ }
61
+ catch (err) {
62
+ if (err instanceof UnauthenticatedError) {
63
+ return { isError: true, content: [{ type: 'text', text: err.message }] };
64
+ }
65
+ throw err;
66
+ }
67
+ try {
68
+ const body = await client.request({
69
+ method: 'GET',
70
+ path: contextSetupProgressPath(args.contextId),
71
+ });
72
+ // Nil-safe projection: a malformed body (missing readiness) defaults to
73
+ // not-ready rather than throwing. `next` is relayed verbatim.
74
+ const ready = body?.readiness?.ready ?? false;
75
+ const next = body?.next ?? null;
76
+ const thenCall = next ? NEXT_STEP_CONDUCTION : null;
77
+ return {
78
+ content: [
79
+ { type: 'text', text: JSON.stringify({ ready, next, thenCall }) },
80
+ ],
81
+ };
82
+ }
83
+ catch (err) {
84
+ // RFC 9457 problem → the SHARED structured tool error. A non-matcher
85
+ // error is a bug, not a matcher failure, and is re-thrown.
86
+ if (isMatcherApiError(err)) {
87
+ return toToolError(err);
88
+ }
89
+ throw err;
90
+ }
91
+ });
92
+ }
93
+ //# sourceMappingURL=next-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-step.js","sourceRoot":"","sources":["../../../src/tools/context/next-step.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mEAAmE;AACnE,+BAA+B;AAC/B,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,mEAAmE;AACnE,kFAAkF;AAClF,iFAAiF;AACjF,8DAA8D;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,8EAA8E;IAC9E,qDAAqD,CAAA;AAEvD,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,sEAAsE,CAAC;CACpF,CAAA;AAWD;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,wEAAwE;YACxE,uEAAuE;YACvE,yEAAyE;YACzE,oEAAoE;YACpE,0EAA0E;YAC1E,yEAAyE;YACzE,uEAAuE;YACvE,oEAAoE;YACpE,yEAAyE;YACzE,uEAAuE;YACvE,mEAAmE;QACrE,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,IAAI,MAAM,CAAA;QACV,IAAI,CAAC;YACH,4DAA4D;YAC5D,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;gBACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAA;YAC1E,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAoB;gBACnD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC;aAC/C,CAAC,CAAA;YACF,wEAAwE;YACxE,8DAA8D;YAC9D,MAAM,KAAK,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,CAAA;YAC7C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAA;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAA;YACnD,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;iBAClE;aACF,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,2DAA2D;YAC3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;YACzB,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -74,7 +74,9 @@ export function registerSourceCreateTool(server) {
74
74
  'optional type-specific config object (validated server-side; defaults ' +
75
75
  'to an empty object when omitted). The source is ' +
76
76
  "created for your token's tenant (no tenant field is accepted). Returns " +
77
- 'the created source, or a structured RFC 9457 error.',
77
+ 'the created source, or a structured RFC 9457 error. Adding a source ' +
78
+ 'rarely completes setup on its own; after applying, call next_step with ' +
79
+ 'that contextId and perform the action it names, repeating until ready.',
78
80
  inputSchema: createSourceInputShape,
79
81
  }, async (args, extra) => {
80
82
  return dispatchSource({
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/source/create.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,6EAA6E;AAC7E,gFAAgF;AAChF,mBAAmB;AACnB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAE5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEhE,+FAA+F;AAC/F,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;CACD,CAAA;AAEV,qFAAqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAA;AAEtD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,wEAAwE;QACtE,yEAAyE;QACzE,iCAAiC,CACpC;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,QAAQ,CACP,2EAA2E;QACzE,0EAA0E;QAC1E,qCAAqC,CACxC;IACH,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,QAAQ,CACP,oEAAoE;QAClE,gCAAgC,CACnC;IACH,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E;QACxE,sEAAsE;QACtE,gEAAgE,CACnE;CACJ,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,UAAU,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,oEAAoE;YACpE,4DAA4D;YAC5D,kEAAkE;YAClE,wEAAwE;YACxE,kDAAkD;YAClD,yEAAyE;YACzE,qDAAqD;QACvD,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,cAAc,CACnB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;SAC5B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/source/create.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,6EAA6E;AAC7E,gFAAgF;AAChF,mBAAmB;AACnB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAE5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEhE,+FAA+F;AAC/F,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;CACD,CAAA;AAEV,qFAAqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAA;AAEtD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,wEAAwE;QACtE,yEAAyE;QACzE,iCAAiC,CACpC;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,QAAQ,CACP,2EAA2E;QACzE,0EAA0E;QAC1E,qCAAqC,CACxC;IACH,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,QAAQ,CACP,oEAAoE;QAClE,gCAAgC,CACnC;IACH,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E;QACxE,sEAAsE;QACtE,gEAAgE,CACnE;CACJ,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,UAAU,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,oEAAoE;YACpE,4DAA4D;YAC5D,kEAAkE;YAClE,wEAAwE;YACxE,kDAAkD;YAClD,yEAAyE;YACzE,sEAAsE;YACtE,yEAAyE;YACzE,wEAAwE;QAC1E,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,cAAc,CACnB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;SAC5B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -79,4 +79,31 @@ export class BodySizeGuard {
79
79
  }
80
80
  }
81
81
  }
82
+ /**
83
+ * Read the request body and return it as a string, bounded by `maxBodyBytes`.
84
+ * The SDK's Node transport can parse the body itself, but reading it here lets
85
+ * callers pass a pre-parsed JSON body and keeps the handler in control of
86
+ * malformed input — and, critically, lets us cap an unbounded read.
87
+ *
88
+ * The size guard is checked BEFORE each chunk is retained, so an over-limit
89
+ * payload is rejected (via `BodyTooLargeError`) without ever buffering more than
90
+ * the limit (+ one chunk) of an attacker's body. The guard counts only bytes —
91
+ * it never inspects body content, headers, or any token.
92
+ *
93
+ * Lives here (next to `BodySizeGuard`, which it uses) rather than in
94
+ * `transport/http.ts` so the copilot's `turns-handler.ts` can import it without
95
+ * creating an import cycle with `http.ts` (which imports the turns handler).
96
+ */
97
+ export async function readBody(req, maxBodyBytes) {
98
+ const guard = new BodySizeGuard(maxBodyBytes);
99
+ const chunks = [];
100
+ for await (const chunk of req) {
101
+ const buf = chunk;
102
+ // Throws BodyTooLargeError the moment the running total exceeds the limit,
103
+ // before the over-limit chunk is appended to memory.
104
+ guard.add(buf.length);
105
+ chunks.push(buf);
106
+ }
107
+ return Buffer.concat(chunks).toString('utf8');
108
+ }
82
109
  //# sourceMappingURL=body-limit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"body-limit.js","sourceRoot":"","sources":["../../src/transport/body-limit.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAChF,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,8CAA8C;AAE9C,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA,CAAC,QAAQ;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,kEAAkE;IACzD,MAAM,GAAG,GAAG,CAAA;IACrB,wCAAwC;IAC/B,UAAU,CAAQ;IAC3B,2DAA2D;IAClD,aAAa,CAAQ;IAE9B,YAAY,UAAkB,EAAE,aAAqB;QACnD,KAAK,CACH,4BAA4B,UAAU,cAAc;YAClD,sBAAsB,aAAa,SAAS,CAC/C,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACP,YAAY,CAAQ;IAC7B,KAAK,GAAG,CAAC,CAAA;IAEjB,YAAY,eAAuB,sBAAsB;QACvD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,yBAAyB,YAAY,gCAAgC,CACtE,CAAA;QACH,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,WAAmB;QACrB,IAAI,CAAC,KAAK,IAAI,WAAW,CAAA;QACzB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"body-limit.js","sourceRoot":"","sources":["../../src/transport/body-limit.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAChF,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,8CAA8C;AAI9C,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA,CAAC,QAAQ;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,kEAAkE;IACzD,MAAM,GAAG,GAAG,CAAA;IACrB,wCAAwC;IAC/B,UAAU,CAAQ;IAC3B,2DAA2D;IAClD,aAAa,CAAQ;IAE9B,YAAY,UAAkB,EAAE,aAAqB;QACnD,KAAK,CACH,4BAA4B,UAAU,cAAc;YAClD,sBAAsB,aAAa,SAAS,CAC/C,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACP,YAAY,CAAQ;IAC7B,KAAK,GAAG,CAAC,CAAA;IAEjB,YAAY,eAAuB,sBAAsB;QACvD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,yBAAyB,YAAY,gCAAgC,CACtE,CAAA;QACH,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,WAAmB;QACrB,IAAI,CAAC,KAAK,IAAI,WAAW,CAAA;QACzB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAoB,EAAE,YAAoB;IACvE,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAe,CAAA;QAC3B,2EAA2E;QAC3E,qDAAqD;QACrD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC"}