apcore-mcp 0.14.0 → 0.16.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 (92) hide show
  1. package/README.md +82 -1
  2. package/dist/adapters/approval.d.ts +21 -0
  3. package/dist/adapters/approval.d.ts.map +1 -1
  4. package/dist/adapters/approval.js +49 -0
  5. package/dist/adapters/approval.js.map +1 -1
  6. package/dist/adapters/errors.d.ts +20 -0
  7. package/dist/adapters/errors.d.ts.map +1 -1
  8. package/dist/adapters/errors.js +61 -41
  9. package/dist/adapters/errors.js.map +1 -1
  10. package/dist/adapters/id-normalizer.d.ts +6 -5
  11. package/dist/adapters/id-normalizer.d.ts.map +1 -1
  12. package/dist/adapters/id-normalizer.js +9 -12
  13. package/dist/adapters/id-normalizer.js.map +1 -1
  14. package/dist/adapters/schema.d.ts +11 -0
  15. package/dist/adapters/schema.d.ts.map +1 -1
  16. package/dist/adapters/schema.js +43 -1
  17. package/dist/adapters/schema.js.map +1 -1
  18. package/dist/apcore-mcp.d.ts +17 -1
  19. package/dist/apcore-mcp.d.ts.map +1 -1
  20. package/dist/apcore-mcp.js +42 -4
  21. package/dist/apcore-mcp.js.map +1 -1
  22. package/dist/approval-store.d.ts +64 -0
  23. package/dist/approval-store.d.ts.map +1 -0
  24. package/dist/approval-store.js +139 -0
  25. package/dist/approval-store.js.map +1 -0
  26. package/dist/auth/index.d.ts +7 -0
  27. package/dist/auth/index.d.ts.map +1 -1
  28. package/dist/auth/index.js +7 -0
  29. package/dist/auth/index.js.map +1 -1
  30. package/dist/auth/jwt.d.ts.map +1 -1
  31. package/dist/auth/jwt.js +4 -1
  32. package/dist/auth/jwt.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +10 -1
  35. package/dist/cli.js.map +1 -1
  36. package/dist/constants.d.ts +37 -0
  37. package/dist/constants.d.ts.map +1 -0
  38. package/dist/constants.js +43 -0
  39. package/dist/constants.js.map +1 -0
  40. package/dist/converters/openai.d.ts +12 -0
  41. package/dist/converters/openai.d.ts.map +1 -1
  42. package/dist/converters/openai.js +28 -3
  43. package/dist/converters/openai.js.map +1 -1
  44. package/dist/index.d.ts +12 -3
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +15 -4
  47. package/dist/index.js.map +1 -1
  48. package/dist/markdown.d.ts +54 -0
  49. package/dist/markdown.d.ts.map +1 -0
  50. package/dist/markdown.js +125 -0
  51. package/dist/markdown.js.map +1 -0
  52. package/dist/server/approval-bridge.d.ts +27 -0
  53. package/dist/server/approval-bridge.d.ts.map +1 -0
  54. package/dist/server/approval-bridge.js +77 -0
  55. package/dist/server/approval-bridge.js.map +1 -0
  56. package/dist/server/async-task-bridge.d.ts +39 -1
  57. package/dist/server/async-task-bridge.d.ts.map +1 -1
  58. package/dist/server/async-task-bridge.js +195 -9
  59. package/dist/server/async-task-bridge.js.map +1 -1
  60. package/dist/server/context.d.ts +8 -0
  61. package/dist/server/context.d.ts.map +1 -1
  62. package/dist/server/context.js +15 -0
  63. package/dist/server/context.js.map +1 -1
  64. package/dist/server/factory.d.ts +34 -1
  65. package/dist/server/factory.d.ts.map +1 -1
  66. package/dist/server/factory.js +69 -3
  67. package/dist/server/factory.js.map +1 -1
  68. package/dist/server/router.d.ts +29 -6
  69. package/dist/server/router.d.ts.map +1 -1
  70. package/dist/server/router.js +75 -25
  71. package/dist/server/router.js.map +1 -1
  72. package/dist/server/transport.d.ts +8 -1
  73. package/dist/server/transport.d.ts.map +1 -1
  74. package/dist/server/transport.js +15 -2
  75. package/dist/server/transport.js.map +1 -1
  76. package/dist/types.d.ts +2 -0
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/types.js +4 -0
  79. package/dist/types.js.map +1 -1
  80. package/package.json +5 -8
  81. package/dist/explorer/index.d.ts +0 -2
  82. package/dist/explorer/index.d.ts.map +0 -1
  83. package/dist/explorer/index.js +0 -2
  84. package/dist/explorer/index.js.map +0 -1
  85. package/dist/inspector/index.d.ts +0 -2
  86. package/dist/inspector/index.d.ts.map +0 -1
  87. package/dist/inspector/index.js +0 -2
  88. package/dist/inspector/index.js.map +0 -1
  89. package/dist/server/index.d.ts +0 -11
  90. package/dist/server/index.d.ts.map +0 -1
  91. package/dist/server/index.js +0 -8
  92. package/dist/server/index.js.map +0 -1
package/README.md CHANGED
@@ -12,6 +12,8 @@ Converts apcore module registries into [Model Context Protocol (MCP)](https://mo
12
12
 
13
13
  - **MCP Server** — Expose apcore modules as MCP tools over stdio, Streamable HTTP, or SSE
14
14
  - **OpenAI Tools** — Convert modules to OpenAI function calling format with strict mode support
15
+ - **Markdown tool descriptions** (`richDescription: true`, v0.15+) — render `Tool.description` and OpenAI `function.description` as canonical apcore-toolkit Markdown so LLMs get more decision-relevant signal per token. Requires `apcore-toolkit` (declared as `optionalDependencies`) and `await MCPServerFactory.prepare()` at startup.
16
+ - **Module preview meta-tool** (`__apcore_module_preview`, v0.15+) — drives `executor.validate()` to predict state changes WITHOUT executing the module (apcore PROTOCOL_SPEC §5.6). Returns `{valid, requires_approval, predicted_changes, checks}` so AI orchestrators can ask "what would change?" before invoking.
15
17
  - **Schema Conversion** — Inline `$defs`/`$ref` from Pydantic-generated JSON Schema
16
18
  - **Annotation Mapping** — Map module annotations to MCP hints and OpenAI description suffixes
17
19
  - **Approval Mechanism** — Built-in elicitation-based approval flow for sensitive tool executions
@@ -30,7 +32,8 @@ For full documentation, including Quick Start guides for both Python and TypeScr
30
32
  ## Requirements
31
33
 
32
34
  - Node.js >= 18.0.0
33
- - `apcore-js >= 0.19.0`
35
+ - `apcore-js >= 0.21.1`
36
+ - Optional: `apcore-toolkit >= 0.6.1` for Markdown-rendered tool descriptions (declared under `optionalDependencies`).
34
37
 
35
38
  ## Installation
36
39
 
@@ -99,6 +102,7 @@ npx apcore-mcp --extensions-dir ./extensions --transport sse --port 8000
99
102
  | `--jwt-require-auth` | `true` | Require auth (use `--jwt-permissive` to override and allow unauthenticated requests) |
100
103
  | `--jwt-permissive` | `false` | Permissive mode: allow unauthenticated requests (overrides `--jwt-require-auth`) |
101
104
  | `--exempt-paths` | `/health,/metrics,/usage` | Comma-separated paths exempt from auth |
105
+ | `--output-format` | `json` | Built-in output format: `json`, `csv`, or `jsonl` |
102
106
 
103
107
  JWT key resolution priority: `--jwt-key-file` > `--jwt-secret` > `APCORE_JWT_SECRET` environment variable.
104
108
 
@@ -373,6 +377,22 @@ await close();
373
377
 
374
378
  Accepts the same options as `serve()` except `transport`, `host`, `port`, `onStartup`, and `onShutdown`.
375
379
 
380
+ ### Output Formatting
381
+
382
+ By default, tool execution results are serialized as JSON (`JSON.stringify`). You can customize this by passing an `outputFormat` name or a custom `outputFormatter` function.
383
+
384
+ **Built-in formats** (requires `apcore-toolkit` 0.7.0+):
385
+
386
+ ```typescript
387
+ // Via CLI
388
+ // npx apcore-mcp --extensions-dir ./extensions --output-format csv
389
+
390
+ // Via API
391
+ const mcp = new APCoreMCP("./extensions", { outputFormat: "csv" });
392
+ ```
393
+
394
+ Supports `json`, `csv`, and `jsonl`. Non-tabular data gracefully falls back to JSON.
395
+
376
396
  ### Tool Explorer
377
397
 
378
398
  When `explorer: true` is passed to `serve()`, a browser-based Tool Explorer UI is mounted on HTTP transports. It provides an interactive page for browsing tool schemas and testing tool execution.
@@ -463,6 +483,67 @@ curl -X POST http://localhost:8000/mcp \
463
483
  curl http://localhost:8000/health
464
484
  ```
465
485
 
486
+ #### Per-request identity helpers
487
+
488
+ When auth is enabled, each request runs inside an `AsyncLocalStorage`
489
+ context whose value is the verified `Identity`. Modules and middleware
490
+ read it with `getCurrentIdentity()` — no need to thread it through every
491
+ function.
492
+
493
+ ```typescript
494
+ import { getCurrentIdentity, identityStorage } from "apcore-mcp";
495
+ import type { Identity } from "apcore-mcp";
496
+
497
+ // Inside a module / middleware called from a tool invocation:
498
+ const id: Identity | null = getCurrentIdentity();
499
+ if (id) {
500
+ // id.id (user id), id.type ("user" | "service" | ...), id.roles, id.attrs
501
+ }
502
+
503
+ // Lower-level access (e.g. for running custom code inside a known identity):
504
+ identityStorage.run(myIdentity, async () => {
505
+ /* code that calls getCurrentIdentity() */
506
+ });
507
+ ```
508
+
509
+ Python parity: `apcore_mcp.get_current_identity()` / `auth_identity_var`.
510
+ Rust parity: `apcore_mcp::AUTH_IDENTITY` task-local.
511
+
512
+ #### Mounting the Explorer behind your own server
513
+
514
+ If you embed the bridge via `asyncServe(...)` instead of `serve(...)`,
515
+ gate the explorer routes behind an auth hook with
516
+ `buildExplorerAuthHook(authenticator)`:
517
+
518
+ ```typescript
519
+ import { buildExplorerAuthHook } from "apcore-mcp";
520
+ import { JWTAuthenticator } from "apcore-mcp";
521
+
522
+ const auth = new JWTAuthenticator({ key: process.env.JWT_SECRET! });
523
+ const guard = buildExplorerAuthHook(auth);
524
+
525
+ // `guard` is a `(req, next) => Promise<Response>` hook accepted by
526
+ // mcp-embedded-ui's Hono router. Returns a 401 response when the
527
+ // Authorization header is missing or invalid; otherwise runs `next()`
528
+ // inside `identityStorage.run(identity, ...)` so the explorer's
529
+ // downstream handlers see the authenticated identity.
530
+ ```
531
+
532
+ #### Custom observability stack (advanced)
533
+
534
+ For callers who don't want the `serve(... observability: true)` shorthand,
535
+ `installObservability` wires the metrics + usage middleware onto an
536
+ existing `Executor` directly. It is what `serve()` calls internally.
537
+
538
+ ```typescript
539
+ import { installObservability } from "apcore-mcp";
540
+ import type { ObservabilityFlag } from "apcore-mcp";
541
+
542
+ const stack = await installObservability(executor, /* metricsCollector */ null, true satisfies ObservabilityFlag);
543
+ // stack.metricsCollector / stack.usageCollector are then exposed on
544
+ // the `/metrics` and `/usage` endpoints by your own HTTP wiring.
545
+ ```
546
+
466
547
  ### `toOpenaiTools(registryOrExecutor, options?)`
467
548
 
468
549
  Export apcore modules as OpenAI-compatible tool definitions.
@@ -4,6 +4,7 @@
4
4
  * Uses the MCP elicit callback (injected into Context.data) to present
5
5
  * approval requests to the human user via the MCP client.
6
6
  */
7
+ import type { ApprovalStore } from "../approval-store.js";
7
8
  export interface ApprovalRequest {
8
9
  moduleId: string;
9
10
  description?: string | null;
@@ -32,4 +33,24 @@ export declare class ElicitationApprovalHandler {
32
33
  */
33
34
  checkApproval(_approvalId: string): Promise<ApprovalResult>;
34
35
  }
36
+ /**
37
+ * Phase B approval handler backed by a pluggable ApprovalStore.
38
+ *
39
+ * requestApproval() saves a pending record and returns a pending ApprovalResult
40
+ * causing apcore to raise ApprovalPendingError → APPROVAL_PENDING in MCP envelope.
41
+ * checkApproval() reads the store; called by apcore when client retries with
42
+ * _meta.approvalId set.
43
+ *
44
+ * notifyCallback lets callers fan out to Slack/email/webhooks.
45
+ * Signature: (approvalId: string, moduleId: string, arguments: Record<string, unknown>) => Promise<void>
46
+ */
47
+ export declare class StorageBackedApprovalHandler {
48
+ private readonly store;
49
+ private readonly notifyCallback?;
50
+ constructor(store: ApprovalStore, options?: {
51
+ notifyCallback?: (approvalId: string, moduleId: string, args: Record<string, unknown>) => Promise<void>;
52
+ });
53
+ requestApproval(request: ApprovalRequest): Promise<ApprovalResult>;
54
+ checkApproval(approvalId: string): Promise<ApprovalResult>;
55
+ }
35
56
  //# sourceMappingURL=approval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/adapters/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,qBAAa,0BAA0B;IACrC;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAsCxE;;;;;OAKG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAGlE"}
1
+ {"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/adapters/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,qBAAa,0BAA0B;IACrC;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAsCxE;;;;;OAKG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAGlE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyF;gBAGvH,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACpG;IAMF,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAmBlE,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAajE"}
@@ -4,6 +4,7 @@
4
4
  * Uses the MCP elicit callback (injected into Context.data) to present
5
5
  * approval requests to the human user via the MCP client.
6
6
  */
7
+ import { randomUUID } from "crypto";
7
8
  import { MCP_ELICIT_KEY } from "../helpers.js";
8
9
  export class ElicitationApprovalHandler {
9
10
  /**
@@ -50,4 +51,52 @@ export class ElicitationApprovalHandler {
50
51
  return { status: "rejected", reason: "Phase B not supported via MCP elicitation" };
51
52
  }
52
53
  }
54
+ /**
55
+ * Phase B approval handler backed by a pluggable ApprovalStore.
56
+ *
57
+ * requestApproval() saves a pending record and returns a pending ApprovalResult
58
+ * causing apcore to raise ApprovalPendingError → APPROVAL_PENDING in MCP envelope.
59
+ * checkApproval() reads the store; called by apcore when client retries with
60
+ * _meta.approvalId set.
61
+ *
62
+ * notifyCallback lets callers fan out to Slack/email/webhooks.
63
+ * Signature: (approvalId: string, moduleId: string, arguments: Record<string, unknown>) => Promise<void>
64
+ */
65
+ export class StorageBackedApprovalHandler {
66
+ store;
67
+ notifyCallback;
68
+ constructor(store, options = {}) {
69
+ this.store = store;
70
+ this.notifyCallback = options.notifyCallback;
71
+ }
72
+ async requestApproval(request) {
73
+ const approvalId = randomUUID();
74
+ const moduleId = request.moduleId ?? "unknown";
75
+ const args = request.arguments ?? {};
76
+ await this.store.savePending(approvalId, moduleId, args);
77
+ if (this.notifyCallback) {
78
+ try {
79
+ await this.notifyCallback(approvalId, moduleId, args);
80
+ }
81
+ catch (err) {
82
+ // log but don't fail the approval request
83
+ console.warn(`[apcore-mcp] notifyCallback raised for approval ${approvalId}:`, err);
84
+ }
85
+ }
86
+ return { status: "pending", reason: approvalId };
87
+ }
88
+ async checkApproval(approvalId) {
89
+ const record = await this.store.getResult(approvalId);
90
+ if (!record) {
91
+ return { status: "rejected", reason: "approval_id not found" };
92
+ }
93
+ if (record.status === "approved") {
94
+ return { status: "approved" };
95
+ }
96
+ if (record.status === "rejected") {
97
+ return { status: "rejected", reason: record.reason ?? undefined };
98
+ }
99
+ return { status: "pending" };
100
+ }
101
+ }
53
102
  //# sourceMappingURL=approval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/adapters/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc/C,MAAM,OAAO,0BAA0B;IACrC;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;QAC3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;QAChF,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAE7B,CAAC;QAEd,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,OAAO,GACX,+BAA+B,OAAO,CAAC,QAAQ,MAAM;YACrD,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,MAAM;YAClC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAEpD,IAAI,MAAoE,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,MAAM,EAAE,EAAE,CAAC;IAClE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,WAAmB;QACrC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAC;IACrF,CAAC;CACF"}
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/adapters/approval.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,14 @@
13
13
  * `ModuleError`.
14
14
  */
15
15
  import type { McpErrorResponse } from "../types.js";
16
+ /**
17
+ * Canonical GENERAL_INTERNAL_ERROR envelope for non-ModuleError fallback.
18
+ *
19
+ * All three SDKs (Python, TypeScript, Rust) emit byte-identical envelopes so
20
+ * MCP clients can branch on `errorType === "GENERAL_INTERNAL_ERROR"` portably.
21
+ * See `apcore-mcp/docs/features/error-mapper.md` (EM-6).
22
+ */
23
+ export declare function internalErrorResponse(): McpErrorResponse;
16
24
  export declare class ErrorMapper {
17
25
  /**
18
26
  * Convert an error to an MCP error response.
@@ -21,6 +29,18 @@ export declare class ErrorMapper {
21
29
  * Applies sanitization and formatting rules based on the error code.
22
30
  */
23
31
  toMcpError(error: unknown): McpErrorResponse;
32
+ /**
33
+ * Generic-error fallback for arbitrary inputs.
34
+ *
35
+ * Ports Rust's `to_mcp_error_any` downcast pattern: if the input is a
36
+ * `ModuleError` subclass, delegate to {@link toMcpError} so structured
37
+ * fields (code, details, AI guidance) survive. Otherwise — plain `Error`,
38
+ * unrelated subclass, or non-error object — return the canonical
39
+ * GENERAL_INTERNAL_ERROR envelope. The original class, message, stack,
40
+ * and details are deliberately discarded in that branch (security: avoid
41
+ * leaking server-side state). [D9-004]
42
+ */
43
+ toMcpErrorAny(error: unknown): McpErrorResponse;
24
44
  /**
25
45
  * Preferred `instanceof` dispatch for concrete apcore-js error classes.
26
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmDpD,qBAAa,WAAW;IACtB;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAgO5C;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;IAyDjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CA4B/B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAOxD;AA0DD,qBAAa,WAAW;IACtB;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IA4M5C;;;;;;;;;;OAUG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAQ/C;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;IAsDjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CA4B/B"}
@@ -13,10 +13,30 @@
13
13
  * `ModuleError`.
14
14
  */
15
15
  import { ErrorCodes } from "../types.js";
16
+ /**
17
+ * Canonical GENERAL_INTERNAL_ERROR envelope for non-ModuleError fallback.
18
+ *
19
+ * All three SDKs (Python, TypeScript, Rust) emit byte-identical envelopes so
20
+ * MCP clients can branch on `errorType === "GENERAL_INTERNAL_ERROR"` portably.
21
+ * See `apcore-mcp/docs/features/error-mapper.md` (EM-6).
22
+ */
23
+ export function internalErrorResponse() {
24
+ return {
25
+ isError: true,
26
+ errorType: ErrorCodes.GENERAL_INTERNAL_ERROR,
27
+ message: "Internal error occurred",
28
+ details: null,
29
+ };
30
+ }
16
31
  /**
17
32
  * Lazy snapshot of apcore-js error classes used for `instanceof` dispatch.
18
33
  * Populated on first use; falls back to duck-typing when apcore-js is
19
34
  * unavailable. Cached across calls for perf.
35
+ *
36
+ * `ModuleError` is the documented base class for all structured apcore errors.
37
+ * `toMcpErrorAny` uses it as a downcast pivot, mirroring Rust's
38
+ * `to_mcp_error_any` which checks `err.downcast_ref::<ModuleError>()` before
39
+ * collapsing to the canonical envelope.
20
40
  */
21
41
  let _apcoreErrorClasses = null;
22
42
  async function _loadApcoreErrorClasses() {
@@ -26,6 +46,7 @@ async function _loadApcoreErrorClasses() {
26
46
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
47
  const apcore = (await import("apcore-js"));
28
48
  _apcoreErrorClasses = {
49
+ ModuleError: apcore.ModuleError,
29
50
  TaskLimitExceededError: apcore.TaskLimitExceededError,
30
51
  VersionConstraintError: apcore.VersionConstraintError,
31
52
  DependencyNotFoundError: apcore.DependencyNotFoundError,
@@ -112,18 +133,15 @@ export class ErrorMapper {
112
133
  this._attachAiGuidance(error, result);
113
134
  return result;
114
135
  }
115
- // Approval pending -> narrow details to approvalId only
116
- // Handles both camelCase (apcore-js) and snake_case (apcore-py/rs) field names.
117
- // [D10-011] TypeScript intentionally handles both conventions; Python+Rust only
118
- // handle snake_case and would silently emit `details: null` for camelCase errors.
136
+ // Approval pending -> narrow details to approvalId only.
137
+ // [D10-003] Cross-language parity: upstream apcore SDKs emit
138
+ // snake_case (`approval_id`) exclusively, so the previous dual-key
139
+ // branch for camelCase `approvalId` was dormant and diverged from
140
+ // Python/Rust contracts (which accept snake_case only). Drop the
141
+ // camelCase source key; the output stays camelCase per MCP convention.
119
142
  if (code === ErrorCodes.APPROVAL_PENDING) {
120
- const idKey = details && "approvalId" in details
121
- ? "approvalId"
122
- : details && "approval_id" in details
123
- ? "approval_id"
124
- : null;
125
- const narrowed = idKey
126
- ? { approvalId: details[idKey] }
143
+ const narrowed = details && "approval_id" in details
144
+ ? { approvalId: details["approval_id"] }
127
145
  : null;
128
146
  const result = {
129
147
  isError: true,
@@ -204,19 +222,6 @@ export class ErrorMapper {
204
222
  this._attachAiGuidance(error, result);
205
223
  return result;
206
224
  }
207
- // Dependency resolution errors (apcore 0.19) -> pass through with user-fixable hint
208
- if (code === ErrorCodes.DEPENDENCY_NOT_FOUND ||
209
- code === ErrorCodes.DEPENDENCY_VERSION_MISMATCH) {
210
- const result = {
211
- isError: true,
212
- errorType: code,
213
- message: error.message,
214
- details,
215
- userFixable: true,
216
- };
217
- this._attachAiGuidance(error, result);
218
- return result;
219
- }
220
225
  // Task limit exceeded -> retryable
221
226
  if (code === ErrorCodes.TASK_LIMIT_EXCEEDED) {
222
227
  const result = {
@@ -229,20 +234,24 @@ export class ErrorMapper {
229
234
  this._attachAiGuidance(error, result);
230
235
  return result;
231
236
  }
232
- // Binding / version-constraint validation errors (apcore 0.19) -> pass through
233
- if (code === ErrorCodes.VERSION_CONSTRAINT_INVALID ||
234
- code === ErrorCodes.BINDING_SCHEMA_INFERENCE_FAILED ||
235
- code === ErrorCodes.BINDING_SCHEMA_MODE_CONFLICT ||
236
- code === ErrorCodes.BINDING_STRICT_SCHEMA_INCOMPATIBLE ||
237
- code === ErrorCodes.BINDING_POLICY_VIOLATION) {
237
+ // apcore 0.20.0 sync alignment A-001: CircuitBreakerOpenError ->
238
+ // retryable=true with the per-module recovery hint already attached
239
+ // by apcore-js's error class (mirrored via _attachAiGuidance).
240
+ if (code === ErrorCodes.CIRCUIT_BREAKER_OPEN) {
238
241
  const result = {
239
242
  isError: true,
240
243
  errorType: code,
241
244
  message: error.message,
242
245
  details,
243
- userFixable: true,
246
+ retryable: true,
244
247
  };
245
248
  this._attachAiGuidance(error, result);
249
+ if (!result.aiGuidance) {
250
+ result.aiGuidance =
251
+ "Module's circuit breaker is OPEN — repeated failures have tripped " +
252
+ "the breaker. Wait until the recovery window elapses, then retry; " +
253
+ "the breaker will move to HALF_OPEN and accept a trial call.";
254
+ }
246
255
  return result;
247
256
  }
248
257
  // Other known ModuleError codes -> pass through
@@ -255,13 +264,27 @@ export class ErrorMapper {
255
264
  this._attachAiGuidance(error, result);
256
265
  return result;
257
266
  }
258
- // Unknown/unexpected exceptions -> generic error
259
- return {
260
- isError: true,
261
- errorType: ErrorCodes.INTERNAL_ERROR,
262
- message: "Internal error occurred",
263
- details: null,
264
- };
267
+ // Unknown/unexpected exceptions -> canonical GENERAL_INTERNAL_ERROR envelope (EM-6).
268
+ // Mirrors Python `internal_error_response()` and Rust `to_mcp_error_any()`.
269
+ return internalErrorResponse();
270
+ }
271
+ /**
272
+ * Generic-error fallback for arbitrary inputs.
273
+ *
274
+ * Ports Rust's `to_mcp_error_any` downcast pattern: if the input is a
275
+ * `ModuleError` subclass, delegate to {@link toMcpError} so structured
276
+ * fields (code, details, AI guidance) survive. Otherwise — plain `Error`,
277
+ * unrelated subclass, or non-error object — return the canonical
278
+ * GENERAL_INTERNAL_ERROR envelope. The original class, message, stack,
279
+ * and details are deliberately discarded in that branch (security: avoid
280
+ * leaking server-side state). [D9-004]
281
+ */
282
+ toMcpErrorAny(error) {
283
+ const ModuleError = _apcoreErrorClasses?.ModuleError;
284
+ if (ModuleError && error instanceof ModuleError) {
285
+ return this.toMcpError(error);
286
+ }
287
+ return internalErrorResponse();
265
288
  }
266
289
  /**
267
290
  * Preferred `instanceof` dispatch for concrete apcore-js error classes.
@@ -294,7 +317,6 @@ export class ErrorMapper {
294
317
  errorType: ErrorCodes.DEPENDENCY_NOT_FOUND,
295
318
  message: error.message,
296
319
  details: asModErr.details ?? null,
297
- userFixable: true,
298
320
  };
299
321
  this._attachAiGuidance(error, result);
300
322
  return result;
@@ -305,7 +327,6 @@ export class ErrorMapper {
305
327
  errorType: ErrorCodes.DEPENDENCY_VERSION_MISMATCH,
306
328
  message: error.message,
307
329
  details: asModErr.details ?? null,
308
- userFixable: true,
309
330
  };
310
331
  this._attachAiGuidance(error, result);
311
332
  return result;
@@ -316,7 +337,6 @@ export class ErrorMapper {
316
337
  errorType: ErrorCodes.VERSION_CONSTRAINT_INVALID,
317
338
  message: error.message,
318
339
  details: asModErr.details ?? null,
319
- userFixable: true,
320
340
  };
321
341
  this._attachAiGuidance(error, result);
322
342
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"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"}
@@ -28,12 +28,13 @@ export declare class ModuleIDNormalizer {
28
28
  * Bijection-guarded variant of denormalize. [MID-5]
29
29
  *
30
30
  * Returns the denormalized module ID if `toolName` is a valid pre-image of
31
- * `normalize()` (i.e. it passes the normalized-name pattern validation).
32
- * Returns `null` for inputs that could not have been produced by `normalize()`.
31
+ * `normalize()` (i.e. the dash→dot replacement yields a string matching
32
+ * MODULE_ID_PATTERN). Returns `null` for inputs that could not have been
33
+ * produced by `normalize()`.
33
34
  *
34
- * Valid normalized names must match: `[a-z0-9]+(-[a-z0-9]+)*`
35
- * - Lowercase alphanumeric segments separated by single hyphens.
36
- * - No uppercase, no leading/trailing/consecutive hyphens, no empty string.
35
+ * Cross-language parity [D11-3]: validates the denormalized result against
36
+ * the shared MODULE_ID_PATTERN so underscores within segments (e.g.
37
+ * `"my_mod-v2"` `"my_mod.v2"`) round-trip identically to Python/Rust.
37
38
  */
38
39
  tryDenormalize(toolName: string): string | null;
39
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"id-normalizer.d.ts","sourceRoot":"","sources":["../../src/adapters/id-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,qBAAa,kBAAkB;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASnC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;;;;;;OAUG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAUhD"}
1
+ {"version":3,"file":"id-normalizer.d.ts","sourceRoot":"","sources":["../../src/adapters/id-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,qBAAa,kBAAkB;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASnC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAMhD"}
@@ -36,24 +36,21 @@ export class ModuleIDNormalizer {
36
36
  * Bijection-guarded variant of denormalize. [MID-5]
37
37
  *
38
38
  * Returns the denormalized module ID if `toolName` is a valid pre-image of
39
- * `normalize()` (i.e. it passes the normalized-name pattern validation).
40
- * Returns `null` for inputs that could not have been produced by `normalize()`.
39
+ * `normalize()` (i.e. the dash→dot replacement yields a string matching
40
+ * MODULE_ID_PATTERN). Returns `null` for inputs that could not have been
41
+ * produced by `normalize()`.
41
42
  *
42
- * Valid normalized names must match: `[a-z0-9]+(-[a-z0-9]+)*`
43
- * - Lowercase alphanumeric segments separated by single hyphens.
44
- * - No uppercase, no leading/trailing/consecutive hyphens, no empty string.
43
+ * Cross-language parity [D11-3]: validates the denormalized result against
44
+ * the shared MODULE_ID_PATTERN so underscores within segments (e.g.
45
+ * `"my_mod-v2"` `"my_mod.v2"`) round-trip identically to Python/Rust.
45
46
  */
46
47
  tryDenormalize(toolName) {
47
- // Must be non-empty, all-lowercase, no consecutive/leading/trailing hyphens,
48
- // only [a-z0-9-] characters.
49
48
  if (!toolName || toolName.length === 0)
50
49
  return null;
51
- // Pattern: segments of [a-z][a-z0-9]* joined by single hyphens.
52
- // Mirrors MODULE_ID_PATTERN where each segment starts with a lowercase letter.
53
- const NORMALIZED_PATTERN = /^[a-z][a-z0-9]*(-[a-z][a-z0-9]*)*$/;
54
- if (!NORMALIZED_PATTERN.test(toolName))
50
+ const denormalized = this.denormalize(toolName);
51
+ if (!MODULE_ID_PATTERN.test(denormalized))
55
52
  return null;
56
- return this.denormalize(toolName);
53
+ return denormalized;
57
54
  }
58
55
  }
59
56
  //# sourceMappingURL=id-normalizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"id-normalizer.js","sourceRoot":"","sources":["../../src/adapters/id-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,OAAO,kBAAkB;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,QAAgB;QACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,sBAAsB,QAAQ,yBAAyB,iBAAiB,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAAgB;QAC1B,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;;;OAUG;IACH,cAAc,CAAC,QAAgB;QAC7B,6EAA6E;QAC7E,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,gEAAgE;QAChE,+EAA+E;QAC/E,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;CACF"}
1
+ {"version":3,"file":"id-normalizer.js","sourceRoot":"","sources":["../../src/adapters/id-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,OAAO,kBAAkB;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,QAAgB;QACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,sBAAsB,QAAQ,yBAAyB,iBAAiB,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAAgB;QAC1B,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
@@ -47,6 +47,15 @@ export declare class SchemaConverter {
47
47
  *
48
48
  * Returns a deep copy of the resolved definition to avoid mutation.
49
49
  * Throws Error if the ref format is invalid or the definition is not found.
50
+ *
51
+ * JS-specific hardening (mirrors apcore-toolkit's `PROTO_DENY_LIST` in
52
+ * `binding-parser.ts`): reject ref segments that resolve to dangerous
53
+ * prototype-chain keys (`__proto__`, `constructor`, `prototype`). Without
54
+ * this guard, `defs[name]` would return values from `Object.prototype`
55
+ * even when the user supplied no matching definition, enabling prototype
56
+ * pollution / unexpected schema resolution. This deny-list has no Python
57
+ * counterpart because Python's attribute lookups are not affected by this
58
+ * vulnerability class.
50
59
  */
51
60
  _resolveRef(refPath: string, defs: Record<string, JsonSchema>): JsonSchema;
52
61
  /**
@@ -54,6 +63,8 @@ export declare class SchemaConverter {
54
63
  *
55
64
  * - Empty schema -> `{ type: "object", properties: {} }`
56
65
  * - Schema without `type` -> adds `type: "object"`
66
+ * - Schema with non-object `type` but defining `properties` -> forces
67
+ * `type: "object"` to keep cross-language parity with Python/Rust [D11-4].
57
68
  */
58
69
  _ensureObjectType(schema: JsonSchema): JsonSchema;
59
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/adapters/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAUD,qBAAa,eAAe;IAC1B;;OAEG;IACH,kBAAkB,CAChB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,UAAU;IAIb;;OAEG;IACH,mBAAmB,CACjB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,UAAU;IAIb;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,UAAU;IAyB9E;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAkGpC;;;;;OAKG;IACH,WAAW,CACT,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,KAAK,GAAE,MAAU,GAChB,OAAO;IAsDV;;;;;OAKG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAC/B,UAAU;IAoBb;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU;CAclD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/adapters/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuBD,qBAAa,eAAe;IAC1B;;OAEG;IACH,kBAAkB,CAChB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,UAAU;IAIb;;OAEG;IACH,mBAAmB,CACjB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,UAAU;IAIb;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,UAAU;IAyB9E;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAkGpC;;;;;OAKG;IACH,WAAW,CACT,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,KAAK,GAAE,MAAU,GAChB,OAAO;IAsDV;;;;;;;;;;;;;;OAcG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAC/B,UAAU;IA+Bb;;;;;;;OAOG;IACH,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU;CA0BlD"}