@sundaeswap/sprinkles 0.6.0 → 0.7.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 (158) hide show
  1. package/dist/cjs/Sprinkle/__tests__/action-integration.test.js +590 -0
  2. package/dist/cjs/Sprinkle/__tests__/action-integration.test.js.map +1 -0
  3. package/dist/cjs/Sprinkle/__tests__/action-registry.test.js +193 -0
  4. package/dist/cjs/Sprinkle/__tests__/action-registry.test.js.map +1 -0
  5. package/dist/cjs/Sprinkle/__tests__/action-runner.test.js +304 -0
  6. package/dist/cjs/Sprinkle/__tests__/action-runner.test.js.map +1 -0
  7. package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js +1110 -0
  8. package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js.map +1 -0
  9. package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js +722 -0
  10. package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js.map +1 -0
  11. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js +138 -0
  12. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  13. package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js +713 -0
  14. package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -0
  15. package/dist/cjs/Sprinkle/__tests__/tui-helpers.test.js +334 -0
  16. package/dist/cjs/Sprinkle/__tests__/tui-helpers.test.js.map +1 -0
  17. package/dist/cjs/Sprinkle/__tests__/wallet-transaction-actions.test.js +749 -0
  18. package/dist/cjs/Sprinkle/__tests__/wallet-transaction-actions.test.js.map +1 -0
  19. package/dist/cjs/Sprinkle/actions/builtin/blaze-helper.js +61 -0
  20. package/dist/cjs/Sprinkle/actions/builtin/blaze-helper.js.map +1 -0
  21. package/dist/cjs/Sprinkle/actions/builtin/index.js +117 -0
  22. package/dist/cjs/Sprinkle/actions/builtin/index.js.map +1 -0
  23. package/dist/cjs/Sprinkle/actions/builtin/profile-actions.js +202 -0
  24. package/dist/cjs/Sprinkle/actions/builtin/profile-actions.js.map +1 -0
  25. package/dist/cjs/Sprinkle/actions/builtin/settings-actions.js +87 -0
  26. package/dist/cjs/Sprinkle/actions/builtin/settings-actions.js.map +1 -0
  27. package/dist/cjs/Sprinkle/actions/builtin/transaction-actions.js +345 -0
  28. package/dist/cjs/Sprinkle/actions/builtin/transaction-actions.js.map +1 -0
  29. package/dist/cjs/Sprinkle/actions/builtin/wallet-actions.js +212 -0
  30. package/dist/cjs/Sprinkle/actions/builtin/wallet-actions.js.map +1 -0
  31. package/dist/cjs/Sprinkle/actions/cli-adapter.js +372 -0
  32. package/dist/cjs/Sprinkle/actions/cli-adapter.js.map +1 -0
  33. package/dist/cjs/Sprinkle/actions/index.js +127 -0
  34. package/dist/cjs/Sprinkle/actions/index.js.map +1 -0
  35. package/dist/cjs/Sprinkle/actions/mcp-adapter.js +415 -0
  36. package/dist/cjs/Sprinkle/actions/mcp-adapter.js.map +1 -0
  37. package/dist/cjs/Sprinkle/actions/registry.js +92 -0
  38. package/dist/cjs/Sprinkle/actions/registry.js.map +1 -0
  39. package/dist/cjs/Sprinkle/actions/runner.js +190 -0
  40. package/dist/cjs/Sprinkle/actions/runner.js.map +1 -0
  41. package/dist/cjs/Sprinkle/actions/tui-helpers.js +96 -0
  42. package/dist/cjs/Sprinkle/actions/tui-helpers.js.map +1 -0
  43. package/dist/cjs/Sprinkle/actions/types.js +68 -0
  44. package/dist/cjs/Sprinkle/actions/types.js.map +1 -0
  45. package/dist/cjs/Sprinkle/index.js +451 -4
  46. package/dist/cjs/Sprinkle/index.js.map +1 -1
  47. package/dist/cjs/Sprinkle/prompts.js +12 -7
  48. package/dist/cjs/Sprinkle/prompts.js.map +1 -1
  49. package/dist/cjs/Sprinkle/type-guards.js +7 -1
  50. package/dist/cjs/Sprinkle/type-guards.js.map +1 -1
  51. package/dist/esm/Sprinkle/__tests__/action-integration.test.js +588 -0
  52. package/dist/esm/Sprinkle/__tests__/action-integration.test.js.map +1 -0
  53. package/dist/esm/Sprinkle/__tests__/action-registry.test.js +192 -0
  54. package/dist/esm/Sprinkle/__tests__/action-registry.test.js.map +1 -0
  55. package/dist/esm/Sprinkle/__tests__/action-runner.test.js +302 -0
  56. package/dist/esm/Sprinkle/__tests__/action-runner.test.js.map +1 -0
  57. package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js +1107 -0
  58. package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js.map +1 -0
  59. package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js +720 -0
  60. package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js.map +1 -0
  61. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js +138 -0
  62. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  63. package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js +712 -0
  64. package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -0
  65. package/dist/esm/Sprinkle/__tests__/tui-helpers.test.js +332 -0
  66. package/dist/esm/Sprinkle/__tests__/tui-helpers.test.js.map +1 -0
  67. package/dist/esm/Sprinkle/__tests__/wallet-transaction-actions.test.js +747 -0
  68. package/dist/esm/Sprinkle/__tests__/wallet-transaction-actions.test.js.map +1 -0
  69. package/dist/esm/Sprinkle/actions/builtin/blaze-helper.js +55 -0
  70. package/dist/esm/Sprinkle/actions/builtin/blaze-helper.js.map +1 -0
  71. package/dist/esm/Sprinkle/actions/builtin/index.js +32 -0
  72. package/dist/esm/Sprinkle/actions/builtin/index.js.map +1 -0
  73. package/dist/esm/Sprinkle/actions/builtin/profile-actions.js +197 -0
  74. package/dist/esm/Sprinkle/actions/builtin/profile-actions.js.map +1 -0
  75. package/dist/esm/Sprinkle/actions/builtin/settings-actions.js +81 -0
  76. package/dist/esm/Sprinkle/actions/builtin/settings-actions.js.map +1 -0
  77. package/dist/esm/Sprinkle/actions/builtin/transaction-actions.js +340 -0
  78. package/dist/esm/Sprinkle/actions/builtin/transaction-actions.js.map +1 -0
  79. package/dist/esm/Sprinkle/actions/builtin/wallet-actions.js +207 -0
  80. package/dist/esm/Sprinkle/actions/builtin/wallet-actions.js.map +1 -0
  81. package/dist/esm/Sprinkle/actions/cli-adapter.js +361 -0
  82. package/dist/esm/Sprinkle/actions/cli-adapter.js.map +1 -0
  83. package/dist/esm/Sprinkle/actions/index.js +12 -0
  84. package/dist/esm/Sprinkle/actions/index.js.map +1 -0
  85. package/dist/esm/Sprinkle/actions/mcp-adapter.js +407 -0
  86. package/dist/esm/Sprinkle/actions/mcp-adapter.js.map +1 -0
  87. package/dist/esm/Sprinkle/actions/registry.js +85 -0
  88. package/dist/esm/Sprinkle/actions/registry.js.map +1 -0
  89. package/dist/esm/Sprinkle/actions/runner.js +182 -0
  90. package/dist/esm/Sprinkle/actions/runner.js.map +1 -0
  91. package/dist/esm/Sprinkle/actions/tui-helpers.js +91 -0
  92. package/dist/esm/Sprinkle/actions/tui-helpers.js.map +1 -0
  93. package/dist/esm/Sprinkle/actions/types.js +61 -0
  94. package/dist/esm/Sprinkle/actions/types.js.map +1 -0
  95. package/dist/esm/Sprinkle/index.js +299 -4
  96. package/dist/esm/Sprinkle/index.js.map +1 -1
  97. package/dist/esm/Sprinkle/prompts.js +12 -7
  98. package/dist/esm/Sprinkle/prompts.js.map +1 -1
  99. package/dist/esm/Sprinkle/type-guards.js +3 -0
  100. package/dist/esm/Sprinkle/type-guards.js.map +1 -1
  101. package/dist/types/Sprinkle/actions/builtin/blaze-helper.d.ts +39 -0
  102. package/dist/types/Sprinkle/actions/builtin/blaze-helper.d.ts.map +1 -0
  103. package/dist/types/Sprinkle/actions/builtin/index.d.ts +26 -0
  104. package/dist/types/Sprinkle/actions/builtin/index.d.ts.map +1 -0
  105. package/dist/types/Sprinkle/actions/builtin/profile-actions.d.ts +55 -0
  106. package/dist/types/Sprinkle/actions/builtin/profile-actions.d.ts.map +1 -0
  107. package/dist/types/Sprinkle/actions/builtin/settings-actions.d.ts +32 -0
  108. package/dist/types/Sprinkle/actions/builtin/settings-actions.d.ts.map +1 -0
  109. package/dist/types/Sprinkle/actions/builtin/transaction-actions.d.ts +70 -0
  110. package/dist/types/Sprinkle/actions/builtin/transaction-actions.d.ts.map +1 -0
  111. package/dist/types/Sprinkle/actions/builtin/wallet-actions.d.ts +50 -0
  112. package/dist/types/Sprinkle/actions/builtin/wallet-actions.d.ts.map +1 -0
  113. package/dist/types/Sprinkle/actions/cli-adapter.d.ts +104 -0
  114. package/dist/types/Sprinkle/actions/cli-adapter.d.ts.map +1 -0
  115. package/dist/types/Sprinkle/actions/index.d.ts +12 -0
  116. package/dist/types/Sprinkle/actions/index.d.ts.map +1 -0
  117. package/dist/types/Sprinkle/actions/mcp-adapter.d.ts +92 -0
  118. package/dist/types/Sprinkle/actions/mcp-adapter.d.ts.map +1 -0
  119. package/dist/types/Sprinkle/actions/registry.d.ts +42 -0
  120. package/dist/types/Sprinkle/actions/registry.d.ts.map +1 -0
  121. package/dist/types/Sprinkle/actions/runner.d.ts +45 -0
  122. package/dist/types/Sprinkle/actions/runner.d.ts.map +1 -0
  123. package/dist/types/Sprinkle/actions/tui-helpers.d.ts +53 -0
  124. package/dist/types/Sprinkle/actions/tui-helpers.d.ts.map +1 -0
  125. package/dist/types/Sprinkle/actions/types.d.ts +76 -0
  126. package/dist/types/Sprinkle/actions/types.d.ts.map +1 -0
  127. package/dist/types/Sprinkle/index.d.ts +81 -1
  128. package/dist/types/Sprinkle/index.d.ts.map +1 -1
  129. package/dist/types/Sprinkle/prompts.d.ts.map +1 -1
  130. package/dist/types/Sprinkle/type-guards.d.ts +4 -1
  131. package/dist/types/Sprinkle/type-guards.d.ts.map +1 -1
  132. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  133. package/package.json +9 -2
  134. package/src/Sprinkle/__tests__/action-integration.test.ts +558 -0
  135. package/src/Sprinkle/__tests__/action-registry.test.ts +187 -0
  136. package/src/Sprinkle/__tests__/action-runner.test.ts +324 -0
  137. package/src/Sprinkle/__tests__/builtin-actions.test.ts +1022 -0
  138. package/src/Sprinkle/__tests__/cli-adapter.test.ts +715 -0
  139. package/src/Sprinkle/__tests__/fill-in-struct.test.ts +144 -0
  140. package/src/Sprinkle/__tests__/mcp-adapter.test.ts +718 -0
  141. package/src/Sprinkle/__tests__/tui-helpers.test.ts +325 -0
  142. package/src/Sprinkle/__tests__/wallet-transaction-actions.test.ts +695 -0
  143. package/src/Sprinkle/actions/builtin/blaze-helper.ts +89 -0
  144. package/src/Sprinkle/actions/builtin/index.ts +86 -0
  145. package/src/Sprinkle/actions/builtin/profile-actions.ts +229 -0
  146. package/src/Sprinkle/actions/builtin/settings-actions.ts +99 -0
  147. package/src/Sprinkle/actions/builtin/transaction-actions.ts +381 -0
  148. package/src/Sprinkle/actions/builtin/wallet-actions.ts +233 -0
  149. package/src/Sprinkle/actions/cli-adapter.ts +430 -0
  150. package/src/Sprinkle/actions/index.ts +32 -0
  151. package/src/Sprinkle/actions/mcp-adapter.ts +463 -0
  152. package/src/Sprinkle/actions/registry.ts +97 -0
  153. package/src/Sprinkle/actions/runner.ts +200 -0
  154. package/src/Sprinkle/actions/tui-helpers.ts +114 -0
  155. package/src/Sprinkle/actions/types.ts +91 -0
  156. package/src/Sprinkle/index.ts +395 -3
  157. package/src/Sprinkle/prompts.ts +118 -72
  158. package/src/Sprinkle/type-guards.ts +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.test.js","names":["_bunTest","require","_typebox","_index","describe","test","expect","typeboxToJsonSchema","Type","String","toEqual","type","Number","Integer","Boolean","Null","result","BigInt","pattern","description","schema","sensitive","toBe","writeOnly","Array","items","Object","name","count","properties","required","arrayContaining","outer","inner","x","props","optional","Optional","toContain","not","a","b","length","Union","anyOf","bigIntMember","find","m","toBeDefined","Literal","const","title","examples","default","minimum","maximum","keys","every","k","startsWith","$id","warnSpy","spyOn","console","mockImplementation","unknownSchema","Symbol","for","toHaveBeenCalled","mockRestore","coerceMcpInput","toBeNull","undefined","toBeUndefined","amount","label","input","stake","fee","memo","sdk","getMcpSdk","McpServer","registeredTools","mockMcpServer","MockMcpServerClass","beforeEach","tool","handler","push","mock","module","makeMockSprinkle","actions","actionMap","Map","map","listActions","getAction","get","settings","sprinkle","inputSchema","who","outputSchema","greeting","execute","createMcpServer","toHaveLength","balance","names","t","message","response","content","data","JSON","parse","text","ok","isError","Error","errorData","error","capturedInput","value"],"sources":["../../../../src/Sprinkle/__tests__/mcp-adapter.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach, spyOn } from \"bun:test\";\nimport { Type } from \"@sinclair/typebox\";\nimport {\n typeboxToJsonSchema,\n coerceMcpInput,\n getMcpSdk,\n createMcpServer,\n} from \"../actions/index.js\";\n\n// ---------------------------------------------------------------------------\n// typeboxToJsonSchema\n// ---------------------------------------------------------------------------\n\ndescribe(\"typeboxToJsonSchema\", () => {\n // --- Primitive types ---\n\n test(\"String schema -> { type: 'string' }\", () => {\n expect(typeboxToJsonSchema(Type.String())).toEqual({ type: \"string\" });\n });\n\n test(\"Number schema -> { type: 'number' }\", () => {\n expect(typeboxToJsonSchema(Type.Number())).toEqual({ type: \"number\" });\n });\n\n test(\"Integer schema -> { type: 'integer' }\", () => {\n expect(typeboxToJsonSchema(Type.Integer())).toEqual({ type: \"integer\" });\n });\n\n test(\"Boolean schema -> { type: 'boolean' }\", () => {\n expect(typeboxToJsonSchema(Type.Boolean())).toEqual({ type: \"boolean\" });\n });\n\n test(\"Null schema -> { type: 'null' }\", () => {\n expect(typeboxToJsonSchema(Type.Null())).toEqual({ type: \"null\" });\n });\n\n // --- BigInt ---\n\n test(\"BigInt schema -> { type: 'string', pattern: '^-?[0-9]+$' } with description\", () => {\n const result = typeboxToJsonSchema(Type.BigInt());\n expect(result).toEqual({\n type: \"string\",\n pattern: \"^-?[0-9]+$\",\n description: \"BigInt value as string\",\n });\n });\n\n // --- Sensitive string ---\n\n test(\"Sensitive string schema includes writeOnly: true\", () => {\n const schema = Type.String({ sensitive: true } as any);\n const result = typeboxToJsonSchema(schema);\n expect(result.type).toBe(\"string\");\n expect(result.writeOnly).toBe(true);\n });\n\n test(\"Non-sensitive string does not include writeOnly\", () => {\n const result = typeboxToJsonSchema(Type.String());\n expect(\"writeOnly\" in result).toBe(false);\n });\n\n // --- Array ---\n\n test(\"Array of strings -> { type: 'array', items: { type: 'string' } }\", () => {\n const result = typeboxToJsonSchema(Type.Array(Type.String()));\n expect(result).toEqual({\n type: \"array\",\n items: { type: \"string\" },\n });\n });\n\n test(\"Array of integers -> { type: 'array', items: { type: 'integer' } }\", () => {\n const result = typeboxToJsonSchema(Type.Array(Type.Integer()));\n expect(result).toEqual({\n type: \"array\",\n items: { type: \"integer\" },\n });\n });\n\n test(\"Array of BigInt -> items maps BigInt to string pattern\", () => {\n const result = typeboxToJsonSchema(Type.Array(Type.BigInt()));\n expect(result).toEqual({\n type: \"array\",\n items: {\n type: \"string\",\n pattern: \"^-?[0-9]+$\",\n description: \"BigInt value as string\",\n },\n });\n });\n\n // --- Object ---\n\n test(\"Nested object -> recursive properties with required array\", () => {\n const schema = Type.Object({\n name: Type.String(),\n count: Type.Integer(),\n });\n const result = typeboxToJsonSchema(schema);\n expect(result.type).toBe(\"object\");\n expect(result.properties).toEqual({\n name: { type: \"string\" },\n count: { type: \"integer\" },\n });\n expect(result.required).toEqual(expect.arrayContaining([\"name\", \"count\"]));\n });\n\n test(\"Nested object with nested object property converts recursively\", () => {\n const schema = Type.Object({\n outer: Type.String(),\n inner: Type.Object({ x: Type.Number() }),\n });\n const result = typeboxToJsonSchema(schema);\n const props = result.properties as Record<string, unknown>;\n expect(props.inner).toEqual({\n type: \"object\",\n properties: { x: { type: \"number\" } },\n required: [\"x\"],\n });\n });\n\n // --- Optional fields ---\n\n test(\"Optional field is not listed in required array\", () => {\n const schema = Type.Object({\n required: Type.String(),\n optional: Type.Optional(Type.String()),\n });\n const result = typeboxToJsonSchema(schema);\n const required = result.required as string[];\n expect(required).toContain(\"required\");\n expect(required).not.toContain(\"optional\");\n });\n\n test(\"Object with all optional fields has no required array (or empty)\", () => {\n const schema = Type.Object({\n a: Type.Optional(Type.String()),\n b: Type.Optional(Type.Number()),\n });\n const result = typeboxToJsonSchema(schema);\n // Either no 'required' key or empty array\n const required = result.required as string[] | undefined;\n expect(!required || required.length === 0).toBe(true);\n });\n\n // --- Union types ---\n\n test(\"Union of string and number -> { anyOf: [...] }\", () => {\n const schema = Type.Union([Type.String(), Type.Number()]);\n const result = typeboxToJsonSchema(schema);\n expect(result.anyOf).toEqual([{ type: \"string\" }, { type: \"number\" }]);\n });\n\n test(\"Union containing BigInt -> BigInt member maps to string pattern\", () => {\n const schema = Type.Union([Type.String(), Type.BigInt()]);\n const result = typeboxToJsonSchema(schema);\n const anyOf = result.anyOf as Record<string, unknown>[];\n const bigIntMember = anyOf.find((m) => m.pattern === \"^-?[0-9]+$\");\n expect(bigIntMember).toBeDefined();\n });\n\n // --- Literal types ---\n\n test(\"String literal -> { type: 'string', const: value }\", () => {\n const result = typeboxToJsonSchema(Type.Literal(\"hello\"));\n expect(result).toEqual({ type: \"string\", const: \"hello\" });\n });\n\n test(\"Number literal -> { type: 'number', const: value }\", () => {\n const result = typeboxToJsonSchema(Type.Literal(42));\n expect(result).toEqual({ type: \"number\", const: 42 });\n });\n\n test(\"Boolean literal -> { type: 'boolean', const: value }\", () => {\n const result = typeboxToJsonSchema(Type.Literal(true));\n expect(result).toEqual({ type: \"boolean\", const: true });\n });\n\n // --- Annotations: description, title, examples, default ---\n\n test(\"String schema preserves description annotation\", () => {\n const result = typeboxToJsonSchema(Type.String({ description: \"A name\" }));\n expect(result.description).toBe(\"A name\");\n });\n\n test(\"String schema preserves title annotation\", () => {\n const result = typeboxToJsonSchema(Type.String({ title: \"My Title\" }));\n expect(result.title).toBe(\"My Title\");\n });\n\n test(\"String schema preserves examples annotation\", () => {\n const result = typeboxToJsonSchema(Type.String({ examples: [\"foo\", \"bar\"] }));\n expect(result.examples).toEqual([\"foo\", \"bar\"]);\n });\n\n test(\"String schema preserves default annotation\", () => {\n const result = typeboxToJsonSchema(Type.String({ default: \"fallback\" }));\n expect(result.default).toBe(\"fallback\");\n });\n\n test(\"Number schema preserves description annotation\", () => {\n const result = typeboxToJsonSchema(Type.Number({ description: \"A count\" }));\n expect(result.description).toBe(\"A count\");\n });\n\n test(\"Number schema preserves minimum and maximum\", () => {\n const result = typeboxToJsonSchema(Type.Number({ minimum: 0, maximum: 100 }));\n expect(result.minimum).toBe(0);\n expect(result.maximum).toBe(100);\n });\n\n test(\"Integer schema preserves minimum and maximum\", () => {\n const result = typeboxToJsonSchema(Type.Integer({ minimum: 1, maximum: 10 }));\n expect(result.minimum).toBe(1);\n expect(result.maximum).toBe(10);\n });\n\n test(\"Boolean schema preserves default annotation\", () => {\n const result = typeboxToJsonSchema(Type.Boolean({ default: false }));\n expect(result.default).toBe(false);\n });\n\n // --- TypeBox internals stripped ---\n\n test(\"Output does not contain [Kind] symbol key\", () => {\n const result = typeboxToJsonSchema(Type.String());\n const keys = Object.keys(result);\n expect(keys.every((k) => !k.startsWith(\"[\"))).toBe(true);\n });\n\n test(\"Output does not contain $id key\", () => {\n const schema = Type.String();\n // Force-add a $id to confirm it is not emitted\n (schema as any).$id = \"some-id\";\n const result = typeboxToJsonSchema(schema);\n expect(\"$id\" in result).toBe(false);\n });\n\n // --- Unknown / empty schema fallback ---\n\n test(\"Unknown TypeBox kind emits empty schema {} with console.warn\", () => {\n const warnSpy = spyOn(console, \"warn\").mockImplementation(() => {});\n const unknownSchema = { [Symbol.for(\"TypeBox.Kind\")]: \"UnknownKind\" } as any;\n const result = typeboxToJsonSchema(unknownSchema);\n expect(result).toEqual({});\n expect(warnSpy).toHaveBeenCalled();\n warnSpy.mockRestore();\n });\n});\n\n// ---------------------------------------------------------------------------\n// coerceMcpInput\n// ---------------------------------------------------------------------------\n\ndescribe(\"coerceMcpInput\", () => {\n // --- BigInt coercion ---\n\n test(\"coerces BigInt string to BigInt when schema expects BigInt\", () => {\n const result = coerceMcpInput(\"12345\", Type.BigInt());\n expect(result).toBe(BigInt(\"12345\"));\n });\n\n test(\"coerces negative BigInt string to BigInt\", () => {\n const result = coerceMcpInput(\"-9876543210\", Type.BigInt());\n expect(result).toBe(BigInt(\"-9876543210\"));\n });\n\n test(\"coerces numeric input to BigInt via Math.trunc\", () => {\n const result = coerceMcpInput(99.9, Type.BigInt());\n expect(result).toBe(BigInt(99));\n });\n\n test(\"passes through already-BigInt value unchanged\", () => {\n const result = coerceMcpInput(BigInt(42), Type.BigInt());\n expect(result).toBe(BigInt(42));\n });\n\n test(\"non-numeric string left as-is for BigInt schema\", () => {\n const result = coerceMcpInput(\"not-a-number\", Type.BigInt());\n expect(result).toBe(\"not-a-number\");\n });\n\n // --- Non-BigInt types passed through ---\n\n test(\"string value passes through unchanged for String schema\", () => {\n const result = coerceMcpInput(\"hello\", Type.String());\n expect(result).toBe(\"hello\");\n });\n\n test(\"number passes through unchanged for Number schema\", () => {\n const result = coerceMcpInput(3.14, Type.Number());\n expect(result).toBe(3.14);\n });\n\n test(\"boolean passes through unchanged for Boolean schema\", () => {\n const result = coerceMcpInput(true, Type.Boolean());\n expect(result).toBe(true);\n });\n\n test(\"null passes through unchanged\", () => {\n expect(coerceMcpInput(null, Type.String())).toBeNull();\n });\n\n test(\"undefined passes through unchanged\", () => {\n expect(coerceMcpInput(undefined, Type.String())).toBeUndefined();\n });\n\n // --- Nested objects ---\n\n test(\"coerces BigInt fields within nested object\", () => {\n const schema = Type.Object({\n amount: Type.BigInt(),\n label: Type.String(),\n });\n const result = coerceMcpInput(\n { amount: \"99999999999999999\", label: \"test\" },\n schema,\n ) as Record<string, unknown>;\n expect(result.amount).toBe(BigInt(\"99999999999999999\"));\n expect(result.label).toBe(\"test\");\n });\n\n test(\"non-BigInt fields in nested object pass through unchanged\", () => {\n const schema = Type.Object({\n name: Type.String(),\n count: Type.Integer(),\n });\n const input = { name: \"alice\", count: 5 };\n const result = coerceMcpInput(input, schema) as Record<string, unknown>;\n expect(result.name).toBe(\"alice\");\n expect(result.count).toBe(5);\n });\n\n test(\"coerces BigInt in nested object without touching other fields\", () => {\n const schema = Type.Object({\n stake: Type.BigInt(),\n fee: Type.BigInt(),\n memo: Type.String(),\n });\n const result = coerceMcpInput(\n { stake: \"1000\", fee: \"50\", memo: \"swap\" },\n schema,\n ) as Record<string, unknown>;\n expect(result.stake).toBe(BigInt(1000));\n expect(result.fee).toBe(BigInt(50));\n expect(result.memo).toBe(\"swap\");\n });\n\n // --- Arrays ---\n\n test(\"coerces each BigInt string in array of BigInt\", () => {\n const schema = Type.Array(Type.BigInt());\n const result = coerceMcpInput([\"100\", \"200\", \"300\"], schema) as BigInt[];\n expect(result[0]).toBe(BigInt(100));\n expect(result[1]).toBe(BigInt(200));\n expect(result[2]).toBe(BigInt(300));\n });\n\n test(\"array of strings with String item schema passes through unchanged\", () => {\n const schema = Type.Array(Type.String());\n const input = [\"a\", \"b\", \"c\"];\n const result = coerceMcpInput(input, schema);\n expect(result).toEqual([\"a\", \"b\", \"c\"]);\n });\n\n // --- Union types ---\n\n test(\"coerces BigInt string in Union containing BigInt\", () => {\n const schema = Type.Union([Type.String(), Type.BigInt()]);\n // A numeric string should be coerced to BigInt because there is a BigInt member\n const result = coerceMcpInput(\"12345\", schema);\n expect(result).toBe(BigInt(12345));\n });\n\n test(\"non-numeric string in Union passes through unchanged\", () => {\n const schema = Type.Union([Type.String(), Type.BigInt()]);\n const result = coerceMcpInput(\"not-a-number\", schema);\n expect(result).toBe(\"not-a-number\");\n });\n\n test(\"value in Union without BigInt member passes through unchanged\", () => {\n const schema = Type.Union([Type.String(), Type.Number()]);\n const result = coerceMcpInput(\"hello\", schema);\n expect(result).toBe(\"hello\");\n });\n});\n\n// ---------------------------------------------------------------------------\n// getMcpSdk -- lazy import and error handling\n// ---------------------------------------------------------------------------\n\ndescribe(\"getMcpSdk\", () => {\n test(\"returns an object with McpServer class when SDK is available\", async () => {\n // The SDK is installed as a dev dependency, so this should succeed\n const sdk = await getMcpSdk();\n expect(sdk).toBeDefined();\n expect(typeof sdk.McpServer).toBe(\"function\");\n });\n});\n\n// ---------------------------------------------------------------------------\n// createMcpServer -- integration tests with mocked McpServer\n// ---------------------------------------------------------------------------\n\ndescribe(\"createMcpServer\", () => {\n // We mock the MCP SDK so that createMcpServer does not need a real stdio\n // transport. The mock captures all tool registrations.\n\n let registeredTools: Array<{\n name: string;\n description: string;\n schema: Record<string, unknown>;\n handler: (input: unknown) => Promise<unknown>;\n }>;\n\n let mockMcpServer: any;\n let MockMcpServerClass: any;\n\n beforeEach(() => {\n registeredTools = [];\n\n mockMcpServer = {\n tool: (\n name: string,\n description: string,\n schema: Record<string, unknown>,\n handler: (input: unknown) => Promise<unknown>,\n ) => {\n registeredTools.push({ name, description, schema, handler });\n },\n };\n\n MockMcpServerClass = mock(() => mockMcpServer);\n\n mock.module(\"@modelcontextprotocol/sdk/server/mcp.js\", () => ({\n McpServer: MockMcpServerClass,\n }));\n });\n\n // Helper: build a minimal Sprinkle-like mock\n function makeMockSprinkle(actions: any[]): any {\n const actionMap = new Map(actions.map((a: any) => [a.name, a]));\n return {\n listActions: () => actions,\n getAction: (name: string) => actionMap.get(name),\n settings: {},\n };\n }\n\n // --- Tool registration ---\n\n test(\"registers one MCP tool per action\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"greet\",\n description: \"Greets someone\",\n inputSchema: Type.Object({ who: Type.String() }),\n outputSchema: Type.Object({ greeting: Type.String() }),\n execute: async (input: any) => ({ greeting: `Hello, ${input.who}!` }),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n expect(registeredTools).toHaveLength(1);\n });\n\n test(\"tool name matches action name\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"send-tx\",\n description: \"Sends a transaction\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => ({}),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n expect(registeredTools[0]!.name).toBe(\"send-tx\");\n });\n\n test(\"tool description matches action description\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"get-balance\",\n description: \"Gets the wallet balance\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({ balance: Type.Number() }),\n execute: async () => ({ balance: 100 }),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n expect(registeredTools[0]!.description).toBe(\"Gets the wallet balance\");\n });\n\n test(\"registers all actions when multiple actions are provided\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"action-one\",\n description: \"First action\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => ({}),\n },\n {\n name: \"action-two\",\n description: \"Second action\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => ({}),\n },\n {\n name: \"action-three\",\n description: \"Third action\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => ({}),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n expect(registeredTools).toHaveLength(3);\n const names = registeredTools.map((t) => t.name);\n expect(names).toContain(\"action-one\");\n expect(names).toContain(\"action-two\");\n expect(names).toContain(\"action-three\");\n });\n\n // --- Empty action registry ---\n\n test(\"server is created with no tools when action registry is empty\", async () => {\n const sprinkle = makeMockSprinkle([]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n expect(registeredTools).toHaveLength(0);\n });\n\n // --- Tool input schema ---\n\n test(\"tool input schema is the JSON Schema conversion of the action inputSchema\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"typed-action\",\n description: \"Has a typed input\",\n inputSchema: Type.Object({\n name: Type.String(),\n count: Type.Integer(),\n }),\n outputSchema: Type.Object({}),\n execute: async () => ({}),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const schema = registeredTools[0]!.schema;\n expect(schema.type).toBe(\"object\");\n const props = schema.properties as Record<string, unknown>;\n expect(props.name).toEqual({ type: \"string\" });\n expect(props.count).toEqual({ type: \"integer\" });\n });\n\n // --- Tool handler: successful execution ---\n\n test(\"tool handler returns content with JSON text on successful execution\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"echo\",\n description: \"Echoes input\",\n inputSchema: Type.Object({ message: Type.String() }),\n outputSchema: Type.Object({ message: Type.String() }),\n execute: async (input: any) => ({ message: input.message }),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const handler = registeredTools[0]!.handler;\n const response = await handler({ message: \"hello\" }) as any;\n\n expect(response.content).toHaveLength(1);\n expect(response.content[0].type).toBe(\"text\");\n const data = JSON.parse(response.content[0].text);\n expect(data.message).toBe(\"hello\");\n });\n\n test(\"tool handler response does not include isError on success\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"ok-action\",\n description: \"Succeeds\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({ ok: Type.Boolean() }),\n execute: async () => ({ ok: true }),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const response = await registeredTools[0]!.handler({}) as any;\n expect(response.isError).toBeUndefined();\n });\n\n // --- Tool handler: failed execution ---\n\n test(\"tool handler returns isError: true on action failure\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"fail-action\",\n description: \"Always fails\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => {\n throw new Error(\"deliberate failure\");\n },\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const response = await registeredTools[0]!.handler({}) as any;\n expect(response.isError).toBe(true);\n });\n\n test(\"tool handler error response contains error details in content text\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"fail-action\",\n description: \"Always fails\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => {\n throw new Error(\"something broke\");\n },\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const response = await registeredTools[0]!.handler({}) as any;\n expect(response.content[0].type).toBe(\"text\");\n const errorData = JSON.parse(response.content[0].text);\n expect(errorData.error).toBeDefined();\n expect(errorData.error.message).toContain(\"something broke\");\n });\n\n test(\"tool handler error response content has type: 'text'\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"fail-action\",\n description: \"Always fails\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({}),\n execute: async () => {\n throw new Error(\"oops\");\n },\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const response = await registeredTools[0]!.handler({}) as any;\n expect(response.content[0].type).toBe(\"text\");\n });\n\n // --- BigInt coercion in tool input ---\n\n test(\"tool handler coerces BigInt string input before executing action\", async () => {\n let capturedInput: any;\n const sprinkle = makeMockSprinkle([\n {\n name: \"bigint-action\",\n description: \"Takes BigInt input\",\n inputSchema: Type.Object({ amount: Type.BigInt() }),\n outputSchema: Type.Object({ amount: Type.BigInt() }),\n execute: async (input: any) => {\n capturedInput = input;\n return { amount: input.amount };\n },\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n await registeredTools[0]!.handler({ amount: \"999999999999999999\" });\n\n expect(capturedInput.amount).toBe(BigInt(\"999999999999999999\"));\n });\n\n // --- BigInt serialization in tool response ---\n\n test(\"tool handler serializes BigInt values in response text\", async () => {\n const sprinkle = makeMockSprinkle([\n {\n name: \"bigint-return\",\n description: \"Returns BigInt\",\n inputSchema: Type.Object({}),\n outputSchema: Type.Object({ value: Type.BigInt() }),\n execute: async () => ({ value: BigInt(\"9007199254740993\") }),\n },\n ]);\n\n await createMcpServer(sprinkle, \"test-server\");\n\n const response = await registeredTools[0]!.handler({}) as any;\n\n // BigInt values cannot be JSON.stringify'd without a replacer.\n // bigIntReplacer converts them to \"Xn\" strings.\n const text = response.content[0].text;\n expect(text).toContain(\"9007199254740993\");\n });\n});\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAOA;AACA;AACA;;AAEA,IAAAG,iBAAQ,EAAC,qBAAqB,EAAE,MAAM;EACpC;;EAEA,IAAAC,aAAI,EAAC,qCAAqC,EAAE,MAAM;IAChD,IAAAC,eAAM,EAAC,IAAAC,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAS,CAAC,CAAC;EACxE,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,qCAAqC,EAAE,MAAM;IAChD,IAAAC,eAAM,EAAC,IAAAC,0BAAmB,EAACC,aAAI,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC,CAACF,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAS,CAAC,CAAC;EACxE,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,uCAAuC,EAAE,MAAM;IAClD,IAAAC,eAAM,EAAC,IAAAC,0BAAmB,EAACC,aAAI,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC,CAACH,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAU,CAAC,CAAC;EAC1E,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,uCAAuC,EAAE,MAAM;IAClD,IAAAC,eAAM,EAAC,IAAAC,0BAAmB,EAACC,aAAI,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC,CAACJ,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAU,CAAC,CAAC;EAC1E,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,iCAAiC,EAAE,MAAM;IAC5C,IAAAC,eAAM,EAAC,IAAAC,0BAAmB,EAACC,aAAI,CAACO,IAAI,CAAC,CAAC,CAAC,CAAC,CAACL,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAO,CAAC,CAAC;EACpE,CAAC,CAAC;;EAEF;;EAEA,IAAAN,aAAI,EAAC,6EAA6E,EAAE,MAAM;IACxF,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IACjD,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MACrBC,IAAI,EAAE,QAAQ;MACdO,OAAO,EAAE,YAAY;MACrBC,WAAW,EAAE;IACf,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;;EAEA,IAAAd,aAAI,EAAC,kDAAkD,EAAE,MAAM;IAC7D,MAAMe,MAAM,GAAGZ,aAAI,CAACC,MAAM,CAAC;MAAEY,SAAS,EAAE;IAAK,CAAQ,CAAC;IACtD,MAAML,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,IAAAd,eAAM,EAACU,MAAM,CAACL,IAAI,CAAC,CAACW,IAAI,CAAC,QAAQ,CAAC;IAClC,IAAAhB,eAAM,EAACU,MAAM,CAACO,SAAS,CAAC,CAACD,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,iDAAiD,EAAE,MAAM;IAC5D,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC;IACjD,IAAAH,eAAM,EAAC,WAAW,IAAIU,MAAM,CAAC,CAACM,IAAI,CAAC,KAAK,CAAC;EAC3C,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,kEAAkE,EAAE,MAAM;IAC7E,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACgB,KAAK,CAAChB,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAAH,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MACrBC,IAAI,EAAE,OAAO;MACbc,KAAK,EAAE;QAAEd,IAAI,EAAE;MAAS;IAC1B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,oEAAoE,EAAE,MAAM;IAC/E,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACgB,KAAK,CAAChB,aAAI,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAAP,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MACrBC,IAAI,EAAE,OAAO;MACbc,KAAK,EAAE;QAAEd,IAAI,EAAE;MAAU;IAC3B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,wDAAwD,EAAE,MAAM;IACnE,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACgB,KAAK,CAAChB,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MACrBC,IAAI,EAAE,OAAO;MACbc,KAAK,EAAE;QACLd,IAAI,EAAE,QAAQ;QACdO,OAAO,EAAE,YAAY;QACrBC,WAAW,EAAE;MACf;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;;EAEA,IAAAd,aAAI,EAAC,2DAA2D,EAAE,MAAM;IACtE,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBC,IAAI,EAAEnB,aAAI,CAACC,MAAM,CAAC,CAAC;MACnBmB,KAAK,EAAEpB,aAAI,CAACK,OAAO,CAAC;IACtB,CAAC,CAAC;IACF,MAAMG,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,IAAAd,eAAM,EAACU,MAAM,CAACL,IAAI,CAAC,CAACW,IAAI,CAAC,QAAQ,CAAC;IAClC,IAAAhB,eAAM,EAACU,MAAM,CAACa,UAAU,CAAC,CAACnB,OAAO,CAAC;MAChCiB,IAAI,EAAE;QAAEhB,IAAI,EAAE;MAAS,CAAC;MACxBiB,KAAK,EAAE;QAAEjB,IAAI,EAAE;MAAU;IAC3B,CAAC,CAAC;IACF,IAAAL,eAAM,EAACU,MAAM,CAACc,QAAQ,CAAC,CAACpB,OAAO,CAACJ,eAAM,CAACyB,eAAe,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;EAC5E,CAAC,CAAC;EAEF,IAAA1B,aAAI,EAAC,gEAAgE,EAAE,MAAM;IAC3E,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBM,KAAK,EAAExB,aAAI,CAACC,MAAM,CAAC,CAAC;MACpBwB,KAAK,EAAEzB,aAAI,CAACkB,MAAM,CAAC;QAAEQ,CAAC,EAAE1B,aAAI,CAACI,MAAM,CAAC;MAAE,CAAC;IACzC,CAAC,CAAC;IACF,MAAMI,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,MAAMe,KAAK,GAAGnB,MAAM,CAACa,UAAqC;IAC1D,IAAAvB,eAAM,EAAC6B,KAAK,CAACF,KAAK,CAAC,CAACvB,OAAO,CAAC;MAC1BC,IAAI,EAAE,QAAQ;MACdkB,UAAU,EAAE;QAAEK,CAAC,EAAE;UAAEvB,IAAI,EAAE;QAAS;MAAE,CAAC;MACrCmB,QAAQ,EAAE,CAAC,GAAG;IAChB,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;;EAEA,IAAAzB,aAAI,EAAC,gDAAgD,EAAE,MAAM;IAC3D,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBI,QAAQ,EAAEtB,aAAI,CAACC,MAAM,CAAC,CAAC;MACvB2B,QAAQ,EAAE5B,aAAI,CAAC6B,QAAQ,CAAC7B,aAAI,CAACC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC;IACF,MAAMO,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,MAAMU,QAAQ,GAAGd,MAAM,CAACc,QAAoB;IAC5C,IAAAxB,eAAM,EAACwB,QAAQ,CAAC,CAACQ,SAAS,CAAC,UAAU,CAAC;IACtC,IAAAhC,eAAM,EAACwB,QAAQ,CAAC,CAACS,GAAG,CAACD,SAAS,CAAC,UAAU,CAAC;EAC5C,CAAC,CAAC;EAEF,IAAAjC,aAAI,EAAC,kEAAkE,EAAE,MAAM;IAC7E,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBc,CAAC,EAAEhC,aAAI,CAAC6B,QAAQ,CAAC7B,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC;MAC/BgC,CAAC,EAAEjC,aAAI,CAAC6B,QAAQ,CAAC7B,aAAI,CAACI,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAMI,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C;IACA,MAAMU,QAAQ,GAAGd,MAAM,CAACc,QAAgC;IACxD,IAAAxB,eAAM,EAAC,CAACwB,QAAQ,IAAIA,QAAQ,CAACY,MAAM,KAAK,CAAC,CAAC,CAACpB,IAAI,CAAC,IAAI,CAAC;EACvD,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,gDAAgD,EAAE,MAAM;IAC3D,MAAMe,MAAM,GAAGZ,aAAI,CAACmC,KAAK,CAAC,CAACnC,aAAI,CAACC,MAAM,CAAC,CAAC,EAAED,aAAI,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD,MAAMI,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,IAAAd,eAAM,EAACU,MAAM,CAAC4B,KAAK,CAAC,CAAClC,OAAO,CAAC,CAAC;MAAEC,IAAI,EAAE;IAAS,CAAC,EAAE;MAAEA,IAAI,EAAE;IAAS,CAAC,CAAC,CAAC;EACxE,CAAC,CAAC;EAEF,IAAAN,aAAI,EAAC,iEAAiE,EAAE,MAAM;IAC5E,MAAMe,MAAM,GAAGZ,aAAI,CAACmC,KAAK,CAAC,CAACnC,aAAI,CAACC,MAAM,CAAC,CAAC,EAAED,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD,MAAMD,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,MAAMwB,KAAK,GAAG5B,MAAM,CAAC4B,KAAkC;IACvD,MAAMC,YAAY,GAAGD,KAAK,CAACE,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAAC7B,OAAO,KAAK,YAAY,CAAC;IAClE,IAAAZ,eAAM,EAACuC,YAAY,CAAC,CAACG,WAAW,CAAC,CAAC;EACpC,CAAC,CAAC;;EAEF;;EAEA,IAAA3C,aAAI,EAAC,oDAAoD,EAAE,MAAM;IAC/D,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACyC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAA3C,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MAAEC,IAAI,EAAE,QAAQ;MAAEuC,KAAK,EAAE;IAAQ,CAAC,CAAC;EAC5D,CAAC,CAAC;EAEF,IAAA7C,aAAI,EAAC,oDAAoD,EAAE,MAAM;IAC/D,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACyC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpD,IAAA3C,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MAAEC,IAAI,EAAE,QAAQ;MAAEuC,KAAK,EAAE;IAAG,CAAC,CAAC;EACvD,CAAC,CAAC;EAEF,IAAA7C,aAAI,EAAC,sDAAsD,EAAE,MAAM;IACjE,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACyC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,IAAA3C,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC;MAAEC,IAAI,EAAE,SAAS;MAAEuC,KAAK,EAAE;IAAK,CAAC,CAAC;EAC1D,CAAC,CAAC;;EAEF;;EAEA,IAAA7C,aAAI,EAAC,gDAAgD,EAAE,MAAM;IAC3D,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC;MAAEU,WAAW,EAAE;IAAS,CAAC,CAAC,CAAC;IAC1E,IAAAb,eAAM,EAACU,MAAM,CAACG,WAAW,CAAC,CAACG,IAAI,CAAC,QAAQ,CAAC;EAC3C,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,0CAA0C,EAAE,MAAM;IACrD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC;MAAE0C,KAAK,EAAE;IAAW,CAAC,CAAC,CAAC;IACtE,IAAA7C,eAAM,EAACU,MAAM,CAACmC,KAAK,CAAC,CAAC7B,IAAI,CAAC,UAAU,CAAC;EACvC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,6CAA6C,EAAE,MAAM;IACxD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC;MAAE2C,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK;IAAE,CAAC,CAAC,CAAC;IAC7E,IAAA9C,eAAM,EAACU,MAAM,CAACoC,QAAQ,CAAC,CAAC1C,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EACjD,CAAC,CAAC;EAEF,IAAAL,aAAI,EAAC,4CAA4C,EAAE,MAAM;IACvD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC;MAAE4C,OAAO,EAAE;IAAW,CAAC,CAAC,CAAC;IACxE,IAAA/C,eAAM,EAACU,MAAM,CAACqC,OAAO,CAAC,CAAC/B,IAAI,CAAC,UAAU,CAAC;EACzC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,gDAAgD,EAAE,MAAM;IAC3D,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACI,MAAM,CAAC;MAAEO,WAAW,EAAE;IAAU,CAAC,CAAC,CAAC;IAC3E,IAAAb,eAAM,EAACU,MAAM,CAACG,WAAW,CAAC,CAACG,IAAI,CAAC,SAAS,CAAC;EAC5C,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,6CAA6C,EAAE,MAAM;IACxD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACI,MAAM,CAAC;MAAE0C,OAAO,EAAE,CAAC;MAAEC,OAAO,EAAE;IAAI,CAAC,CAAC,CAAC;IAC7E,IAAAjD,eAAM,EAACU,MAAM,CAACsC,OAAO,CAAC,CAAChC,IAAI,CAAC,CAAC,CAAC;IAC9B,IAAAhB,eAAM,EAACU,MAAM,CAACuC,OAAO,CAAC,CAACjC,IAAI,CAAC,GAAG,CAAC;EAClC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,8CAA8C,EAAE,MAAM;IACzD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACK,OAAO,CAAC;MAAEyC,OAAO,EAAE,CAAC;MAAEC,OAAO,EAAE;IAAG,CAAC,CAAC,CAAC;IAC7E,IAAAjD,eAAM,EAACU,MAAM,CAACsC,OAAO,CAAC,CAAChC,IAAI,CAAC,CAAC,CAAC;IAC9B,IAAAhB,eAAM,EAACU,MAAM,CAACuC,OAAO,CAAC,CAACjC,IAAI,CAAC,EAAE,CAAC;EACjC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,6CAA6C,EAAE,MAAM;IACxD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACM,OAAO,CAAC;MAAEuC,OAAO,EAAE;IAAM,CAAC,CAAC,CAAC;IACpE,IAAA/C,eAAM,EAACU,MAAM,CAACqC,OAAO,CAAC,CAAC/B,IAAI,CAAC,KAAK,CAAC;EACpC,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,2CAA2C,EAAE,MAAM;IACtD,MAAMW,MAAM,GAAG,IAAAT,0BAAmB,EAACC,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC;IACjD,MAAM+C,IAAI,GAAG9B,MAAM,CAAC8B,IAAI,CAACxC,MAAM,CAAC;IAChC,IAAAV,eAAM,EAACkD,IAAI,CAACC,KAAK,CAAEC,CAAC,IAAK,CAACA,CAAC,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAACrC,IAAI,CAAC,IAAI,CAAC;EAC1D,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,iCAAiC,EAAE,MAAM;IAC5C,MAAMe,MAAM,GAAGZ,aAAI,CAACC,MAAM,CAAC,CAAC;IAC5B;IACCW,MAAM,CAASwC,GAAG,GAAG,SAAS;IAC/B,MAAM5C,MAAM,GAAG,IAAAT,0BAAmB,EAACa,MAAM,CAAC;IAC1C,IAAAd,eAAM,EAAC,KAAK,IAAIU,MAAM,CAAC,CAACM,IAAI,CAAC,KAAK,CAAC;EACrC,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,8DAA8D,EAAE,MAAM;IACzE,MAAMwD,OAAO,GAAG,IAAAC,cAAK,EAACC,OAAO,EAAE,MAAM,CAAC,CAACC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,MAAMC,aAAa,GAAG;MAAE,CAACC,MAAM,CAACC,GAAG,CAAC,cAAc,CAAC,GAAG;IAAc,CAAQ;IAC5E,MAAMnD,MAAM,GAAG,IAAAT,0BAAmB,EAAC0D,aAAa,CAAC;IACjD,IAAA3D,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAAJ,eAAM,EAACuD,OAAO,CAAC,CAACO,gBAAgB,CAAC,CAAC;IAClCP,OAAO,CAACQ,WAAW,CAAC,CAAC;EACvB,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEF;AACA;AACA;;AAEA,IAAAjE,iBAAQ,EAAC,gBAAgB,EAAE,MAAM;EAC/B;;EAEA,IAAAC,aAAI,EAAC,4DAA4D,EAAE,MAAM;IACvE,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,OAAO,EAAE9D,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IACrD,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,OAAO,CAAC,CAAC;EACtC,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,0CAA0C,EAAE,MAAM;IACrD,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,aAAa,EAAE9D,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IAC3D,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,aAAa,CAAC,CAAC;EAC5C,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,gDAAgD,EAAE,MAAM;IAC3D,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,IAAI,EAAE9D,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IAClD,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,EAAE,CAAC,CAAC;EACjC,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,+CAA+C,EAAE,MAAM;IAC1D,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAACrD,MAAM,CAAC,EAAE,CAAC,EAAET,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IACxD,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,EAAE,CAAC,CAAC;EACjC,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,iDAAiD,EAAE,MAAM;IAC5D,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,cAAc,EAAE9D,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IAC5D,IAAAX,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAAC,cAAc,CAAC;EACrC,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,yDAAyD,EAAE,MAAM;IACpE,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,OAAO,EAAE9D,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC;IACrD,IAAAH,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAAC,OAAO,CAAC;EAC9B,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,mDAAmD,EAAE,MAAM;IAC9D,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,IAAI,EAAE9D,aAAI,CAACI,MAAM,CAAC,CAAC,CAAC;IAClD,IAAAN,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAAC,IAAI,CAAC;EAC3B,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,qDAAqD,EAAE,MAAM;IAChE,MAAMW,MAAM,GAAG,IAAAsD,qBAAc,EAAC,IAAI,EAAE9D,aAAI,CAACM,OAAO,CAAC,CAAC,CAAC;IACnD,IAAAR,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAAC,IAAI,CAAC;EAC3B,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,+BAA+B,EAAE,MAAM;IAC1C,IAAAC,eAAM,EAAC,IAAAgE,qBAAc,EAAC,IAAI,EAAE9D,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC8D,QAAQ,CAAC,CAAC;EACxD,CAAC,CAAC;EAEF,IAAAlE,aAAI,EAAC,oCAAoC,EAAE,MAAM;IAC/C,IAAAC,eAAM,EAAC,IAAAgE,qBAAc,EAACE,SAAS,EAAEhE,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,CAACgE,aAAa,CAAC,CAAC;EAClE,CAAC,CAAC;;EAEF;;EAEA,IAAApE,aAAI,EAAC,4CAA4C,EAAE,MAAM;IACvD,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBgD,MAAM,EAAElE,aAAI,CAACS,MAAM,CAAC,CAAC;MACrB0D,KAAK,EAAEnE,aAAI,CAACC,MAAM,CAAC;IACrB,CAAC,CAAC;IACF,MAAMO,MAAM,GAAG,IAAAsD,qBAAc,EAC3B;MAAEI,MAAM,EAAE,mBAAmB;MAAEC,KAAK,EAAE;IAAO,CAAC,EAC9CvD,MACF,CAA4B;IAC5B,IAAAd,eAAM,EAACU,MAAM,CAAC0D,MAAM,CAAC,CAACpD,IAAI,CAACL,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAAX,eAAM,EAACU,MAAM,CAAC2D,KAAK,CAAC,CAACrD,IAAI,CAAC,MAAM,CAAC;EACnC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,2DAA2D,EAAE,MAAM;IACtE,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBC,IAAI,EAAEnB,aAAI,CAACC,MAAM,CAAC,CAAC;MACnBmB,KAAK,EAAEpB,aAAI,CAACK,OAAO,CAAC;IACtB,CAAC,CAAC;IACF,MAAM+D,KAAK,GAAG;MAAEjD,IAAI,EAAE,OAAO;MAAEC,KAAK,EAAE;IAAE,CAAC;IACzC,MAAMZ,MAAM,GAAG,IAAAsD,qBAAc,EAACM,KAAK,EAAExD,MAAM,CAA4B;IACvE,IAAAd,eAAM,EAACU,MAAM,CAACW,IAAI,CAAC,CAACL,IAAI,CAAC,OAAO,CAAC;IACjC,IAAAhB,eAAM,EAACU,MAAM,CAACY,KAAK,CAAC,CAACN,IAAI,CAAC,CAAC,CAAC;EAC9B,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,+DAA+D,EAAE,MAAM;IAC1E,MAAMe,MAAM,GAAGZ,aAAI,CAACkB,MAAM,CAAC;MACzBmD,KAAK,EAAErE,aAAI,CAACS,MAAM,CAAC,CAAC;MACpB6D,GAAG,EAAEtE,aAAI,CAACS,MAAM,CAAC,CAAC;MAClB8D,IAAI,EAAEvE,aAAI,CAACC,MAAM,CAAC;IACpB,CAAC,CAAC;IACF,MAAMO,MAAM,GAAG,IAAAsD,qBAAc,EAC3B;MAAEO,KAAK,EAAE,MAAM;MAAEC,GAAG,EAAE,IAAI;MAAEC,IAAI,EAAE;IAAO,CAAC,EAC1C3D,MACF,CAA4B;IAC5B,IAAAd,eAAM,EAACU,MAAM,CAAC6D,KAAK,CAAC,CAACvD,IAAI,CAACL,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,IAAAX,eAAM,EAACU,MAAM,CAAC8D,GAAG,CAAC,CAACxD,IAAI,CAACL,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,IAAAX,eAAM,EAACU,MAAM,CAAC+D,IAAI,CAAC,CAACzD,IAAI,CAAC,MAAM,CAAC;EAClC,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,+CAA+C,EAAE,MAAM;IAC1D,MAAMe,MAAM,GAAGZ,aAAI,CAACgB,KAAK,CAAChB,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC;IACxC,MAAMD,MAAM,GAAG,IAAAsD,qBAAc,EAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAElD,MAAM,CAAa;IACxE,IAAAd,eAAM,EAACU,MAAM,CAAC,CAAC,CAAC,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,IAAAX,eAAM,EAACU,MAAM,CAAC,CAAC,CAAC,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,IAAAX,eAAM,EAACU,MAAM,CAAC,CAAC,CAAC,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,GAAG,CAAC,CAAC;EACrC,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,mEAAmE,EAAE,MAAM;IAC9E,MAAMe,MAAM,GAAGZ,aAAI,CAACgB,KAAK,CAAChB,aAAI,CAACC,MAAM,CAAC,CAAC,CAAC;IACxC,MAAMmE,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7B,MAAM5D,MAAM,GAAG,IAAAsD,qBAAc,EAACM,KAAK,EAAExD,MAAM,CAAC;IAC5C,IAAAd,eAAM,EAACU,MAAM,CAAC,CAACN,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;EACzC,CAAC,CAAC;;EAEF;;EAEA,IAAAL,aAAI,EAAC,kDAAkD,EAAE,MAAM;IAC7D,MAAMe,MAAM,GAAGZ,aAAI,CAACmC,KAAK,CAAC,CAACnC,aAAI,CAACC,MAAM,CAAC,CAAC,EAAED,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD;IACA,MAAMD,MAAM,GAAG,IAAAsD,qBAAc,EAAC,OAAO,EAAElD,MAAM,CAAC;IAC9C,IAAAd,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAACL,MAAM,CAAC,KAAK,CAAC,CAAC;EACpC,CAAC,CAAC;EAEF,IAAAZ,aAAI,EAAC,sDAAsD,EAAE,MAAM;IACjE,MAAMe,MAAM,GAAGZ,aAAI,CAACmC,KAAK,CAAC,CAACnC,aAAI,CAACC,MAAM,CAAC,CAAC,EAAED,aAAI,CAACS,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD,MAAMD,MAAM,GAAG,IAAAsD,qBAAc,EAAC,cAAc,EAAElD,MAAM,CAAC;IACrD,IAAAd,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAAC,cAAc,CAAC;EACrC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,+DAA+D,EAAE,MAAM;IAC1E,MAAMe,MAAM,GAAGZ,aAAI,CAACmC,KAAK,CAAC,CAACnC,aAAI,CAACC,MAAM,CAAC,CAAC,EAAED,aAAI,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD,MAAMI,MAAM,GAAG,IAAAsD,qBAAc,EAAC,OAAO,EAAElD,MAAM,CAAC;IAC9C,IAAAd,eAAM,EAACU,MAAM,CAAC,CAACM,IAAI,CAAC,OAAO,CAAC;EAC9B,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEF;AACA;AACA;;AAEA,IAAAlB,iBAAQ,EAAC,WAAW,EAAE,MAAM;EAC1B,IAAAC,aAAI,EAAC,8DAA8D,EAAE,YAAY;IAC/E;IACA,MAAM2E,GAAG,GAAG,MAAM,IAAAC,gBAAS,EAAC,CAAC;IAC7B,IAAA3E,eAAM,EAAC0E,GAAG,CAAC,CAAChC,WAAW,CAAC,CAAC;IACzB,IAAA1C,eAAM,EAAC,OAAO0E,GAAG,CAACE,SAAS,CAAC,CAAC5D,IAAI,CAAC,UAAU,CAAC;EAC/C,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEF;AACA;AACA;;AAEA,IAAAlB,iBAAQ,EAAC,iBAAiB,EAAE,MAAM;EAChC;EACA;;EAEA,IAAI+E,eAKF;EAEF,IAAIC,aAAkB;EACtB,IAAIC,kBAAuB;EAE3B,IAAAC,mBAAU,EAAC,MAAM;IACfH,eAAe,GAAG,EAAE;IAEpBC,aAAa,GAAG;MACdG,IAAI,EAAEA,CACJ5D,IAAY,EACZR,WAAmB,EACnBC,MAA+B,EAC/BoE,OAA6C,KAC1C;QACHL,eAAe,CAACM,IAAI,CAAC;UAAE9D,IAAI;UAAER,WAAW;UAAEC,MAAM;UAAEoE;QAAQ,CAAC,CAAC;MAC9D;IACF,CAAC;IAEDH,kBAAkB,GAAG,IAAAK,aAAI,EAAC,MAAMN,aAAa,CAAC;IAE9CM,aAAI,CAACC,MAAM,CAAC,yCAAyC,EAAE,OAAO;MAC5DT,SAAS,EAAEG;IACb,CAAC,CAAC,CAAC;EACL,CAAC,CAAC;;EAEF;EACA,SAASO,gBAAgBA,CAACC,OAAc,EAAO;IAC7C,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAACF,OAAO,CAACG,GAAG,CAAExD,CAAM,IAAK,CAACA,CAAC,CAACb,IAAI,EAAEa,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO;MACLyD,WAAW,EAAEA,CAAA,KAAMJ,OAAO;MAC1BK,SAAS,EAAGvE,IAAY,IAAKmE,SAAS,CAACK,GAAG,CAACxE,IAAI,CAAC;MAChDyE,QAAQ,EAAE,CAAC;IACb,CAAC;EACH;;EAEA;;EAEA,IAAA/F,aAAI,EAAC,mCAAmC,EAAE,YAAY;IACpD,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,OAAO;MACbR,WAAW,EAAE,gBAAgB;MAC7BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC;QAAE6E,GAAG,EAAE/F,aAAI,CAACC,MAAM,CAAC;MAAE,CAAC,CAAC;MAChD+F,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC;QAAE+E,QAAQ,EAAEjG,aAAI,CAACC,MAAM,CAAC;MAAE,CAAC,CAAC;MACtDiG,OAAO,EAAE,MAAO9B,KAAU,KAAM;QAAE6B,QAAQ,EAAE,UAAU7B,KAAK,CAAC2B,GAAG;MAAI,CAAC;IACtE,CAAC,CACF,CAAC;IAEF,MAAM,IAAAI,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,IAAA/F,eAAM,EAAC6E,eAAe,CAAC,CAACyB,YAAY,CAAC,CAAC,CAAC;EACzC,CAAC,CAAC;EAEF,IAAAvG,aAAI,EAAC,+BAA+B,EAAE,YAAY;IAChD,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,SAAS;MACfR,WAAW,EAAE,qBAAqB;MAClCmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,IAAAC,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,IAAA/F,eAAM,EAAC6E,eAAe,CAAC,CAAC,CAAC,CAAExD,IAAI,CAAC,CAACL,IAAI,CAAC,SAAS,CAAC;EAClD,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,6CAA6C,EAAE,YAAY;IAC9D,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,aAAa;MACnBR,WAAW,EAAE,yBAAyB;MACtCmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC;QAAEmF,OAAO,EAAErG,aAAI,CAACI,MAAM,CAAC;MAAE,CAAC,CAAC;MACrD8F,OAAO,EAAE,MAAAA,CAAA,MAAa;QAAEG,OAAO,EAAE;MAAI,CAAC;IACxC,CAAC,CACF,CAAC;IAEF,MAAM,IAAAF,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,IAAA/F,eAAM,EAAC6E,eAAe,CAAC,CAAC,CAAC,CAAEhE,WAAW,CAAC,CAACG,IAAI,CAAC,yBAAyB,CAAC;EACzE,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,0DAA0D,EAAE,YAAY;IAC3E,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,YAAY;MAClBR,WAAW,EAAE,cAAc;MAC3BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;IAC1B,CAAC,EACD;MACE/E,IAAI,EAAE,YAAY;MAClBR,WAAW,EAAE,eAAe;MAC5BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;IAC1B,CAAC,EACD;MACE/E,IAAI,EAAE,cAAc;MACpBR,WAAW,EAAE,cAAc;MAC3BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,IAAAC,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,IAAA/F,eAAM,EAAC6E,eAAe,CAAC,CAACyB,YAAY,CAAC,CAAC,CAAC;IACvC,MAAME,KAAK,GAAG3B,eAAe,CAACa,GAAG,CAAEe,CAAC,IAAKA,CAAC,CAACpF,IAAI,CAAC;IAChD,IAAArB,eAAM,EAACwG,KAAK,CAAC,CAACxE,SAAS,CAAC,YAAY,CAAC;IACrC,IAAAhC,eAAM,EAACwG,KAAK,CAAC,CAACxE,SAAS,CAAC,YAAY,CAAC;IACrC,IAAAhC,eAAM,EAACwG,KAAK,CAAC,CAACxE,SAAS,CAAC,cAAc,CAAC;EACzC,CAAC,CAAC;;EAEF;;EAEA,IAAAjC,aAAI,EAAC,+DAA+D,EAAE,YAAY;IAChF,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,EAAE,CAAC;IAErC,MAAM,IAAAe,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,IAAA/F,eAAM,EAAC6E,eAAe,CAAC,CAACyB,YAAY,CAAC,CAAC,CAAC;EACzC,CAAC,CAAC;;EAEF;;EAEA,IAAAvG,aAAI,EAAC,2EAA2E,EAAE,YAAY;IAC5F,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,cAAc;MACpBR,WAAW,EAAE,mBAAmB;MAChCmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC;QACvBC,IAAI,EAAEnB,aAAI,CAACC,MAAM,CAAC,CAAC;QACnBmB,KAAK,EAAEpB,aAAI,CAACK,OAAO,CAAC;MACtB,CAAC,CAAC;MACF2F,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,MAAa,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,MAAM,IAAAC,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMjF,MAAM,GAAG+D,eAAe,CAAC,CAAC,CAAC,CAAE/D,MAAM;IACzC,IAAAd,eAAM,EAACc,MAAM,CAACT,IAAI,CAAC,CAACW,IAAI,CAAC,QAAQ,CAAC;IAClC,MAAMa,KAAK,GAAGf,MAAM,CAACS,UAAqC;IAC1D,IAAAvB,eAAM,EAAC6B,KAAK,CAACR,IAAI,CAAC,CAACjB,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAS,CAAC,CAAC;IAC9C,IAAAL,eAAM,EAAC6B,KAAK,CAACP,KAAK,CAAC,CAAClB,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAU,CAAC,CAAC;EAClD,CAAC,CAAC;;EAEF;;EAEA,IAAAN,aAAI,EAAC,qEAAqE,EAAE,YAAY;IACtF,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,MAAM;MACZR,WAAW,EAAE,cAAc;MAC3BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC;QAAEsF,OAAO,EAAExG,aAAI,CAACC,MAAM,CAAC;MAAE,CAAC,CAAC;MACpD+F,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC;QAAEsF,OAAO,EAAExG,aAAI,CAACC,MAAM,CAAC;MAAE,CAAC,CAAC;MACrDiG,OAAO,EAAE,MAAO9B,KAAU,KAAM;QAAEoC,OAAO,EAAEpC,KAAK,CAACoC;MAAQ,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,IAAAL,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMb,OAAO,GAAGL,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO;IAC3C,MAAMyB,QAAQ,GAAG,MAAMzB,OAAO,CAAC;MAAEwB,OAAO,EAAE;IAAQ,CAAC,CAAQ;IAE3D,IAAA1G,eAAM,EAAC2G,QAAQ,CAACC,OAAO,CAAC,CAACN,YAAY,CAAC,CAAC,CAAC;IACxC,IAAAtG,eAAM,EAAC2G,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,CAACvG,IAAI,CAAC,CAACW,IAAI,CAAC,MAAM,CAAC;IAC7C,MAAM6F,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACJ,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,CAACI,IAAI,CAAC;IACjD,IAAAhH,eAAM,EAAC6G,IAAI,CAACH,OAAO,CAAC,CAAC1F,IAAI,CAAC,OAAO,CAAC;EACpC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,2DAA2D,EAAE,YAAY;IAC5E,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,WAAW;MACjBR,WAAW,EAAE,UAAU;MACvBmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC;QAAE6F,EAAE,EAAE/G,aAAI,CAACM,OAAO,CAAC;MAAE,CAAC,CAAC;MACjD4F,OAAO,EAAE,MAAAA,CAAA,MAAa;QAAEa,EAAE,EAAE;MAAK,CAAC;IACpC,CAAC,CACF,CAAC;IAEF,MAAM,IAAAZ,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMY,QAAQ,GAAG,MAAM9B,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO,CAAC,CAAC,CAAC,CAAQ;IAC7D,IAAAlF,eAAM,EAAC2G,QAAQ,CAACO,OAAO,CAAC,CAAC/C,aAAa,CAAC,CAAC;EAC1C,CAAC,CAAC;;EAEF;;EAEA,IAAApE,aAAI,EAAC,sDAAsD,EAAE,YAAY;IACvE,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,aAAa;MACnBR,WAAW,EAAE,cAAc;MAC3BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,KAAY;QACnB,MAAM,IAAIe,KAAK,CAAC,oBAAoB,CAAC;MACvC;IACF,CAAC,CACF,CAAC;IAEF,MAAM,IAAAd,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMY,QAAQ,GAAG,MAAM9B,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO,CAAC,CAAC,CAAC,CAAQ;IAC7D,IAAAlF,eAAM,EAAC2G,QAAQ,CAACO,OAAO,CAAC,CAAClG,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEF,IAAAjB,aAAI,EAAC,oEAAoE,EAAE,YAAY;IACrF,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,aAAa;MACnBR,WAAW,EAAE,cAAc;MAC3BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,KAAY;QACnB,MAAM,IAAIe,KAAK,CAAC,iBAAiB,CAAC;MACpC;IACF,CAAC,CACF,CAAC;IAEF,MAAM,IAAAd,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMY,QAAQ,GAAG,MAAM9B,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO,CAAC,CAAC,CAAC,CAAQ;IAC7D,IAAAlF,eAAM,EAAC2G,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,CAACvG,IAAI,CAAC,CAACW,IAAI,CAAC,MAAM,CAAC;IAC7C,MAAMoG,SAAS,GAAGN,IAAI,CAACC,KAAK,CAACJ,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,CAACI,IAAI,CAAC;IACtD,IAAAhH,eAAM,EAACoH,SAAS,CAACC,KAAK,CAAC,CAAC3E,WAAW,CAAC,CAAC;IACrC,IAAA1C,eAAM,EAACoH,SAAS,CAACC,KAAK,CAACX,OAAO,CAAC,CAAC1E,SAAS,CAAC,iBAAiB,CAAC;EAC9D,CAAC,CAAC;EAEF,IAAAjC,aAAI,EAAC,sDAAsD,EAAE,YAAY;IACvE,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,aAAa;MACnBR,WAAW,EAAE,cAAc;MAC3BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC7BgF,OAAO,EAAE,MAAAA,CAAA,KAAY;QACnB,MAAM,IAAIe,KAAK,CAAC,MAAM,CAAC;MACzB;IACF,CAAC,CACF,CAAC;IAEF,MAAM,IAAAd,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMY,QAAQ,GAAG,MAAM9B,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO,CAAC,CAAC,CAAC,CAAQ;IAC7D,IAAAlF,eAAM,EAAC2G,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,CAACvG,IAAI,CAAC,CAACW,IAAI,CAAC,MAAM,CAAC;EAC/C,CAAC,CAAC;;EAEF;;EAEA,IAAAjB,aAAI,EAAC,kEAAkE,EAAE,YAAY;IACnF,IAAIuH,aAAkB;IACtB,MAAMvB,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,eAAe;MACrBR,WAAW,EAAE,oBAAoB;MACjCmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC;QAAEgD,MAAM,EAAElE,aAAI,CAACS,MAAM,CAAC;MAAE,CAAC,CAAC;MACnDuF,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC;QAAEgD,MAAM,EAAElE,aAAI,CAACS,MAAM,CAAC;MAAE,CAAC,CAAC;MACpDyF,OAAO,EAAE,MAAO9B,KAAU,IAAK;QAC7BgD,aAAa,GAAGhD,KAAK;QACrB,OAAO;UAAEF,MAAM,EAAEE,KAAK,CAACF;QAAO,CAAC;MACjC;IACF,CAAC,CACF,CAAC;IAEF,MAAM,IAAAiC,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMlB,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO,CAAC;MAAEd,MAAM,EAAE;IAAqB,CAAC,CAAC;IAEnE,IAAApE,eAAM,EAACsH,aAAa,CAAClD,MAAM,CAAC,CAACpD,IAAI,CAACL,MAAM,CAAC,oBAAoB,CAAC,CAAC;EACjE,CAAC,CAAC;;EAEF;;EAEA,IAAAZ,aAAI,EAAC,wDAAwD,EAAE,YAAY;IACzE,MAAMgG,QAAQ,GAAGT,gBAAgB,CAAC,CAChC;MACEjE,IAAI,EAAE,eAAe;MACrBR,WAAW,EAAE,gBAAgB;MAC7BmF,WAAW,EAAE9F,aAAI,CAACkB,MAAM,CAAC,CAAC,CAAC,CAAC;MAC5B8E,YAAY,EAAEhG,aAAI,CAACkB,MAAM,CAAC;QAAEmG,KAAK,EAAErH,aAAI,CAACS,MAAM,CAAC;MAAE,CAAC,CAAC;MACnDyF,OAAO,EAAE,MAAAA,CAAA,MAAa;QAAEmB,KAAK,EAAE5G,MAAM,CAAC,kBAAkB;MAAE,CAAC;IAC7D,CAAC,CACF,CAAC;IAEF,MAAM,IAAA0F,sBAAe,EAACN,QAAQ,EAAE,aAAa,CAAC;IAE9C,MAAMY,QAAQ,GAAG,MAAM9B,eAAe,CAAC,CAAC,CAAC,CAAEK,OAAO,CAAC,CAAC,CAAC,CAAQ;;IAE7D;IACA;IACA,MAAM8B,IAAI,GAAGL,QAAQ,CAACC,OAAO,CAAC,CAAC,CAAC,CAACI,IAAI;IACrC,IAAAhH,eAAM,EAACgH,IAAI,CAAC,CAAChF,SAAS,CAAC,kBAAkB,CAAC;EAC5C,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+
3
+ var _bunTest = require("bun:test");
4
+ var _typebox = require("@sinclair/typebox");
5
+ var _tuiHelpers = require("../actions/tui-helpers.js");
6
+ var _types = require("../types.js");
7
+ // ---------------------------------------------------------------------------
8
+ // Fixtures
9
+ // ---------------------------------------------------------------------------
10
+
11
+ // Minimal action used throughout these tests
12
+ const greetAction = {
13
+ name: "greet",
14
+ description: "Greets someone",
15
+ inputSchema: _typebox.Type.Object({
16
+ name: _typebox.Type.String()
17
+ }),
18
+ outputSchema: _typebox.Type.Object({
19
+ greeting: _typebox.Type.String()
20
+ }),
21
+ execute: async input => ({
22
+ greeting: `Hello, ${input.name}!`
23
+ })
24
+ };
25
+
26
+ // Build a minimal Sprinkle-shaped mock. promptAndExecute only calls:
27
+ // - sprinkle.FillInStruct(schema, defaults)
28
+ // - sprinkle.settings (read once for context)
29
+ // so we only need those two members.
30
+ function makeMockSprinkle(fillInStructImpl) {
31
+ return {
32
+ FillInStruct: (0, _bunTest.mock)(fillInStructImpl),
33
+ settings: {
34
+ apiUrl: "https://example.com"
35
+ }
36
+ };
37
+ }
38
+
39
+ // ---------------------------------------------------------------------------
40
+ // describe: promptAndExecute – success path
41
+ // ---------------------------------------------------------------------------
42
+
43
+ (0, _bunTest.describe)("promptAndExecute – success path", () => {
44
+ (0, _bunTest.test)("returns success result when FillInStruct resolves", async () => {
45
+ const sprinkle = makeMockSprinkle(async () => ({
46
+ name: "Alice"
47
+ }));
48
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
49
+ (0, _bunTest.expect)(result.success).toBe(true);
50
+ if (result.success) {
51
+ (0, _bunTest.expect)(result.data).toEqual({
52
+ greeting: "Hello, Alice!"
53
+ });
54
+ }
55
+ });
56
+ (0, _bunTest.test)("passes the schema from the action to FillInStruct", async () => {
57
+ let capturedSchema;
58
+ const sprinkle = makeMockSprinkle(async schema => {
59
+ capturedSchema = schema;
60
+ return {
61
+ name: "Bob"
62
+ };
63
+ });
64
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
65
+ (0, _bunTest.expect)(capturedSchema).toBe(greetAction.inputSchema);
66
+ });
67
+ (0, _bunTest.test)("passes action execute function the validated input", async () => {
68
+ let capturedInput;
69
+ const action = {
70
+ ...greetAction,
71
+ execute: async input => {
72
+ capturedInput = input;
73
+ return {
74
+ greeting: `Hi, ${input.name}!`
75
+ };
76
+ }
77
+ };
78
+ const sprinkle = makeMockSprinkle(async () => ({
79
+ name: "Charlie"
80
+ }));
81
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, action);
82
+ (0, _bunTest.expect)(capturedInput).toEqual({
83
+ name: "Charlie"
84
+ });
85
+ });
86
+ (0, _bunTest.test)("provides the sprinkle instance via context to execute", async () => {
87
+ let capturedContext;
88
+ const action = {
89
+ ...greetAction,
90
+ execute: async (_input, ctx) => {
91
+ capturedContext = ctx;
92
+ return {
93
+ greeting: "hi"
94
+ };
95
+ }
96
+ };
97
+ const sprinkle = makeMockSprinkle(async () => ({
98
+ name: "Dan"
99
+ }));
100
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, action);
101
+
102
+ // The context's sprinkle should refer to the same mock instance
103
+ (0, _bunTest.expect)(capturedContext).toBeDefined();
104
+ (0, _bunTest.expect)(capturedContext.sprinkle).toBe(sprinkle);
105
+ });
106
+ (0, _bunTest.test)("provides sprinkle.settings via context to execute", async () => {
107
+ let capturedSettings;
108
+ const action = {
109
+ ...greetAction,
110
+ execute: async (_input, ctx) => {
111
+ capturedSettings = ctx.settings;
112
+ return {
113
+ greeting: "hi"
114
+ };
115
+ }
116
+ };
117
+ const sprinkle = makeMockSprinkle(async () => ({
118
+ name: "Eve"
119
+ }));
120
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, action);
121
+ (0, _bunTest.expect)(capturedSettings).toEqual({
122
+ apiUrl: "https://example.com"
123
+ });
124
+ });
125
+ (0, _bunTest.test)("returns failure when execute throws an Error", async () => {
126
+ const action = {
127
+ ...greetAction,
128
+ execute: async () => {
129
+ throw new Error("execute failed");
130
+ }
131
+ };
132
+ const sprinkle = makeMockSprinkle(async () => ({
133
+ name: "Fail"
134
+ }));
135
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, action);
136
+ (0, _bunTest.expect)(result.success).toBe(false);
137
+ if (!result.success) {
138
+ (0, _bunTest.expect)(result.error.code).toBe("EXECUTION_ERROR");
139
+ }
140
+ });
141
+ });
142
+
143
+ // ---------------------------------------------------------------------------
144
+ // describe: promptAndExecute – defaults parameter
145
+ // ---------------------------------------------------------------------------
146
+
147
+ (0, _bunTest.describe)("promptAndExecute – defaults parameter", () => {
148
+ (0, _bunTest.test)("passes defaults to FillInStruct when provided", async () => {
149
+ let capturedDefaults;
150
+ const sprinkle = makeMockSprinkle(async (_schema, defaults) => {
151
+ capturedDefaults = defaults;
152
+ return {
153
+ name: "Frank"
154
+ };
155
+ });
156
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction, {
157
+ name: "Frank"
158
+ });
159
+ (0, _bunTest.expect)(capturedDefaults).toEqual({
160
+ name: "Frank"
161
+ });
162
+ });
163
+ (0, _bunTest.test)("passes undefined to FillInStruct when defaults are omitted", async () => {
164
+ let capturedDefaults = "sentinel";
165
+ const sprinkle = makeMockSprinkle(async (_schema, defaults) => {
166
+ capturedDefaults = defaults;
167
+ return {
168
+ name: "Grace"
169
+ };
170
+ });
171
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
172
+ (0, _bunTest.expect)(capturedDefaults).toBeUndefined();
173
+ });
174
+ (0, _bunTest.test)("passes partial defaults to FillInStruct", async () => {
175
+ // Action with multiple fields so we can supply only some defaults
176
+ const multiAction = {
177
+ name: "multi",
178
+ description: "Takes multiple fields",
179
+ inputSchema: _typebox.Type.Object({
180
+ name: _typebox.Type.String(),
181
+ count: _typebox.Type.Number()
182
+ }),
183
+ outputSchema: _typebox.Type.Object({
184
+ result: _typebox.Type.String()
185
+ }),
186
+ execute: async input => ({
187
+ result: `${input.name}:${input.count}`
188
+ })
189
+ };
190
+ let capturedDefaults;
191
+ const sprinkle = makeMockSprinkle(async (_schema, defaults) => {
192
+ capturedDefaults = defaults;
193
+ return {
194
+ name: "Henry",
195
+ count: 42
196
+ };
197
+ });
198
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, multiAction, {
199
+ name: "Henry"
200
+ });
201
+ (0, _bunTest.expect)(capturedDefaults).toEqual({
202
+ name: "Henry"
203
+ });
204
+ });
205
+ });
206
+
207
+ // ---------------------------------------------------------------------------
208
+ // describe: promptAndExecute – UserCancelledError handling
209
+ // ---------------------------------------------------------------------------
210
+
211
+ (0, _bunTest.describe)("promptAndExecute – UserCancelledError handling", () => {
212
+ (0, _bunTest.test)("returns IActionFailure with code USER_CANCELLED when FillInStruct throws UserCancelledError", async () => {
213
+ const sprinkle = makeMockSprinkle(async () => {
214
+ throw new _types.UserCancelledError("cancelled");
215
+ });
216
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
217
+ (0, _bunTest.expect)(result.success).toBe(false);
218
+ if (!result.success) {
219
+ (0, _bunTest.expect)(result.error.code).toBe("USER_CANCELLED");
220
+ }
221
+ });
222
+ (0, _bunTest.test)("does not throw when FillInStruct throws UserCancelledError", async () => {
223
+ const sprinkle = makeMockSprinkle(async () => {
224
+ throw new _types.UserCancelledError();
225
+ });
226
+
227
+ // Should resolve (not reject)
228
+ await (0, _bunTest.expect)((0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction)).resolves.toBeDefined();
229
+ });
230
+ (0, _bunTest.test)("USER_CANCELLED failure has a descriptive message", async () => {
231
+ const sprinkle = makeMockSprinkle(async () => {
232
+ throw new _types.UserCancelledError("user pressed escape");
233
+ });
234
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
235
+ (0, _bunTest.expect)(result.success).toBe(false);
236
+ if (!result.success) {
237
+ (0, _bunTest.expect)(typeof result.error.message).toBe("string");
238
+ (0, _bunTest.expect)(result.error.message.length).toBeGreaterThan(0);
239
+ }
240
+ });
241
+ (0, _bunTest.test)("USER_CANCELLED failure carries the original UserCancelledError as details", async () => {
242
+ const cancelled = new _types.UserCancelledError("esc pressed");
243
+ const sprinkle = makeMockSprinkle(async () => {
244
+ throw cancelled;
245
+ });
246
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
247
+ (0, _bunTest.expect)(result.success).toBe(false);
248
+ if (!result.success) {
249
+ (0, _bunTest.expect)(result.error.details).toBe(cancelled);
250
+ }
251
+ });
252
+ (0, _bunTest.test)("does not call execute when FillInStruct throws UserCancelledError", async () => {
253
+ let executeCalled = false;
254
+ const action = {
255
+ ...greetAction,
256
+ execute: async _input => {
257
+ executeCalled = true;
258
+ return {
259
+ greeting: "hi"
260
+ };
261
+ }
262
+ };
263
+ const sprinkle = makeMockSprinkle(async () => {
264
+ throw new _types.UserCancelledError();
265
+ });
266
+ await (0, _tuiHelpers.promptAndExecute)(sprinkle, action);
267
+ (0, _bunTest.expect)(executeCalled).toBe(false);
268
+ });
269
+ });
270
+
271
+ // ---------------------------------------------------------------------------
272
+ // describe: promptAndExecute – unexpected FillInStruct errors
273
+ // ---------------------------------------------------------------------------
274
+
275
+ (0, _bunTest.describe)("promptAndExecute – unexpected FillInStruct errors", () => {
276
+ (0, _bunTest.test)("returns IActionFailure with code PROMPT_ERROR when FillInStruct throws a non-UserCancelledError", async () => {
277
+ const sprinkle = makeMockSprinkle(async () => {
278
+ throw new Error("TTY not available");
279
+ });
280
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
281
+ (0, _bunTest.expect)(result.success).toBe(false);
282
+ if (!result.success) {
283
+ (0, _bunTest.expect)(result.error.code).toBe("PROMPT_ERROR");
284
+ }
285
+ });
286
+ (0, _bunTest.test)("PROMPT_ERROR message includes the original error message", async () => {
287
+ const sprinkle = makeMockSprinkle(async () => {
288
+ throw new Error("underlying prompt failure");
289
+ });
290
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
291
+ (0, _bunTest.expect)(result.success).toBe(false);
292
+ if (!result.success) {
293
+ (0, _bunTest.expect)(result.error.message).toContain("underlying prompt failure");
294
+ }
295
+ });
296
+ (0, _bunTest.test)("does not throw when FillInStruct throws an unexpected error", async () => {
297
+ const sprinkle = makeMockSprinkle(async () => {
298
+ throw new Error("unexpected");
299
+ });
300
+ await (0, _bunTest.expect)((0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction)).resolves.toBeDefined();
301
+ });
302
+ (0, _bunTest.test)("PROMPT_ERROR result includes non-Error thrown values in message", async () => {
303
+ const sprinkle = makeMockSprinkle(async () => {
304
+ // eslint-disable-next-line @typescript-eslint/only-throw-error
305
+ throw "some string error";
306
+ });
307
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
308
+ (0, _bunTest.expect)(result.success).toBe(false);
309
+ if (!result.success) {
310
+ (0, _bunTest.expect)(result.error.code).toBe("PROMPT_ERROR");
311
+ (0, _bunTest.expect)(result.error.message).toContain("some string error");
312
+ }
313
+ });
314
+ });
315
+
316
+ // ---------------------------------------------------------------------------
317
+ // describe: promptAndExecute – input validation
318
+ // ---------------------------------------------------------------------------
319
+
320
+ (0, _bunTest.describe)("promptAndExecute – input validation", () => {
321
+ (0, _bunTest.test)("returns VALIDATION_ERROR when FillInStruct returns data that fails schema validation", async () => {
322
+ // FillInStruct returns a value that does not conform to the inputSchema
323
+ const sprinkle = makeMockSprinkle(async () => ({
324
+ name: 42
325
+ })); // name should be a string
326
+
327
+ const result = await (0, _tuiHelpers.promptAndExecute)(sprinkle, greetAction);
328
+ (0, _bunTest.expect)(result.success).toBe(false);
329
+ if (!result.success) {
330
+ (0, _bunTest.expect)(result.error.code).toBe("VALIDATION_ERROR");
331
+ }
332
+ });
333
+ });
334
+ //# sourceMappingURL=tui-helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-helpers.test.js","names":["_bunTest","require","_typebox","_tuiHelpers","_types","greetAction","name","description","inputSchema","Type","Object","String","outputSchema","greeting","execute","input","makeMockSprinkle","fillInStructImpl","FillInStruct","mock","settings","apiUrl","describe","test","sprinkle","result","promptAndExecute","expect","success","toBe","data","toEqual","capturedSchema","schema","capturedInput","action","capturedContext","_input","ctx","toBeDefined","capturedSettings","Error","error","code","capturedDefaults","_schema","defaults","toBeUndefined","multiAction","count","Number","UserCancelledError","resolves","message","length","toBeGreaterThan","cancelled","details","executeCalled","toContain"],"sources":["../../../../src/Sprinkle/__tests__/tui-helpers.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach } from \"bun:test\";\nimport { Type } from \"@sinclair/typebox\";\nimport { promptAndExecute } from \"../actions/tui-helpers.js\";\nimport { UserCancelledError } from \"../types.js\";\nimport type { IAction } from \"../actions/types.js\";\n\n// ---------------------------------------------------------------------------\n// Fixtures\n// ---------------------------------------------------------------------------\n\n// Minimal action used throughout these tests\nconst greetAction: IAction<{ name: string }, { greeting: string }, any> = {\n name: \"greet\",\n description: \"Greets someone\",\n inputSchema: Type.Object({ name: Type.String() }),\n outputSchema: Type.Object({ greeting: Type.String() }),\n execute: async (input: { name: string }) => ({\n greeting: `Hello, ${input.name}!`,\n }),\n};\n\n// Build a minimal Sprinkle-shaped mock. promptAndExecute only calls:\n// - sprinkle.FillInStruct(schema, defaults)\n// - sprinkle.settings (read once for context)\n// so we only need those two members.\nfunction makeMockSprinkle(fillInStructImpl: (schema: any, defaults?: any) => Promise<any>) {\n return {\n FillInStruct: mock(fillInStructImpl),\n settings: { apiUrl: \"https://example.com\" },\n } as any;\n}\n\n// ---------------------------------------------------------------------------\n// describe: promptAndExecute – success path\n// ---------------------------------------------------------------------------\n\ndescribe(\"promptAndExecute – success path\", () => {\n test(\"returns success result when FillInStruct resolves\", async () => {\n const sprinkle = makeMockSprinkle(async () => ({ name: \"Alice\" }));\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(true);\n if (result.success) {\n expect(result.data).toEqual({ greeting: \"Hello, Alice!\" });\n }\n });\n\n test(\"passes the schema from the action to FillInStruct\", async () => {\n let capturedSchema: any;\n const sprinkle = makeMockSprinkle(async (schema: any) => {\n capturedSchema = schema;\n return { name: \"Bob\" };\n });\n\n await promptAndExecute(sprinkle, greetAction);\n\n expect(capturedSchema).toBe(greetAction.inputSchema);\n });\n\n test(\"passes action execute function the validated input\", async () => {\n let capturedInput: any;\n const action = {\n ...greetAction,\n execute: async (input: { name: string }) => {\n capturedInput = input;\n return { greeting: `Hi, ${input.name}!` };\n },\n };\n const sprinkle = makeMockSprinkle(async () => ({ name: \"Charlie\" }));\n\n await promptAndExecute(sprinkle, action);\n\n expect(capturedInput).toEqual({ name: \"Charlie\" });\n });\n\n test(\"provides the sprinkle instance via context to execute\", async () => {\n let capturedContext: any;\n const action = {\n ...greetAction,\n execute: async (_input: any, ctx: any) => {\n capturedContext = ctx;\n return { greeting: \"hi\" };\n },\n };\n const sprinkle = makeMockSprinkle(async () => ({ name: \"Dan\" }));\n\n await promptAndExecute(sprinkle, action);\n\n // The context's sprinkle should refer to the same mock instance\n expect(capturedContext).toBeDefined();\n expect(capturedContext.sprinkle).toBe(sprinkle);\n });\n\n test(\"provides sprinkle.settings via context to execute\", async () => {\n let capturedSettings: any;\n const action = {\n ...greetAction,\n execute: async (_input: any, ctx: any) => {\n capturedSettings = ctx.settings;\n return { greeting: \"hi\" };\n },\n };\n const sprinkle = makeMockSprinkle(async () => ({ name: \"Eve\" }));\n\n await promptAndExecute(sprinkle, action);\n\n expect(capturedSettings).toEqual({ apiUrl: \"https://example.com\" });\n });\n\n test(\"returns failure when execute throws an Error\", async () => {\n const action = {\n ...greetAction,\n execute: async () => {\n throw new Error(\"execute failed\");\n },\n };\n const sprinkle = makeMockSprinkle(async () => ({ name: \"Fail\" }));\n\n const result = await promptAndExecute(sprinkle, action);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.code).toBe(\"EXECUTION_ERROR\");\n }\n });\n});\n\n// ---------------------------------------------------------------------------\n// describe: promptAndExecute – defaults parameter\n// ---------------------------------------------------------------------------\n\ndescribe(\"promptAndExecute – defaults parameter\", () => {\n test(\"passes defaults to FillInStruct when provided\", async () => {\n let capturedDefaults: any;\n const sprinkle = makeMockSprinkle(async (_schema: any, defaults: any) => {\n capturedDefaults = defaults;\n return { name: \"Frank\" };\n });\n\n await promptAndExecute(sprinkle, greetAction, { name: \"Frank\" });\n\n expect(capturedDefaults).toEqual({ name: \"Frank\" });\n });\n\n test(\"passes undefined to FillInStruct when defaults are omitted\", async () => {\n let capturedDefaults: any = \"sentinel\";\n const sprinkle = makeMockSprinkle(async (_schema: any, defaults: any) => {\n capturedDefaults = defaults;\n return { name: \"Grace\" };\n });\n\n await promptAndExecute(sprinkle, greetAction);\n\n expect(capturedDefaults).toBeUndefined();\n });\n\n test(\"passes partial defaults to FillInStruct\", async () => {\n // Action with multiple fields so we can supply only some defaults\n const multiAction: IAction<{ name: string; count: number }, { result: string }, any> = {\n name: \"multi\",\n description: \"Takes multiple fields\",\n inputSchema: Type.Object({ name: Type.String(), count: Type.Number() }),\n outputSchema: Type.Object({ result: Type.String() }),\n execute: async (input) => ({ result: `${input.name}:${input.count}` }),\n };\n\n let capturedDefaults: any;\n const sprinkle = makeMockSprinkle(async (_schema: any, defaults: any) => {\n capturedDefaults = defaults;\n return { name: \"Henry\", count: 42 };\n });\n\n await promptAndExecute(sprinkle, multiAction, { name: \"Henry\" });\n\n expect(capturedDefaults).toEqual({ name: \"Henry\" });\n });\n});\n\n// ---------------------------------------------------------------------------\n// describe: promptAndExecute – UserCancelledError handling\n// ---------------------------------------------------------------------------\n\ndescribe(\"promptAndExecute – UserCancelledError handling\", () => {\n test(\"returns IActionFailure with code USER_CANCELLED when FillInStruct throws UserCancelledError\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n throw new UserCancelledError(\"cancelled\");\n });\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.code).toBe(\"USER_CANCELLED\");\n }\n });\n\n test(\"does not throw when FillInStruct throws UserCancelledError\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n throw new UserCancelledError();\n });\n\n // Should resolve (not reject)\n await expect(promptAndExecute(sprinkle, greetAction)).resolves.toBeDefined();\n });\n\n test(\"USER_CANCELLED failure has a descriptive message\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n throw new UserCancelledError(\"user pressed escape\");\n });\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(typeof result.error.message).toBe(\"string\");\n expect(result.error.message.length).toBeGreaterThan(0);\n }\n });\n\n test(\"USER_CANCELLED failure carries the original UserCancelledError as details\", async () => {\n const cancelled = new UserCancelledError(\"esc pressed\");\n const sprinkle = makeMockSprinkle(async () => {\n throw cancelled;\n });\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.details).toBe(cancelled);\n }\n });\n\n test(\"does not call execute when FillInStruct throws UserCancelledError\", async () => {\n let executeCalled = false;\n const action = {\n ...greetAction,\n execute: async (_input: any) => {\n executeCalled = true;\n return { greeting: \"hi\" };\n },\n };\n const sprinkle = makeMockSprinkle(async () => {\n throw new UserCancelledError();\n });\n\n await promptAndExecute(sprinkle, action);\n\n expect(executeCalled).toBe(false);\n });\n});\n\n// ---------------------------------------------------------------------------\n// describe: promptAndExecute – unexpected FillInStruct errors\n// ---------------------------------------------------------------------------\n\ndescribe(\"promptAndExecute – unexpected FillInStruct errors\", () => {\n test(\"returns IActionFailure with code PROMPT_ERROR when FillInStruct throws a non-UserCancelledError\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n throw new Error(\"TTY not available\");\n });\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.code).toBe(\"PROMPT_ERROR\");\n }\n });\n\n test(\"PROMPT_ERROR message includes the original error message\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n throw new Error(\"underlying prompt failure\");\n });\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.message).toContain(\"underlying prompt failure\");\n }\n });\n\n test(\"does not throw when FillInStruct throws an unexpected error\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n throw new Error(\"unexpected\");\n });\n\n await expect(promptAndExecute(sprinkle, greetAction)).resolves.toBeDefined();\n });\n\n test(\"PROMPT_ERROR result includes non-Error thrown values in message\", async () => {\n const sprinkle = makeMockSprinkle(async () => {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw \"some string error\";\n });\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.code).toBe(\"PROMPT_ERROR\");\n expect(result.error.message).toContain(\"some string error\");\n }\n });\n});\n\n// ---------------------------------------------------------------------------\n// describe: promptAndExecute – input validation\n// ---------------------------------------------------------------------------\n\ndescribe(\"promptAndExecute – input validation\", () => {\n test(\"returns VALIDATION_ERROR when FillInStruct returns data that fails schema validation\", async () => {\n // FillInStruct returns a value that does not conform to the inputSchema\n const sprinkle = makeMockSprinkle(async () => ({ name: 42 })); // name should be a string\n\n const result = await promptAndExecute(sprinkle, greetAction);\n\n expect(result.success).toBe(false);\n if (!result.success) {\n expect(result.error.code).toBe(\"VALIDATION_ERROR\");\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}