@dual-os/sdk 0.0.0-stage → 0.8.0-next.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 (214) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +19 -2
  3. package/dist/Action.d.ts +201 -0
  4. package/dist/Action.d.ts.map +1 -0
  5. package/dist/Action.js +172 -0
  6. package/dist/Action.js.map +1 -0
  7. package/dist/AgentChannel.d.ts +1717 -0
  8. package/dist/AgentChannel.d.ts.map +1 -0
  9. package/dist/AgentChannel.js +708 -0
  10. package/dist/AgentChannel.js.map +1 -0
  11. package/dist/AgentChannelConformance.d.ts +1543 -0
  12. package/dist/AgentChannelConformance.d.ts.map +1 -0
  13. package/dist/AgentChannelConformance.js +163 -0
  14. package/dist/AgentChannelConformance.js.map +1 -0
  15. package/dist/AgentChannelRuntime.d.ts +78 -0
  16. package/dist/AgentChannelRuntime.d.ts.map +1 -0
  17. package/dist/AgentChannelRuntime.js +270 -0
  18. package/dist/AgentChannelRuntime.js.map +1 -0
  19. package/dist/AiProvider.d.ts +132 -0
  20. package/dist/AiProvider.d.ts.map +1 -0
  21. package/dist/AiProvider.js +100 -0
  22. package/dist/AiProvider.js.map +1 -0
  23. package/dist/AuthMethod.d.ts +381 -0
  24. package/dist/AuthMethod.d.ts.map +1 -0
  25. package/dist/AuthMethod.js +225 -0
  26. package/dist/AuthMethod.js.map +1 -0
  27. package/dist/AuthMethodBinding.d.ts +77 -0
  28. package/dist/AuthMethodBinding.d.ts.map +1 -0
  29. package/dist/AuthMethodBinding.js +31 -0
  30. package/dist/AuthMethodBinding.js.map +1 -0
  31. package/dist/AuthMethodExecution.d.ts +223 -0
  32. package/dist/AuthMethodExecution.d.ts.map +1 -0
  33. package/dist/AuthMethodExecution.js +277 -0
  34. package/dist/AuthMethodExecution.js.map +1 -0
  35. package/dist/ConnectionResolver.d.ts +219 -0
  36. package/dist/ConnectionResolver.d.ts.map +1 -0
  37. package/dist/ConnectionResolver.js +153 -0
  38. package/dist/ConnectionResolver.js.map +1 -0
  39. package/dist/DefinitionError.d.ts +67 -0
  40. package/dist/DefinitionError.d.ts.map +1 -0
  41. package/dist/DefinitionError.js +82 -0
  42. package/dist/DefinitionError.js.map +1 -0
  43. package/dist/DualRegistry.d.ts +71 -0
  44. package/dist/DualRegistry.d.ts.map +1 -0
  45. package/dist/DualRegistry.js +96 -0
  46. package/dist/DualRegistry.js.map +1 -0
  47. package/dist/DualRuntime.d.ts +279 -0
  48. package/dist/DualRuntime.d.ts.map +1 -0
  49. package/dist/DualRuntime.js +311 -0
  50. package/dist/DualRuntime.js.map +1 -0
  51. package/dist/Files.d.ts +80 -0
  52. package/dist/Files.d.ts.map +1 -0
  53. package/dist/Files.js +66 -0
  54. package/dist/Files.js.map +1 -0
  55. package/dist/Group.d.ts +106 -0
  56. package/dist/Group.d.ts.map +1 -0
  57. package/dist/Group.js +86 -0
  58. package/dist/Group.js.map +1 -0
  59. package/dist/Http.d.ts +342 -0
  60. package/dist/Http.d.ts.map +1 -0
  61. package/dist/Http.js +677 -0
  62. package/dist/Http.js.map +1 -0
  63. package/dist/Mcp.d.ts +109 -0
  64. package/dist/Mcp.d.ts.map +1 -0
  65. package/dist/Mcp.js +176 -0
  66. package/dist/Mcp.js.map +1 -0
  67. package/dist/OAuth2TokenRefresher.d.ts +18 -0
  68. package/dist/OAuth2TokenRefresher.d.ts.map +1 -0
  69. package/dist/OAuth2TokenRefresher.js +19 -0
  70. package/dist/OAuth2TokenRefresher.js.map +1 -0
  71. package/dist/OAuthFlow.d.ts +71 -0
  72. package/dist/OAuthFlow.d.ts.map +1 -0
  73. package/dist/OAuthFlow.js +488 -0
  74. package/dist/OAuthFlow.js.map +1 -0
  75. package/dist/Plugin.d.ts +383 -0
  76. package/dist/Plugin.d.ts.map +1 -0
  77. package/dist/Plugin.js +249 -0
  78. package/dist/Plugin.js.map +1 -0
  79. package/dist/PluginRuntime.d.ts +3186 -0
  80. package/dist/PluginRuntime.d.ts.map +1 -0
  81. package/dist/PluginRuntime.js +331 -0
  82. package/dist/PluginRuntime.js.map +1 -0
  83. package/dist/Runner.d.ts +1 -0
  84. package/dist/Runner.js +124 -0
  85. package/dist/Runner.js.map +1 -0
  86. package/dist/ToolFile.d.ts +23 -0
  87. package/dist/ToolFile.d.ts.map +1 -0
  88. package/dist/ToolFile.js +33 -0
  89. package/dist/ToolFile.js.map +1 -0
  90. package/dist/Trigger.d.ts +358 -0
  91. package/dist/Trigger.d.ts.map +1 -0
  92. package/dist/Trigger.js +287 -0
  93. package/dist/Trigger.js.map +1 -0
  94. package/dist/_virtual/_rolldown/runtime.js +13 -0
  95. package/dist/index.d.ts +24 -0
  96. package/dist/index.js +24 -0
  97. package/dist/internal/auth-context.d.ts +23 -0
  98. package/dist/internal/auth-context.d.ts.map +1 -0
  99. package/dist/internal/auth-context.js +1 -0
  100. package/dist/internal/auth-execution.d.ts +27 -0
  101. package/dist/internal/auth-execution.d.ts.map +1 -0
  102. package/dist/internal/auth-execution.js +66 -0
  103. package/dist/internal/auth-execution.js.map +1 -0
  104. package/dist/internal/auth-runtime.d.ts +5 -0
  105. package/dist/internal/auth-runtime.d.ts.map +1 -0
  106. package/dist/internal/auth-runtime.js +16 -0
  107. package/dist/internal/auth-runtime.js.map +1 -0
  108. package/dist/internal/capabilities.d.ts +24 -0
  109. package/dist/internal/capabilities.d.ts.map +1 -0
  110. package/dist/internal/capabilities.js +22 -0
  111. package/dist/internal/capabilities.js.map +1 -0
  112. package/dist/internal/children.d.ts +34 -0
  113. package/dist/internal/children.d.ts.map +1 -0
  114. package/dist/internal/children.js +53 -0
  115. package/dist/internal/children.js.map +1 -0
  116. package/dist/internal/collection-utils.d.ts +4 -0
  117. package/dist/internal/collection-utils.d.ts.map +1 -0
  118. package/dist/internal/collection-utils.js +6 -0
  119. package/dist/internal/collection-utils.js.map +1 -0
  120. package/dist/internal/dual/actions.d.ts +33 -0
  121. package/dist/internal/dual/actions.d.ts.map +1 -0
  122. package/dist/internal/dual/actions.js +26 -0
  123. package/dist/internal/dual/actions.js.map +1 -0
  124. package/dist/internal/dual/invoke.d.ts +63 -0
  125. package/dist/internal/dual/invoke.d.ts.map +1 -0
  126. package/dist/internal/dual/invoke.js +75 -0
  127. package/dist/internal/dual/invoke.js.map +1 -0
  128. package/dist/internal/dual/registry.d.ts +125 -0
  129. package/dist/internal/dual/registry.d.ts.map +1 -0
  130. package/dist/internal/dual/registry.js +172 -0
  131. package/dist/internal/dual/registry.js.map +1 -0
  132. package/dist/internal/dual/triggers.d.ts +29 -0
  133. package/dist/internal/dual/triggers.d.ts.map +1 -0
  134. package/dist/internal/dual/triggers.js +26 -0
  135. package/dist/internal/dual/triggers.js.map +1 -0
  136. package/dist/internal/handler-context.d.ts +9 -0
  137. package/dist/internal/handler-context.d.ts.map +1 -0
  138. package/dist/internal/handler-context.js +31 -0
  139. package/dist/internal/handler-context.js.map +1 -0
  140. package/dist/internal/identifier.d.ts +6 -0
  141. package/dist/internal/identifier.d.ts.map +1 -0
  142. package/dist/internal/identifier.js +28 -0
  143. package/dist/internal/identifier.js.map +1 -0
  144. package/dist/internal/plugin-handlers.d.ts +38 -0
  145. package/dist/internal/plugin-handlers.d.ts.map +1 -0
  146. package/dist/internal/plugin-handlers.js +52 -0
  147. package/dist/internal/plugin-handlers.js.map +1 -0
  148. package/dist/internal/proto.d.ts +7 -0
  149. package/dist/internal/proto.d.ts.map +1 -0
  150. package/dist/internal/proto.js +10 -0
  151. package/dist/internal/proto.js.map +1 -0
  152. package/dist/internal/schema-runtime.d.ts +6 -0
  153. package/dist/internal/schema-runtime.d.ts.map +1 -0
  154. package/dist/internal/schema-runtime.js +10 -0
  155. package/dist/internal/schema-runtime.js.map +1 -0
  156. package/dist/internal/trigger-runtime-shared.d.ts +41 -0
  157. package/dist/internal/trigger-runtime-shared.d.ts.map +1 -0
  158. package/dist/internal/trigger-runtime-shared.js +132 -0
  159. package/dist/internal/trigger-runtime-shared.js.map +1 -0
  160. package/dist/internal/trigger-runtime.d.ts +12 -0
  161. package/dist/internal/trigger-runtime.d.ts.map +1 -0
  162. package/dist/internal/trigger-runtime.js +95 -0
  163. package/dist/internal/trigger-runtime.js.map +1 -0
  164. package/dist/internal/types.d.ts +7 -0
  165. package/dist/internal/types.d.ts.map +1 -0
  166. package/dist/internal/types.js +1 -0
  167. package/dist/remote-runtime.d.ts +585 -0
  168. package/dist/remote-runtime.d.ts.map +1 -0
  169. package/dist/remote-runtime.js +367 -0
  170. package/dist/remote-runtime.js.map +1 -0
  171. package/package.json +55 -4
  172. package/src/Action.ts +370 -0
  173. package/src/AgentChannel.ts +860 -0
  174. package/src/AgentChannelConformance.ts +124 -0
  175. package/src/AgentChannelRuntime.ts +616 -0
  176. package/src/AiProvider.ts +255 -0
  177. package/src/AuthMethod.ts +954 -0
  178. package/src/AuthMethodBinding.ts +112 -0
  179. package/src/AuthMethodExecution.ts +542 -0
  180. package/src/ConnectionResolver.ts +265 -0
  181. package/src/DefinitionError.ts +115 -0
  182. package/src/DualRegistry.ts +152 -0
  183. package/src/DualRuntime.ts +1081 -0
  184. package/src/Files.ts +89 -0
  185. package/src/Group.ts +292 -0
  186. package/src/Http.ts +1205 -0
  187. package/src/Mcp.ts +299 -0
  188. package/src/OAuth2TokenRefresher.ts +22 -0
  189. package/src/OAuthFlow.ts +874 -0
  190. package/src/Plugin.ts +912 -0
  191. package/src/PluginRuntime.ts +414 -0
  192. package/src/Runner.ts +248 -0
  193. package/src/ToolFile.ts +28 -0
  194. package/src/Trigger.ts +722 -0
  195. package/src/index.ts +158 -0
  196. package/src/internal/auth-context.ts +27 -0
  197. package/src/internal/auth-execution.ts +241 -0
  198. package/src/internal/auth-runtime.ts +20 -0
  199. package/src/internal/capabilities.ts +55 -0
  200. package/src/internal/children.ts +126 -0
  201. package/src/internal/collection-utils.ts +8 -0
  202. package/src/internal/dual/actions.ts +116 -0
  203. package/src/internal/dual/invoke.ts +307 -0
  204. package/src/internal/dual/registry.ts +340 -0
  205. package/src/internal/dual/triggers.ts +128 -0
  206. package/src/internal/handler-context.ts +57 -0
  207. package/src/internal/identifier.ts +27 -0
  208. package/src/internal/plugin-handlers.ts +146 -0
  209. package/src/internal/proto.ts +8 -0
  210. package/src/internal/schema-runtime.ts +15 -0
  211. package/src/internal/trigger-runtime-shared.ts +449 -0
  212. package/src/internal/trigger-runtime.ts +223 -0
  213. package/src/internal/types.ts +12 -0
  214. package/src/remote-runtime.ts +469 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.js","names":["Func","AgentChannel.ChannelError"],"sources":["../src/Plugin.ts"],"sourcesContent":["/**\n * Plugin definition builders and types for the Dual SDK.\n *\n * A plugin is one integration: its metadata, authentication alternatives, actions, groups,\n * triggers and Agent Channels, plus the Layer implementing them. A release is the plugin's\n * package version.\n *\n * @since 0.0.0\n */\nimport type { Pipeable, Scope } from \"effect\";\nimport { Array, Effect, Function as Func, Layer, Option, Predicate, Result, String } from \"effect\";\n\nimport type { HttpClientRequest } from \"effect/http\";\nimport { Url, UrlParams } from \"effect/http\";\n\nimport type * as Action from \"./Action.ts\";\nimport * as AgentChannel from \"./AgentChannel.ts\";\nimport type * as AuthMethod from \"./AuthMethod.ts\";\nimport type { ConnectionResolutionContext } from \"./ConnectionResolver.ts\";\nimport type * as Group from \"./Group.ts\";\nimport type { ContextForContract } from \"./internal/auth-context.ts\";\nimport { assertNoDuplicateAuthMethodIdentifiers } from \"./internal/auth-runtime.ts\";\nimport {\n assertUniqueMixedChildIdentifiers,\n assertUniqueStructuralChildIdentifiers,\n type FilterChildren,\n partitionChildren,\n type StructuralChildKind,\n} from \"./internal/children.ts\";\nimport { appendElements } from \"./internal/collection-utils.ts\";\nimport { validateIdentifier } from \"./internal/identifier.ts\";\nimport {\n type HandlerServices as PluginHandlerServices,\n toHandlers,\n} from \"./internal/plugin-handlers.ts\";\nimport { PipeableProto } from \"./internal/proto.ts\";\nimport type * as Trigger from \"./Trigger.ts\";\n\n/**\n * @since 0.0.0\n * @category type ids\n */\nexport const TypeId = \"@dual-os/sdk/Plugin\" as const;\n\n/**\n * @since 0.0.0\n * @category type ids\n */\nexport type TypeId = typeof TypeId;\n\n/** @since 0.0.0 @category models */\nexport const categories = [\n \"sales_crm\",\n \"marketing\",\n \"customer_support\",\n \"calendar_scheduling\",\n \"communication\",\n \"project_management\",\n \"developer_tools\",\n \"data_storage\",\n \"docs_productivity\",\n \"commerce_payments\",\n \"finance_accounting\",\n \"human_resources\",\n \"analytics\",\n \"design\",\n \"it_service_management\",\n \"search\",\n \"telephony\",\n \"web_scraping\",\n] as const;\n\n/** @since 0.0.0 @category models */\nexport type Category = (typeof categories)[number];\n\n/**\n * How a command in a run sandbox uses the plugin's Connection over HTTPS without reading its\n * credential: Dual's sandbox gateway adds the credential to each request that the plugin allows.\n *\n * @since 0.0.0\n * @category models\n */\nexport interface SandboxAccess<\n Methods extends readonly AuthMethod.Any[] = readonly AuthMethod.Any[],\n> {\n /** Origins, such as `https://github.com`, that may receive the Connection's credential. */\n origins(context: Action.HandlerContext<Methods>): readonly string[];\n /**\n * Adds the Connection's credential to a request for one of the origins, or refuses the request.\n * Refuse every request that can read or create a credential, such as a token rotation.\n */\n authorize(\n request: HttpClientRequest.HttpClientRequest,\n context: Action.HandlerContext<Methods>,\n ): Option.Option<HttpClientRequest.HttpClientRequest>;\n}\n\nconst gitServices = [\"git-upload-pack\", \"git-receive-pack\"];\n\n/**\n * Whether a request is a Git smart HTTP request of a fetch, clone or push: `GET <repository>/info/refs?service=<service>`\n * or `POST <repository>/<service>` with the service's request content type.\n *\n * @since 0.0.0\n * @category predicates\n */\nexport function isGitRequest(request: HttpClientRequest.HttpClientRequest) {\n return Result.match(Url.fromString(request.url), {\n onFailure: () => false,\n onSuccess: url => {\n const service = Option.orElse(UrlParams.getFirst(Url.urlParams(url), \"service\"), () =>\n UrlParams.getFirst(request.urlParams, \"service\"),\n );\n return Array.some(\n gitServices,\n name =>\n (request.method === \"GET\" &&\n String.endsWith(\"/info/refs\")(url.pathname) &&\n Option.contains(service, name)) ||\n (request.method === \"POST\" &&\n String.endsWith(`/${name}`)(url.pathname) &&\n request.headers[\"content-type\"] === `application/x-${name}-request`),\n );\n },\n });\n}\n\n/**\n * Constraint type for working with any {@link Plugin}.\n *\n * @since 0.0.0\n * @category type-level\n */\nexport interface Any extends Pipeable.Pipeable {\n readonly [TypeId]: TypeId;\n readonly identifier: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly iconUrl: string | undefined;\n readonly iconUrlDark: string | undefined;\n readonly categories: readonly Category[];\n readonly homepageUrl: string | undefined;\n readonly docsUrl: string | undefined;\n readonly authMethods: readonly AuthMethod.Any[];\n readonly groups: readonly Group.Any[];\n readonly actions: readonly Action.Any[];\n readonly triggers: readonly Trigger.Any[];\n readonly agentChannels: readonly AgentChannel.Any[];\n readonly sandboxAccess: SandboxAccess | undefined;\n readonly layer: Layer.Layer<never, any, any>;\n}\n\n/**\n * A typed plugin definition.\n *\n * @since 0.0.0\n * @category models\n */\nexport interface Plugin<\n out Identifier extends string = string,\n out AuthMethods extends readonly AuthMethod.Any[] = readonly [],\n out Groups extends readonly Group.Any[] = readonly [],\n out Actions extends readonly Action.Any[] = readonly [],\n out Triggers extends readonly Trigger.Any[] = readonly [],\n out Channels extends readonly AgentChannel.Any[] = readonly [],\n LayerOutput = never,\n out LayerError = never,\n out LayerRequirements = never,\n>\n extends Pipeable.Pipeable {\n readonly [TypeId]: TypeId;\n readonly identifier: Identifier;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly iconUrl: string | undefined;\n readonly iconUrlDark: string | undefined;\n readonly categories: readonly Category[];\n readonly homepageUrl: string | undefined;\n readonly docsUrl: string | undefined;\n readonly authMethods: AuthMethods;\n readonly groups: Groups;\n readonly actions: Actions;\n readonly triggers: Triggers;\n readonly agentChannels: Channels;\n readonly sandboxAccess: SandboxAccess | undefined;\n readonly layer: Layer.Layer<LayerOutput, LayerError, LayerRequirements>;\n}\n\n/**\n * The contract of a plugin without its Layer.\n *\n * @since 0.6.0\n * @category models\n */\nexport type Definition<\n Identifier extends string,\n Methods extends readonly AuthMethod.Any[] = readonly [],\n Groups extends readonly Group.Any[] = readonly [],\n Actions extends readonly Action.Any[] = readonly [],\n Triggers extends readonly Trigger.Any[] = readonly [],\n Channels extends readonly AgentChannel.Any[] = readonly [],\n> = Plugin<Identifier, Methods, Groups, Actions, Triggers, Channels>;\n\n/**\n * A plugin contract with the services its Layer provides.\n *\n * @since 0.7.0\n * @category models\n */\nexport type Provided<\n P extends Any,\n LayerOutput,\n LayerError = never,\n LayerRequirements = never,\n> = Plugin<\n P[\"identifier\"],\n P[\"authMethods\"],\n P[\"groups\"],\n P[\"actions\"],\n P[\"triggers\"],\n P[\"agentChannels\"],\n LayerOutput,\n LayerError,\n LayerRequirements\n>;\n\n/**\n * Runtime services produced by plugin layers.\n *\n * @since 0.0.0\n * @category type-level\n */\nexport type LayerOutput<Plugins extends readonly Any[]> =\n Plugins[number] extends Plugin<any, any, any, any, any, any, infer Output, any, any>\n ? Output\n : never;\n\n/**\n * Errors surfaced while constructing plugin layers.\n *\n * @since 0.0.0\n * @category type-level\n */\nexport type LayerError<Plugins extends readonly Any[]> =\n Plugins[number] extends Plugin<any, any, any, any, any, any, any, infer Error, any>\n ? Error\n : never;\n\n/**\n * Runtime services required by plugin layers.\n *\n * @since 0.0.0\n * @category type-level\n */\nexport type LayerRequirements<Plugins extends readonly Any[]> =\n Plugins[number] extends Plugin<any, any, any, any, any, any, any, any, infer Requirements>\n ? Requirements\n : never;\n\n/** @since 0.0.0 @category type-level */\nexport type StructuralChild = Group.Any | Action.Any | Trigger.Any;\n\n/** @since 0.0.0 @category type-level */\nexport type GroupsFromChildren<Children extends readonly StructuralChild[]> = FilterChildren<\n Children,\n Group.Any\n>;\n\n/** @since 0.0.0 @category type-level */\nexport type ActionsFromChildren<Children extends readonly StructuralChild[]> = FilterChildren<\n Children,\n Action.Any\n>;\n\n/** @since 0.0.0 @category type-level */\nexport type TriggersFromChildren<Children extends readonly StructuralChild[]> = FilterChildren<\n Children,\n Trigger.Any\n>;\n\n/**\n * Result of appending capabilities to a plugin.\n *\n * @since 0.0.0\n * @category type-level\n */\nexport type AddChildren<\n P extends Any,\n AddedGroups extends readonly Group.Any[] = readonly [],\n AddedActions extends readonly Action.Any[] = readonly [],\n AddedTriggers extends readonly Trigger.Any[] = readonly [],\n AddedChannels extends readonly AgentChannel.Any[] = readonly [],\n> =\n P extends Plugin<\n infer Identifier,\n infer Methods,\n infer Groups,\n infer Actions,\n infer Triggers,\n infer Channels,\n infer Output,\n infer Error,\n infer Requirements\n >\n ? Plugin<\n Identifier,\n Methods,\n readonly [...Groups, ...AddedGroups],\n readonly [...Actions, ...AddedActions],\n readonly [...Triggers, ...AddedTriggers],\n readonly [...Channels, ...AddedChannels],\n Output,\n Error,\n Requirements\n >\n : never;\n\n/**\n * Result of appending auth methods to a plugin.\n *\n * @since 0.0.0\n * @category type-level\n */\nexport type AddAuthMethods<P extends Any, AddedMethods extends readonly AuthMethod.Any[]> =\n P extends Plugin<\n infer Identifier,\n infer Methods,\n infer Groups,\n infer Actions,\n infer Triggers,\n infer Channels,\n infer Output,\n infer Error,\n infer Requirements\n >\n ? Plugin<\n Identifier,\n readonly [...Methods, ...AddedMethods],\n Groups,\n Actions,\n Triggers,\n Channels,\n Output,\n Error,\n Requirements\n >\n : never;\n\ninterface Fields {\n readonly identifier: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly iconUrl: string | undefined;\n readonly iconUrlDark: string | undefined;\n readonly categories: readonly Category[];\n readonly homepageUrl: string | undefined;\n readonly docsUrl: string | undefined;\n readonly authMethods: readonly AuthMethod.Any[];\n readonly groups: readonly Group.Any[];\n readonly actions: readonly Action.Any[];\n readonly triggers: readonly Trigger.Any[];\n readonly agentChannels: readonly AgentChannel.Any[];\n readonly sandboxAccess: SandboxAccess | undefined;\n readonly layer: Layer.Layer<never, any, any>;\n}\n\nconst Proto = { ...PipeableProto, [TypeId]: TypeId };\n\nconst makePlugin = (fields: Fields): Any => {\n validateIdentifier(\"plugin\", fields.identifier);\n assertNoDuplicateAuthMethodIdentifiers(fields.identifier, fields.authMethods);\n return Object.assign(Object.create(Proto), fields);\n};\n\nconst update = (plugin: Any, fields: Partial<Fields>): Any => makePlugin({ ...plugin, ...fields });\n\n/**\n * Create an empty {@link Plugin}.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const make = <const Identifier extends string>(identifier: Identifier): Plugin<Identifier> =>\n makePlugin({\n actions: [],\n agentChannels: [],\n authMethods: [],\n categories: [],\n description: undefined,\n docsUrl: undefined,\n groups: [],\n homepageUrl: undefined,\n iconUrl: undefined,\n iconUrlDark: undefined,\n identifier,\n layer: Layer.empty,\n name: undefined,\n sandboxAccess: undefined,\n triggers: [],\n }) as never;\n\n/**\n * Check if a value is a {@link Plugin}.\n *\n * @since 0.0.0\n * @category guards\n */\nexport const isPlugin = (u: unknown): u is Any => Predicate.hasProperty(u, TypeId);\n\nconst metadata = <\n Key extends \"name\" | \"description\" | \"iconUrl\" | \"iconUrlDark\" | \"homepageUrl\" | \"docsUrl\",\n>(\n key: Key,\n): {\n (value: string): <P extends Any>(plugin: P) => P;\n <P extends Any>(plugin: P, value: string): P;\n} => Func.dual(2, (plugin: Any, value: string) => update(plugin, { [key]: value })) as never;\n\n/** @since 0.0.0 @category combinators */\nexport const withName = metadata(\"name\");\n/** @since 0.0.0 @category combinators */\nexport const withDescription = metadata(\"description\");\n/** @since 0.6.0 @category combinators */\nexport const withIconUrl = metadata(\"iconUrl\");\n/** @since 0.6.0 @category combinators */\nexport const withIconUrlDark = metadata(\"iconUrlDark\");\n/** @since 0.6.0 @category combinators */\nexport const withHomepageUrl = metadata(\"homepageUrl\");\n/** @since 0.6.0 @category combinators */\nexport const withDocsUrl = metadata(\"docsUrl\");\n\n/** @since 0.6.0 @category combinators */\nexport const withCategories: {\n (categories: readonly Category[]): <P extends Any>(plugin: P) => P;\n <P extends Any>(plugin: P, categories: readonly Category[]): P;\n} = Func.dual(2, (plugin: Any, categories: readonly Category[]) =>\n update(plugin, { categories: [...categories] }),\n);\n\n/**\n * Add authentication alternatives. Actions and triggers accept every method.\n *\n * @since 0.6.0\n * @category combinators\n */\nexport const withAuthMethods =\n <const Methods extends readonly AuthMethod.Any[]>(methods: Methods) =>\n <P extends Any>(plugin: P): AddAuthMethods<P, Methods> => {\n if (plugin.sandboxAccess !== undefined) {\n throw new Error(\n `plugin \"${plugin.identifier}\" must declare auth methods before its sandbox access`,\n );\n }\n return update(plugin, { authMethods: appendElements(plugin.authMethods, methods) }) as never;\n };\n\n/**\n * Add an authentication alternative. Actions and triggers accept every method.\n *\n * @since 0.6.0\n * @category combinators\n */\nexport const withAuthMethod: {\n <const Method extends AuthMethod.Any>(\n method: Method,\n ): <P extends Any>(plugin: P) => AddAuthMethods<P, readonly [Method]>;\n <P extends Any, const Method extends AuthMethod.Any>(\n plugin: P,\n method: Method,\n ): AddAuthMethods<P, readonly [Method]>;\n} = Func.dual(2, (plugin: Any, method: AuthMethod.Any) => withAuthMethods([method])(plugin));\n\n/**\n * Lets commands in a run sandbox use the plugin's Connection through Dual's sandbox gateway.\n *\n * @since 0.6.0\n * @category combinators\n */\nexport const withSandboxAccess =\n <Methods extends readonly AuthMethod.Any[]>(access: SandboxAccess<Methods>) =>\n <P extends Any>(plugin: P & { readonly authMethods: Methods }): P =>\n update(plugin, { sandboxAccess: access as SandboxAccess }) as P;\n\nconst appendChildren = (\n plugin: Any,\n children: readonly StructuralChild[],\n childKind?: StructuralChildKind,\n): Any => {\n if (childKind === undefined) {\n assertUniqueMixedChildIdentifiers(\"plugin\", plugin.identifier, plugin, children);\n } else {\n assertUniqueStructuralChildIdentifiers(\n \"plugin\",\n plugin.identifier,\n plugin,\n children,\n childKind,\n );\n }\n const partitioned = partitionChildren(children);\n return update(plugin, {\n actions: appendElements(plugin.actions, partitioned.actions),\n groups: appendElements(plugin.groups, partitioned.groups),\n triggers: appendElements(plugin.triggers, partitioned.triggers),\n });\n};\n\n/** @since 0.6.0 @category combinators */\nexport const withAction: {\n <const Added extends Action.Any>(\n action: Added,\n ): <P extends Any>(plugin: P) => AddChildren<P, readonly [], readonly [Added]>;\n <P extends Any, const Added extends Action.Any>(\n plugin: P,\n action: Added,\n ): AddChildren<P, readonly [], readonly [Added]>;\n} = Func.dual(2, (plugin: Any, action: Action.Any) => appendChildren(plugin, [action], \"action\"));\n\n/** @since 0.6.0 @category combinators */\nexport const withGroup: {\n <const Added extends Group.Any>(\n group: Added,\n ): <P extends Any>(plugin: P) => AddChildren<P, readonly [Added]>;\n <P extends Any, const Added extends Group.Any>(\n plugin: P,\n group: Added,\n ): AddChildren<P, readonly [Added]>;\n} = Func.dual(2, (plugin: Any, group: Group.Any) => appendChildren(plugin, [group], \"group\"));\n\n/** @since 0.6.0 @category combinators */\nexport const withTrigger: {\n <const Added extends Trigger.Any>(\n trigger: Added,\n ): <P extends Any>(plugin: P) => AddChildren<P, readonly [], readonly [], readonly [Added]>;\n <P extends Any, const Added extends Trigger.Any>(\n plugin: P,\n trigger: Added,\n ): AddChildren<P, readonly [], readonly [], readonly [Added]>;\n} = Func.dual(2, (plugin: Any, trigger: Trigger.Any) =>\n appendChildren(plugin, [trigger], \"trigger\"),\n);\n\n/** Add the generated action groups. @since 0.6.0 @category combinators */\nexport const withGroups =\n <const Groups extends readonly Group.Any[]>(groups: Groups) =>\n <P extends Any>(plugin: P): AddChildren<P, Groups> =>\n appendChildren(plugin, groups, \"group\") as never;\n\n/** Add trigger definitions from an overlay. @since 0.6.0 @category combinators */\nexport const withTriggers =\n <const Triggers extends readonly Trigger.Any[]>(triggers: Triggers) =>\n <P extends Any>(plugin: P): AddChildren<P, readonly [], readonly [], Triggers> =>\n appendChildren(plugin, triggers, \"trigger\") as never;\n\n/** Add grouped capabilities. @since 0.6.0 @category combinators */\nexport const add =\n <const Children extends readonly StructuralChild[]>(...children: Children) =>\n <P extends Any>(\n plugin: P,\n ): AddChildren<\n P,\n GroupsFromChildren<Children>,\n ActionsFromChildren<Children>,\n TriggersFromChildren<Children>\n > =>\n appendChildren(plugin, children) as never;\n\n/** Add an Agent Channel; its definition owns its exact auth subset. @since 0.6.0 @category combinators */\nexport const withAgentChannel =\n <const Channel extends AgentChannel.Any>(channel: Channel) =>\n <P extends Any>(\n plugin: P,\n ): AddChildren<P, readonly [], readonly [], readonly [], readonly [Channel]> => {\n if (\n [...plugin.actions, ...plugin.triggers, ...plugin.groups, ...plugin.agentChannels].some(\n child => child.identifier === channel.identifier,\n )\n ) {\n throw new AgentChannel.ChannelError({ code: \"invalid_definition\" });\n }\n AgentChannel.validateDefinition(channel.definition, plugin.identifier, plugin.authMethods);\n return update(plugin, { agentChannels: [...plugin.agentChannels, channel] }) as never;\n };\n\n/**\n * Attach runtime services to a plugin definition.\n *\n * @since 0.0.0\n * @category combinators\n */\nexport const provide: {\n <AddedOutput, AddedError, AddedRequirements>(\n layer: Layer.Layer<AddedOutput, AddedError, AddedRequirements>,\n ): <P extends Any>(\n plugin: P,\n ) => Provided<\n P,\n LayerOutput<readonly [P]> | AddedOutput,\n LayerError<readonly [P]> | AddedError,\n AddedRequirements | Exclude<LayerRequirements<readonly [P]>, AddedOutput>\n >;\n <P extends Any, AddedOutput, AddedError, AddedRequirements>(\n plugin: P,\n layer: Layer.Layer<AddedOutput, AddedError, AddedRequirements>,\n ): Provided<\n P,\n LayerOutput<readonly [P]> | AddedOutput,\n LayerError<readonly [P]> | AddedError,\n AddedRequirements | Exclude<LayerRequirements<readonly [P]>, AddedOutput>\n >;\n} = Func.dual(2, (plugin: Any, layer: Layer.Layer<never, any, any>) =>\n update(plugin, { layer: Layer.provideMerge(plugin.layer, layer) }),\n);\n\n/** Runtime handler services contributed by a plugin. @since 0.6.0 @category type-level */\nexport type HandlerServices<P extends Any> = PluginHandlerServices<P>;\n\n/** The service carrying a plugin's action handlers. @since 0.7.0 @category type-level */\nexport type { ActionHandlerService, ActionHandlerServiceOf } from \"./internal/plugin-handlers.ts\";\n\ninterface Node {\n readonly actions: readonly Action.Any[];\n readonly groups: readonly Group.Any[];\n readonly triggers: readonly Trigger.Any[];\n readonly agentChannels?: readonly AgentChannel.Any[];\n}\n\ntype ActionName<N extends Node> = N[\"actions\"][number][\"identifier\"];\ntype GroupName<N extends Node> = N[\"groups\"][number][\"identifier\"];\ntype TriggerName<N extends Node> = N[\"triggers\"][number][\"identifier\"];\n\ntype ActionNamed<N extends Node, Name> = Extract<\n N[\"actions\"][number],\n { readonly identifier: Name }\n>;\ntype GroupNamed<N extends Node, Name> = Extract<N[\"groups\"][number], { readonly identifier: Name }>;\ntype TriggerNamed<N extends Node, Name> = Extract<\n N[\"triggers\"][number],\n { readonly identifier: Name }\n>;\n\ntype Channels<N extends Node> = N extends {\n readonly agentChannels: infer C extends readonly AgentChannel.Any[];\n}\n ? C[number]\n : never;\ntype ChannelName<N extends Node> = Channels<N>[\"identifier\"];\ntype ChannelNamed<N extends Node, Name> = Extract<Channels<N>, { readonly identifier: Name }>;\ntype Names<N extends Node> = ActionName<N> | GroupName<N> | TriggerName<N> | ChannelName<N>;\n\n// Concrete parameter types, not a generic handler, let `Effect.fn` infer its arguments.\ntype ActionHandler<A extends Action.Any, Methods extends readonly AuthMethod.Any[], R> = (\n input: Action.Input<A>,\n context: ContextForContract<Methods, A[\"requireAuth\"]>,\n) => Effect.Effect<Action.Output<A>, Action.ActionHandlerFailure, R>;\n\ntype TriggerContext<\n T extends Trigger.Any,\n Methods extends readonly AuthMethod.Any[],\n> = ContextForContract<Methods, T[\"requireAuth\"]> & ConnectionResolutionContext;\n\ntype Emit<T extends Trigger.Any> = Trigger.EmitResult<Trigger.Output<T>, Trigger.State<T>>;\n\ntype WebhookInput<T extends Trigger.Any> = Trigger.WebhookLifecycleInput<\n Trigger.Config<T>,\n Trigger.State<T>\n>;\ntype ActivationInput<T extends Trigger.Any> = Trigger.WebhookActivationInput<\n Trigger.Config<T>,\n Trigger.State<T>\n>;\n\n/** Lifecycle handlers each trigger kind must implement; each hook infers its own requirements. */\ntype TriggerLifecycle<\n T extends Trigger.Any,\n Methods extends readonly AuthMethod.Any[],\n RActivate,\n RDeactivate,\n RVerify,\n REmit,\n> = T[\"kind\"] extends \"webhook\"\n ? {\n readonly activate?: (\n input: ActivationInput<T>,\n context: TriggerContext<T, Methods>,\n ) => Effect.Effect<Trigger.ActivationResult<Trigger.State<T>>, unknown, RActivate>;\n readonly deactivate?: (\n input: ActivationInput<T>,\n context: TriggerContext<T, Methods>,\n ) => Effect.Effect<void, unknown, RDeactivate>;\n readonly verify?: (\n input: WebhookInput<T>,\n context: TriggerContext<T, Methods>,\n ) => Effect.Effect<void | Trigger.VerifyResult<Trigger.State<T>>, unknown, RVerify>;\n readonly parse: (\n input: WebhookInput<T>,\n context: TriggerContext<T, Methods>,\n ) => Effect.Effect<Emit<T>, unknown, REmit>;\n }\n : {\n readonly poll: (\n input: Trigger.PollingInput<Trigger.Config<T>, Trigger.State<T>>,\n context: TriggerContext<T, Methods>,\n ) => Effect.Effect<Emit<T>, unknown, REmit>;\n };\n\ntype UnionToIntersection<U> = (U extends unknown ? (value: U) => void : never) extends (\n value: infer I,\n) => void\n ? I\n : never;\n\n/** Typed lifecycles exported by a trigger overlay. @since 0.6.0 @category handlers */\nexport type TriggerHandlers<\n Triggers extends readonly Trigger.Any[],\n Methods extends readonly AuthMethod.Any[],\n> = {\n readonly [T in Triggers[number] as T[\"identifier\"]]: TriggerLifecycle<\n T,\n Methods,\n any,\n any,\n any,\n any\n >;\n};\n\ntype LifecycleRequirements<H> = H extends (...args: any[]) => Effect.Effect<any, any, infer R>\n ? R\n : H extends object\n ? { [K in keyof H]: LifecycleRequirements<H[K]> }[keyof H]\n : never;\n\n/** Rejects a union of names, which would mark several capabilities handled by one handler. */\ntype Single<Name> = [Name] extends [UnionToIntersection<Name>] ? unknown : never;\n\n/**\n * Immutable handler collection for one plugin or group. Each registration\n * removes its name from the names still accepted.\n *\n * @since 0.6.0\n * @category handlers\n */\nexport interface HandlerCollection<\n N extends Node,\n Methods extends readonly AuthMethod.Any[],\n Handled extends PropertyKey = never,\n R = never,\n> {\n readonly \"~node\": N;\n readonly \"~handled\": Handled;\n readonly \"~requirements\": R;\n /** @internal */\n readonly actions: Readonly<Record<string, unknown>>;\n /** @internal */\n readonly triggers: Readonly<Record<string, unknown>>;\n readonly agentChannels: Readonly<Record<string, unknown>>;\n\n /** Implement a Channel declared by the plugin. */\n channel<const Name extends Exclude<ChannelName<N>, Handled>, R1>(\n name: Name & Single<Name>,\n lifecycle: AgentChannel.RuntimeContract<ChannelNamed<N, Name>[\"definition\"], R1>,\n ): HandlerCollection<N, Methods, Handled | Name, R | R1>;\n\n /** Register the lifecycles from a typed trigger overlay. */\n withTriggers<H extends TriggerHandlers<N[\"triggers\"], Methods>>(\n lifecycles: H &\n Record<Exclude<keyof H, TriggerName<N>>, never> &\n ([Extract<Handled, TriggerName<N>>] extends [never] ? unknown : never),\n ): HandlerCollection<N, Methods, Handled | TriggerName<N>, R | LifecycleRequirements<H>>;\n\n /** Implement an action declared directly on this plugin or group. */\n action<const Name extends Exclude<ActionName<N>, Handled>, R1>(\n name: Name & Single<Name>,\n handler: ActionHandler<ActionNamed<N, Name>, Methods, R1>,\n ): HandlerCollection<N, Methods, Handled | Name, R | R1>;\n\n /** Implement every capability of a nested group. */\n group<const Name extends Exclude<GroupName<N>, Handled>, Return>(\n name: Name & Single<Name>,\n build: (\n handlers: HandlerCollection<GroupNamed<N, Name>, Methods>,\n ) => ValidateHandlers<Return, GroupNamed<N, Name>>,\n ): HandlerCollection<N, Methods, Handled | Name, R | Requirements<Return>>;\n\n /** Implement the lifecycle of a trigger declared directly on this plugin or group. */\n trigger<\n const Name extends Exclude<TriggerName<N>, Handled>,\n RActivate = never,\n RDeactivate = never,\n RVerify = never,\n REmit = never,\n >(\n name: Name & Single<Name>,\n lifecycle: TriggerLifecycle<\n TriggerNamed<N, Name>,\n Methods,\n RActivate,\n RDeactivate,\n RVerify,\n REmit\n >,\n ): HandlerCollection<N, Methods, Handled | Name, R | RActivate | RDeactivate | RVerify | REmit>;\n}\n\ntype Built<Return> = Return extends Effect.Effect<infer H, any, any> ? H : Return;\n\n/** Accept the expected node's handler collection once every capability is implemented. */\ntype ValidateHandlers<H, N extends Node> =\n H extends HandlerCollection<N, any, infer Handled, any>\n ? [Exclude<Names<N>, Handled>] extends [never]\n ? H\n : `Capability not handled: ${Exclude<Names<N>, Handled> & string}`\n : \"Must return the handlers of this plugin or group\";\n\n/**\n * Accept the plugin's handlers, or an Effect building them, once every\n * declared capability is implemented.\n *\n * @since 0.6.0\n * @category type-level\n */\nexport type ValidateReturn<Return, N extends Node> = [ValidateHandlers<Built<Return>, N>] extends [\n HandlerCollection<any, any, any, any>,\n]\n ? Return\n : ValidateHandlers<Built<Return>, N>;\n\n/**\n * Services the handlers need, including those needed to build them.\n *\n * @since 0.6.0\n * @category type-level\n */\nexport type Requirements<Return> =\n Return extends Effect.Effect<HandlerCollection<any, any, any, infer R>, any, infer RX>\n ? R | RX\n : Return extends HandlerCollection<any, any, any, infer R>\n ? R\n : never;\n\n/**\n * Failures raised while building the handlers.\n *\n * @since 0.6.0\n * @category type-level\n */\nexport type BuildError<Return> = Return extends Effect.Effect<any, infer E, any> ? E : never;\n\nconst makeHandlers = (\n actions: Readonly<Record<string, unknown>>,\n triggers: Readonly<Record<string, unknown>>,\n agentChannels: Readonly<Record<string, unknown>> = {},\n): HandlerCollection<any, any> =>\n ({\n action: (name: string, handler: unknown) =>\n makeHandlers({ ...actions, [name]: handler }, triggers, agentChannels),\n actions,\n agentChannels,\n channel: (name: string, lifecycle: unknown) =>\n makeHandlers(actions, triggers, { ...agentChannels, [name]: lifecycle }),\n group: (\n name: string,\n build: (handlers: HandlerCollection<any, any>) => HandlerCollection<any, any>,\n ) => {\n const group = build(makeHandlers({}, {}));\n return makeHandlers(\n { ...actions, [name]: group.actions },\n { ...triggers, [name]: group.triggers },\n agentChannels,\n );\n },\n trigger: (name: string, lifecycle: unknown) =>\n makeHandlers(actions, { ...triggers, [name]: lifecycle }, agentChannels),\n triggers,\n withTriggers: (lifecycles: Readonly<Record<string, unknown>>) =>\n makeHandlers(actions, { ...triggers, ...lifecycles }, agentChannels),\n }) as never;\n\n/**\n * Handler collection passed to {@link toLayer}.\n *\n * @since 0.6.0\n * @category handlers\n */\nexport type Handlers<P extends Any> = HandlerCollection<P, P[\"authMethods\"]>;\n\n/**\n * Implement a plugin's capabilities. `build` registers one handler per action,\n * trigger and Channel; the Layer is rejected until every capability is implemented.\n *\n * @since 0.6.0\n * @category handlers\n */\nexport const toLayer = <P extends Any, Return>(\n plugin: P,\n build: (handlers: Handlers<P>) => ValidateReturn<Return, P>,\n): Layer.Layer<\n HandlerServices<P>,\n BuildError<Return>,\n Exclude<Requirements<Return>, Scope.Scope>\n> =>\n Layer.effectContext(\n Effect.gen(function* () {\n const result = build(makeHandlers({}, {})) as unknown;\n const handlers = (Effect.isEffect(result) ? yield* result : result) as HandlerCollection<\n any,\n any\n >;\n return yield* toHandlers(plugin, handlers);\n }),\n ) as never;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAa,SAAS;;AAStB,MAAa,aAAa;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AA2BA,MAAM,cAAc,CAAC,mBAAmB,kBAAkB;;;;;;;;AAS1D,SAAgB,aAAa,SAA8C;CACzE,OAAO,OAAO,MAAM,IAAI,WAAW,QAAQ,GAAG,GAAG;EAC/C,iBAAiB;EACjB,YAAW,QAAO;GAChB,MAAM,UAAU,OAAO,OAAO,UAAU,SAAS,IAAI,UAAU,GAAG,GAAG,SAAS,SAC5E,UAAU,SAAS,QAAQ,WAAW,SAAS,CACjD;GACA,OAAO,MAAM,KACX,cACA,SACG,QAAQ,WAAW,SAClB,OAAO,SAAS,YAAY,CAAC,CAAC,IAAI,QAAQ,KAC1C,OAAO,SAAS,SAAS,IAAI,KAC9B,QAAQ,WAAW,UAClB,OAAO,SAAS,IAAI,MAAM,CAAC,CAAC,IAAI,QAAQ,KACxC,QAAQ,QAAQ,oBAAoB,iBAAiB,KAAK,SAChE;EACF;CACF,CAAC;AACH;AAiPA,MAAM,QAAQ;CAAE,GAAG;EAAgB,SAAS;AAAO;AAEnD,MAAM,cAAc,WAAwB;CAC1C,mBAAmB,UAAU,OAAO,UAAU;CAC9C,uCAAuC,OAAO,YAAY,OAAO,WAAW;CAC5E,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG,MAAM;AACnD;AAEA,MAAM,UAAU,QAAa,WAAiC,WAAW;CAAE,GAAG;CAAQ,GAAG;AAAO,CAAC;;;;;;;AAQjG,MAAa,QAAyC,eACpD,WAAW;CACT,SAAS,CAAC;CACV,eAAe,CAAC;CAChB,aAAa,CAAC;CACd,YAAY,CAAC;CACb,aAAa,KAAA;CACb,SAAS,KAAA;CACT,QAAQ,CAAC;CACT,aAAa,KAAA;CACb,SAAS,KAAA;CACT,aAAa,KAAA;CACb;CACA,OAAO,MAAM;CACb,MAAM,KAAA;CACN,eAAe,KAAA;CACf,UAAU,CAAC;AACb,CAAC;;;;;;;AAQH,MAAa,YAAY,MAAyB,UAAU,YAAY,GAAG,MAAM;AAEjF,MAAM,YAGJ,QAIGA,SAAK,KAAK,IAAI,QAAa,UAAkB,OAAO,QAAQ,GAAG,MAAM,MAAM,CAAC,CAAC;;AAGlF,MAAa,WAAW,SAAS,MAAM;;AAEvC,MAAa,kBAAkB,SAAS,aAAa;;AAErD,MAAa,cAAc,SAAS,SAAS;;AAE7C,MAAa,kBAAkB,SAAS,aAAa;;AAErD,MAAa,kBAAkB,SAAS,aAAa;;AAErD,MAAa,cAAc,SAAS,SAAS;;AAG7C,MAAa,iBAGTA,SAAK,KAAK,IAAI,QAAa,eAC7B,OAAO,QAAQ,EAAE,YAAY,CAAC,GAAG,UAAU,EAAE,CAAC,CAChD;;;;;;;AAQA,MAAa,mBACuC,aAClC,WAA0C;CACxD,IAAI,OAAO,kBAAkB,KAAA,GAC3B,MAAM,IAAI,MACR,WAAW,OAAO,WAAW,sDAC/B;CAEF,OAAO,OAAO,QAAQ,EAAE,aAAa,eAAe,OAAO,aAAa,OAAO,EAAE,CAAC;AACpF;;;;;;;AAQF,MAAa,iBAQTA,SAAK,KAAK,IAAI,QAAa,WAA2B,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;;;;;;;AAQ3F,MAAa,qBACiC,YAC5B,WACd,OAAO,QAAQ,EAAE,eAAe,OAAwB,CAAC;AAE7D,MAAM,kBACJ,QACA,UACA,cACQ;CACR,IAAI,cAAc,KAAA,GAChB,kCAAkC,UAAU,OAAO,YAAY,QAAQ,QAAQ;MAE/E,uCACE,UACA,OAAO,YACP,QACA,UACA,SACF;CAEF,MAAM,cAAc,kBAAkB,QAAQ;CAC9C,OAAO,OAAO,QAAQ;EACpB,SAAS,eAAe,OAAO,SAAS,YAAY,OAAO;EAC3D,QAAQ,eAAe,OAAO,QAAQ,YAAY,MAAM;EACxD,UAAU,eAAe,OAAO,UAAU,YAAY,QAAQ;CAChE,CAAC;AACH;;AAGA,MAAa,aAQTA,SAAK,KAAK,IAAI,QAAa,WAAuB,eAAe,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;;AAGhG,MAAa,YAQTA,SAAK,KAAK,IAAI,QAAa,UAAqB,eAAe,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;;AAG5F,MAAa,cAQTA,SAAK,KAAK,IAAI,QAAa,YAC7B,eAAe,QAAQ,CAAC,OAAO,GAAG,SAAS,CAC7C;;AAGA,MAAa,cACiC,YAC5B,WACd,eAAe,QAAQ,QAAQ,OAAO;;AAG1C,MAAa,gBACqC,cAChC,WACd,eAAe,QAAQ,UAAU,SAAS;;AAG9C,MAAa,OACyC,GAAG,cAErD,WAOA,eAAe,QAAQ,QAAQ;;AAGnC,MAAa,oBAC8B,aAEvC,WAC8E;CAC9E,IACE;EAAC,GAAG,OAAO;EAAS,GAAG,OAAO;EAAU,GAAG,OAAO;EAAQ,GAAG,OAAO;CAAa,CAAC,CAAC,MACjF,UAAS,MAAM,eAAe,QAAQ,UACxC,GAEA,MAAM,IAAIC,aAA0B,EAAE,MAAM,qBAAqB,CAAC;CAEpE,mBAAgC,QAAQ,YAAY,OAAO,YAAY,OAAO,WAAW;CACzF,OAAO,OAAO,QAAQ,EAAE,eAAe,CAAC,GAAG,OAAO,eAAe,OAAO,EAAE,CAAC;AAC7E;;;;;;;AAQF,MAAa,UAoBTD,SAAK,KAAK,IAAI,QAAa,UAC7B,OAAO,QAAQ,EAAE,OAAO,MAAM,aAAa,OAAO,OAAO,KAAK,EAAE,CAAC,CACnE;AA6OA,MAAM,gBACJ,SACA,UACA,gBAAmD,CAAC,OAEnD;CACC,SAAS,MAAc,YACrB,aAAa;EAAE,GAAG;GAAU,OAAO;CAAQ,GAAG,UAAU,aAAa;CACvE;CACA;CACA,UAAU,MAAc,cACtB,aAAa,SAAS,UAAU;EAAE,GAAG;GAAgB,OAAO;CAAU,CAAC;CACzE,QACE,MACA,UACG;EACH,MAAM,QAAQ,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;EACxC,OAAO,aACL;GAAE,GAAG;IAAU,OAAO,MAAM;EAAQ,GACpC;GAAE,GAAG;IAAW,OAAO,MAAM;EAAS,GACtC,aACF;CACF;CACA,UAAU,MAAc,cACtB,aAAa,SAAS;EAAE,GAAG;GAAW,OAAO;CAAU,GAAG,aAAa;CACzE;CACA,eAAe,eACb,aAAa,SAAS;EAAE,GAAG;EAAU,GAAG;CAAW,GAAG,aAAa;AACvE;;;;;;;;AAiBF,MAAa,WACX,QACA,UAMA,MAAM,cACJ,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;CACzC,MAAM,WAAY,OAAO,SAAS,MAAM,IAAI,OAAO,SAAS;CAI5D,OAAO,OAAO,WAAW,QAAQ,QAAQ;AAC3C,CAAC,CACH"}