@moxxy/core 0.3.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 (332) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/dist/events/factory.d.ts +6 -0
  4. package/dist/events/factory.d.ts.map +1 -0
  5. package/dist/events/factory.js +14 -0
  6. package/dist/events/factory.js.map +1 -0
  7. package/dist/events/log.d.ts +92 -0
  8. package/dist/events/log.d.ts.map +1 -0
  9. package/dist/events/log.js +244 -0
  10. package/dist/events/log.js.map +1 -0
  11. package/dist/index.d.ts +40 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +41 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/logger.d.ts +16 -0
  16. package/dist/logger.d.ts.map +1 -0
  17. package/dist/logger.js +27 -0
  18. package/dist/logger.js.map +1 -0
  19. package/dist/permissions/engine.d.ts +94 -0
  20. package/dist/permissions/engine.d.ts.map +1 -0
  21. package/dist/permissions/engine.js +203 -0
  22. package/dist/permissions/engine.js.map +1 -0
  23. package/dist/permissions/resolvers.d.ts +8 -0
  24. package/dist/permissions/resolvers.d.ts.map +1 -0
  25. package/dist/permissions/resolvers.js +8 -0
  26. package/dist/permissions/resolvers.js.map +1 -0
  27. package/dist/plugins/discovery.d.ts +9 -0
  28. package/dist/plugins/discovery.d.ts.map +1 -0
  29. package/dist/plugins/discovery.js +112 -0
  30. package/dist/plugins/discovery.js.map +1 -0
  31. package/dist/plugins/host-options.d.ts +72 -0
  32. package/dist/plugins/host-options.d.ts.map +1 -0
  33. package/dist/plugins/host-options.js +2 -0
  34. package/dist/plugins/host-options.js.map +1 -0
  35. package/dist/plugins/host.d.ts +53 -0
  36. package/dist/plugins/host.d.ts.map +1 -0
  37. package/dist/plugins/host.js +269 -0
  38. package/dist/plugins/host.js.map +1 -0
  39. package/dist/plugins/lifecycle.d.ts +31 -0
  40. package/dist/plugins/lifecycle.d.ts.map +1 -0
  41. package/dist/plugins/lifecycle.js +100 -0
  42. package/dist/plugins/lifecycle.js.map +1 -0
  43. package/dist/plugins/loader.d.ts +7 -0
  44. package/dist/plugins/loader.d.ts.map +1 -0
  45. package/dist/plugins/loader.js +68 -0
  46. package/dist/plugins/loader.js.map +1 -0
  47. package/dist/plugins/package-requirements.d.ts +16 -0
  48. package/dist/plugins/package-requirements.d.ts.map +1 -0
  49. package/dist/plugins/package-requirements.js +52 -0
  50. package/dist/plugins/package-requirements.js.map +1 -0
  51. package/dist/plugins/registry-kinds.d.ts +58 -0
  52. package/dist/plugins/registry-kinds.d.ts.map +1 -0
  53. package/dist/plugins/registry-kinds.js +139 -0
  54. package/dist/plugins/registry-kinds.js.map +1 -0
  55. package/dist/plugins/toposort.d.ts +24 -0
  56. package/dist/plugins/toposort.d.ts.map +1 -0
  57. package/dist/plugins/toposort.js +67 -0
  58. package/dist/plugins/toposort.js.map +1 -0
  59. package/dist/preferences.d.ts +40 -0
  60. package/dist/preferences.d.ts.map +1 -0
  61. package/dist/preferences.js +58 -0
  62. package/dist/preferences.js.map +1 -0
  63. package/dist/registries/active-backend-registry.d.ts +65 -0
  64. package/dist/registries/active-backend-registry.d.ts.map +1 -0
  65. package/dist/registries/active-backend-registry.js +108 -0
  66. package/dist/registries/active-backend-registry.js.map +1 -0
  67. package/dist/registries/active-def-registry.d.ts +59 -0
  68. package/dist/registries/active-def-registry.d.ts.map +1 -0
  69. package/dist/registries/active-def-registry.js +63 -0
  70. package/dist/registries/active-def-registry.js.map +1 -0
  71. package/dist/registries/agents.d.ts +16 -0
  72. package/dist/registries/agents.d.ts.map +1 -0
  73. package/dist/registries/agents.js +17 -0
  74. package/dist/registries/agents.js.map +1 -0
  75. package/dist/registries/cache-strategies.d.ts +12 -0
  76. package/dist/registries/cache-strategies.d.ts.map +1 -0
  77. package/dist/registries/cache-strategies.js +13 -0
  78. package/dist/registries/cache-strategies.js.map +1 -0
  79. package/dist/registries/channels.d.ts +16 -0
  80. package/dist/registries/channels.d.ts.map +1 -0
  81. package/dist/registries/channels.js +35 -0
  82. package/dist/registries/channels.js.map +1 -0
  83. package/dist/registries/commands.d.ts +29 -0
  84. package/dist/registries/commands.d.ts.map +1 -0
  85. package/dist/registries/commands.js +72 -0
  86. package/dist/registries/commands.js.map +1 -0
  87. package/dist/registries/compactors.d.ts +12 -0
  88. package/dist/registries/compactors.d.ts.map +1 -0
  89. package/dist/registries/compactors.js +13 -0
  90. package/dist/registries/compactors.js.map +1 -0
  91. package/dist/registries/def-map-registry.d.ts +33 -0
  92. package/dist/registries/def-map-registry.d.ts.map +1 -0
  93. package/dist/registries/def-map-registry.js +36 -0
  94. package/dist/registries/def-map-registry.js.map +1 -0
  95. package/dist/registries/embedders.d.ts +16 -0
  96. package/dist/registries/embedders.d.ts.map +1 -0
  97. package/dist/registries/embedders.js +17 -0
  98. package/dist/registries/embedders.js.map +1 -0
  99. package/dist/registries/isolators.d.ts +21 -0
  100. package/dist/registries/isolators.d.ts.map +1 -0
  101. package/dist/registries/isolators.js +32 -0
  102. package/dist/registries/isolators.js.map +1 -0
  103. package/dist/registries/modes.d.ts +28 -0
  104. package/dist/registries/modes.d.ts.map +1 -0
  105. package/dist/registries/modes.js +81 -0
  106. package/dist/registries/modes.js.map +1 -0
  107. package/dist/registries/providers.d.ts +44 -0
  108. package/dist/registries/providers.d.ts.map +1 -0
  109. package/dist/registries/providers.js +95 -0
  110. package/dist/registries/providers.js.map +1 -0
  111. package/dist/registries/skills.d.ts +24 -0
  112. package/dist/registries/skills.d.ts.map +1 -0
  113. package/dist/registries/skills.js +81 -0
  114. package/dist/registries/skills.js.map +1 -0
  115. package/dist/registries/surfaces.d.ts +13 -0
  116. package/dist/registries/surfaces.d.ts.map +1 -0
  117. package/dist/registries/surfaces.js +14 -0
  118. package/dist/registries/surfaces.js.map +1 -0
  119. package/dist/registries/synthesizers.d.ts +26 -0
  120. package/dist/registries/synthesizers.d.ts.map +1 -0
  121. package/dist/registries/synthesizers.js +34 -0
  122. package/dist/registries/synthesizers.js.map +1 -0
  123. package/dist/registries/tools.d.ts +49 -0
  124. package/dist/registries/tools.d.ts.map +1 -0
  125. package/dist/registries/tools.js +98 -0
  126. package/dist/registries/tools.js.map +1 -0
  127. package/dist/registries/transcribers.d.ts +17 -0
  128. package/dist/registries/transcribers.d.ts.map +1 -0
  129. package/dist/registries/transcribers.js +18 -0
  130. package/dist/registries/transcribers.js.map +1 -0
  131. package/dist/registries/tunnel-providers.d.ts +12 -0
  132. package/dist/registries/tunnel-providers.d.ts.map +1 -0
  133. package/dist/registries/tunnel-providers.js +13 -0
  134. package/dist/registries/tunnel-providers.js.map +1 -0
  135. package/dist/registries/view-renderers.d.ts +13 -0
  136. package/dist/registries/view-renderers.d.ts.map +1 -0
  137. package/dist/registries/view-renderers.js +14 -0
  138. package/dist/registries/view-renderers.js.map +1 -0
  139. package/dist/registries/workflow-executors.d.ts +13 -0
  140. package/dist/registries/workflow-executors.d.ts.map +1 -0
  141. package/dist/registries/workflow-executors.js +14 -0
  142. package/dist/registries/workflow-executors.js.map +1 -0
  143. package/dist/requirements.d.ts +59 -0
  144. package/dist/requirements.d.ts.map +1 -0
  145. package/dist/requirements.js +149 -0
  146. package/dist/requirements.js.map +1 -0
  147. package/dist/run-turn.d.ts +6 -0
  148. package/dist/run-turn.d.ts.map +1 -0
  149. package/dist/run-turn.js +141 -0
  150. package/dist/run-turn.js.map +1 -0
  151. package/dist/session-runtime.d.ts +67 -0
  152. package/dist/session-runtime.d.ts.map +1 -0
  153. package/dist/session-runtime.js +2 -0
  154. package/dist/session-runtime.js.map +1 -0
  155. package/dist/session.d.ts +203 -0
  156. package/dist/session.d.ts.map +1 -0
  157. package/dist/session.js +399 -0
  158. package/dist/session.js.map +1 -0
  159. package/dist/sessions/persistence.d.ts +184 -0
  160. package/dist/sessions/persistence.d.ts.map +1 -0
  161. package/dist/sessions/persistence.js +442 -0
  162. package/dist/sessions/persistence.js.map +1 -0
  163. package/dist/setup-agent.d.ts +91 -0
  164. package/dist/setup-agent.d.ts.map +1 -0
  165. package/dist/setup-agent.js +138 -0
  166. package/dist/setup-agent.js.map +1 -0
  167. package/dist/skills/index.d.ts +4 -0
  168. package/dist/skills/index.d.ts.map +1 -0
  169. package/dist/skills/index.js +4 -0
  170. package/dist/skills/index.js.map +1 -0
  171. package/dist/skills/loader.d.ts +16 -0
  172. package/dist/skills/loader.d.ts.map +1 -0
  173. package/dist/skills/loader.js +99 -0
  174. package/dist/skills/loader.js.map +1 -0
  175. package/dist/skills/parse.d.ts +5 -0
  176. package/dist/skills/parse.d.ts.map +1 -0
  177. package/dist/skills/parse.js +8 -0
  178. package/dist/skills/parse.js.map +1 -0
  179. package/dist/skills/synthesize-draft.d.ts +8 -0
  180. package/dist/skills/synthesize-draft.d.ts.map +1 -0
  181. package/dist/skills/synthesize-draft.js +32 -0
  182. package/dist/skills/synthesize-draft.js.map +1 -0
  183. package/dist/skills/synthesize.d.ts +33 -0
  184. package/dist/skills/synthesize.d.ts.map +1 -0
  185. package/dist/skills/synthesize.js +241 -0
  186. package/dist/skills/synthesize.js.map +1 -0
  187. package/dist/subagents/events.d.ts +20 -0
  188. package/dist/subagents/events.d.ts.map +1 -0
  189. package/dist/subagents/events.js +146 -0
  190. package/dist/subagents/events.js.map +1 -0
  191. package/dist/subagents/registry.d.ts +40 -0
  192. package/dist/subagents/registry.d.ts.map +1 -0
  193. package/dist/subagents/registry.js +42 -0
  194. package/dist/subagents/registry.js.map +1 -0
  195. package/dist/subagents/run-child.d.ts +43 -0
  196. package/dist/subagents/run-child.d.ts.map +1 -0
  197. package/dist/subagents/run-child.js +276 -0
  198. package/dist/subagents/run-child.js.map +1 -0
  199. package/dist/subagents/spawn.d.ts +8 -0
  200. package/dist/subagents/spawn.d.ts.map +1 -0
  201. package/dist/subagents/spawn.js +8 -0
  202. package/dist/subagents/spawn.js.map +1 -0
  203. package/dist/subagents/tools.d.ts +4 -0
  204. package/dist/subagents/tools.d.ts.map +1 -0
  205. package/dist/subagents/tools.js +13 -0
  206. package/dist/subagents/tools.js.map +1 -0
  207. package/dist/subagents.d.ts +3 -0
  208. package/dist/subagents.d.ts.map +1 -0
  209. package/dist/subagents.js +3 -0
  210. package/dist/subagents.js.map +1 -0
  211. package/dist/surfaces/host.d.ts +53 -0
  212. package/dist/surfaces/host.d.ts.map +1 -0
  213. package/dist/surfaces/host.js +177 -0
  214. package/dist/surfaces/host.js.map +1 -0
  215. package/dist/tunnel/localhost.d.ts +7 -0
  216. package/dist/tunnel/localhost.d.ts.map +1 -0
  217. package/dist/tunnel/localhost.js +21 -0
  218. package/dist/tunnel/localhost.js.map +1 -0
  219. package/dist/usage-stats.d.ts +42 -0
  220. package/dist/usage-stats.d.ts.map +1 -0
  221. package/dist/usage-stats.js +83 -0
  222. package/dist/usage-stats.js.map +1 -0
  223. package/dist/view/default-renderer.d.ts +7 -0
  224. package/dist/view/default-renderer.d.ts.map +1 -0
  225. package/dist/view/default-renderer.js +14 -0
  226. package/dist/view/default-renderer.js.map +1 -0
  227. package/dist/view/parse.d.ts +7 -0
  228. package/dist/view/parse.d.ts.map +1 -0
  229. package/dist/view/parse.js +479 -0
  230. package/dist/view/parse.js.map +1 -0
  231. package/package.json +61 -0
  232. package/src/events/factory.ts +27 -0
  233. package/src/events/log.test.ts +470 -0
  234. package/src/events/log.ts +256 -0
  235. package/src/index.ts +102 -0
  236. package/src/logger.ts +46 -0
  237. package/src/permissions/engine.test.ts +206 -0
  238. package/src/permissions/engine.ts +247 -0
  239. package/src/permissions/resolvers.test.ts +40 -0
  240. package/src/permissions/resolvers.ts +17 -0
  241. package/src/plugins/discovery.test.ts +115 -0
  242. package/src/plugins/discovery.ts +124 -0
  243. package/src/plugins/host-options.ts +73 -0
  244. package/src/plugins/host-view-tunnel.test.ts +86 -0
  245. package/src/plugins/host.test.ts +434 -0
  246. package/src/plugins/host.ts +327 -0
  247. package/src/plugins/lifecycle.test.ts +187 -0
  248. package/src/plugins/lifecycle.ts +136 -0
  249. package/src/plugins/loader.ts +79 -0
  250. package/src/plugins/package-requirements.ts +50 -0
  251. package/src/plugins/registry-kinds.test.ts +162 -0
  252. package/src/plugins/registry-kinds.ts +210 -0
  253. package/src/plugins/toposort.test.ts +66 -0
  254. package/src/plugins/toposort.ts +69 -0
  255. package/src/preferences.test.ts +105 -0
  256. package/src/preferences.ts +84 -0
  257. package/src/registries/active-backend-registry.ts +142 -0
  258. package/src/registries/active-def-registry.test.ts +103 -0
  259. package/src/registries/active-def-registry.ts +97 -0
  260. package/src/registries/agents.ts +18 -0
  261. package/src/registries/cache-strategies.ts +14 -0
  262. package/src/registries/channels.ts +42 -0
  263. package/src/registries/commands.test.ts +71 -0
  264. package/src/registries/commands.ts +78 -0
  265. package/src/registries/compactors.ts +14 -0
  266. package/src/registries/def-map-registry.test.ts +67 -0
  267. package/src/registries/def-map-registry.ts +59 -0
  268. package/src/registries/embedders.test.ts +54 -0
  269. package/src/registries/embedders.ts +18 -0
  270. package/src/registries/isolators.test.ts +43 -0
  271. package/src/registries/isolators.ts +38 -0
  272. package/src/registries/modes.test.ts +66 -0
  273. package/src/registries/modes.ts +80 -0
  274. package/src/registries/providers.test.ts +50 -0
  275. package/src/registries/providers.ts +97 -0
  276. package/src/registries/semantics.test.ts +117 -0
  277. package/src/registries/skills.ts +87 -0
  278. package/src/registries/surfaces.ts +18 -0
  279. package/src/registries/synthesizers.test.ts +63 -0
  280. package/src/registries/synthesizers.ts +36 -0
  281. package/src/registries/tools.test.ts +142 -0
  282. package/src/registries/tools.ts +145 -0
  283. package/src/registries/transcribers.test.ts +70 -0
  284. package/src/registries/transcribers.ts +19 -0
  285. package/src/registries/tunnel-providers.test.ts +30 -0
  286. package/src/registries/tunnel-providers.ts +14 -0
  287. package/src/registries/view-renderers.test.ts +68 -0
  288. package/src/registries/view-renderers.ts +15 -0
  289. package/src/registries/workflow-executors.test.ts +53 -0
  290. package/src/registries/workflow-executors.ts +15 -0
  291. package/src/requirements.targetinfo.test.ts +70 -0
  292. package/src/requirements.test.ts +111 -0
  293. package/src/requirements.ts +262 -0
  294. package/src/run-turn.test.ts +178 -0
  295. package/src/run-turn.ts +156 -0
  296. package/src/session-runtime.ts +75 -0
  297. package/src/session.test.ts +216 -0
  298. package/src/session.ts +491 -0
  299. package/src/sessions/persistence.flush.test.ts +100 -0
  300. package/src/sessions/persistence.ready.test.ts +91 -0
  301. package/src/sessions/persistence.test.ts +274 -0
  302. package/src/sessions/persistence.ts +498 -0
  303. package/src/setup-agent.test.ts +72 -0
  304. package/src/setup-agent.ts +189 -0
  305. package/src/skills/index.ts +14 -0
  306. package/src/skills/loader.test.ts +102 -0
  307. package/src/skills/loader.ts +114 -0
  308. package/src/skills/parse.test.ts +59 -0
  309. package/src/skills/parse.ts +11 -0
  310. package/src/skills/synthesize-draft.test.ts +79 -0
  311. package/src/skills/synthesize-draft.ts +46 -0
  312. package/src/skills/synthesize.test.ts +170 -0
  313. package/src/skills/synthesize.ts +304 -0
  314. package/src/subagents/events.test.ts +56 -0
  315. package/src/subagents/events.ts +194 -0
  316. package/src/subagents/registry.ts +62 -0
  317. package/src/subagents/run-child.test.ts +185 -0
  318. package/src/subagents/run-child.ts +425 -0
  319. package/src/subagents/spawn.ts +12 -0
  320. package/src/subagents/tools.ts +19 -0
  321. package/src/subagents.ts +2 -0
  322. package/src/surfaces/host.test.ts +330 -0
  323. package/src/surfaces/host.ts +192 -0
  324. package/src/tunnel/localhost.test.ts +22 -0
  325. package/src/tunnel/localhost.ts +21 -0
  326. package/src/usage-stats.test.ts +77 -0
  327. package/src/usage-stats.ts +119 -0
  328. package/src/view/default-renderer.test.ts +29 -0
  329. package/src/view/default-renderer.ts +14 -0
  330. package/src/view/parse-extended.test.ts +255 -0
  331. package/src/view/parse.test.ts +232 -0
  332. package/src/view/parse.ts +520 -0
@@ -0,0 +1,203 @@
1
+ import type { AppContext, ClientSession, MoxxyEvent, RunTurnOptions, SessionId, SessionInfo } from '@moxxy/sdk';
2
+ import { newTurnId } from './events/factory.js';
3
+ import type { SessionRuntime } from './session-runtime.js';
4
+ import { EventLog } from './events/log.js';
5
+ import { HookDispatcherImpl } from './plugins/lifecycle.js';
6
+ import { PluginHost, type PluginLoader } from './plugins/host.js';
7
+ import { ProviderRegistry } from './registries/providers.js';
8
+ import { ModeRegistry } from './registries/modes.js';
9
+ import { CacheStrategyRegistry } from './registries/cache-strategies.js';
10
+ import { ViewRendererRegistry } from './registries/view-renderers.js';
11
+ import { TunnelProviderRegistry } from './registries/tunnel-providers.js';
12
+ import { CompactorRegistry } from './registries/compactors.js';
13
+ import { ChannelRegistryImpl } from './registries/channels.js';
14
+ import { SurfaceRegistryImpl } from './registries/surfaces.js';
15
+ import { SurfaceHostImpl } from './surfaces/host.js';
16
+ import { SkillRegistryImpl } from './registries/skills.js';
17
+ import { type ToolRegistry } from './registries/tools.js';
18
+ import { AgentRegistry } from './registries/agents.js';
19
+ import { CommandRegistry } from './registries/commands.js';
20
+ import { TranscriberRegistry } from './registries/transcribers.js';
21
+ import { SynthesizerRegistry } from './registries/synthesizers.js';
22
+ import { EmbedderRegistry } from './registries/embedders.js';
23
+ import { IsolatorRegistry } from './registries/isolators.js';
24
+ import { WorkflowExecutorRegistry } from './registries/workflow-executors.js';
25
+ import { RequirementRegistry } from './requirements.js';
26
+ import { PermissionEngine } from './permissions/engine.js';
27
+ import type { ApprovalResolver, CredentialResolver, ElisionSettings, McpAdminView, ProviderAdminView, WorkflowsView, PluginsAdminView, PermissionResolver } from '@moxxy/sdk';
28
+ import { type Logger } from './logger.js';
29
+ export interface SessionOptions {
30
+ readonly cwd: string;
31
+ readonly logger?: Logger;
32
+ readonly sessionId?: SessionId;
33
+ readonly permissionEngine?: PermissionEngine;
34
+ readonly permissionResolver?: PermissionResolver;
35
+ readonly hookTimeoutMs?: number;
36
+ readonly silent?: boolean;
37
+ /**
38
+ * Optional plugin loader. When provided, `session.pluginHost.discoverAndLoad()`
39
+ * can dynamic-import discovered plugins; without one, only static plugins
40
+ * registered via `registerStatic()` are wired up.
41
+ */
42
+ readonly pluginLoader?: PluginLoader;
43
+ /**
44
+ * Extra directories to scan for plugins, on top of the cwd-rooted
45
+ * `node_modules` walk. The CLI sets this to `~/.moxxy/plugins` (and its
46
+ * `node_modules` subtree) so runtime-installed / scaffolded plugins are
47
+ * discoverable. Crucially these are remembered by the host and reused on
48
+ * `pluginHost.reload()`, so a hot-reload neither drops user plugins nor
49
+ * fails to pick up freshly written ones.
50
+ */
51
+ readonly pluginDiscoveryPaths?: ReadonlyArray<string>;
52
+ /**
53
+ * Predicate (by package name) for whether a discovered plugin is disabled.
54
+ * Forwarded to the PluginHost so `pluginHost.reload()` never resurrects a
55
+ * plugin the user turned off via config `plugins[name].enabled = false`.
56
+ * Reads live state, so a runtime enable/disable applies on the next reload.
57
+ */
58
+ readonly isPluginDisabled?: (packageName: string) => boolean;
59
+ /**
60
+ * Vault-backed secret resolver. When provided, every tool handler gets
61
+ * `ctx.getSecret(name)` so plugins can read an API key / token at call
62
+ * time. The plaintext never enters the model's context or `process.env`;
63
+ * only the handler that asks receives it. The CLI/runner wires this to
64
+ * the session vault's `get`.
65
+ */
66
+ readonly secretResolver?: (name: string) => Promise<string | null>;
67
+ /**
68
+ * Pre-seeded event log. Used by `moxxy resume` to restore the
69
+ * conversation from a persisted JSONL. Subscribers don't re-fire for
70
+ * seeded events (the constructor pushes them directly), so plugin
71
+ * hooks won't run for historical entries.
72
+ */
73
+ readonly log?: EventLog;
74
+ }
75
+ export declare class Session implements ClientSession, SessionRuntime {
76
+ readonly id: SessionId;
77
+ readonly cwd: string;
78
+ readonly log: EventLog;
79
+ readonly logger: Logger;
80
+ readonly tools: ToolRegistry;
81
+ readonly providers: ProviderRegistry;
82
+ readonly modes: ModeRegistry;
83
+ readonly compactors: CompactorRegistry;
84
+ readonly cacheStrategies: CacheStrategyRegistry;
85
+ readonly viewRenderers: ViewRendererRegistry;
86
+ readonly tunnelProviders: TunnelProviderRegistry;
87
+ readonly channels: ChannelRegistryImpl;
88
+ /** Registry of surface defs (terminal, browser, …) contributed by plugins. */
89
+ readonly surfaceRegistry: SurfaceRegistryImpl;
90
+ /**
91
+ * Manages the live, open surface instances for this session. The runner
92
+ * drives it for thin clients; the agent's tools reach the same resources via
93
+ * plugin module state. See {@link SurfaceHostImpl}.
94
+ */
95
+ readonly surfaces: SurfaceHostImpl;
96
+ readonly skills: SkillRegistryImpl;
97
+ readonly agents: AgentRegistry;
98
+ readonly commands: CommandRegistry;
99
+ readonly transcribers: TranscriberRegistry;
100
+ readonly synthesizers: SynthesizerRegistry;
101
+ readonly embedders: EmbedderRegistry;
102
+ readonly isolators: IsolatorRegistry;
103
+ readonly workflowExecutors: WorkflowExecutorRegistry;
104
+ readonly requirements: RequirementRegistry;
105
+ readonly permissions: PermissionEngine;
106
+ /** Current PermissionResolver. Update via `setPermissionResolver(r)`. */
107
+ resolver: PermissionResolver;
108
+ /**
109
+ * Optional generic approval resolver. Loop strategies use this to ask
110
+ * the user a checkpoint question (plan validation, command preview,
111
+ * diff review, etc.). Null when running headless or before the TUI
112
+ * registers one — strategies that have no resolver simply skip the
113
+ * approval step.
114
+ */
115
+ approvalResolver: ApprovalResolver | null;
116
+ /**
117
+ * Elision (context-on-demand) settings, resolved from `config.context.elision`
118
+ * at setup and updated on config reload. Null → built-in defaults apply
119
+ * (elision on). Read into each turn's ModeContext.
120
+ */
121
+ elisionSettings: ElisionSettings | null;
122
+ /** Lazy tool loading toggle, from `config.context.lazyTools`. Default off. */
123
+ lazyTools: boolean;
124
+ /**
125
+ * Reasoning/thinking preference, from `config.context.reasoning`. Forwarded
126
+ * to each turn's ModeContext and on to the provider, which honors it only
127
+ * when the active model advertises `supportsReasoning`. Undefined → off.
128
+ */
129
+ reasoning: {
130
+ readonly effort?: 'low' | 'medium' | 'high';
131
+ } | boolean | undefined;
132
+ /**
133
+ * Model id resolved by the most recent `runTurn()` (see SessionRuntime).
134
+ * Last-writer-wins for concurrent turns; null until the first turn runs.
135
+ */
136
+ lastResolvedModel: string | null;
137
+ /**
138
+ * Live runtime capabilities the host installs on a local Session (see
139
+ * SessionLike). A RemoteSession leaves them undefined. Declared here — rather
140
+ * than monkey-patched on via `as unknown as` — so the host and channels get
141
+ * type-checked access.
142
+ */
143
+ readyProviders?: Set<string>;
144
+ credentialResolver?: CredentialResolver;
145
+ mcpAdmin?: McpAdminView;
146
+ providerAdmin?: ProviderAdminView;
147
+ workflows?: WorkflowsView;
148
+ pluginsAdmin?: PluginsAdminView;
149
+ readonly dispatcher: HookDispatcherImpl;
150
+ readonly pluginHost: PluginHost;
151
+ private readonly controller;
152
+ constructor(opts: SessionOptions);
153
+ get signal(): AbortSignal;
154
+ abort(reason?: string): void;
155
+ /**
156
+ * Swap the active PermissionResolver. Channels call this after they're
157
+ * constructed so the session uses the channel's interactive resolver
158
+ * (TUI prompt, Telegram inline keyboard, HTTP allow-list, etc.).
159
+ * Replaces the previous monkey-patching of the private `resolver` field
160
+ * from CLI command code.
161
+ */
162
+ setPermissionResolver(resolver: PermissionResolver): void;
163
+ /** Install/replace the generic approval resolver. Pass null to clear. */
164
+ setApprovalResolver(resolver: ApprovalResolver | null): void;
165
+ /**
166
+ * `SessionLike.reset` — the authoritative `/new`. Clears the event log;
167
+ * the log's clear listeners propagate the wipe to whatever observes it
168
+ * (the persistence sidecar truncates its JSONL so `--resume` sees an
169
+ * empty session; a wrapping RunnerServer broadcasts a reset so attached
170
+ * mirrors clear in lockstep). Registries, resolvers, and the active
171
+ * provider survive — only the conversation context vanishes. Callers
172
+ * must abort any in-flight turn first (same contract as `log.clear()`).
173
+ */
174
+ reset(): Promise<void>;
175
+ /**
176
+ * Graceful shutdown: fire every plugin's `onShutdown` hook, then abort
177
+ * the session. Idempotent — safe to call multiple times (subsequent
178
+ * calls are no-ops once `closed` is set).
179
+ *
180
+ * Channels' SIGINT handlers should call this before exiting so plugins
181
+ * can flush state (memory journal, vault, audit logs, etc.).
182
+ */
183
+ close(reason?: string): Promise<void>;
184
+ private closed;
185
+ appContext(): AppContext;
186
+ startTurn(): {
187
+ turnId: ReturnType<typeof newTurnId>;
188
+ };
189
+ subscribe(fn: (e: MoxxyEvent) => void | Promise<void>): () => void;
190
+ /**
191
+ * Drive one turn against this session. Method form of the `runTurn` free
192
+ * function so a local `Session` satisfies `SessionLike` (the channel-facing
193
+ * contract a `RemoteSession` proxy also implements).
194
+ */
195
+ runTurn(prompt: string, opts?: RunTurnOptions): AsyncIterable<MoxxyEvent>;
196
+ /**
197
+ * Wire-friendly snapshot of the registries for channels to render. Mirrors
198
+ * what a `RemoteSession` fetches from the runner over RPC - keep the two in
199
+ * sync.
200
+ */
201
+ getInfo(): SessionInfo;
202
+ }
203
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,399 @@
1
+ import { newSessionId, newTurnId } from './events/factory.js';
2
+ import { runTurn as runTurnImpl } from './run-turn.js';
3
+ import { EventLog } from './events/log.js';
4
+ import { HookDispatcherImpl } from './plugins/lifecycle.js';
5
+ import { PluginHost } from './plugins/host.js';
6
+ import { ProviderRegistry } from './registries/providers.js';
7
+ import { ModeRegistry } from './registries/modes.js';
8
+ import { CacheStrategyRegistry } from './registries/cache-strategies.js';
9
+ import { ViewRendererRegistry } from './registries/view-renderers.js';
10
+ import { defaultViewRenderer } from './view/default-renderer.js';
11
+ import { TunnelProviderRegistry } from './registries/tunnel-providers.js';
12
+ import { localhostTunnel } from './tunnel/localhost.js';
13
+ import { CompactorRegistry } from './registries/compactors.js';
14
+ import { ChannelRegistryImpl } from './registries/channels.js';
15
+ import { SurfaceRegistryImpl } from './registries/surfaces.js';
16
+ import { SurfaceHostImpl } from './surfaces/host.js';
17
+ import { SkillRegistryImpl } from './registries/skills.js';
18
+ import { ToolRegistryImpl } from './registries/tools.js';
19
+ import { AgentRegistry } from './registries/agents.js';
20
+ import { CommandRegistry } from './registries/commands.js';
21
+ import { TranscriberRegistry } from './registries/transcribers.js';
22
+ import { SynthesizerRegistry } from './registries/synthesizers.js';
23
+ import { EmbedderRegistry } from './registries/embedders.js';
24
+ import { IsolatorRegistry } from './registries/isolators.js';
25
+ import { WorkflowExecutorRegistry } from './registries/workflow-executors.js';
26
+ import { RequirementRegistry } from './requirements.js';
27
+ import { PermissionEngine } from './permissions/engine.js';
28
+ import { autoAllowResolver } from './permissions/resolvers.js';
29
+ import { evaluateToolRule } from '@moxxy/sdk';
30
+ import { createLogger, silentLogger } from './logger.js';
31
+ import { clearRetainedChildren } from './subagents/registry.js';
32
+ export class Session {
33
+ id;
34
+ cwd;
35
+ log;
36
+ logger;
37
+ tools;
38
+ providers;
39
+ modes;
40
+ compactors;
41
+ cacheStrategies;
42
+ viewRenderers;
43
+ tunnelProviders;
44
+ channels;
45
+ /** Registry of surface defs (terminal, browser, …) contributed by plugins. */
46
+ surfaceRegistry;
47
+ /**
48
+ * Manages the live, open surface instances for this session. The runner
49
+ * drives it for thin clients; the agent's tools reach the same resources via
50
+ * plugin module state. See {@link SurfaceHostImpl}.
51
+ */
52
+ surfaces;
53
+ skills;
54
+ agents;
55
+ commands;
56
+ transcribers;
57
+ synthesizers;
58
+ embedders;
59
+ isolators;
60
+ workflowExecutors;
61
+ requirements;
62
+ permissions;
63
+ /** Current PermissionResolver. Update via `setPermissionResolver(r)`. */
64
+ resolver;
65
+ /**
66
+ * Optional generic approval resolver. Loop strategies use this to ask
67
+ * the user a checkpoint question (plan validation, command preview,
68
+ * diff review, etc.). Null when running headless or before the TUI
69
+ * registers one — strategies that have no resolver simply skip the
70
+ * approval step.
71
+ */
72
+ approvalResolver = null;
73
+ /**
74
+ * Elision (context-on-demand) settings, resolved from `config.context.elision`
75
+ * at setup and updated on config reload. Null → built-in defaults apply
76
+ * (elision on). Read into each turn's ModeContext.
77
+ */
78
+ elisionSettings = null;
79
+ /** Lazy tool loading toggle, from `config.context.lazyTools`. Default off. */
80
+ lazyTools = false;
81
+ /**
82
+ * Reasoning/thinking preference, from `config.context.reasoning`. Forwarded
83
+ * to each turn's ModeContext and on to the provider, which honors it only
84
+ * when the active model advertises `supportsReasoning`. Undefined → off.
85
+ */
86
+ reasoning = undefined;
87
+ /**
88
+ * Model id resolved by the most recent `runTurn()` (see SessionRuntime).
89
+ * Last-writer-wins for concurrent turns; null until the first turn runs.
90
+ */
91
+ lastResolvedModel = null;
92
+ /**
93
+ * Live runtime capabilities the host installs on a local Session (see
94
+ * SessionLike). A RemoteSession leaves them undefined. Declared here — rather
95
+ * than monkey-patched on via `as unknown as` — so the host and channels get
96
+ * type-checked access.
97
+ */
98
+ readyProviders;
99
+ credentialResolver;
100
+ mcpAdmin;
101
+ providerAdmin;
102
+ workflows;
103
+ pluginsAdmin;
104
+ dispatcher;
105
+ pluginHost;
106
+ controller = new AbortController();
107
+ constructor(opts) {
108
+ this.id = opts.sessionId ?? newSessionId();
109
+ this.cwd = opts.cwd;
110
+ this.logger = opts.logger ?? (opts.silent ? silentLogger : createLogger());
111
+ this.log = opts.log ?? new EventLog();
112
+ this.tools = new ToolRegistryImpl({
113
+ logger: this.logger,
114
+ cwd: this.cwd,
115
+ ...(opts.secretResolver ? { secretResolver: opts.secretResolver } : {}),
116
+ });
117
+ this.providers = new ProviderRegistry();
118
+ this.modes = new ModeRegistry();
119
+ this.compactors = new CompactorRegistry();
120
+ this.cacheStrategies = new CacheStrategyRegistry();
121
+ this.viewRenderers = new ViewRendererRegistry();
122
+ // Seed the built-in renderer so `present_view` always has one to parse
123
+ // with; plugins can register/replace and `setActive` an alternative.
124
+ this.viewRenderers.register(defaultViewRenderer);
125
+ this.tunnelProviders = new TunnelProviderRegistry();
126
+ // Seed the no-op localhost provider so the web surface always resolves a
127
+ // URL; plugins (cloudflared) register/setActive a real tunnel.
128
+ this.tunnelProviders.register(localhostTunnel);
129
+ this.channels = new ChannelRegistryImpl();
130
+ this.surfaceRegistry = new SurfaceRegistryImpl();
131
+ this.surfaces = new SurfaceHostImpl(this.surfaceRegistry, { cwd: this.cwd, logger: this.logger }, this.logger);
132
+ this.skills = new SkillRegistryImpl();
133
+ this.agents = new AgentRegistry();
134
+ this.commands = new CommandRegistry();
135
+ this.transcribers = new TranscriberRegistry();
136
+ this.synthesizers = new SynthesizerRegistry({
137
+ ...(opts.secretResolver ? { secretResolver: opts.secretResolver } : {}),
138
+ });
139
+ this.embedders = new EmbedderRegistry();
140
+ this.isolators = new IsolatorRegistry();
141
+ this.workflowExecutors = new WorkflowExecutorRegistry();
142
+ this.requirements = new RequirementRegistry({
143
+ tools: this.tools,
144
+ providers: this.providers,
145
+ modes: this.modes,
146
+ compactors: this.compactors,
147
+ channels: this.channels,
148
+ agents: this.agents,
149
+ commands: this.commands,
150
+ transcribers: this.transcribers,
151
+ synthesizers: this.synthesizers,
152
+ });
153
+ this.permissions = opts.permissionEngine ?? new PermissionEngine();
154
+ // Always wrap the user-supplied resolver with the persistent
155
+ // policy engine, so saved `allow_always` / `deny` rules from
156
+ // ~/.moxxy/permissions.json short-circuit the resolver's prompt
157
+ // path. Without this wrap the engine is dead weight — the
158
+ // permissions JSON updates on every "allow always" click but no
159
+ // future turn ever consults it.
160
+ this.resolver = wrapWithPolicy(opts.permissionResolver ?? autoAllowResolver, this.permissions, (name) => this.tools.get(name)?.permission);
161
+ this.dispatcher = new HookDispatcherImpl({
162
+ logger: this.logger,
163
+ hookTimeoutMs: opts.hookTimeoutMs,
164
+ });
165
+ this.pluginHost = new PluginHost({
166
+ cwd: this.cwd,
167
+ logger: this.logger,
168
+ tools: this.tools,
169
+ providers: this.providers,
170
+ modes: this.modes,
171
+ compactors: this.compactors,
172
+ cacheStrategies: this.cacheStrategies,
173
+ viewRenderers: this.viewRenderers,
174
+ tunnelProviders: this.tunnelProviders,
175
+ channels: this.channels,
176
+ surfaces: this.surfaceRegistry,
177
+ agents: this.agents,
178
+ commands: this.commands,
179
+ transcribers: this.transcribers,
180
+ synthesizers: this.synthesizers,
181
+ embedders: this.embedders,
182
+ isolators: this.isolators,
183
+ workflowExecutors: this.workflowExecutors,
184
+ requirements: this.requirements,
185
+ dispatcher: this.dispatcher,
186
+ loader: opts.pluginLoader,
187
+ ...(opts.pluginDiscoveryPaths ? { userPaths: opts.pluginDiscoveryPaths } : {}),
188
+ ...(opts.isPluginDisabled ? { isDisabled: opts.isPluginDisabled } : {}),
189
+ });
190
+ // Fan every appended event out to plugin `onEvent` hooks. Without this
191
+ // wiring the hook is dead code — declared on the SDK, dispatched by
192
+ // HookDispatcherImpl, but nothing ever calls dispatchEvent.
193
+ this.log.subscribe((event) => {
194
+ // appContext() clones the whole process.env; only pay that per-event cost
195
+ // when a plugin actually has an onEvent hook to receive it. With none,
196
+ // dispatchEvent would iterate an empty hook list anyway.
197
+ if (!this.dispatcher.hasEventHooks())
198
+ return;
199
+ return this.dispatcher.dispatchEvent(event, this.appContext());
200
+ });
201
+ }
202
+ get signal() {
203
+ return this.controller.signal;
204
+ }
205
+ abort(reason = 'user-requested abort') {
206
+ this.controller.abort(reason);
207
+ }
208
+ /**
209
+ * Swap the active PermissionResolver. Channels call this after they're
210
+ * constructed so the session uses the channel's interactive resolver
211
+ * (TUI prompt, Telegram inline keyboard, HTTP allow-list, etc.).
212
+ * Replaces the previous monkey-patching of the private `resolver` field
213
+ * from CLI command code.
214
+ */
215
+ setPermissionResolver(resolver) {
216
+ // Re-wrap so policy rules continue to short-circuit prompts when a
217
+ // channel installs its own resolver mid-session.
218
+ this.resolver = wrapWithPolicy(resolver, this.permissions, (name) => this.tools.get(name)?.permission);
219
+ }
220
+ /** Install/replace the generic approval resolver. Pass null to clear. */
221
+ setApprovalResolver(resolver) {
222
+ this.approvalResolver = resolver;
223
+ }
224
+ /**
225
+ * `SessionLike.reset` — the authoritative `/new`. Clears the event log;
226
+ * the log's clear listeners propagate the wipe to whatever observes it
227
+ * (the persistence sidecar truncates its JSONL so `--resume` sees an
228
+ * empty session; a wrapping RunnerServer broadcasts a reset so attached
229
+ * mirrors clear in lockstep). Registries, resolvers, and the active
230
+ * provider survive — only the conversation context vanishes. Callers
231
+ * must abort any in-flight turn first (same contract as `log.clear()`).
232
+ */
233
+ async reset() {
234
+ this.log.clear();
235
+ }
236
+ /**
237
+ * Graceful shutdown: fire every plugin's `onShutdown` hook, then abort
238
+ * the session. Idempotent — safe to call multiple times (subsequent
239
+ * calls are no-ops once `closed` is set).
240
+ *
241
+ * Channels' SIGINT handlers should call this before exiting so plugins
242
+ * can flush state (memory journal, vault, audit logs, etc.).
243
+ */
244
+ async close(reason = 'shutdown') {
245
+ if (this.closed)
246
+ return;
247
+ this.closed = true;
248
+ try {
249
+ // Tear down any open surfaces (PTYs, browser screencasts) before the
250
+ // plugin shutdown hooks dispose their underlying resources.
251
+ await this.surfaces.closeAll();
252
+ await this.dispatcher.dispatchShutdown(this.appContext());
253
+ }
254
+ finally {
255
+ // Drop THIS session's retained child sessions (the workflow `awaitInput`
256
+ // flow keeps them in a process-local registry until a
257
+ // `continue()`/`release()`). A paused run that never resumes would
258
+ // otherwise pin them for the whole process lifetime — release them on
259
+ // shutdown so they don't leak. Scoped to this session's id so closing one
260
+ // session never wipes another live session's paused children.
261
+ clearRetainedChildren(this.id);
262
+ this.abort(reason);
263
+ }
264
+ }
265
+ closed = false;
266
+ appContext() {
267
+ return {
268
+ sessionId: this.id,
269
+ cwd: this.cwd,
270
+ log: this.log.asReader(),
271
+ env: { ...process.env },
272
+ };
273
+ }
274
+ startTurn() {
275
+ return { turnId: newTurnId() };
276
+ }
277
+ subscribe(fn) {
278
+ return this.log.subscribe(fn);
279
+ }
280
+ /**
281
+ * Drive one turn against this session. Method form of the `runTurn` free
282
+ * function so a local `Session` satisfies `SessionLike` (the channel-facing
283
+ * contract a `RemoteSession` proxy also implements).
284
+ */
285
+ runTurn(prompt, opts = {}) {
286
+ return runTurnImpl(this, prompt, opts);
287
+ }
288
+ /**
289
+ * Wire-friendly snapshot of the registries for channels to render. Mirrors
290
+ * what a `RemoteSession` fetches from the runner over RPC - keep the two in
291
+ * sync.
292
+ */
293
+ getInfo() {
294
+ let activeMode = null;
295
+ let activeModeBadge = null;
296
+ try {
297
+ const mode = this.modes.getActive();
298
+ activeMode = mode.name;
299
+ // Surface the active mode's presentation hint so channels can render a
300
+ // persistent badge (e.g. goal mode) without hard-coding mode names.
301
+ activeModeBadge = mode.badge ? { label: mode.badge.label, ...(mode.badge.tone ? { tone: mode.badge.tone } : {}) } : null;
302
+ }
303
+ catch {
304
+ // No mode active yet (registry empty pre-boot) - report null.
305
+ }
306
+ const active = this.providers.getActiveName();
307
+ const ready = this.readyProviders;
308
+ return {
309
+ sessionId: this.id,
310
+ cwd: this.cwd,
311
+ activeProvider: active,
312
+ providers: this.providers.list().map((p) => ({
313
+ name: p.name,
314
+ models: p.models,
315
+ authKind: p.auth?.kind === 'oauth' ? 'oauth' : 'api-key',
316
+ // Built-in providers ship hard-coded model lists, so live
317
+ // discovery on /v1/models isn't required from the host. Admin-
318
+ // registered providers (kind: 'apiKey' without a builtin def)
319
+ // are the ones the desktop's "Fetch live" affordance targets;
320
+ // they advertise this via the provider-admin factory by
321
+ // setting `supportsLiveModelDiscovery: true` on their def.
322
+ supportsLiveModelDiscovery: p.supportsLiveModelDiscovery === true,
323
+ enabled: this.providers.isEnabled(p.name),
324
+ })),
325
+ activeMode,
326
+ activeModeBadge,
327
+ modes: this.modes.list().map((m) => m.name),
328
+ tools: this.tools.list().map((t) => ({
329
+ name: t.name,
330
+ description: t.description,
331
+ ...(t.compact ? { compact: t.compact } : {}),
332
+ })),
333
+ skills: this.skills.list().map((s) => ({ id: s.id, name: s.frontmatter.name })),
334
+ commands: this.commands.list().map((c) => ({
335
+ name: c.name,
336
+ description: c.description,
337
+ ...(c.aliases ? { aliases: c.aliases } : {}),
338
+ ...(c.channels ? { channels: c.channels } : {}),
339
+ ...(c.pendingNotice ? { pendingNotice: c.pendingNotice } : {}),
340
+ })),
341
+ readyProviders: ready ? [...ready] : active ? [active] : [],
342
+ // hasTranscriber reports whether any backend is *registered*,
343
+ // not whether one is active. The active selection is per-flow
344
+ // (the TUI activates Codex on its first voice toggle; the
345
+ // desktop relies on handleTranscribe's candidate fallback).
346
+ // For UI affordance gating (showing / hiding a mic button),
347
+ // any registered transcriber means "voice is wired."
348
+ hasTranscriber: this.transcribers.list().length > 0,
349
+ activeTranscriber: this.transcribers.getActiveName(),
350
+ hasSynthesizer: this.synthesizers.list().length > 0,
351
+ activeSynthesizer: this.synthesizers.getActiveName(),
352
+ };
353
+ }
354
+ }
355
+ /**
356
+ * Wrap a `PermissionResolver` so the persistent `PermissionEngine` runs
357
+ * first. If the engine has a matching allow/deny rule from
358
+ * `~/.moxxy/permissions.json`, that decision short-circuits the
359
+ * resolver's prompt path. Otherwise the resolver runs as usual.
360
+ *
361
+ * The wrapper is a Proxy that intercepts only `check` (and provides the
362
+ * prompt-free `policyCheck` probe); every other property (e.g. `abortAll`
363
+ * and any channel-specific helpers) passes straight through to the
364
+ * underlying resolver, so callers reach those methods exactly as before.
365
+ */
366
+ function wrapWithPolicy(inner, engine, getToolRule) {
367
+ // The policy-only decision: user policy (permissions.json) wins, then the
368
+ // tool's own declared rule (so a tool marked `allow` is never blocked in
369
+ // headless runs). Returns null when neither decides — `check` then falls
370
+ // through to the channel resolver's prompt / deny-by-default path, while
371
+ // `policyCheck` callers (auto-approving modes) supply their own fallback
372
+ // so no prompt can ever fire.
373
+ const policyDecision = (call) => {
374
+ const policy = engine.check(call);
375
+ if (policy)
376
+ return policy;
377
+ return evaluateToolRule(getToolRule(call.name), call);
378
+ };
379
+ // Use a Proxy so any extra methods on the underlying resolver
380
+ // (`abortAll`, channel-specific helpers) remain accessible — only
381
+ // `check`/`policyCheck` are intercepted.
382
+ return new Proxy(inner, {
383
+ get(target, prop, receiver) {
384
+ if (prop === 'check') {
385
+ return async (call, ctx) => {
386
+ const decided = policyDecision(call);
387
+ if (decided)
388
+ return decided;
389
+ return target.check(call, ctx);
390
+ };
391
+ }
392
+ if (prop === 'policyCheck') {
393
+ return async (call) => policyDecision(call);
394
+ }
395
+ return Reflect.get(target, prop, receiver);
396
+ },
397
+ });
398
+ }
399
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAqB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAe9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAiDhE,MAAM,OAAO,OAAO;IACT,EAAE,CAAY;IACd,GAAG,CAAS;IACZ,GAAG,CAAW;IACd,MAAM,CAAS;IACf,KAAK,CAAe;IACpB,SAAS,CAAmB;IAC5B,KAAK,CAAe;IACpB,UAAU,CAAoB;IAC9B,eAAe,CAAwB;IACvC,aAAa,CAAuB;IACpC,eAAe,CAAyB;IACxC,QAAQ,CAAsB;IACvC,8EAA8E;IACrE,eAAe,CAAsB;IAC9C;;;;OAIG;IACM,QAAQ,CAAkB;IAC1B,MAAM,CAAoB;IAC1B,MAAM,CAAgB;IACtB,QAAQ,CAAkB;IAC1B,YAAY,CAAsB;IAClC,YAAY,CAAsB;IAClC,SAAS,CAAmB;IAC5B,SAAS,CAAmB;IAC5B,iBAAiB,CAA2B;IAC5C,YAAY,CAAsB;IAClC,WAAW,CAAmB;IACvC,yEAAyE;IACzE,QAAQ,CAAqB;IAC7B;;;;;;OAMG;IACH,gBAAgB,GAA4B,IAAI,CAAC;IACjD;;;;OAIG;IACH,eAAe,GAA2B,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,SAAS,GAAG,KAAK,CAAC;IAClB;;;;OAIG;IACH,SAAS,GAA0E,SAAS,CAAC;IAC7F;;;OAGG;IACH,iBAAiB,GAAkB,IAAI,CAAC;IACxC;;;;;OAKG;IACH,cAAc,CAAe;IAC7B,kBAAkB,CAAsB;IACxC,QAAQ,CAAgB;IACxB,aAAa,CAAqB;IAClC,SAAS,CAAiB;IAC1B,YAAY,CAAoB;IACvB,UAAU,CAAqB;IAC/B,UAAU,CAAa;IACf,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEpD,YAAY,IAAoB;QAC9B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAChD,uEAAuE;QACvE,qEAAqE;QACrE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACpD,yEAAyE;QACzE,+DAA+D;QAC/D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,IAAI,wBAAwB,EAAE,CAAC;QACxD,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC;YAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACnE,6DAA6D;QAC7D,6DAA6D;QAC7D,gEAAgE;QAChE,0DAA0D;QAC1D,gEAAgE;QAChE,gCAAgC;QAChC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAC5B,IAAI,CAAC,kBAAkB,IAAI,iBAAiB,EAC5C,IAAI,CAAC,WAAW,EAChB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAC3C,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,eAAe;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;QAEH,uEAAuE;QACvE,oEAAoE;QACpE,4DAA4D;QAC5D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,0EAA0E;YAC1E,uEAAuE;YACvE,yDAAyD;YACzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;gBAAE,OAAO;YAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,GAAG,sBAAsB;QACnC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,QAA4B;QAChD,mEAAmE;QACnE,iDAAiD;QACjD,IAAI,CAAC,QAAQ,GAAG,cAAc,CAC5B,QAAQ,EACR,IAAI,CAAC,WAAW,EAChB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAC3C,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,mBAAmB,CAAC,QAAiC;QACnD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;QAC7B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,qEAAqE;YACrE,4DAA4D;YAC5D,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,yEAAyE;YACzE,sDAAsD;YACtD,mEAAmE;YACnE,sEAAsE;YACtE,0EAA0E;YAC1E,8DAA8D;YAC9D,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,MAAM,GAAG,KAAK,CAAC;IAEvB,UAAU;QACR,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACxB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,EAA2C;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,MAAc,EAAE,OAAuB,EAAE;QAC/C,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,eAAe,GAAmC,IAAI,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACpC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,uEAAuE;YACvE,oEAAoE;YACpE,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3H,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;QAClC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,cAAc,EAAE,MAAM;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBACxD,0DAA0D;gBAC1D,+DAA+D;gBAC/D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,wDAAwD;gBACxD,2DAA2D;gBAC3D,0BAA0B,EACvB,CAA8C,CAAC,0BAA0B,KAAK,IAAI;gBACrF,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;aAC1C,CAAC,CAAC;YACH,UAAU;YACV,eAAe;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;YACH,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/E,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;YACH,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3D,8DAA8D;YAC9D,8DAA8D;YAC9D,0DAA0D;YAC1D,4DAA4D;YAC5D,4DAA4D;YAC5D,qDAAqD;YACrD,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACnD,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACpD,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACnD,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;SACrD,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CACrB,KAAyB,EACzB,MAAwB,EACxB,WAAyD;IAEzD,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,8BAA8B;IAC9B,MAAM,cAAc,GAAG,CAAC,IAAqB,EAA6B,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,OAAO,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC;IACF,8DAA8D;IAC9D,kEAAkE;IAClE,yCAAyC;IACzC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE;QACtB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAsB,EAAE,EAAE;oBAC7D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,OAAO;wBAAE,OAAO,OAAO,CAAC;oBAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjC,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC3B,OAAO,KAAK,EAAE,IAAqB,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}