bazilion 0.0.0 → 0.1.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 (265) hide show
  1. package/README.md +53 -152
  2. package/dist/cli.js +2730 -0
  3. package/dist/cli.js.map +1 -0
  4. package/dist/daemon.js +5888 -0
  5. package/dist/daemon.js.map +1 -0
  6. package/dist/worker.js +1830 -0
  7. package/dist/worker.js.map +1 -0
  8. package/package.json +57 -28
  9. package/.understand-anything/.understandignore +0 -25
  10. package/.understand-anything/fingerprints.json +0 -14267
  11. package/.understand-anything/knowledge-graph.json +0 -18128
  12. package/.understand-anything/meta.json +0 -6
  13. package/CLAUDE.md +0 -164
  14. package/apps/cli/package.json +0 -21
  15. package/apps/cli/src/auth-file.ts +0 -18
  16. package/apps/cli/src/client.ts +0 -37
  17. package/apps/cli/src/columnize.ts +0 -32
  18. package/apps/cli/src/commands/agent.ts +0 -574
  19. package/apps/cli/src/commands/auth.ts +0 -110
  20. package/apps/cli/src/commands/backup.ts +0 -135
  21. package/apps/cli/src/commands/completion.ts +0 -155
  22. package/apps/cli/src/commands/config.ts +0 -95
  23. package/apps/cli/src/commands/doctor.ts +0 -131
  24. package/apps/cli/src/commands/group.ts +0 -132
  25. package/apps/cli/src/commands/inbox.ts +0 -82
  26. package/apps/cli/src/commands/login.ts +0 -73
  27. package/apps/cli/src/commands/memory.ts +0 -106
  28. package/apps/cli/src/commands/profile.ts +0 -259
  29. package/apps/cli/src/commands/provider.ts +0 -170
  30. package/apps/cli/src/commands/send.ts +0 -24
  31. package/apps/cli/src/commands/serve.ts +0 -89
  32. package/apps/cli/src/commands/skill.ts +0 -120
  33. package/apps/cli/src/commands/token.ts +0 -148
  34. package/apps/cli/src/commands/trigger.ts +0 -129
  35. package/apps/cli/src/commands/uninstall.ts +0 -156
  36. package/apps/cli/src/index.ts +0 -196
  37. package/apps/cli/src/paths.ts +0 -12
  38. package/apps/cli/test/agent.test.ts +0 -213
  39. package/apps/cli/test/backup.test.ts +0 -95
  40. package/apps/cli/test/chat.test.ts +0 -539
  41. package/apps/cli/test/columnize.test.ts +0 -29
  42. package/apps/cli/test/completion.test.ts +0 -45
  43. package/apps/cli/test/config-page.test.ts +0 -151
  44. package/apps/cli/test/group.test.ts +0 -74
  45. package/apps/cli/test/helpers.ts +0 -70
  46. package/apps/cli/test/inbox-autodeliver.test.ts +0 -143
  47. package/apps/cli/test/inbox.test.ts +0 -147
  48. package/apps/cli/test/memory.test.ts +0 -69
  49. package/apps/cli/test/profile.test.ts +0 -110
  50. package/apps/cli/test/send.test.ts +0 -30
  51. package/apps/cli/test/server-fixture.ts +0 -212
  52. package/apps/cli/test/session-head.test.ts +0 -45
  53. package/apps/cli/test/skill.test.ts +0 -128
  54. package/apps/cli/test/token.test.ts +0 -109
  55. package/apps/cli/test/trigger.test.ts +0 -245
  56. package/apps/cli/tsconfig.json +0 -4
  57. package/apps/daemon/package.json +0 -31
  58. package/apps/daemon/src/app.ts +0 -41
  59. package/apps/daemon/src/core/agent/archive.ts +0 -8
  60. package/apps/daemon/src/core/agent/delete.ts +0 -30
  61. package/apps/daemon/src/core/agent/resolve.ts +0 -31
  62. package/apps/daemon/src/core/agent/spawn.ts +0 -95
  63. package/apps/daemon/src/core/agent/unarchive.ts +0 -11
  64. package/apps/daemon/src/core/availableModels.ts +0 -58
  65. package/apps/daemon/src/core/db/client.ts +0 -113
  66. package/apps/daemon/src/core/db/migrate.ts +0 -41
  67. package/apps/daemon/src/core/db/migrations/0001_init.sql +0 -179
  68. package/apps/daemon/src/core/group/delete.ts +0 -21
  69. package/apps/daemon/src/core/group/register.ts +0 -68
  70. package/apps/daemon/src/core/index.ts +0 -71
  71. package/apps/daemon/src/core/paths.ts +0 -56
  72. package/apps/daemon/src/core/profile/create.ts +0 -78
  73. package/apps/daemon/src/core/profile/delete.ts +0 -26
  74. package/apps/daemon/src/core/profile/identity.ts +0 -70
  75. package/apps/daemon/src/core/profile/load.ts +0 -45
  76. package/apps/daemon/src/core/profile/seed.ts +0 -74
  77. package/apps/daemon/src/core/profile/templates.ts +0 -60
  78. package/apps/daemon/src/core/profile/update.ts +0 -57
  79. package/apps/daemon/src/core/profile/validate.ts +0 -9
  80. package/apps/daemon/src/core/repos/agents.ts +0 -202
  81. package/apps/daemon/src/core/repos/config.ts +0 -78
  82. package/apps/daemon/src/core/repos/groups.ts +0 -55
  83. package/apps/daemon/src/core/repos/messages.ts +0 -127
  84. package/apps/daemon/src/core/repos/profiles.ts +0 -83
  85. package/apps/daemon/src/core/repos/providerModels.ts +0 -58
  86. package/apps/daemon/src/core/repos/providerState.ts +0 -37
  87. package/apps/daemon/src/core/repos/secrets.ts +0 -145
  88. package/apps/daemon/src/core/repos/skillMeta.ts +0 -49
  89. package/apps/daemon/src/core/repos/triggers.ts +0 -101
  90. package/apps/daemon/src/core/repos/webTokens.ts +0 -87
  91. package/apps/daemon/src/core/secrets.ts +0 -65
  92. package/apps/daemon/src/core/services.ts +0 -264
  93. package/apps/daemon/src/core/skills/discover.ts +0 -28
  94. package/apps/daemon/src/core/skills/import.ts +0 -136
  95. package/apps/daemon/src/core/skills/parse.ts +0 -52
  96. package/apps/daemon/src/core/skills/resolve.ts +0 -50
  97. package/apps/daemon/src/index.ts +0 -45
  98. package/apps/daemon/src/lib/agent-cancel.ts +0 -48
  99. package/apps/daemon/src/lib/agent-id.ts +0 -13
  100. package/apps/daemon/src/lib/agent-turn.ts +0 -56
  101. package/apps/daemon/src/lib/api-key.ts +0 -56
  102. package/apps/daemon/src/lib/auth.ts +0 -41
  103. package/apps/daemon/src/lib/cron.ts +0 -93
  104. package/apps/daemon/src/lib/ctx.ts +0 -80
  105. package/apps/daemon/src/lib/messaging-host.ts +0 -34
  106. package/apps/daemon/src/lib/middleware-auth.ts +0 -52
  107. package/apps/daemon/src/lib/scheduler.ts +0 -294
  108. package/apps/daemon/src/routes/agents.ts +0 -772
  109. package/apps/daemon/src/routes/auth-login.ts +0 -193
  110. package/apps/daemon/src/routes/config.ts +0 -267
  111. package/apps/daemon/src/routes/groups.ts +0 -133
  112. package/apps/daemon/src/routes/messages.ts +0 -29
  113. package/apps/daemon/src/routes/misc.ts +0 -239
  114. package/apps/daemon/src/routes/profiles.ts +0 -197
  115. package/apps/daemon/src/routes/skills.ts +0 -123
  116. package/apps/daemon/src/routes/triggers.ts +0 -29
  117. package/apps/daemon/src/runtime/auth/openai-codex.ts +0 -121
  118. package/apps/daemon/src/runtime/auto-reply/heartbeat.ts +0 -31
  119. package/apps/daemon/src/runtime/index.ts +0 -77
  120. package/apps/daemon/src/runtime/memory/files.ts +0 -103
  121. package/apps/daemon/src/runtime/memory/qmd.ts +0 -152
  122. package/apps/daemon/src/runtime/memory/types.ts +0 -16
  123. package/apps/daemon/src/runtime/pi/events.ts +0 -173
  124. package/apps/daemon/src/runtime/pi/session.ts +0 -536
  125. package/apps/daemon/src/runtime/pi/tools.ts +0 -85
  126. package/apps/daemon/src/runtime/providers/catalog.ts +0 -145
  127. package/apps/daemon/src/runtime/providers/pi-adapter.ts +0 -272
  128. package/apps/daemon/src/runtime/providers/registry.ts +0 -374
  129. package/apps/daemon/src/runtime/providers/retry.ts +0 -176
  130. package/apps/daemon/src/runtime/providers/types.ts +0 -33
  131. package/apps/daemon/src/runtime/session/prompt.ts +0 -83
  132. package/apps/daemon/src/runtime/tools/bootstrap.ts +0 -22
  133. package/apps/daemon/src/runtime/tools/home.ts +0 -114
  134. package/apps/daemon/src/runtime/tools/memory.ts +0 -81
  135. package/apps/daemon/src/runtime/tools/messaging.ts +0 -127
  136. package/apps/daemon/src/runtime/tools/registry.ts +0 -29
  137. package/apps/daemon/src/runtime/tools/types.ts +0 -13
  138. package/apps/daemon/src/runtime/tools/web-extract.ts +0 -110
  139. package/apps/daemon/src/runtime/tools/web-ssrf.ts +0 -245
  140. package/apps/daemon/src/runtime/tools/web.ts +0 -273
  141. package/apps/daemon/src/runtime/worker/entry.ts +0 -221
  142. package/apps/daemon/src/runtime/worker/ipc-protocol.ts +0 -75
  143. package/apps/daemon/src/runtime/worker/spawn.ts +0 -249
  144. package/apps/daemon/test/core/agents.test.ts +0 -319
  145. package/apps/daemon/test/core/available-models.test.ts +0 -63
  146. package/apps/daemon/test/core/config.test.ts +0 -99
  147. package/apps/daemon/test/core/groups.test.ts +0 -63
  148. package/apps/daemon/test/core/helpers.ts +0 -50
  149. package/apps/daemon/test/core/identity.test.ts +0 -85
  150. package/apps/daemon/test/core/migrations.test.ts +0 -83
  151. package/apps/daemon/test/core/profiles.test.ts +0 -182
  152. package/apps/daemon/test/core/provider-models.test.ts +0 -57
  153. package/apps/daemon/test/core/provider-state.test.ts +0 -36
  154. package/apps/daemon/test/core/skill-meta.test.ts +0 -45
  155. package/apps/daemon/test/core/skills.test.ts +0 -271
  156. package/apps/daemon/test/core/triggers.test.ts +0 -182
  157. package/apps/daemon/test/core/web-tokens.test.ts +0 -79
  158. package/apps/daemon/test/cron.test.ts +0 -90
  159. package/apps/daemon/test/runtime/heartbeat.test.ts +0 -34
  160. package/apps/daemon/test/runtime/memory-qmd.test.ts +0 -97
  161. package/apps/daemon/test/runtime/memory.test.ts +0 -78
  162. package/apps/daemon/test/runtime/messaging.test.ts +0 -213
  163. package/apps/daemon/test/runtime/mock-server.ts +0 -65
  164. package/apps/daemon/test/runtime/openai-codex-auth.test.ts +0 -116
  165. package/apps/daemon/test/runtime/providers.test.ts +0 -306
  166. package/apps/daemon/test/runtime/retry.test.ts +0 -191
  167. package/apps/daemon/test/runtime/session-head.test.ts +0 -90
  168. package/apps/daemon/test/runtime/tools-home.test.ts +0 -102
  169. package/apps/daemon/test/runtime/tools-web.test.ts +0 -206
  170. package/apps/daemon/tsconfig.json +0 -4
  171. package/apps/mobile/README.md +0 -60
  172. package/apps/mobile/app/_layout.tsx +0 -58
  173. package/apps/mobile/app/agents/[id]/chat.tsx +0 -486
  174. package/apps/mobile/app/agents/[id]/index.tsx +0 -166
  175. package/apps/mobile/app/agents/index.tsx +0 -212
  176. package/apps/mobile/app/index.tsx +0 -21
  177. package/apps/mobile/app/pair.tsx +0 -226
  178. package/apps/mobile/app/settings.tsx +0 -419
  179. package/apps/mobile/app.json +0 -49
  180. package/apps/mobile/assets/adaptive-icon.png +0 -0
  181. package/apps/mobile/assets/favicon.png +0 -0
  182. package/apps/mobile/assets/icon.png +0 -0
  183. package/apps/mobile/assets/splash-icon.png +0 -0
  184. package/apps/mobile/babel.config.js +0 -6
  185. package/apps/mobile/metro.config.js +0 -28
  186. package/apps/mobile/package.json +0 -44
  187. package/apps/mobile/src/auth.ts +0 -66
  188. package/apps/mobile/src/pair-url.ts +0 -48
  189. package/apps/mobile/src/theme-context.tsx +0 -88
  190. package/apps/mobile/src/theme.ts +0 -135
  191. package/apps/mobile/test/pair-url.test.ts +0 -46
  192. package/apps/mobile/tsconfig.json +0 -23
  193. package/apps/web/components.json +0 -25
  194. package/apps/web/package.json +0 -39
  195. package/apps/web/public/baziu.svg +0 -8
  196. package/apps/web/src/components/AgentTabs.tsx +0 -45
  197. package/apps/web/src/components/BaziuLogo.tsx +0 -21
  198. package/apps/web/src/components/ChatPane.tsx +0 -1033
  199. package/apps/web/src/components/ConfigTabs.tsx +0 -29
  200. package/apps/web/src/components/CopyButton.tsx +0 -68
  201. package/apps/web/src/components/CreateGroupDialog.tsx +0 -127
  202. package/apps/web/src/components/FieldRow.tsx +0 -94
  203. package/apps/web/src/components/Footer.tsx +0 -10
  204. package/apps/web/src/components/PawIcon.tsx +0 -15
  205. package/apps/web/src/components/Sidebar.tsx +0 -287
  206. package/apps/web/src/components/SpawnDialog.tsx +0 -129
  207. package/apps/web/src/components/ThemeToggle.tsx +0 -75
  208. package/apps/web/src/components/TopNav.tsx +0 -34
  209. package/apps/web/src/components/ui/button.tsx +0 -67
  210. package/apps/web/src/components/ui/card.tsx +0 -103
  211. package/apps/web/src/components/ui/checkbox.tsx +0 -31
  212. package/apps/web/src/components/ui/dialog.tsx +0 -168
  213. package/apps/web/src/components/ui/input.tsx +0 -19
  214. package/apps/web/src/components/ui/label.tsx +0 -22
  215. package/apps/web/src/components/ui/radio-group.tsx +0 -44
  216. package/apps/web/src/components/ui/select.tsx +0 -192
  217. package/apps/web/src/components/ui/separator.tsx +0 -26
  218. package/apps/web/src/components/ui/table.tsx +0 -116
  219. package/apps/web/src/components/ui/tabs.tsx +0 -88
  220. package/apps/web/src/components/ui/textarea.tsx +0 -18
  221. package/apps/web/src/lib/auth.ts +0 -50
  222. package/apps/web/src/lib/daemon-client.ts +0 -34
  223. package/apps/web/src/lib/md.ts +0 -45
  224. package/apps/web/src/lib/utils.ts +0 -6
  225. package/apps/web/src/lib/wire-constants.ts +0 -27
  226. package/apps/web/src/routeTree.gen.ts +0 -408
  227. package/apps/web/src/router.tsx +0 -20
  228. package/apps/web/src/routes/__root.tsx +0 -123
  229. package/apps/web/src/routes/agents/$id/inbox.tsx +0 -207
  230. package/apps/web/src/routes/agents/$id/index.tsx +0 -527
  231. package/apps/web/src/routes/agents/$id/triggers.tsx +0 -239
  232. package/apps/web/src/routes/agents/index.tsx +0 -265
  233. package/apps/web/src/routes/api/$.ts +0 -88
  234. package/apps/web/src/routes/config/index.tsx +0 -315
  235. package/apps/web/src/routes/config/services.tsx +0 -49
  236. package/apps/web/src/routes/config/tokens.tsx +0 -192
  237. package/apps/web/src/routes/groups/$id/index.tsx +0 -153
  238. package/apps/web/src/routes/groups/$id/memory.tsx +0 -321
  239. package/apps/web/src/routes/groups/index.tsx +0 -191
  240. package/apps/web/src/routes/index.tsx +0 -133
  241. package/apps/web/src/routes/login.tsx +0 -63
  242. package/apps/web/src/routes/profiles/$id.tsx +0 -549
  243. package/apps/web/src/routes/profiles/index.tsx +0 -458
  244. package/apps/web/src/routes/skills/index.tsx +0 -297
  245. package/apps/web/src/routes/welcome.tsx +0 -61
  246. package/apps/web/src/styles.css +0 -449
  247. package/apps/web/tsconfig.json +0 -25
  248. package/apps/web/vite.config.ts +0 -25
  249. package/biome.json +0 -23
  250. package/docs/agent-engine.md +0 -219
  251. package/docs/architecture.md +0 -627
  252. package/docs/backlog/README.md +0 -42
  253. package/docs/backlog/draft/BAZ-001-a2a-federation-spike.md +0 -125
  254. package/docs/openclaw-reference.md +0 -210
  255. package/packages/api-types/package.json +0 -11
  256. package/packages/api-types/src/entities.ts +0 -146
  257. package/packages/api-types/src/events.ts +0 -55
  258. package/packages/api-types/src/index.ts +0 -488
  259. package/packages/api-types/src/memory.ts +0 -15
  260. package/packages/client/package.json +0 -13
  261. package/packages/client/src/index.ts +0 -117
  262. package/pnpm-workspace.yaml +0 -3
  263. package/tsconfig.base.json +0 -23
  264. package/tsconfig.json +0 -11
  265. package/vitest.config.ts +0 -22
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../../../packages/client/src/index.ts","../src/auth-file.ts","../src/paths.ts","../src/client.ts","../src/commands/agent.ts","../src/columnize.ts","../src/commands/auth.ts","../src/commands/backup.ts","../src/commands/completion.ts","../src/commands/config.ts","../src/commands/doctor.ts","../src/commands/group.ts","../src/commands/inbox.ts","../src/commands/login.ts","../src/commands/memory.ts","../src/commands/profile.ts","../../../packages/api-types/src/index.ts","../src/commands/provider.ts","../src/commands/send.ts","../src/commands/serve.ts","../src/commands/skill.ts","../src/commands/token.ts","../src/commands/trigger.ts","../src/commands/uninstall.ts"],"sourcesContent":["import { defineCommand, runCommand, showUsage } from 'citty'\nimport pkg from '../package.json' with { type: 'json' }\nimport { ApiClientError } from './client.ts'\n\nconst VERSION = pkg.version\nimport { agentCommand } from './commands/agent.ts'\nimport { authCommand } from './commands/auth.ts'\nimport { backupCommand } from './commands/backup.ts'\nimport { completionCommand } from './commands/completion.ts'\nimport { configCommand } from './commands/config.ts'\nimport { doctorCommand } from './commands/doctor.ts'\nimport { groupCommand } from './commands/group.ts'\nimport { inboxCommand } from './commands/inbox.ts'\nimport { loginCommand } from './commands/login.ts'\nimport { memoryCommand } from './commands/memory.ts'\nimport { profileCommand } from './commands/profile.ts'\nimport { providerCommand } from './commands/provider.ts'\nimport { sendCommand } from './commands/send.ts'\nimport { serveCommand } from './commands/serve.ts'\nimport { skillCommand } from './commands/skill.ts'\nimport { tokenCommand } from './commands/token.ts'\nimport { triggerCommand } from './commands/trigger.ts'\nimport { uninstallCommand } from './commands/uninstall.ts'\n\nconst main = defineCommand({\n meta: {\n name: 'bazilion',\n version: VERSION,\n description: 'Multi-agent runtime',\n },\n subCommands: {\n login: loginCommand,\n profile: profileCommand,\n group: groupCommand,\n agent: agentCommand,\n skill: skillCommand,\n memory: memoryCommand,\n provider: providerCommand,\n send: sendCommand,\n inbox: inboxCommand,\n config: configCommand,\n serve: serveCommand,\n doctor: doctorCommand,\n backup: backupCommand,\n trigger: triggerCommand,\n token: tokenCommand,\n auth: authCommand,\n uninstall: uninstallCommand,\n },\n})\n\n// Mutate the command tree after definition so `completion` can introspect its\n// own siblings without a circular import. Cast is safe — citty keeps the\n// object reference on `main` after defineCommand, and we know its shape.\n;(main.subCommands as Record<string, unknown>).completion = completionCommand(main as never)\n\n// Resolve `bazilion <a> <b> --help` to the right subcommand for showUsage.\n// citty's built-in version is private, so we re-implement it for plain\n// subCommands objects (the shape we use throughout the tree).\ntype AnyCmd = Parameters<typeof showUsage>[0]\ntype CmdWithSubs = AnyCmd & { subCommands?: Record<string, AnyCmd> }\nasync function resolveSubCommand(\n cmd: CmdWithSubs,\n rawArgs: string[],\n parent?: AnyCmd,\n): Promise<[AnyCmd, AnyCmd | undefined]> {\n const subs = cmd.subCommands\n if (subs && Object.keys(subs).length > 0) {\n const idx = rawArgs.findIndex((a) => !a.startsWith('-'))\n const name = idx >= 0 ? rawArgs[idx] : undefined\n if (name && subs[name]) {\n return resolveSubCommand(subs[name] as CmdWithSubs, rawArgs.slice(idx + 1), cmd)\n }\n }\n return [cmd, parent]\n}\n\nfunction printError(err: unknown): void {\n if (err instanceof ApiClientError) {\n console.error(`error: ${err.body.error}`)\n if (err.status === 401) {\n console.error(' hint: token mismatch. Check ~/.bazilion/auth.json \"token\"')\n console.error(' or re-run \"bazilion login\" for a remote server.')\n } else if (err.status === 403) {\n console.error(' hint: request was rejected by the server. If you hit this from a')\n console.error(' fresh CLI build, check that BAZILION_SERVER matches the')\n console.error(' server origin exactly (scheme + host + port).')\n }\n return\n }\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`error: ${msg}`)\n // Friendly hints for the most common connection failures. node's fetch\n // wraps the syscall error in err.cause.code, so we peek there too.\n const cause = err instanceof Error ? (err as { cause?: { code?: string } }).cause : undefined\n const code = cause?.code\n if (code === 'ECONNREFUSED' || /ECONNREFUSED/.test(msg)) {\n console.error(' hint: the bazilion server is not running. Start it with \"bazilion serve\"')\n console.error(' or point BAZILION_SERVER at a running instance.')\n } else if (code === 'ENOTFOUND' || /ENOTFOUND/.test(msg)) {\n console.error(' hint: host not found. Check BAZILION_SERVER / ~/.bazilion/auth.json.')\n }\n}\n\n/**\n * Top-level `bazilion --help` renders a categorized layout instead of citty's\n * default `sub1|sub2|…` pipe-soup USAGE line. Subcommand `--help` still uses\n * citty's built-in renderer.\n */\nfunction printTopLevelHelp(): void {\n console.log(`Multi-agent runtime (bazilion v${VERSION})`)\n console.log('')\n console.log('USAGE bazilion <command> [args]')\n console.log('')\n const groups: { title: string; items: [string, string][] }[] = [\n {\n title: 'setup',\n items: [\n ['serve', 'Start the bazilion daemon (auto-bootstraps ~/.bazilion on first run)'],\n ['doctor', 'Diagnose your bazilion install'],\n ['uninstall', 'Wipe bazilion state from ~/.bazilion (or BAZILION_HOME)'],\n ],\n },\n {\n title: 'catalog',\n items: [\n ['profile', 'Manage profiles (templates agents are spawned from)'],\n ['group', 'Manage groups (collaboration context — filesystem root + USER.md + roster)'],\n ['skill', 'Manage the skill library'],\n ['provider', 'Manage and test LLM providers'],\n ['config', 'Manage service config (credentials + URLs/IDs)'],\n ['auth', 'OAuth provider sign-in (ChatGPT account, …)'],\n ],\n },\n {\n title: 'agents',\n items: [\n ['agent', 'Spawn, list, chat, archive agents'],\n ['memory', \"Read/write a group's shared memory\"],\n ['send', 'Send a message from one agent to another'],\n ['inbox', 'Inspect agent inboxes'],\n ['trigger', 'Manage agent heartbeats / cron triggers'],\n ],\n },\n {\n title: 'ops',\n items: [['backup', 'Download a tar.gz backup of ~/.bazilion']],\n },\n {\n title: 'remote',\n items: [\n ['login', 'Save a remote bazilion server + token pair to auth.json'],\n ['token', 'Manage web tokens for API/CLI clients'],\n ],\n },\n {\n title: 'shell',\n items: [['completion', 'Print shell completion script (bash | zsh | fish)']],\n },\n ]\n const nameWidth = 12\n for (const g of groups) {\n console.log(` ${g.title}`)\n for (const [name, desc] of g.items) {\n console.log(` ${name.padEnd(nameWidth)}${desc}`)\n }\n console.log('')\n }\n console.log('Use `bazilion <command> --help` for more information about a command.')\n}\n\nasync function entry(): Promise<void> {\n const rawArgs = process.argv.slice(2)\n try {\n if (rawArgs.includes('--help') || rawArgs.includes('-h')) {\n // For the top-level `bazilion --help`, render our grouped layout.\n // Subcommand help still goes through citty (preserves native formatting).\n const firstPositional = rawArgs.find((a) => !a.startsWith('-'))\n if (!firstPositional) {\n printTopLevelHelp()\n process.exit(0)\n }\n const [target, parent] = await resolveSubCommand(main as CmdWithSubs, rawArgs)\n await showUsage(target, parent)\n process.exit(0)\n }\n if (rawArgs.length === 1 && (rawArgs[0] === '--version' || rawArgs[0] === '-v')) {\n console.log(VERSION)\n return\n }\n await runCommand(main, { rawArgs })\n } catch (err) {\n printError(err)\n process.exit(1)\n }\n}\n\nentry()\n","{\n \"name\": \"bazilion\",\n \"version\": \"0.1.0\",\n \"description\": \"Multi-agent runtime CLI — spawn LLM agents, manage profiles/groups/skills, and run the local daemon.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/rullopat/bazilion.git\",\n \"directory\": \"apps/cli\"\n },\n \"homepage\": \"https://bazilion.com\",\n \"bugs\": {\n \"url\": \"https://github.com/rullopat/bazilion/issues\"\n },\n \"keywords\": [\n \"agent\",\n \"agents\",\n \"ai\",\n \"cli\",\n \"daemon\",\n \"llm\",\n \"local-first\",\n \"multi-agent\",\n \"openclaw\",\n \"skills\"\n ],\n \"type\": \"module\",\n \"bin\": {\n \"bazilion\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \">=24.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@hono/node-server\": \"^1.13.0\",\n \"@mariozechner/pi-agent-core\": \"^0.69.0\",\n \"@mariozechner/pi-ai\": \"^0.69.0\",\n \"@mariozechner/pi-coding-agent\": \"^0.69.0\",\n \"@mozilla/readability\": \"^0.6.0\",\n \"@tobilu/qmd\": \"^2.1.0\",\n \"adm-zip\": \"^0.5.17\",\n \"citty\": \"^0.1.6\",\n \"hono\": \"^4.6.0\",\n \"linkedom\": \"^0.18.12\",\n \"qrcode-terminal\": \"^0.12.0\",\n \"typebox\": \"^1.1.32\",\n \"undici\": \"^8.1.0\",\n \"yaml\": \"^2.6.0\"\n },\n \"devDependencies\": {\n \"@bazilion/api-types\": \"workspace:*\",\n \"@bazilion/client\": \"workspace:*\",\n \"@types/adm-zip\": \"^0.5.8\",\n \"@types/qrcode-terminal\": \"^0.12.2\"\n }\n}\n","import type { ApiError } from '@bazilion/api-types'\n\nexport type TokenSource = string | (() => string | Promise<string>)\n\nexport interface ClientConfig {\n serverUrl: string\n /**\n * Bearer token (or supplier for lazy / rotating credentials). The package\n * sends it as `Authorization: Bearer <token>` and also stamps `Origin:\n * <serverUrl>` to pass Astro's `security.checkOrigin` gate on non-GET\n * requests. Pass a function to support token rotation (OAuth refresh,\n * mobile keychain reads) — it is invoked on every request.\n */\n token: TokenSource\n}\n\nexport class ApiClientError extends Error {\n status: number\n body: ApiError\n constructor(status: number, body: ApiError) {\n super(`${status}: ${body.error}`)\n this.status = status\n this.body = body\n }\n}\n\nasync function resolveToken(src: TokenSource): Promise<string> {\n return typeof src === 'function' ? await src() : src\n}\n\nexport function createClient(cfg: ClientConfig) {\n async function authHeaders(): Promise<Record<string, string>> {\n const token = await resolveToken(cfg.token)\n return {\n authorization: `Bearer ${token}`,\n // Astro 6 enabled `security.checkOrigin` by default for server mode:\n // any state-changing request without an `Origin` matching the server\n // host is rejected with 403. Browsers set this automatically; `fetch`\n // in Node / React Native does not. Stamping the server's own URL is\n // always valid for a legitimate client.\n origin: cfg.serverUrl,\n }\n }\n\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const headers: Record<string, string> = { ...(await authHeaders()) }\n if (body !== undefined) headers['content-type'] = 'application/json'\n const res = await fetch(`${cfg.serverUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n if (!res.ok) {\n const err = (await res.json().catch(() => ({ error: res.statusText }))) as ApiError\n throw new ApiClientError(res.status, err)\n }\n if (res.status === 204) return undefined as T\n return (await res.json()) as T\n }\n\n // Multipart POST — lets the runtime set its own `content-type: multipart/form-data;\n // boundary=…` header. Reusing `request()` would stomp that with JSON, so\n // we keep a separate path.\n async function postMultipart<T>(path: string, form: FormData): Promise<T> {\n const res = await fetch(`${cfg.serverUrl}${path}`, {\n method: 'POST',\n headers: { ...(await authHeaders()) },\n body: form,\n })\n if (!res.ok) {\n const err = (await res.json().catch(() => ({ error: res.statusText }))) as ApiError\n throw new ApiClientError(res.status, err)\n }\n if (res.status === 204) return undefined as T\n return (await res.json()) as T\n }\n\n async function* stream<T>(method: string, path: string, body?: unknown): AsyncGenerator<T> {\n const headers: Record<string, string> = { ...(await authHeaders()) }\n if (body !== undefined) headers['content-type'] = 'application/json'\n const res = await fetch(`${cfg.serverUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n if (!res.ok || !res.body) {\n const err = (await res.json().catch(() => ({ error: res.statusText }))) as ApiError\n throw new ApiClientError(res.status, err)\n }\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n for (const line of lines) {\n if (line.trim()) yield JSON.parse(line) as T\n }\n }\n if (buffer.trim()) yield JSON.parse(buffer) as T\n }\n\n return {\n get: <T>(p: string) => request<T>('GET', p),\n post: <T>(p: string, b?: unknown) => request<T>('POST', p, b),\n postMultipart,\n put: <T>(p: string, b?: unknown) => request<T>('PUT', p, b),\n patch: <T>(p: string, b?: unknown) => request<T>('PATCH', p, b),\n del: <T>(p: string) => request<T>('DELETE', p),\n stream,\n }\n}\n\nexport type BazilionClient = ReturnType<typeof createClient>\n","import { existsSync, readFileSync } from 'node:fs'\n\nexport interface AuthFile {\n token: string\n remote?: { server: string; token: string } | null\n}\n\nexport function readAuthFile(authFile: string): AuthFile {\n if (!existsSync(authFile)) {\n throw new Error(`${authFile} not found. Start the daemon with \\`bazilion serve\\` first.`)\n }\n const raw = readFileSync(authFile, 'utf8')\n const parsed = JSON.parse(raw) as Partial<AuthFile>\n if (typeof parsed.token !== 'string' || !parsed.token) {\n throw new Error(`${authFile} is missing the \"token\" field`)\n }\n return { token: parsed.token, remote: parsed.remote ?? null }\n}\n","import { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface CliPaths {\n home: string\n authFile: string\n}\n\nexport function resolveCliPaths(home?: string): CliPaths {\n const root = home ?? process.env.BAZILION_HOME ?? join(homedir(), '.bazilion')\n return { home: root, authFile: join(root, 'auth.json') }\n}\n","import { type BazilionClient, createClient as createPackageClient } from '@bazilion/client'\nimport { readAuthFile } from './auth-file.ts'\nimport { resolveCliPaths } from './paths.ts'\n\nexport type { BazilionClient } from '@bazilion/client'\nexport { ApiClientError } from '@bazilion/client'\n\nexport interface ClientConfig {\n serverUrl: string\n token: string\n}\n\nexport function loadClientConfig(): ClientConfig {\n const envUrl = process.env.BAZILION_SERVER\n const envToken = process.env.BAZILION_TOKEN\n if (envUrl && envToken) return { serverUrl: envUrl, token: envToken }\n\n const paths = resolveCliPaths()\n const auth = readAuthFile(paths.authFile)\n // `bazilion login` writes `remote`; when present it targets another host\n // (Tailscale, LAN). Env vars still win so CI / ad-hoc invocations can\n // override without editing auth.json.\n if (auth.remote?.server && auth.remote.token) {\n return {\n serverUrl: envUrl ?? auth.remote.server,\n token: auth.remote.token,\n }\n }\n return {\n serverUrl: envUrl ?? 'http://127.0.0.1:4321',\n token: auth.token,\n }\n}\n\nexport function createClient(cfg: ClientConfig = loadClientConfig()): BazilionClient {\n return createPackageClient({ serverUrl: cfg.serverUrl, token: cfg.token })\n}\n","import { stdin, stdout } from 'node:process'\nimport { createInterface } from 'node:readline/promises'\nimport type {\n Agent,\n AttachSkillRequest,\n ChatCompactRequest,\n ChatCompactResponse,\n ChatContextResponse,\n ChatFrame,\n MoveAgentRequest,\n ResolvedAgent,\n SessionEvent,\n SessionHeadResponse,\n SpawnAgentRequest,\n TruncateChatRequest,\n TruncateChatResponse,\n} from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nconst spawnCmd = defineCommand({\n meta: { name: 'spawn', description: 'Spawn an agent from a profile into a group' },\n args: {\n profile: { type: 'string', required: true, description: 'Profile id' },\n name: { type: 'string', description: 'Agent name (defaults to profile name)' },\n group: {\n type: 'string',\n description: \"Group to join (defaults to 'default')\",\n },\n model: { type: 'string', description: 'Override profile default model' },\n reasoning: {\n type: 'string',\n description: 'Reasoning level: off|minimal|low|medium|high|xhigh (default: medium)',\n },\n },\n async run({ args }) {\n const client = createClient()\n const body: SpawnAgentRequest = {\n profileId: args.profile,\n name: args.name,\n model: args.model,\n reasoningLevel: args.reasoning as SpawnAgentRequest['reasoningLevel'],\n groupId: args.group,\n }\n const agent = await client.post<Agent>('/api/agents', body)\n console.log(`spawned agent ${agent.id} (${agent.name})`)\n console.log(`dir: ${agent.dir}`)\n },\n})\n\nconst editCmd = defineCommand({\n meta: {\n name: 'edit',\n description: 'Edit agent settings (name, model override, reasoning level)',\n },\n args: {\n id: { type: 'positional', required: true, description: 'Agent id or prefix' },\n name: { type: 'string', description: 'Rename the agent' },\n model: { type: 'string', description: 'Set model override (use --model \"\" to clear)' },\n reasoning: {\n type: 'string',\n description: 'Reasoning level: off|minimal|low|medium|high|xhigh',\n },\n },\n async run({ args }) {\n if (args.name === undefined && args.model === undefined && args.reasoning === undefined) {\n console.error('agent edit: specify at least one of --name, --model, or --reasoning')\n process.exit(2)\n }\n const client = createClient()\n const body: Record<string, unknown> = {}\n if (args.name !== undefined) body.name = args.name\n if (args.model !== undefined) {\n body.modelOverride = args.model === '' ? null : args.model\n }\n if (args.reasoning !== undefined) body.reasoningLevel = args.reasoning\n const agent = await client.patch<Agent>(`/api/agents/${args.id}`, body)\n console.log(`updated agent ${agent.id} (${agent.name})`)\n },\n})\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List agents' },\n args: {\n all: { type: 'boolean', description: 'Include archived agents' },\n long: { type: 'boolean', alias: 'l', description: 'Show profile + full UUID columns' },\n },\n async run({ args }) {\n const client = createClient()\n const q = args.all ? '?includeArchived=true' : ''\n const list = await client.get<Agent[]>(`/api/agents${q}`)\n if (list.length === 0) {\n console.log('(no agents)')\n return\n }\n const rows = list.map((a) =>\n args.long\n ? [a.id, a.status, a.name, a.profileId]\n : // Short UUID prefix — all CLI commands accept 4+ char prefixes now.\n [a.id.slice(0, 8), a.status, a.name],\n )\n for (const line of columnize(rows)) console.log(line)\n },\n})\n\nconst showCmd = defineCommand({\n meta: { name: 'show', description: 'Show agent details' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const r = await client.get<ResolvedAgent>(`/api/agents/${args.id}`)\n console.log(`# ${r.agent.id}`)\n console.log(`name: ${r.agent.name}`)\n console.log(`status: ${r.agent.status}`)\n console.log(`profile: ${r.profile.id}`)\n console.log(`model: ${r.model}`)\n console.log(`dir: ${r.agent.dir}`)\n console.log(`group: ${r.group.id} ${r.group.path}`)\n console.log('skills:')\n if (r.skills.length === 0) {\n console.log(' (none)')\n } else {\n for (const s of r.skills) console.log(` ${s}`)\n }\n },\n})\n\nconst archiveCmd = defineCommand({\n meta: { name: 'archive', description: 'Archive an agent' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.post(`/api/agents/${args.id}/archive`)\n console.log(`archived agent ${args.id}`)\n },\n})\n\nconst unarchiveCmd = defineCommand({\n meta: { name: 'unarchive', description: 'Restore an archived agent to idle' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.post(`/api/agents/${args.id}/unarchive`)\n console.log(`unarchived agent ${args.id}`)\n },\n})\n\nconst deleteCmd = defineCommand({\n meta: { name: 'delete', description: 'Permanently delete an agent and its data' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/agents/${args.id}`)\n console.log(`deleted agent ${args.id}`)\n },\n})\n\n// --- chat ---\n\ninterface PrintState {\n inDeltaStream: boolean\n}\n\nfunction printEvent(e: SessionEvent, state: PrintState): void {\n switch (e.type) {\n case 'assistant_delta':\n process.stdout.write(e.delta)\n state.inDeltaStream = true\n break\n case 'assistant_message':\n if (state.inDeltaStream) {\n // Deltas already rendered the text; just close the line.\n process.stdout.write('\\n')\n state.inDeltaStream = false\n } else {\n console.log(e.text)\n }\n break\n case 'tool_call':\n if (state.inDeltaStream) {\n process.stdout.write('\\n')\n state.inDeltaStream = false\n }\n console.log(` [tool: ${e.name} ${e.arguments}]`)\n break\n case 'tool_result':\n console.log(` [result: ${e.result.split('\\n')[0]?.slice(0, 100)}]`)\n break\n case 'tool_error':\n console.log(` [tool error: ${e.name} — ${e.error}]`)\n break\n case 'error':\n if (state.inDeltaStream) {\n process.stdout.write('\\n')\n state.inDeltaStream = false\n }\n console.log(` [error: ${e.error}]`)\n break\n }\n}\n\nasync function streamTurn(\n client: ReturnType<typeof createClient>,\n agentId: string,\n message: string,\n): Promise<void> {\n const state: PrintState = { inDeltaStream: false }\n for await (const frame of client.stream<ChatFrame>('POST', `/api/agents/${agentId}/chat`, {\n message,\n })) {\n if (frame.kind === 'event') {\n if (frame.event.type !== 'user_message') printEvent(frame.event, state)\n } else if (frame.kind === 'fatal') {\n if (state.inDeltaStream) process.stdout.write('\\n')\n throw new Error(frame.error)\n }\n }\n}\n\nconst chatCmd = defineCommand({\n meta: { name: 'chat', description: 'Chat with an agent' },\n args: {\n id: { type: 'positional', required: true },\n message: {\n type: 'string',\n description: 'Send a single message and exit (one-shot mode)',\n },\n },\n async run({ args }) {\n const client = createClient()\n const resolved = await client.get<ResolvedAgent>(`/api/agents/${args.id}`)\n\n if (args.message) {\n await streamTurn(client, resolved.agent.id, args.message)\n return\n }\n\n console.log(`chatting with ${resolved.agent.name} (${resolved.model})`)\n console.log('(type /exit to quit)')\n\n const rl = createInterface({ input: stdin, output: stdout })\n rl.setPrompt('> ')\n rl.prompt()\n\n for await (const line of rl) {\n const trimmed = line.trim()\n if (trimmed === '/exit' || trimmed === '/quit') break\n if (!trimmed) {\n rl.prompt()\n continue\n }\n try {\n await streamTurn(client, resolved.agent.id, trimmed)\n } catch (err) {\n console.error(`error: ${(err as Error).message}`)\n }\n rl.prompt()\n }\n rl.close()\n },\n})\n\nconst chatResetCmd = defineCommand({\n meta: { name: 'chat-reset', description: \"Reset an agent's chat history to empty\" },\n args: {\n id: { type: 'positional', required: true },\n force: { type: 'boolean', description: 'Skip the y/N prompt' },\n },\n async run({ args }) {\n if (!args.force) {\n process.stdout.write(`reset all chat history for ${args.id}? [y/N] `)\n const answer = await new Promise<string>((resolve) => {\n process.stdin.once('data', (d) => resolve(String(d).trim().toLowerCase()))\n })\n if (answer !== 'y' && answer !== 'yes') {\n console.log('aborted')\n return\n }\n }\n const client = createClient()\n await client.post(`/api/agents/${args.id}/chat/reset`)\n console.log(`reset chat history for ${args.id}`)\n },\n})\n\nconst chatTrimCmd = defineCommand({\n meta: {\n name: 'chat-trim',\n description: \"Keep the first N messages of an agent's chat history; drop the rest\",\n },\n args: {\n id: { type: 'positional', required: true },\n keep: { type: 'string', required: true, description: 'Number of leading messages to keep' },\n },\n async run({ args }) {\n const n = Number(args.keep)\n if (!Number.isFinite(n) || n < 0 || !Number.isInteger(n)) {\n throw new Error('--keep must be a non-negative integer')\n }\n const client = createClient()\n const body: TruncateChatRequest = { keepCount: n }\n const res = await client.post<TruncateChatResponse>(\n `/api/agents/${args.id}/chat/truncate`,\n body,\n )\n console.log(\n `trimmed: ${res.before} → ${res.after} messages (${res.before - res.after} dropped)`,\n )\n },\n})\n\nfunction formatBytes(n: number): string {\n if (n < 1024) return `${n} B`\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} KiB`\n return `${(n / (1024 * 1024)).toFixed(2)} MiB`\n}\n\nconst chatContextCmd = defineCommand({\n meta: {\n name: 'chat-context',\n description: \"Break down what consumes the agent's context window\",\n },\n args: {\n id: { type: 'positional', required: true },\n detail: {\n type: 'boolean',\n description: 'Include every tool/skill entry instead of the top 30',\n },\n json: { type: 'boolean', description: 'Emit raw JSON instead of a human report' },\n },\n async run({ args }) {\n const client = createClient()\n const query = args.detail || args.json ? '?detail=1' : ''\n const ctx = await client.get<ChatContextResponse>(`/api/agents/${args.id}/chat/context${query}`)\n if (args.json) {\n console.log(JSON.stringify(ctx, null, 2))\n return\n }\n\n const fmt = (chars: number, tokens: number): string =>\n `${chars.toLocaleString()} chars (~${tokens.toLocaleString()} tok)`\n\n console.log(`🧠 context for ${ctx.agentId}`)\n console.log(`model: ${ctx.model}`)\n console.log('')\n console.log('## system prompt')\n console.log(` total: ${fmt(ctx.systemPrompt.chars, ctx.systemPrompt.tokens)}`)\n if (ctx.systemPrompt.files.length > 0) {\n console.log(' profile files:')\n for (const f of ctx.systemPrompt.files) {\n console.log(` - ${f.name}: ${fmt(f.chars, f.tokens)}`)\n }\n }\n if (ctx.systemPrompt.skillsListChars > 0) {\n console.log(` skills line: ${ctx.systemPrompt.skillsListChars.toLocaleString()} chars`)\n }\n if (ctx.systemPrompt.groupListChars > 0) {\n console.log(` group block: ${ctx.systemPrompt.groupListChars.toLocaleString()} chars`)\n }\n if (ctx.systemPrompt.userMdChars > 0) {\n console.log(` user_md block: ${ctx.systemPrompt.userMdChars.toLocaleString()} chars`)\n }\n console.log(` memory hint: ${ctx.systemPrompt.memoryHintChars.toLocaleString()} chars`)\n console.log('')\n console.log('## tools')\n console.log(` count: ${ctx.tools.count}`)\n console.log(\n ` schemas (JSON): ${ctx.tools.schemaChars.toLocaleString()} chars (~${estimate(ctx.tools.schemaChars).toLocaleString()} tok)`,\n )\n console.log(` list text: ${ctx.tools.listChars.toLocaleString()} chars`)\n if (ctx.tools.entries.length > 0) {\n console.log(' top tools by schema size:')\n for (const t of ctx.tools.entries) {\n const params = t.paramCount != null ? ` (${t.paramCount} params)` : ''\n console.log(` - ${t.name}: ${t.schemaChars.toLocaleString()} chars${params}`)\n }\n }\n console.log('')\n if (ctx.skills.count > 0) {\n console.log('## skills')\n console.log(` count: ${ctx.skills.count}`)\n for (const s of ctx.skills.entries) {\n console.log(` - ${s.name}: ${s.blockChars.toLocaleString()} chars`)\n }\n console.log('')\n }\n console.log('## group')\n console.log(` - ${ctx.group.id} (${ctx.group.name}): ${ctx.group.path}`)\n if (ctx.group.userMdChars > 0) {\n console.log(` user_md: ${ctx.group.userMdChars.toLocaleString()} chars`)\n }\n console.log('')\n console.log('## history')\n console.log(` messages: ${ctx.history.messageEntries}`)\n console.log(` compactions: ${ctx.history.compactionEntries}`)\n console.log(` total: ${fmt(ctx.history.chars, ctx.history.tokensEstimate)}`)\n console.log(` bytes: ${formatBytes(ctx.history.bytes)}`)\n console.log('')\n console.log(`TOTAL: ${fmt(ctx.totals.chars, ctx.totals.tokens)}`)\n },\n})\n\nfunction estimate(chars: number): number {\n return Math.ceil(Math.max(0, chars) / 4)\n}\n\nconst chatCompactCmd = defineCommand({\n meta: {\n name: 'chat-compact',\n description: \"Summarize the head of an agent's chat log, preserving the tail verbatim\",\n },\n args: {\n id: { type: 'positional', required: true },\n 'keep-tail': {\n type: 'string',\n description: 'Message entries to keep verbatim after the summary (default 10)',\n },\n instructions: {\n type: 'string',\n description: 'Optional extra guidance prepended to the summarizer prompt',\n },\n force: { type: 'boolean', description: 'Skip the y/N prompt' },\n },\n async run({ args }) {\n if (!args.force) {\n process.stdout.write(\n `compact chat history for ${args.id}? head turns become a summary; tail is preserved. [y/N] `,\n )\n const answer = await new Promise<string>((resolve) => {\n process.stdin.once('data', (d) => resolve(String(d).trim().toLowerCase()))\n })\n if (answer !== 'y' && answer !== 'yes') {\n console.log('aborted')\n return\n }\n }\n const keepTailNum = args['keep-tail'] ? Number(args['keep-tail']) : undefined\n if (keepTailNum !== undefined && (!Number.isFinite(keepTailNum) || keepTailNum < 0)) {\n console.error('--keep-tail must be a non-negative integer')\n process.exitCode = 1\n return\n }\n const body: ChatCompactRequest = {}\n if (keepTailNum !== undefined) body.keepTail = Math.floor(keepTailNum)\n if (args.instructions) body.customInstructions = args.instructions\n const client = createClient()\n const res = await client.post<ChatCompactResponse>(`/api/agents/${args.id}/chat/compact`, body)\n console.log(\n `compacted: ${res.before} → ${res.after} entries (${res.summarized} summarized, ${res.keptTail} tail kept verbatim)`,\n )\n console.log(\n `tokens: ~${res.tokensBefore.toLocaleString()} → ~${res.tokensAfter.toLocaleString()}`,\n )\n console.log('')\n console.log('summary:')\n console.log(res.summary)\n },\n})\n\n// --- skill subcommand ---\n\nconst skillAddCmd = defineCommand({\n meta: { name: 'add', description: 'Attach a skill to an agent' },\n args: {\n agent: { type: 'positional', required: true },\n skill: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const body: AttachSkillRequest = { skill: args.skill }\n await client.post(`/api/agents/${args.agent}/skills`, body)\n console.log(`attached skill ${args.skill} to ${args.agent}`)\n },\n})\n\nconst skillRmCmd = defineCommand({\n meta: { name: 'rm', description: 'Detach a skill from an agent' },\n args: {\n agent: { type: 'positional', required: true },\n skill: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/agents/${args.agent}/skills/${encodeURIComponent(args.skill)}`)\n console.log(`detached skill ${args.skill} from ${args.agent}`)\n },\n})\n\nconst skillCmd = defineCommand({\n meta: { name: 'skill', description: 'Attach/detach skills on an agent' },\n subCommands: {\n add: skillAddCmd,\n rm: skillRmCmd,\n },\n})\n\n// --- group membership ---\n\nconst moveCmd = defineCommand({\n meta: { name: 'move', description: 'Move an agent to a different group' },\n args: {\n agent: { type: 'positional', required: true },\n group: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const body: MoveAgentRequest = { groupId: args.group }\n await client.patch(`/api/agents/${args.agent}/group`, body)\n console.log(`moved ${args.agent} to group ${args.group}`)\n },\n})\n\nconst sessionHeadCmd = defineCommand({\n meta: {\n name: 'session-head',\n description: \"Print the agent's current session file head (for stale-tab checks)\",\n },\n args: {\n id: { type: 'positional', required: true },\n json: { type: 'boolean', description: 'Emit raw JSON instead of a human line' },\n },\n async run({ args }) {\n const client = createClient()\n const head = await client.get<SessionHeadResponse>(`/api/agents/${args.id}/sessions/head`)\n if (args.json) {\n console.log(JSON.stringify(head))\n return\n }\n console.log(head.file ? `${head.file} (${head.size} bytes)` : '(no session yet)')\n },\n})\n\nconst cancelCmd = defineCommand({\n meta: { name: 'cancel', description: \"Abort the agent's currently-running turn\" },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.post(`/api/agents/${args.id}/cancel`)\n console.log(`cancelled active turn for ${args.id}`)\n },\n})\n\nexport const agentCommand = defineCommand({\n meta: { name: 'agent', description: 'Manage agent instances' },\n subCommands: {\n spawn: spawnCmd,\n list: listCmd,\n show: showCmd,\n edit: editCmd,\n archive: archiveCmd,\n unarchive: unarchiveCmd,\n delete: deleteCmd,\n chat: chatCmd,\n 'chat-reset': chatResetCmd,\n 'chat-trim': chatTrimCmd,\n 'chat-context': chatContextCmd,\n 'chat-compact': chatCompactCmd,\n cancel: cancelCmd,\n skill: skillCmd,\n move: moveCmd,\n 'session-head': sessionHeadCmd,\n },\n})\n","/**\n * Render `rows` as space-aligned columns. All rows must have the same column\n * count; empty cells are treated as `\"\"` for width purposes. Column spacing is\n * two spaces — wider than a tab, tighter than tabular CSV tooling expects.\n *\n * Used by list commands so `status` / `kind` / `name` columns don't jump when\n * one row is `idle` (4) and another is `archived` (8). Does not truncate —\n * long cells win the column width. Callers that want a bounded width should\n * slice before passing.\n */\nexport function columnize(rows: string[][], gap = ' '): string[] {\n if (rows.length === 0) return []\n const colCount = rows[0]?.length ?? 0\n const widths: number[] = new Array<number>(colCount).fill(0)\n for (const row of rows) {\n for (let i = 0; i < colCount; i++) {\n const cell = row[i] ?? ''\n const prev = widths[i] ?? 0\n if (cell.length > prev) widths[i] = cell.length\n }\n }\n return rows.map((row) =>\n row\n .map((cell, i) => {\n // Don't pad the last column — trailing whitespace is pointless and\n // breaks `| wc`-style pipes.\n if (i === colCount - 1) return cell\n return (cell ?? '').padEnd(widths[i] ?? 0)\n })\n .join(gap),\n )\n}\n","// Import pi-ai directly so the CLI bundle stays slim. `loginOpenAICodex` is\n// exposed at pi-ai's `/oauth` subpath; types come from pi-ai's main export\n// and `OpenAICodexStatus` (the wire shape) from api-types.\nimport type { OpenAICodexStatus } from '@bazilion/api-types'\nimport type { OAuthAuthInfo, OAuthPrompt } from '@mariozechner/pi-ai'\nimport { loginOpenAICodex } from '@mariozechner/pi-ai/oauth'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\n\nfunction formatExpiry(ms: number | null): string {\n if (!ms) return '(unknown)'\n const d = new Date(ms)\n return d.toISOString().replace(/\\.\\d+Z$/, 'Z')\n}\n\nconst openaiLoginCmd = defineCommand({\n meta: {\n name: 'login',\n description: 'Connect your ChatGPT account via OAuth (browser sign-in)',\n },\n async run() {\n const client = createClient()\n // The loopback callback at localhost:1455 must be on the CLI user's\n // machine, so we run pi-ai's flow client-side (not via a server POST).\n // After it completes we ship the credentials to the daemon so they land\n // in the daemon-owned `secrets` table (encrypted with the bootstrap token).\n console.log('opening your browser for OpenAI sign-in...')\n console.log(\"(if it doesn't open automatically, paste the URL shown below)\")\n const creds = await loginOpenAICodex({\n onAuth: ({ url }: OAuthAuthInfo) => {\n console.log('')\n console.log(` → ${url}`)\n console.log('')\n },\n onPrompt: async (prompt: OAuthPrompt): Promise<string> => {\n process.stdout.write(`${prompt.message}: `)\n return new Promise<string>((resolve) => {\n process.stdin.once('data', (d) => resolve(String(d).trim()))\n })\n },\n onProgress: (msg: string) => {\n console.log(` ${msg}`)\n },\n })\n const status = await client.put<OpenAICodexStatus>('/api/auth/openai', {\n refresh: creds.refresh,\n access: creds.access,\n expires: creds.expires,\n })\n console.log('')\n console.log('connected ✓')\n if (status.accountId) console.log(`account: ${status.accountId}`)\n console.log(`access token expires: ${formatExpiry(status.expiresAt)}`)\n console.log('')\n console.log(`enable the 'openai-codex' provider on /config and add at least one model`)\n console.log('(e.g. gpt-5.1-codex-max, gpt-5.2, gpt-5.3-codex) to start using it.')\n },\n})\n\nconst openaiLogoutCmd = defineCommand({\n meta: {\n name: 'logout',\n description: 'Forget the stored ChatGPT OAuth credentials',\n },\n async run() {\n const client = createClient()\n await client.del('/api/auth/openai')\n console.log('disconnected ChatGPT OAuth credentials')\n },\n})\n\nconst openaiStatusCmd = defineCommand({\n meta: {\n name: 'status',\n description: 'Show ChatGPT OAuth connection status',\n },\n async run() {\n const client = createClient()\n const status = await client.get<OpenAICodexStatus>('/api/auth/openai')\n if (!status.connected) {\n console.log('not connected — run `bazilion auth openai login`')\n return\n }\n console.log('connected ✓')\n if (status.accountId) console.log(`account: ${status.accountId}`)\n console.log(`access token expires: ${formatExpiry(status.expiresAt)}`)\n },\n})\n\nconst openaiCmd = defineCommand({\n meta: {\n name: 'openai',\n description: 'Manage ChatGPT (OAuth) authentication',\n },\n subCommands: {\n login: openaiLoginCmd,\n logout: openaiLogoutCmd,\n status: openaiStatusCmd,\n },\n})\n\nexport const authCommand = defineCommand({\n meta: {\n name: 'auth',\n description: 'OAuth-based provider authentication (ChatGPT account, etc.)',\n },\n subCommands: {\n openai: openaiCmd,\n },\n})\n","import { spawn } from 'node:child_process'\nimport { createWriteStream, existsSync, mkdirSync, readdirSync, rmSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { defineCommand } from 'citty'\nimport { loadClientConfig } from '../client.ts'\nimport { resolveCliPaths } from '../paths.ts'\n\nconst createCmd = defineCommand({\n meta: { name: 'create', description: 'Download a tar.gz backup of ~/.bazilion from the server' },\n args: {\n output: {\n type: 'positional',\n required: false,\n description: 'Output file path (default: ./bazilion-backup-YYYY-MM-DD.tar.gz)',\n },\n },\n async run({ args }) {\n const cfg = loadClientConfig()\n const date = new Date().toISOString().slice(0, 10)\n const outAbs = resolve(args.output ?? `bazilion-backup-${date}.tar.gz`)\n\n console.log(`downloading backup → ${outAbs}`)\n const res = await fetch(`${cfg.serverUrl}/api/backup`, {\n headers: { authorization: `Bearer ${cfg.token}`, origin: cfg.serverUrl },\n })\n if (!res.ok || !res.body) {\n let err: string = res.statusText\n try {\n const body = (await res.json()) as { error?: string }\n err = body.error ?? err\n } catch {}\n throw new Error(`backup failed: ${err}`)\n }\n await pipeline(Readable.fromWeb(res.body), createWriteStream(outAbs))\n console.log('done')\n },\n})\n\n/**\n * Offline restore. Server must be stopped first — SQLite's DB files would get\n * corrupted if the running daemon has them open while tar overwrites them.\n * We check the default loopback port as a best-effort safety net.\n */\nasync function probeServerRunning(port: number): Promise<boolean> {\n try {\n const ctrl = new AbortController()\n const timer = setTimeout(() => ctrl.abort(), 500)\n // /login is unauthenticated (see middleware.ts PUBLIC_PATHS) — any response\n // means something is listening on the port.\n const res = await fetch(`http://127.0.0.1:${port}/login`, { signal: ctrl.signal })\n clearTimeout(timer)\n return res.status >= 200 && res.status < 600\n } catch {\n return false\n }\n}\n\nconst restoreCmd = defineCommand({\n meta: {\n name: 'restore',\n description: 'Extract a backup tar.gz into ~/.bazilion (offline; server must be stopped)',\n },\n args: {\n file: {\n type: 'positional',\n required: true,\n description: 'Path to tar.gz backup file',\n },\n home: { type: 'string', description: 'Override BAZILION_HOME' },\n force: {\n type: 'boolean',\n description: 'Overwrite existing non-empty home (destroys existing data)',\n },\n },\n async run({ args }) {\n const file = resolve(args.file)\n if (!existsSync(file)) throw new Error(`backup file not found: ${file}`)\n\n const paths = resolveCliPaths(args.home)\n const targetHome = paths.home\n\n // Only probe for a running server when restoring to the default home —\n // an explicit `--home` points somewhere the running daemon isn't using,\n // so there's no DB-corruption risk to warn about. `--force` bypasses\n // the probe either way.\n const defaultHome = !args.home && !process.env.BAZILION_HOME\n if (defaultHome && !args.force && (await probeServerRunning(4321))) {\n throw new Error(\n 'bazilion server appears to be running on :4321 — stop it first (DB ' +\n 'corruption risk), or pass --force to override.',\n )\n }\n\n if (existsSync(targetHome)) {\n const entries = readdirSync(targetHome)\n if (entries.length > 0) {\n if (!args.force) {\n throw new Error(\n `${targetHome} is not empty. Pass --force to overwrite (destroys existing data).`,\n )\n }\n rmSync(targetHome, { recursive: true, force: true })\n }\n }\n mkdirSync(targetHome, { recursive: true })\n\n console.log(`extracting ${file} → ${targetHome}`)\n await new Promise<void>((res, rej) => {\n const proc = spawn('tar', ['-xzf', file, '-C', targetHome], { stdio: 'inherit' })\n proc.on('error', rej)\n proc.on('exit', (code) => {\n if (code === 0) res()\n else rej(new Error(`tar exited with code ${code}`))\n })\n })\n\n console.log(`restored to ${targetHome}`)\n console.log('start the server with: bazilion serve (migrations apply automatically)')\n },\n})\n\nexport const backupCommand = defineCommand({\n meta: { name: 'backup', description: 'Create or restore a ~/.bazilion tar.gz backup' },\n subCommands: {\n create: createCmd,\n restore: restoreCmd,\n },\n // `bazilion backup` with no positional falls through to citty's subcommand\n // prompt (\"No command specified\"). The previous default (auto-download to\n // cwd) double-fired when a subcommand was used because citty runs parent's\n // `run` after the subcommand completes — explicit `create` / `restore` is\n // the supported form now.\n})\n","import { defineCommand } from 'citty'\n\ninterface CommandNode {\n subCommands?: Record<string, CommandNode | Promise<CommandNode>>\n args?: Record<string, { type?: string; alias?: string | string[] }>\n}\n\ninterface Flatten {\n /** full path e.g. [\"agent\", \"chat\"]; empty for the top-level root */\n path: string[]\n /** immediate subcommand names available at this path */\n subs: string[]\n /** flag tokens e.g. [\"--profile\", \"--name\", \"--long\", \"-l\"] */\n flags: string[]\n}\n\nasync function walk(cmd: CommandNode, path: string[], out: Flatten[]): Promise<void> {\n const subsRaw = cmd.subCommands ?? {}\n const subNames = Object.keys(subsRaw)\n const flags = flagsOf(cmd.args ?? {})\n out.push({ path, subs: subNames, flags })\n for (const name of subNames) {\n const v = subsRaw[name]\n const sub = (await Promise.resolve(v)) as CommandNode\n await walk(sub, [...path, name], out)\n }\n}\n\nfunction flagsOf(args: Record<string, { type?: string; alias?: string | string[] }>): string[] {\n const out: string[] = []\n for (const [name, def] of Object.entries(args)) {\n // Positionals don't get completed as flags.\n if (def.type === 'positional') continue\n out.push(`--${name}`)\n const aliases = Array.isArray(def.alias) ? def.alias : def.alias ? [def.alias] : []\n for (const a of aliases) out.push(a.length === 1 ? `-${a}` : `--${a}`)\n }\n return out\n}\n\nfunction bashScript(flat: Flatten[]): string {\n const cases = flat\n .map((f) => {\n const key = f.path.length === 0 ? '\"\"' : JSON.stringify(f.path.join(' '))\n const words = [...f.subs, ...f.flags].join(' ')\n return ` ${key})\\n COMPREPLY=($(compgen -W ${JSON.stringify(words)} -- \"$cur\"))\\n ;;`\n })\n .join('\\n')\n return `# bazilion bash completion. Install with:\n# source <(bazilion completion bash)\n# or append to ~/.bashrc / ~/.bash_profile.\n_bazilion_completion() {\n local cur prev cword\n COMPREPLY=()\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n cword=$COMP_CWORD\n # Build the current subcommand path by walking words[1..cword-1], skipping\n # flags and their values. We don't try to parse flag arity — treating every\n # flag as standalone is a good-enough approximation for completion.\n local cmd=\"\"\n local i\n for ((i=1; i<cword; i++)); do\n local w=\"\\${COMP_WORDS[i]}\"\n [[ \"$w\" == -* ]] && continue\n cmd+=\"\\${cmd:+ }$w\"\n done\n case \"$cmd\" in\n${cases}\n *)\n COMPREPLY=()\n ;;\n esac\n}\ncomplete -F _bazilion_completion bazilion\n`\n}\n\nfunction zshScript(flat: Flatten[]): string {\n // zsh bundles a bashcompinit shim; reusing the bash script sidesteps the\n // cost of a native _arguments/_describe implementation while still giving\n // users a working completion. Ships with a tiny preamble so zsh loads the\n // bash compat helpers first.\n const bash = bashScript(flat)\n return `# bazilion zsh completion. Install with:\n# source <(bazilion completion zsh)\n# If you don't already have bashcompinit loaded, this does it for you.\nautoload -U +X compinit && compinit\nautoload -U +X bashcompinit && bashcompinit\n${bash}`\n}\n\nfunction fishScript(flat: Flatten[]): string {\n const lines: string[] = [\n '# bazilion fish completion. Install with:',\n '# bazilion completion fish | source',\n '# or write it to ~/.config/fish/completions/bazilion.fish',\n '',\n 'complete -c bazilion -f',\n ]\n for (const f of flat) {\n if (f.path.length === 0) {\n for (const s of f.subs) lines.push(`complete -c bazilion -n '__fish_use_subcommand' -a ${s}`)\n for (const fl of f.flags) {\n const long = fl.startsWith('--') ? fl.slice(2) : ''\n const short = !fl.startsWith('--') ? fl.slice(1) : ''\n const parts: string[] = [\"complete -c bazilion -n '__fish_use_subcommand'\"]\n if (short) parts.push(`-s ${short}`)\n if (long) parts.push(`-l ${long}`)\n lines.push(parts.join(' '))\n }\n } else {\n // Guard this case on the joined path being the last N tokens in\n // COMP_CWORDS — fish's __fish_seen_subcommand_from handles each token\n // independently, so we require every path segment.\n const guard = f.path.map((p) => `__fish_seen_subcommand_from ${p}`).join('; and ')\n for (const s of f.subs) {\n lines.push(`complete -c bazilion -n '${guard}' -a ${s}`)\n }\n for (const fl of f.flags) {\n const long = fl.startsWith('--') ? fl.slice(2) : ''\n const short = !fl.startsWith('--') ? fl.slice(1) : ''\n const parts: string[] = [`complete -c bazilion -n '${guard}'`]\n if (short) parts.push(`-s ${short}`)\n if (long) parts.push(`-l ${long}`)\n lines.push(parts.join(' '))\n }\n }\n }\n return `${lines.join('\\n')}\\n`\n}\n\nexport function completionCommand(main: CommandNode) {\n return defineCommand({\n meta: {\n name: 'completion',\n description: 'Print a shell completion script (bash, zsh, or fish)',\n },\n args: {\n shell: {\n type: 'positional',\n required: true,\n description: 'bash | zsh | fish',\n },\n },\n async run({ args }) {\n const flat: Flatten[] = []\n await walk(main, [], flat)\n const shell = String(args.shell).toLowerCase()\n if (shell === 'bash') console.log(bashScript(flat))\n else if (shell === 'zsh') console.log(zshScript(flat))\n else if (shell === 'fish') console.log(fishScript(flat))\n else throw new Error(`unsupported shell: ${args.shell} (want bash | zsh | fish)`)\n },\n })\n}\n","import type {\n ProviderConfigResponse,\n ServiceCard,\n ServiceConfigResponse,\n ServiceFieldState,\n SetFieldRequest,\n} from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nfunction displayValue(f: ServiceFieldState): string {\n if (!f.set) return '(unset)'\n if (f.kind === 'secret') return f.preview ?? '(set)'\n return f.value ?? '(set)'\n}\n\nconst listCmd = defineCommand({\n meta: {\n name: 'list',\n description: 'List every configurable field (credentials + URLs) across all services',\n },\n async run() {\n const client = createClient()\n // Both endpoints return ServiceCard-shaped entries — merge and print.\n const { providers } = await client.get<ProviderConfigResponse>('/api/config/providers')\n const { services } = await client.get<ServiceConfigResponse>('/api/config/services')\n const all: ServiceCard[] = [...providers, ...services]\n\n const rows: string[][] = []\n for (const svc of all) {\n for (const f of svc.fields) {\n rows.push([svc.id, f.envVar, f.kind, displayValue(f)])\n }\n }\n if (rows.length === 0) {\n console.log('(no fields registered)')\n return\n }\n for (const line of columnize(rows)) console.log(line)\n },\n})\n\nconst setCmd = defineCommand({\n meta: {\n name: 'set',\n description: 'Set a configurable field (auto-routes to secrets or plaintext store)',\n },\n args: {\n envVar: {\n type: 'positional',\n required: true,\n description: 'Env var name (e.g. ANTHROPIC_API_KEY, LMSTUDIO_URL)',\n },\n value: {\n type: 'positional',\n required: true,\n description: 'New value (empty string clears the field)',\n },\n },\n async run({ args }) {\n const client = createClient()\n const body: SetFieldRequest = { value: args.value }\n const state = await client.put<ServiceFieldState>(\n `/api/config/fields/${encodeURIComponent(args.envVar)}`,\n body,\n )\n console.log(`${state.envVar} (${state.kind}): ${displayValue(state)}`)\n },\n})\n\nconst rmCmd = defineCommand({\n meta: { name: 'rm', description: 'Remove a configurable field value' },\n args: {\n envVar: { type: 'positional', required: true, description: 'Env var name to clear' },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/config/fields/${encodeURIComponent(args.envVar)}`)\n console.log(`removed ${args.envVar}`)\n },\n})\n\nexport const configCommand = defineCommand({\n meta: {\n name: 'config',\n description:\n 'Manage service configuration — credentials (encrypted) and URLs/IDs (plaintext), unified under one CLI',\n },\n subCommands: {\n list: listCmd,\n set: setCmd,\n rm: rmCmd,\n },\n})\n","import type { HealthReport } from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\n\nexport const doctorCommand = defineCommand({\n meta: { name: 'doctor', description: 'Diagnose your bazilion install' },\n async run() {\n const client = createClient()\n const r = await client.get<HealthReport>('/api/health')\n\n function check(label: string, condition: boolean, hint?: string): void {\n const mark = condition ? '✓' : '✗'\n const tail = !condition && hint ? ` — ${hint}` : ''\n console.log(` ${mark} ${label}${tail}`)\n }\n\n console.log(`bazilion home: ${r.home}`)\n console.log()\n console.log('paths')\n check('home dir exists', r.paths.home)\n check('database exists', r.paths.db, 'run: bazilion serve (auto-bootstraps on first run)')\n check('auth.json exists', r.paths.auth, 'run: bazilion serve (auto-bootstraps on first run)')\n check('profiles dir exists', r.paths.profiles)\n check('agents dir exists', r.paths.agents)\n check('skills dir exists', r.paths.skills)\n\n if (r.database) {\n console.log()\n console.log('database')\n if (r.database.ok) {\n console.log(` ${r.database.profiles} profile(s)`)\n console.log(\n ` ${r.database.activeAgents} active agent(s) (${r.database.totalAgents} total)`,\n )\n console.log(` ${r.database.groups} group(s)`)\n } else {\n check('open database', false, r.database.error)\n }\n }\n\n console.log()\n console.log('skills library')\n console.log(` ${r.skills.installed} skill(s) installed`)\n if (r.skills.parseErrors > 0) {\n check('all skills parse', false, `${r.skills.parseErrors} skill(s) have errors`)\n }\n\n console.log()\n console.log('providers (at least one needed for chat)')\n if (r.providers.configured.length === 0) {\n console.log(' - no cloud providers configured')\n console.log(' (set e.g. ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY)')\n } else {\n for (const name of r.providers.configured) {\n console.log(` ✓ ${name}`)\n }\n }\n console.log(\n ` ✓ lmstudio: ${r.providers.lmstudio.baseURL}${\n r.providers.lmstudio.hasKey ? ' (api key set)' : ''\n }`,\n )\n console.log(` ✓ ollama: ${r.providers.ollama.baseURL}`)\n\n console.log()\n console.log('web search (at least one needed for web_search tool)')\n if (r.webSearch.bravePreview) {\n console.log(` ✓ Brave Search (BRAVE_API_KEY set, ${r.webSearch.bravePreview})`)\n } else {\n console.log(' - Brave Search (set BRAVE_API_KEY — free at https://brave.com/search/api/)')\n }\n if (r.webSearch.searxngUrl) {\n console.log(` ✓ SearXNG: ${r.webSearch.searxngUrl}`)\n } else {\n console.log(' - SearXNG (set SEARXNG_URL if you self-host one)')\n }\n if (!r.webSearch.bravePreview && !r.webSearch.searxngUrl) {\n console.log(' ⚠ no search backend — web_search will error until one is configured')\n }\n\n console.log()\n console.log('openclaw integration')\n if (r.openclaw.exists) {\n console.log(` ✓ ${r.openclaw.path} found`)\n console.log(' try: bazilion skill import --from openclaw')\n } else {\n console.log(` - ${r.openclaw.path} not found (fine if you don't use OpenClaw)`)\n }\n\n console.log()\n console.log('background jobs')\n console.log(\n ` ${r.scheduler.enabled ? '✓' : '-'} scheduler${\n r.scheduler.enabled ? ` (tick ${r.scheduler.tickMs}ms)` : ' (BAZILION_SCHEDULER=off)'\n }`,\n )\n\n console.log()\n console.log('operational counts')\n console.log(` ${r.triggers.active} active trigger(s), ${r.triggers.disabled} disabled`)\n console.log(` ${r.tokens.active} active web token(s)`)\n\n const anyCloudProvider = r.providers.configured.length > 0\n const hasProfiles = (r.database?.ok ? r.database.profiles : 0) > 0\n const hasAgents = (r.database?.ok ? r.database.totalAgents : 0) > 0\n\n console.log()\n if (!r.ok) {\n console.log('issues found ✗')\n process.exit(1)\n }\n // Install is structurally healthy. Differentiate \"ready to use\" from \"just\n // initialized\" so a fresh install doesn't masquerade as fully configured.\n // (Local providers — lmstudio/ollama — are reported with default URLs\n // whether or not they're actually running, so we can only advise; cloud\n // providers have api keys we can check.)\n if (!hasProfiles || !hasAgents) {\n console.log('install is healthy, but not yet ready to run ⚠')\n const todo: string[] = []\n if (!anyCloudProvider) {\n todo.push(' - set a cloud api key (ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY)')\n todo.push(' or make sure LMStudio / Ollama is running locally')\n }\n if (!hasProfiles) todo.push(' - create a profile: bazilion profile create <id> --model …')\n if (!hasAgents) todo.push(' - spawn an agent: bazilion agent spawn --profile <id>')\n for (const line of todo) console.log(line)\n } else {\n console.log('all good ✓')\n }\n },\n})\n","import { readFileSync } from 'node:fs'\nimport { stdin } from 'node:process'\nimport type { Group, RegisterGroupRequest, SetGroupUserMdRequest } from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nconst addCmd = defineCommand({\n meta: {\n name: 'add',\n description:\n 'Register a group at ~/.bazilion/groups/<slug>/ (use --link to point at an existing tree)',\n },\n args: {\n id: { type: 'positional', required: true, description: 'Group slug' },\n name: { type: 'string', description: 'Display name (defaults to slug)' },\n link: {\n type: 'string',\n description: 'Absolute path of an existing directory; the group slot becomes a symlink to it',\n },\n },\n async run({ args }) {\n const client = createClient()\n const body: RegisterGroupRequest = {\n id: args.id,\n ...(args.name ? { name: args.name } : {}),\n ...(args.link ? { link: args.link } : {}),\n }\n const g = await client.post<Group>('/api/groups', body)\n console.log(`registered group ${g.id} at ${g.path}`)\n },\n})\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List groups' },\n async run() {\n const client = createClient()\n const list = await client.get<Group[]>('/api/groups')\n if (list.length === 0) {\n console.log('(no groups)')\n return\n }\n const rows = list.map((g) => [g.id, g.path])\n for (const line of columnize(rows)) console.log(line)\n },\n})\n\nconst rmCmd = defineCommand({\n meta: { name: 'rm', description: 'Remove a group registration' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/groups/${args.id}`)\n console.log(`removed group ${args.id}`)\n },\n})\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of stdin) chunks.push(chunk as Buffer)\n return Buffer.concat(chunks).toString('utf8')\n}\n\nconst userMdShowCmd = defineCommand({\n meta: { name: 'show', description: \"Print the group's USER.md\" },\n args: { id: { type: 'positional', required: true } },\n async run({ args }) {\n const client = createClient()\n const g = await client.get<Group>(`/api/groups/${args.id}`)\n process.stdout.write(g.userMd)\n if (g.userMd && !g.userMd.endsWith('\\n')) process.stdout.write('\\n')\n },\n})\n\nconst userMdSetCmd = defineCommand({\n meta: {\n name: 'set',\n description: \"Replace the group's USER.md (from --file, --from-stdin, or inline text)\",\n },\n args: {\n id: { type: 'positional', required: true },\n file: { type: 'string', description: 'Read content from a file path' },\n 'from-stdin': { type: 'boolean', description: 'Read content from stdin' },\n text: { type: 'string', description: 'Inline content' },\n },\n async run({ args }) {\n let content: string\n if (args['from-stdin']) content = await readStdin()\n else if (args.file) content = readFileSync(args.file, 'utf8')\n else if (args.text !== undefined) content = args.text\n else {\n console.error('group user-md set: provide --file, --from-stdin, or --text')\n process.exit(2)\n }\n const client = createClient()\n const body: SetGroupUserMdRequest = { userMd: content }\n await client.put(`/api/groups/${args.id}/user-md`, body)\n console.log(`updated USER.md for group ${args.id} (${content.length} bytes)`)\n },\n})\n\nconst userMdClearCmd = defineCommand({\n meta: { name: 'clear', description: \"Clear the group's USER.md to empty\" },\n args: { id: { type: 'positional', required: true } },\n async run({ args }) {\n const client = createClient()\n const body: SetGroupUserMdRequest = { userMd: '' }\n await client.put(`/api/groups/${args.id}/user-md`, body)\n console.log(`cleared USER.md for group ${args.id}`)\n },\n})\n\nconst userMdCmd = defineCommand({\n meta: { name: 'user-md', description: \"View or edit a group's USER.md\" },\n subCommands: {\n show: userMdShowCmd,\n set: userMdSetCmd,\n clear: userMdClearCmd,\n },\n})\n\nexport const groupCommand = defineCommand({\n meta: { name: 'group', description: 'Manage groups (collaboration contexts)' },\n subCommands: {\n add: addCmd,\n list: listCmd,\n rm: rmCmd,\n 'user-md': userMdCmd,\n },\n})\n","import type { ListInboxResponse, Message } from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nfunction decodeText(payload: string): string {\n try {\n const obj = JSON.parse(payload) as { text?: unknown }\n if (typeof obj.text === 'string') return obj.text\n } catch {}\n return payload\n}\n\nfunction messageRow(m: Message): string[] {\n const when = new Date(m.createdAt).toISOString()\n const state = m.readAt ? 'read' : 'NEW'\n const text = decodeText(m.payload)\n const preview = text.length > 60 ? `${text.slice(0, 60)}…` : text\n return [m.id, state, when, `from:${m.fromAgentId.slice(0, 8)}`, `\"${preview}\"`]\n}\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List messages in an agent inbox' },\n args: {\n agent: { type: 'positional', required: true, description: 'Recipient agent id' },\n unread: { type: 'boolean', description: 'Only show unread messages' },\n },\n async run({ args }) {\n const client = createClient()\n const qs = args.unread ? '?unread=1' : ''\n const { messages } = await client.get<ListInboxResponse>(\n `/api/agents/${args.agent}/messages${qs}`,\n )\n if (messages.length === 0) {\n console.log(args.unread ? '(no unread messages)' : '(inbox empty)')\n return\n }\n for (const line of columnize(messages.map(messageRow))) console.log(line)\n },\n})\n\nconst showCmd = defineCommand({\n meta: { name: 'show', description: 'Show a single message in full' },\n args: {\n id: { type: 'positional', required: true, description: 'Message id' },\n },\n async run({ args }) {\n const client = createClient()\n const m = await client.get<Message>(`/api/messages/${args.id}`)\n const when = new Date(m.createdAt).toISOString()\n const read = m.readAt ? new Date(m.readAt).toISOString() : '(unread)'\n console.log(`id: ${m.id}`)\n console.log(`from: ${m.fromAgentId}`)\n console.log(`to: ${m.toAgentId}`)\n console.log(`created: ${when}`)\n console.log(`read: ${read}`)\n if (m.replyTo) console.log(`reply_to: ${m.replyTo}`)\n console.log('')\n console.log(decodeText(m.payload))\n },\n})\n\nconst readCmd = defineCommand({\n meta: { name: 'read', description: 'Mark a message as read' },\n args: {\n id: { type: 'positional', required: true, description: 'Message id' },\n },\n async run({ args }) {\n const client = createClient()\n await client.patch<Message>(`/api/messages/${args.id}`, { read: true })\n console.log(`marked read: ${args.id}`)\n },\n})\n\nexport const inboxCommand = defineCommand({\n meta: { name: 'inbox', description: 'Inspect agent inboxes' },\n subCommands: {\n list: listCmd,\n show: showCmd,\n read: readCmd,\n },\n})\n","import { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { defineCommand } from 'citty'\nimport type { AuthFile } from '../auth-file.ts'\nimport { resolveCliPaths } from '../paths.ts'\n\nfunction normalizeServer(raw: string): string {\n let url: URL\n try {\n url = new URL(raw)\n } catch {\n throw new Error(`invalid --server URL: ${raw}`)\n }\n if (!/^https?:$/.test(url.protocol)) {\n throw new Error(`--server must be http(s), got ${url.protocol}`)\n }\n // Strip trailing slash so `${serverUrl}${path}` never produces `//`.\n return `${url.origin}${url.pathname.replace(/\\/$/, '')}`\n}\n\nasync function verifyToken(server: string, token: string): Promise<void> {\n const res = await fetch(`${server}/api/health`, {\n headers: { authorization: `Bearer ${token}`, origin: server },\n })\n if (res.status === 401) throw new Error('server rejected token (401)')\n if (!res.ok) throw new Error(`server returned ${res.status} from /api/health`)\n}\n\nexport const loginCommand = defineCommand({\n meta: {\n name: 'login',\n description: 'Save a remote bazilion server + token pair to auth.json',\n },\n args: {\n server: { type: 'string', description: 'Remote server URL (http[s]://...)' },\n token: { type: 'string', description: 'Token issued by `bazilion token create`' },\n skipVerify: { type: 'boolean', description: \"Don't probe /api/health before saving\" },\n clear: { type: 'boolean', description: 'Remove the stored remote instead of setting one' },\n },\n async run({ args }) {\n const paths = resolveCliPaths()\n if (!existsSync(paths.authFile)) {\n throw new Error(\n `${paths.authFile} not found. Start the daemon with \"bazilion serve\" first — login stores the remote there.`,\n )\n }\n const auth = JSON.parse(readFileSync(paths.authFile, 'utf8')) as AuthFile\n\n if (args.clear) {\n if (!auth.remote) {\n console.log('no remote stored — nothing to clear')\n return\n }\n delete auth.remote\n writeFileSync(paths.authFile, `${JSON.stringify(auth, null, 2)}\\n`, { mode: 0o600 })\n console.log('cleared stored remote; CLI will fall back to the local daemon')\n return\n }\n\n if (!args.server || !args.token) {\n throw new Error(\n '--server and --token are required (or pass --clear to remove the stored remote)',\n )\n }\n const server = normalizeServer(args.server)\n if (!args.skipVerify) {\n await verifyToken(server, args.token)\n }\n auth.remote = { server, token: args.token }\n writeFileSync(paths.authFile, `${JSON.stringify(auth, null, 2)}\\n`, { mode: 0o600 })\n console.log(`saved remote: ${server}`)\n console.log('CLI will now target this server unless BAZILION_SERVER is set in the env.')\n },\n})\n","import type { MemoryEntry, MemoryHit } from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\n\nfunction encodeKey(key: string): string {\n return key.split('/').map(encodeURIComponent).join('/')\n}\n\nconst writeCmd = defineCommand({\n meta: { name: 'write', description: \"Write an entry into a group's shared memory\" },\n args: {\n group: { type: 'positional', required: true, description: 'Group slug' },\n key: { type: 'positional', required: true, description: 'Memory key (path under memory/)' },\n content: { type: 'positional', required: true, description: 'Content to write' },\n },\n async run({ args }) {\n const client = createClient()\n const entry = await client.put<MemoryEntry>(\n `/api/groups/${args.group}/memory/${encodeKey(args.key)}`,\n { content: args.content },\n )\n console.log(`wrote ${entry.key} (${entry.content.length} bytes)`)\n },\n})\n\nconst readCmd = defineCommand({\n meta: { name: 'read', description: \"Read an entry from a group's shared memory\" },\n args: {\n group: { type: 'positional', required: true, description: 'Group slug' },\n key: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const entry = await client.get<MemoryEntry>(\n `/api/groups/${args.group}/memory/${encodeKey(args.key)}`,\n )\n console.log(entry.content)\n },\n})\n\nconst searchCmd = defineCommand({\n meta: { name: 'search', description: \"Search a group's shared memory\" },\n args: {\n group: { type: 'positional', required: true, description: 'Group slug' },\n query: { type: 'positional', required: true },\n limit: { type: 'string', description: 'Max results (default 10)' },\n },\n async run({ args }) {\n const client = createClient()\n const limit = args.limit ? Number.parseInt(args.limit, 10) : 10\n const params = new URLSearchParams({ q: args.query, limit: String(limit) })\n const hits = await client.get<MemoryHit[]>(`/api/groups/${args.group}/memory/search?${params}`)\n if (hits.length === 0) {\n console.log('(no matches)')\n return\n }\n for (const h of hits) {\n console.log(`${h.key}\\t${h.snippet.replaceAll('\\n', ' ')}`)\n }\n },\n})\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: \"List all entries in a group's shared memory\" },\n args: {\n group: { type: 'positional', required: true, description: 'Group slug' },\n },\n async run({ args }) {\n const client = createClient()\n const all = await client.get<MemoryEntry[]>(`/api/groups/${args.group}/memory`)\n if (all.length === 0) {\n console.log('(no memory entries)')\n return\n }\n for (const e of all) {\n console.log(`${e.key}\\t${e.content.length}b`)\n }\n },\n})\n\nconst rmCmd = defineCommand({\n meta: { name: 'rm', description: \"Remove an entry from a group's shared memory\" },\n args: {\n group: { type: 'positional', required: true, description: 'Group slug' },\n key: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/groups/${args.group}/memory/${encodeKey(args.key)}`)\n console.log(`removed ${args.key}`)\n },\n})\n\nexport const memoryCommand = defineCommand({\n meta: {\n name: 'memory',\n description: \"Manage a group's shared memory (BM25-indexed markdown notes)\",\n },\n subCommands: {\n write: writeCmd,\n read: readCmd,\n search: searchCmd,\n list: listCmd,\n rm: rmCmd,\n },\n})\n","import { spawn } from 'node:child_process'\nimport { randomBytes } from 'node:crypto'\nimport { readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport type {\n CreateProfileRequest,\n FileContentResponse,\n LoadedProfile,\n Profile,\n ProfileFileName,\n PutFileRequest,\n SkillsMode,\n UpdateProfileRequest,\n} from '@bazilion/api-types'\nimport { PROFILE_FILES } from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nfunction splitCsv(v: string | undefined): string[] | undefined {\n if (!v) return undefined\n const out = v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n return out.length > 0 ? out : undefined\n}\n\nfunction parseSkillsMode(v: string | undefined): SkillsMode | undefined {\n if (v === undefined) return undefined\n if (v === 'all' || v === 'selected') return v\n throw new Error(`--skills-mode must be 'all' or 'selected', got '${v}'`)\n}\n\nconst createCmd = defineCommand({\n meta: { name: 'create', description: 'Create a new profile' },\n args: {\n id: { type: 'positional', required: true, description: 'Profile slug' },\n name: { type: 'string', description: 'Display name (defaults to slug)' },\n model: {\n type: 'string',\n required: true,\n description: 'Default model, e.g. anthropic:claude-opus-4-6',\n },\n 'skills-mode': {\n type: 'string',\n description: \"'all' (attach every discovered skill) or 'selected' (default)\",\n },\n skills: {\n type: 'string',\n description: 'Default skills, comma-separated (skills-mode=selected)',\n },\n 'soul-file': {\n type: 'string',\n description: 'Path to custom SOUL.md content (defaults to the built-in template)',\n },\n 'identity-file': {\n type: 'string',\n description: 'Path to custom IDENTITY.md content (defaults to the built-in template)',\n },\n 'bootstrap-file': {\n type: 'string',\n description: 'Path to custom BOOTSTRAP.md content (defaults to the built-in template)',\n },\n 'skip-bootstrap': {\n type: 'boolean',\n description: 'Skip the bootstrap file entirely (no first-run intro)',\n },\n 'agents-file': {\n type: 'string',\n description: 'Path to AGENTS.md content (optional; omit to skip)',\n },\n 'tools-file': {\n type: 'string',\n description: 'Path to TOOLS.md content (optional; omit to skip)',\n },\n 'heartbeat-file': {\n type: 'string',\n description: 'Path to HEARTBEAT.md content (optional; omit to skip)',\n },\n },\n async run({ args }) {\n const skillsMode = parseSkillsMode(args['skills-mode'])\n const readTemplate = (path: string | undefined): string | undefined =>\n path ? readFileSync(path, 'utf8') : undefined\n const body: CreateProfileRequest = {\n id: args.id,\n name: args.name,\n defaultModel: args.model,\n skillsMode,\n defaultSkills: splitCsv(args.skills),\n soul: readTemplate(args['soul-file']),\n identity: readTemplate(args['identity-file']),\n bootstrap: args['skip-bootstrap']\n ? null\n : (readTemplate(args['bootstrap-file']) ?? undefined),\n agents: readTemplate(args['agents-file']),\n tools: readTemplate(args['tools-file']),\n heartbeat: readTemplate(args['heartbeat-file']),\n }\n const client = createClient()\n const profile = await client.post<Profile>('/api/profiles', body)\n console.log(`created profile ${profile.id} at ${profile.dir}`)\n },\n})\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List profiles' },\n async run() {\n const client = createClient()\n const list = await client.get<Profile[]>('/api/profiles')\n if (list.length === 0) {\n console.log('(no profiles)')\n return\n }\n const rows = list.map((p) => [p.id, p.defaultModel, p.name])\n for (const line of columnize(rows)) console.log(line)\n },\n})\n\nconst showCmd = defineCommand({\n meta: { name: 'show', description: 'Show profile details' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const loaded = await client.get<LoadedProfile>(`/api/profiles/${args.id}`)\n console.log(`# ${loaded.profile.id}`)\n console.log(`name: ${loaded.profile.name}`)\n console.log(`dir: ${loaded.profile.dir}`)\n console.log(`default model: ${loaded.profile.defaultModel}`)\n console.log(`skills mode: ${loaded.profile.skillsMode}`)\n console.log(\n `default skills: ${\n loaded.defaultSkills.length === 0 ? '(none)' : loaded.defaultSkills.join(', ')\n }`,\n )\n console.log(`bootstrap: ${loaded.files.bootstrap !== null ? 'yes' : 'no'}`)\n console.log(`agents: ${loaded.files.agents !== null ? 'yes' : 'no'}`)\n console.log(`tools: ${loaded.files.tools !== null ? 'yes' : 'no'}`)\n console.log(`heartbeat: ${loaded.files.heartbeat !== null ? 'yes' : 'no'}`)\n if (loaded.identity) {\n const fields = Object.entries(loaded.identity)\n .filter(([, v]) => typeof v === 'string' && v.length > 0)\n .map(([k, v]) => `${k}=${v}`)\n .join(', ')\n if (fields) console.log(`identity: ${fields}`)\n }\n },\n})\n\nconst editCmd = defineCommand({\n meta: { name: 'edit', description: 'Open a profile file in $EDITOR' },\n args: {\n id: { type: 'positional', required: true },\n file: {\n type: 'string',\n default: 'profile.json',\n description: `File: ${PROFILE_FILES.join(', ')}`,\n },\n },\n async run({ args }) {\n if (!(PROFILE_FILES as readonly string[]).includes(args.file)) {\n throw new Error(`unsupported file: ${args.file}. Allowed: ${PROFILE_FILES.join(', ')}`)\n }\n const file = args.file as ProfileFileName\n const client = createClient()\n const { content } = await client.get<FileContentResponse>(\n `/api/profiles/${args.id}/files/${file}`,\n )\n const tmpPath = join(tmpdir(), `bazilion-${args.id}-${file}-${randomBytes(4).toString('hex')}`)\n writeFileSync(tmpPath, content)\n try {\n const editor = process.env.EDITOR ?? process.env.VISUAL ?? 'vi'\n const code: number = await new Promise((resolve, reject) => {\n const child = spawn(editor, [tmpPath], { stdio: 'inherit' })\n child.on('error', reject)\n child.on('close', (c) => resolve(c ?? 0))\n })\n if (code !== 0) throw new Error(`editor exited with code ${code}`)\n const updated = readFileSync(tmpPath, 'utf8')\n if (updated === content) {\n console.log('(no changes)')\n return\n }\n const body: PutFileRequest = { content: updated }\n await client.put(`/api/profiles/${args.id}/files/${file}`, body)\n console.log(`saved ${file}`)\n } finally {\n try {\n rmSync(tmpPath, { force: true })\n } catch {}\n }\n },\n})\n\nconst updateCmd = defineCommand({\n meta: {\n name: 'update',\n description: 'Update profile settings (name, model, skills-mode, skills)',\n },\n args: {\n id: { type: 'positional', required: true },\n name: { type: 'string', description: 'New display name' },\n model: { type: 'string', description: 'New default model' },\n 'skills-mode': {\n type: 'string',\n description: \"Switch to 'all' or 'selected'\",\n },\n skills: { type: 'string', description: 'Replacement default skills, comma-separated' },\n },\n async run({ args }) {\n const body: UpdateProfileRequest = {}\n if (args.name !== undefined) body.name = args.name\n if (args.model !== undefined) body.defaultModel = args.model\n const mode = parseSkillsMode(args['skills-mode'])\n if (mode !== undefined) body.skillsMode = mode\n if (args.skills !== undefined) {\n body.defaultSkills = args.skills\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n }\n if (Object.keys(body).length === 0) {\n throw new Error(\n 'nothing to update — pass at least one of --name/--model/--skills-mode/--skills',\n )\n }\n const client = createClient()\n const profile = await client.patch<Profile>(`/api/profiles/${args.id}`, body)\n console.log(`updated profile ${profile.id}`)\n },\n})\n\nconst deleteCmd = defineCommand({\n meta: { name: 'delete', description: 'Permanently delete a profile and its files' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/profiles/${args.id}`)\n console.log(`deleted profile ${args.id}`)\n },\n})\n\nexport const profileCommand = defineCommand({\n meta: { name: 'profile', description: 'Manage profiles' },\n subCommands: {\n create: createCmd,\n list: listCmd,\n show: showCmd,\n edit: editCmd,\n update: updateCmd,\n delete: deleteCmd,\n },\n})\n","// Wire-shape package. Hermetic: depends on nothing from the daemon, so every\n// client (web, mobile, cli, future SDKs) can pull in API shapes without\n// dragging Node-only code (node:sqlite, undici, pi-ai, the worker spawner)\n// into its TS check graph or runtime bundle. The daemon imports its entity\n// and wire types FROM here.\n\nexport type {\n Agent,\n AgentIdentityFile,\n AgentSkillAttachment,\n AgentStatus,\n AgentTrigger,\n Group,\n LoadedProfile,\n Message,\n OpenAICodexStatus,\n Profile,\n ReasoningLevel,\n ResolvedAgent,\n SkillMeta,\n SkillsMode,\n Timestamp,\n TriggerKind,\n WebToken,\n} from './entities.ts'\nexport { REASONING_LEVELS } from './entities.ts'\nexport type {\n ChatFrame,\n ProviderMessage,\n Role,\n SessionEvent,\n ToolCall,\n ToolDef,\n} from './events.ts'\nexport type { MemoryEntry, MemoryHit } from './memory.ts'\n\nimport type { AgentTrigger, Message, ReasoningLevel, WebToken } from './entities.ts'\n\nexport interface ApiError {\n error: string\n code?: string\n}\n\n// --- agents ---\n\nexport interface ListAgentsQuery {\n includeArchived?: boolean\n}\n\nexport interface SpawnAgentRequest {\n profileId: string\n name?: string\n model?: string\n reasoningLevel?: ReasoningLevel\n /** Group the new agent joins. Falls back to the seeded 'default' group when omitted. */\n groupId?: string\n}\n\nexport interface UpdateAgentRequest {\n modelOverride?: string | null\n reasoningLevel?: ReasoningLevel\n}\n\nexport interface AttachSkillRequest {\n skill: string\n}\n\n/** Body for `PATCH /api/agents/:id/group`: move the agent to a new group. */\nexport interface MoveAgentRequest {\n groupId: string\n}\n\nexport interface SendMessageRequest {\n from: string\n payload: { text: string }\n replyTo?: string\n}\n\nexport interface ListInboxQuery {\n unread?: boolean\n}\n\nexport interface ListInboxResponse {\n messages: Message[]\n}\n\nexport interface UpdateMessageRequest {\n read: true\n}\n\n// --- profiles ---\n\nexport interface UpdateProfileRequest {\n name?: string\n defaultModel?: string\n skillsMode?: 'all' | 'selected'\n defaultSkills?: string[]\n}\n\nexport interface CreateProfileRequest {\n id: string\n name?: string\n defaultModel: string\n skillsMode?: 'all' | 'selected'\n defaultSkills?: string[]\n /** Initial SOUL.md content. Falls back to the built-in template when omitted. */\n soul?: string\n /** Initial IDENTITY.md content. Falls back to the built-in template when omitted. */\n identity?: string\n /** Initial BOOTSTRAP.md content. Omit for default; pass null to skip bootstrap entirely. */\n bootstrap?: string | null\n /** Initial AGENTS.md content. Omit to skip; pass a string to seed the file. */\n agents?: string\n /** Initial TOOLS.md content. Omit to skip; pass a string to seed the file. */\n tools?: string\n /** Initial HEARTBEAT.md content. Omit to skip; pass a string to seed the file. */\n heartbeat?: string\n}\n\n// --- groups ---\n\nexport interface RegisterGroupRequest {\n /** Slug (lowercase, digits, hyphens). Becomes the row id AND the directory\n * name under `~/.bazilion/groups/<slug>/`. */\n id: string\n /** Optional human-readable label. Defaults to `id`. */\n name?: string\n /**\n * Optional symlink target. When set, the daemon materializes the group\n * slot as a symlink to this absolute path instead of as a real directory\n * — useful for \"agents working on my existing project tree.\" Target must\n * exist and be a directory.\n */\n link?: string\n}\n\n/** Body for `PUT /api/groups/:id/user-md`. */\nexport interface SetGroupUserMdRequest {\n userMd: string\n}\n\n// --- skills (write) ---\n\nexport interface ImportSkillsRequest {\n source: string\n force?: boolean\n}\n\nexport interface ImportSkillsResponse {\n imported: string[]\n skipped: { name: string; reason: string }[]\n}\n\n// --- providers (write) ---\n\nexport interface ProviderTestRequest {\n model: string\n message?: string\n}\n\nexport interface ProviderTestResponse {\n content: string\n usage?: {\n promptTokens: number\n completionTokens: number\n }\n}\n\n// --- chat streaming ---\n\nexport interface ChatRequest {\n message: string\n}\n\n// --- profile files ---\n\nexport type ProfileFileName =\n | 'profile.json'\n | 'SOUL.md'\n | 'IDENTITY.md'\n | 'BOOTSTRAP.md'\n | 'AGENTS.md'\n | 'TOOLS.md'\n | 'HEARTBEAT.md'\n\nexport const PROFILE_FILES: ProfileFileName[] = [\n 'profile.json',\n 'SOUL.md',\n 'IDENTITY.md',\n 'BOOTSTRAP.md',\n 'AGENTS.md',\n 'TOOLS.md',\n 'HEARTBEAT.md',\n]\n\nexport interface FileContentResponse {\n content: string\n}\n\nexport interface PutFileRequest {\n content: string\n}\n\n// --- skills ---\n\nexport interface SkillInfo {\n name: string\n description: string\n source: string | null\n importedAt: number | null\n parseError?: string\n}\n\nexport interface ResolvedSkillsResponse {\n resolved: SkillInfo[]\n missing: { name: string; reason: string }[]\n}\n\nexport interface TruncateChatRequest {\n /** Number of leading messages to preserve; everything after is dropped. */\n keepCount: number\n}\n\nexport interface TruncateChatResponse {\n before: number\n after: number\n}\n\n/**\n * Lightweight \"has anything new happened on this agent's session?\" probe.\n * Polled by the web chat UI to detect out-of-band activity (inbox-wakes,\n * scheduled triggers, turns run from another tab) so it can prompt the user\n * to refresh — the session JSONL is append-only, so either a new filename or\n * a bigger byte-count means new entries landed.\n */\nexport interface SessionHeadResponse {\n /** Basename of the most-recent `.jsonl` session file, or `null` if none. */\n file: string | null\n /** Byte size of that file (monotonically increasing while in use). */\n size: number\n}\n\nexport interface ContextFileEntry {\n /** Basename of the injected profile file (e.g. SOUL.md). */\n name: string\n /** Full character count of the file's contribution to the system prompt. */\n chars: number\n /** Rough token estimate (chars / 4). */\n tokens: number\n}\n\nexport interface ContextToolEntry {\n name: string\n /** JSON schema char size (what the provider sees as tool definitions). */\n schemaChars: number\n /** Description char size. */\n descriptionChars: number\n /** Count of top-level properties on the input schema, when shaped like JSONSchema. */\n paramCount: number | null\n}\n\nexport interface ContextSkillEntry {\n name: string\n /** Char count of the skill block injected into the system prompt (currently just the name). */\n blockChars: number\n}\n\nexport interface ContextGroupEntry {\n id: string\n name: string\n path: string\n userMdChars: number\n}\n\nexport interface ContextHistoryBreakdown {\n /** Count of `message` entries. */\n messageEntries: number\n /** Count of `compaction` entries (summarization boundaries). */\n compactionEntries: number\n /** Char sum of message `content` fields (LLM input surface). */\n chars: number\n /** Raw wire size of the serialized log on disk. */\n bytes: number\n /** Rough token estimate (chars / 4) for history alone. */\n tokensEstimate: number\n}\n\nexport interface ChatContextResponse {\n /** Agent being reported on. */\n agentId: string\n /** provider:model string the agent currently resolves to. */\n model: string\n systemPrompt: {\n chars: number\n tokens: number\n /** Per-file breakdown of profile markdown sources (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, HEARTBEAT.md, BOOTSTRAP.md). */\n files: ContextFileEntry[]\n /** Char count of the skill-list text rendered into the system prompt. */\n skillsListChars: number\n /** Char count of the group block rendered into the system prompt. */\n groupListChars: number\n /** Char count of the USER.md block (0 when the group's userMd is empty). */\n userMdChars: number\n /** Fixed memory-hint block the runtime always appends. */\n memoryHintChars: number\n }\n tools: {\n count: number\n listChars: number\n schemaChars: number\n entries: ContextToolEntry[]\n }\n skills: {\n count: number\n entries: ContextSkillEntry[]\n }\n group: ContextGroupEntry\n history: ContextHistoryBreakdown\n /** Sum of system prompt + tool schemas + history, in chars + tokens. */\n totals: { chars: number; tokens: number }\n}\n\nexport interface ChatCompactRequest {\n /** Number of trailing message entries to keep verbatim. Default 10. */\n keepTail?: number\n /** Optional freeform guidance prepended to the summarizer system prompt. */\n customInstructions?: string\n}\n\nexport interface ChatCompactResponse {\n /** Entry count before compaction. */\n before: number\n /** Entry count after compaction (1 compaction + `keptTail` messages). */\n after: number\n /** Message entries summarized into the compaction (the head that was dropped). */\n summarized: number\n /** Message entries preserved verbatim after the compaction boundary. */\n keptTail: number\n /** Rough token estimate of the log before compaction. */\n tokensBefore: number\n /** Rough token estimate of the log after compaction. */\n tokensAfter: number\n /** The summary text produced by the model. */\n summary: string\n}\n\n// --- triggers (heartbeats / cron) ---\n\nexport interface CreateTriggerRequest {\n kind: 'interval' | 'cron'\n /** required when kind='interval' */\n intervalSec?: number\n /** required when kind='cron' — 5-field expression (\"m h dom mon dow\") */\n cronExpr?: string\n /** injected as the user message when the trigger fires */\n message: string\n enabled?: boolean\n}\n\nexport interface UpdateTriggerRequest {\n enabled?: boolean\n}\n\nexport interface CreateTriggerResponse {\n trigger: AgentTrigger\n}\n\nexport interface UpdateTriggerResponse {\n trigger: AgentTrigger\n}\n\nexport interface ListTriggersResponse {\n triggers: AgentTrigger[]\n}\n\n// --- config page (providers + services + fields) ---\n\n/** Per-field UI + storage descriptor — source-of-truth is SERVICES in apps/daemon/src/core/services.ts. */\nexport interface ServiceFieldState {\n envVar: string\n kind: 'secret' | 'config'\n label: string\n placeholder?: string\n description?: string\n /** True when the field has a non-empty value in its storage backend. */\n set: boolean\n /** For `kind: 'config'` (plaintext): the actual value. Omitted for secrets. */\n value?: string\n /** For `kind: 'secret'`: a truncated preview like \"sk-abc…\" so the UI can confirm something is stored. Omitted when unset. */\n preview?: string\n}\n\nexport interface ServiceCard {\n id: string\n displayName: string\n /** Present for category==='provider' cards — tracks whether the pi-adapter sees it as configured. */\n enabled?: boolean\n envHint?: string\n hint?: string\n fields: ServiceFieldState[]\n}\n\nexport interface ProviderConfigEntry extends ServiceCard {\n enabled: boolean\n envHint: string\n /** Static catalog from pi-ai's typed model list — empty for providers not in the catalog. */\n catalog: string[]\n /** Live `/v1/models` query — omitted when the provider doesn't expose one. */\n live?: { models: string[]; error?: string }\n /** Curated models the admin has selected — drives the dropdowns in profile/agent forms. */\n curated: string[]\n}\n\nexport interface ProviderConfigResponse {\n providers: ProviderConfigEntry[]\n}\n\nexport interface ServiceConfigResponse {\n services: ServiceCard[]\n}\n\nexport interface SetFieldRequest {\n value: string\n}\n\nexport interface SetProviderModelsRequest {\n models: string[]\n}\n\nexport interface SetProviderModelsResponse {\n models: string[]\n}\n\nexport interface SetProviderEnabledRequest {\n enabled: boolean\n}\n\nexport interface SetProviderEnabledResponse {\n name: string\n enabled: boolean\n}\n\n// --- web tokens ---\n\nexport interface CreateTokenRequest {\n label: string\n}\n\nexport interface CreateTokenResponse {\n /** Plaintext token — returned exactly once. */\n token: string\n meta: WebToken\n}\n\nexport interface ListTokensResponse {\n tokens: WebToken[]\n}\n\n// --- health (doctor) ---\n\nexport interface HealthReport {\n ok: boolean\n home: string\n paths: {\n home: boolean\n db: boolean\n auth: boolean\n profiles: boolean\n agents: boolean\n skills: boolean\n }\n database:\n | { ok: true; profiles: number; activeAgents: number; totalAgents: number; groups: number }\n | { ok: false; error: string }\n | null\n skills: { installed: number; parseErrors: number }\n providers: {\n /** Names of cloud providers with credentials configured (e.g. ['anthropic', 'groq']). */\n configured: string[]\n lmstudio: { baseURL: string; hasKey: boolean }\n ollama: { baseURL: string }\n }\n webSearch: { bravePreview: string | null; searxngUrl: string | null }\n openclaw: { path: string; exists: boolean }\n triggers: { active: number; disabled: number }\n tokens: { active: number }\n scheduler: { enabled: boolean; tickMs: number }\n}\n","import type {\n ProviderConfigResponse,\n ProviderTestRequest,\n ProviderTestResponse,\n SetProviderEnabledResponse,\n SetProviderModelsRequest,\n SetProviderModelsResponse,\n} from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nconst listCmd = defineCommand({\n meta: {\n name: 'list',\n description: 'List all providers with enabled/disabled state and curated model counts',\n },\n args: {\n enabled: { type: 'boolean', description: 'Show only enabled providers' },\n },\n async run({ args }) {\n const client = createClient()\n const { providers } = await client.get<ProviderConfigResponse>('/api/config/providers')\n const filtered = args.enabled ? providers.filter((p) => p.enabled) : providers\n if (filtered.length === 0) {\n console.log('(no providers to show)')\n return\n }\n const rows = filtered.map((p) => [\n p.id,\n p.enabled ? 'enabled' : 'disabled',\n `${p.curated.length} curated`,\n `${p.catalog.length} catalog`,\n p.enabled ? '' : `(set ${p.envHint})`,\n ])\n for (const line of columnize(rows)) console.log(line)\n },\n})\n\nconst modelsCmd = defineCommand({\n meta: {\n name: 'models',\n description: 'Show curated + catalog + live models for one provider',\n },\n args: {\n name: { type: 'positional', required: true, description: 'Provider name' },\n },\n async run({ args }) {\n const client = createClient()\n const { providers } = await client.get<ProviderConfigResponse>('/api/config/providers')\n const p = providers.find((x) => x.id === args.name)\n if (!p) {\n console.error(`unknown provider: ${args.name}`)\n process.exit(1)\n }\n console.log(`# ${p.id} (${p.enabled ? 'enabled' : 'disabled'})`)\n if (!p.enabled) console.log(` (set ${p.envHint} to enable)`)\n\n console.log('\\n## curated')\n if (p.curated.length === 0) console.log(' (none — use `provider models-set` to pin some)')\n else for (const m of p.curated) console.log(` ${m}`)\n\n console.log('\\n## catalog (from pi-ai)')\n if (p.catalog.length === 0) console.log(' (empty)')\n else for (const m of p.catalog) console.log(` ${m}`)\n\n if (p.live) {\n console.log('\\n## live (from upstream /v1/models)')\n if (p.live.error) console.log(` (error: ${p.live.error})`)\n else if (p.live.models.length === 0) console.log(' (empty)')\n else for (const m of p.live.models) console.log(` ${m}`)\n }\n },\n})\n\nconst modelsSetCmd = defineCommand({\n meta: {\n name: 'models-set',\n description: 'Replace the curated model list for a provider (comma-separated)',\n },\n args: {\n name: { type: 'positional', required: true, description: 'Provider name' },\n models: {\n type: 'positional',\n required: true,\n description: 'Comma-separated model list (empty string clears the list)',\n },\n },\n async run({ args }) {\n const client = createClient()\n const models = args.models\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n const body: SetProviderModelsRequest = { models }\n const saved = await client.put<SetProviderModelsResponse>(\n `/api/config/providers/${encodeURIComponent(args.name)}/models`,\n body,\n )\n console.log(`saved ${saved.models.length} curated model(s) for ${args.name}`)\n for (const m of saved.models) console.log(` ${m}`)\n },\n})\n\nconst enableCmd = defineCommand({\n meta: { name: 'enable', description: 'Toggle a provider on so agents can use it' },\n args: {\n name: { type: 'positional', required: true, description: 'Provider id (e.g. anthropic)' },\n },\n async run({ args }) {\n const client = createClient()\n const res = await client.put<SetProviderEnabledResponse>(\n `/api/config/providers/${encodeURIComponent(args.name)}/enabled`,\n { enabled: true },\n )\n console.log(`${res.name}: enabled`)\n },\n})\n\nconst disableCmd = defineCommand({\n meta: {\n name: 'disable',\n description: 'Toggle a provider off — agents will refuse its model strings',\n },\n args: {\n name: { type: 'positional', required: true, description: 'Provider id' },\n },\n async run({ args }) {\n const client = createClient()\n const res = await client.put<SetProviderEnabledResponse>(\n `/api/config/providers/${encodeURIComponent(args.name)}/enabled`,\n { enabled: false },\n )\n console.log(`${res.name}: disabled`)\n },\n})\n\nconst testCmd = defineCommand({\n meta: { name: 'test', description: 'Send a single chat to a model and print the reply' },\n args: {\n model: {\n type: 'positional',\n required: true,\n description: 'Model string, e.g. anthropic:claude-opus-4-6',\n },\n message: { type: 'string', description: 'Message text (default \"say hi briefly\")' },\n },\n async run({ args }) {\n const client = createClient()\n const body: ProviderTestRequest = { model: args.model, message: args.message }\n console.log(`-> ${args.model}: ${args.message ?? 'say hi briefly'}`)\n const res = await client.post<ProviderTestResponse>('/api/providers/test', body)\n console.log(`<- ${res.content}`)\n if (res.usage) {\n console.log(`(${res.usage.promptTokens} in, ${res.usage.completionTokens} out)`)\n }\n },\n})\n\nexport const providerCommand = defineCommand({\n meta: { name: 'provider', description: 'Manage and test LLM providers' },\n subCommands: {\n list: listCmd,\n enable: enableCmd,\n disable: disableCmd,\n models: modelsCmd,\n 'models-set': modelsSetCmd,\n test: testCmd,\n },\n})\n","import type { Message, SendMessageRequest } from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\n\nexport const sendCommand = defineCommand({\n meta: {\n name: 'send',\n description: 'Send a message from one agent to another',\n },\n args: {\n from: { type: 'positional', required: true, description: 'Sender agent id' },\n to: { type: 'positional', required: true, description: 'Recipient agent id' },\n message: { type: 'positional', required: true, description: 'Message text' },\n },\n async run({ args }) {\n const client = createClient()\n const body: SendMessageRequest = {\n from: args.from,\n payload: { text: args.message },\n }\n const msg = await client.post<Message>(`/api/agents/${args.to}/messages`, body)\n console.log(`sent message ${msg.id}`)\n },\n})\n","import { spawn } from 'node:child_process'\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { defineCommand } from 'citty'\n\n// In published builds, serve.ts is inlined into dist/cli.js — the daemon\n// sits next to it as dist/daemon.js. In dev (running .ts source via tsx),\n// fall back to walking up to apps/daemon/src/index.ts.\nconst bundledDaemonEntry = join(import.meta.dirname, 'daemon.js')\nconst sourceDaemonEntry = join(import.meta.dirname, '..', '..', '..', 'daemon', 'src', 'index.ts')\nconst daemonEntry = existsSync(bundledDaemonEntry) ? bundledDaemonEntry : sourceDaemonEntry\n\nexport const serveCommand = defineCommand({\n meta: {\n name: 'serve',\n description: 'Start the bazilion daemon (HTTP API)',\n },\n args: {\n port: { type: 'string', description: 'Port (default 4321)' },\n host: {\n type: 'string',\n description: 'Host (default 127.0.0.1). Put a TLS proxy in front before binding 0.0.0.0',\n },\n },\n async run({ args }) {\n if (!existsSync(daemonEntry)) {\n throw new Error(\n `bazilion daemon not found at ${daemonEntry}. Are you running from a development checkout?`,\n )\n }\n\n const env: NodeJS.ProcessEnv = { ...process.env }\n if (args.port) env.PORT = args.port\n if (args.host) env.HOST = args.host\n\n const host = args.host ?? '127.0.0.1'\n const port = args.port ?? '4321'\n\n if (host !== '127.0.0.1' && host !== 'localhost' && host !== '::1') {\n console.error('')\n console.error(`⚠ binding to ${host} — the daemon is now reachable beyond loopback.`)\n console.error(' anyone on this network who has a valid token can reach every API.')\n console.error(' put a TLS proxy in front for untrusted networks.')\n console.error('')\n }\n\n console.log(`starting bazilion daemon at http://${host}:${port}`)\n console.log('(web UI runs separately: cd apps/web && pnpm dev)')\n\n // Spawn the daemon. In dev mode the entry is .ts so we go through tsx;\n // in published builds it's bundled .js so plain node is enough. Stdio\n // inherited so the daemon's startup log and any console.error go to the\n // user's terminal directly. The daemon installs its own SIGINT/SIGTERM\n // handlers and shuts the HTTP server gracefully — we just need to keep\n // this process alive long enough for it.\n const nodeArgs = daemonEntry.endsWith('.ts')\n ? ['--import', 'tsx/esm', daemonEntry]\n : [daemonEntry]\n const proc = spawn('node', nodeArgs, {\n env,\n stdio: 'inherit',\n })\n\n let signalled = false\n const onSigterm = (): void => {\n signalled = true\n try {\n proc.kill('SIGTERM')\n } catch {}\n }\n // SIGINT from the kernel (Ctrl+C) goes to the foreground pgroup, so the\n // daemon already gets it directly — we just have to stay alive.\n process.on('SIGINT', () => {\n signalled = true\n })\n process.on('SIGTERM', onSigterm)\n\n await new Promise<void>((resolve, reject) => {\n proc.on('error', (err) => reject(err))\n proc.on('close', (code) => {\n // signalled exits get translated to 0 so the outer `pnpm tsx … serve`\n // wrapper doesn't print `ELIFECYCLE Command failed` after a clean Ctrl+C.\n if (signalled) {\n process.exitCode = 0\n resolve()\n } else if (code === 0 || code === null) {\n resolve()\n } else {\n process.exitCode = code\n resolve()\n }\n })\n })\n },\n})\n","import { existsSync, readFileSync, statSync } from 'node:fs'\nimport { basename, resolve } from 'node:path'\nimport type {\n ImportSkillsRequest,\n ImportSkillsResponse,\n ResolvedSkillsResponse,\n SkillInfo,\n} from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List installed skills (or those attached to an agent)' },\n args: {\n agent: { type: 'string', description: 'Filter to skills attached to this agent' },\n },\n async run({ args }) {\n const client = createClient()\n\n if (args.agent) {\n const set = await client.get<ResolvedSkillsResponse>(`/api/agents/${args.agent}/skills`)\n if (set.resolved.length === 0 && set.missing.length === 0) {\n console.log('(no skills attached to this agent)')\n return\n }\n const rows = set.resolved.map((s) => [s.name, s.description])\n for (const line of columnize(rows)) console.log(line)\n for (const m of set.missing) {\n console.log(`(missing: ${m.name} — ${m.reason})`)\n }\n return\n }\n\n const skills = await client.get<SkillInfo[]>('/api/skills')\n if (skills.length === 0) {\n console.log('(no skills installed; use \"bazilion skill import\" to add some)')\n return\n }\n const rows = skills.map((s) => [\n s.name,\n s.parseError ? `(parse error: ${s.parseError})` : s.description,\n ])\n for (const line of columnize(rows)) console.log(line)\n },\n})\n\nconst importCmd = defineCommand({\n meta: {\n name: 'import',\n description: 'Import skills from openclaw, a directory, or a local .zip archive',\n },\n args: {\n from: {\n type: 'string',\n required: true,\n description:\n 'Source: \"openclaw\", a filesystem path on the server, or a local .zip file to upload',\n },\n force: { type: 'boolean', description: 'Overwrite existing skills' },\n },\n async run({ args }) {\n const client = createClient()\n\n // Auto-detect local .zip uploads: if `--from` points at an existing local\n // file ending in .zip, stream it to the server as multipart. Otherwise\n // fall through to the legacy JSON path (server reads the source directly).\n const absFrom = resolve(args.from)\n const isLocalZip =\n args.from.toLowerCase().endsWith('.zip') && existsSync(absFrom) && statSync(absFrom).isFile()\n\n let result: ImportSkillsResponse\n if (isLocalZip) {\n const bytes = readFileSync(absFrom)\n const file = new File([bytes], basename(absFrom), { type: 'application/zip' })\n const fd = new FormData()\n fd.set('file', file)\n if (args.force) fd.set('force', 'true')\n result = await client.postMultipart<ImportSkillsResponse>('/api/skills/import', fd)\n } else {\n const body: ImportSkillsRequest = {\n source: args.from,\n force: args.force,\n }\n result = await client.post<ImportSkillsResponse>('/api/skills/import', body)\n }\n\n if (result.imported.length === 0 && result.skipped.length === 0) {\n console.log('(nothing to import)')\n return\n }\n for (const name of result.imported) {\n console.log(`imported ${name}`)\n }\n for (const s of result.skipped) {\n console.log(`skipped ${s.name}: ${s.reason}`)\n }\n },\n})\n\nconst rmCmd = defineCommand({\n meta: { name: 'rm', description: 'Remove an installed skill' },\n args: {\n name: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/skills/${encodeURIComponent(args.name)}`)\n console.log(`removed skill ${args.name}`)\n },\n})\n\nexport const skillCommand = defineCommand({\n meta: { name: 'skill', description: 'Manage the skill library' },\n subCommands: {\n list: listCmd,\n import: importCmd,\n rm: rmCmd,\n },\n})\n","import { networkInterfaces } from 'node:os'\nimport type {\n CreateTokenRequest,\n CreateTokenResponse,\n ListTokensResponse,\n WebToken,\n} from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport qrcode from 'qrcode-terminal'\nimport { readAuthFile } from '../auth-file.ts'\nimport { createClient, loadClientConfig } from '../client.ts'\nimport { columnize } from '../columnize.ts'\nimport { resolveCliPaths } from '../paths.ts'\n\nfunction tokenRow(t: WebToken): string[] {\n const last = t.lastUsedAt ? new Date(t.lastUsedAt).toISOString() : '(never)'\n const state = t.revokedAt ? 'revoked' : 'active'\n return [t.id, state, t.label, `last: ${last}`]\n}\n\n/**\n * Best-effort LAN host detection for QR pairing. A phone can't reach\n * `127.0.0.1`, so when the server URL is loopback we swap in a routable\n * interface address. Multi-NIC machines get a warning listing every\n * candidate — the user can override with --server.\n */\nfunction detectLanOrigin(port: string): { origin: string; warning?: string } | null {\n const candidates: string[] = []\n for (const ifs of Object.values(networkInterfaces())) {\n for (const i of ifs ?? []) {\n if (i.family === 'IPv4' && !i.internal) candidates.push(i.address)\n }\n }\n const [first, ...rest] = candidates\n if (!first) return null\n const origin = `http://${first}:${port}`\n return rest.length > 0\n ? { origin, warning: `multiple LAN IPs found (${candidates.join(', ')}) — using ${first}` }\n : { origin }\n}\n\nfunction resolveQrServer(override: string | undefined): string {\n if (override) return override.replace(/\\/$/, '')\n\n const cfg = loadClientConfig()\n const current = new URL(cfg.serverUrl)\n const isLoopback =\n current.hostname === '127.0.0.1' ||\n current.hostname === 'localhost' ||\n current.hostname === '::1'\n\n if (!isLoopback) return cfg.serverUrl.replace(/\\/$/, '')\n\n const detected = detectLanOrigin(current.port || '4321')\n if (!detected) {\n throw new Error(\n 'server URL is loopback-only and no LAN interface was found. ' +\n 'Pass --server http://<host>:<port> so the mobile client knows where to connect.',\n )\n }\n if (detected.warning) console.warn(`⚠ ${detected.warning}`)\n return detected.origin\n}\n\nconst createCmd = defineCommand({\n meta: { name: 'create', description: 'Mint a new web token (shown once)' },\n args: {\n label: { type: 'positional', required: true, description: 'Human-readable label' },\n qr: {\n type: 'boolean',\n description: 'Also render a pairing QR code for mobile clients (bazilion://pair?...)',\n },\n server: {\n type: 'string',\n description:\n 'Server URL to embed in the pairing QR (default: detect LAN IP; ignored without --qr)',\n },\n },\n async run({ args }) {\n const client = createClient()\n const body: CreateTokenRequest = { label: args.label }\n const res = await client.post<CreateTokenResponse>('/api/tokens', body)\n console.log(`id: ${res.meta.id}`)\n console.log(`label: ${res.meta.label}`)\n console.log(`token: ${res.token}`)\n console.log('')\n console.log('store the token now — it is not recoverable later.')\n\n if (!args.qr) return\n\n const serverUrl = resolveQrServer(args.server)\n const pairUrl = `bazilion://pair?server=${encodeURIComponent(serverUrl)}&token=${encodeURIComponent(res.token)}`\n console.log('')\n console.log(`pairing URL: ${pairUrl}`)\n console.log('')\n qrcode.generate(pairUrl, { small: true }, (qr) => console.log(qr))\n },\n})\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List web tokens' },\n args: {\n all: { type: 'boolean', description: 'Include revoked tokens' },\n },\n async run({ args }) {\n const client = createClient()\n const qs = args.all ? '?includeRevoked=1' : ''\n const { tokens } = await client.get<ListTokensResponse>(`/api/tokens${qs}`)\n if (tokens.length === 0) {\n console.log('(no tokens)')\n return\n }\n for (const line of columnize(tokens.map(tokenRow))) console.log(line)\n },\n})\n\nconst showLocalCmd = defineCommand({\n meta: {\n name: 'show-local',\n description: 'Print the bootstrap web token stored in ~/.bazilion/auth.json',\n },\n run() {\n const paths = resolveCliPaths()\n console.log(readAuthFile(paths.authFile).token)\n },\n})\n\nconst revokeCmd = defineCommand({\n meta: { name: 'revoke', description: 'Revoke a web token' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/tokens/${args.id}`)\n console.log(`revoked token ${args.id}`)\n },\n})\n\nexport const tokenCommand = defineCommand({\n meta: { name: 'token', description: 'Manage web tokens for API/CLI clients' },\n subCommands: {\n create: createCmd,\n list: listCmd,\n revoke: revokeCmd,\n 'show-local': showLocalCmd,\n },\n})\n","import type {\n AgentTrigger,\n CreateTriggerRequest,\n CreateTriggerResponse,\n ListTriggersResponse,\n UpdateTriggerRequest,\n} from '@bazilion/api-types'\nimport { defineCommand } from 'citty'\nimport { createClient } from '../client.ts'\nimport { columnize } from '../columnize.ts'\n\nconst addCmd = defineCommand({\n meta: { name: 'add', description: 'Add a heartbeat / cron trigger to an agent' },\n args: {\n agent: { type: 'positional', required: true },\n every: {\n type: 'string',\n description: 'Interval in seconds (e.g. --every 300 = every 5 minutes)',\n },\n cron: {\n type: 'string',\n description: 'Cron expression (5 fields: minute hour dom month dow)',\n },\n message: {\n type: 'string',\n required: true,\n description: 'Message to inject when the trigger fires',\n },\n disabled: { type: 'boolean', description: 'Create in disabled state' },\n },\n async run({ args }) {\n if (!args.every === !args.cron) {\n throw new Error('specify exactly one of --every <seconds> or --cron \"<expr>\"')\n }\n const client = createClient()\n const body: CreateTriggerRequest = args.every\n ? {\n kind: 'interval',\n intervalSec: Number(args.every),\n message: args.message,\n enabled: !args.disabled,\n }\n : {\n kind: 'cron',\n cronExpr: args.cron as string,\n message: args.message,\n enabled: !args.disabled,\n }\n const res = await client.post<CreateTriggerResponse>(`/api/agents/${args.agent}/triggers`, body)\n const t = res.trigger\n const spec = t.kind === 'interval' ? `every ${t.intervalSec}s` : `cron \"${t.cronExpr}\"`\n console.log(`${t.id}\\t${spec}\\t${t.enabled ? 'enabled' : 'disabled'}`)\n },\n})\n\nfunction triggerRow(t: AgentTrigger): string[] {\n const spec = t.kind === 'interval' ? `every ${t.intervalSec}s` : `cron \"${t.cronExpr}\"`\n const last = t.lastFiredAt ? new Date(t.lastFiredAt).toISOString() : '(never)'\n const state = t.enabled ? 'enabled' : 'disabled'\n const msgPreview = t.message.length > 60 ? `${t.message.slice(0, 60)}…` : t.message\n return [t.id, state, spec, `last: ${last}`, `\"${msgPreview}\"`]\n}\n\nconst listCmd = defineCommand({\n meta: { name: 'list', description: 'List triggers for an agent' },\n args: {\n agent: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const { triggers } = await client.get<ListTriggersResponse>(\n `/api/agents/${args.agent}/triggers`,\n )\n if (triggers.length === 0) {\n console.log('(no triggers)')\n return\n }\n for (const line of columnize(triggers.map(triggerRow))) console.log(line)\n },\n})\n\nconst rmCmd = defineCommand({\n meta: { name: 'rm', description: 'Delete a trigger' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n await client.del(`/api/triggers/${args.id}`)\n console.log(`removed trigger ${args.id}`)\n },\n})\n\nconst enableCmd = defineCommand({\n meta: { name: 'enable', description: 'Enable a trigger' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const body: UpdateTriggerRequest = { enabled: true }\n await client.patch(`/api/triggers/${args.id}`, body)\n console.log(`enabled trigger ${args.id}`)\n },\n})\n\nconst disableCmd = defineCommand({\n meta: { name: 'disable', description: 'Disable a trigger' },\n args: {\n id: { type: 'positional', required: true },\n },\n async run({ args }) {\n const client = createClient()\n const body: UpdateTriggerRequest = { enabled: false }\n await client.patch(`/api/triggers/${args.id}`, body)\n console.log(`disabled trigger ${args.id}`)\n },\n})\n\nexport const triggerCommand = defineCommand({\n meta: { name: 'trigger', description: 'Manage agent heartbeats / cron triggers' },\n subCommands: {\n add: addCmd,\n list: listCmd,\n rm: rmCmd,\n enable: enableCmd,\n disable: disableCmd,\n },\n})\n","import { existsSync, readdirSync, rmSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { defineCommand } from 'citty'\nimport { resolveCliPaths } from '../paths.ts'\n\n// Line-buffered stdin reader. `node:readline/promises` drops data after EOF\n// on piped input (a known Node quirk with back-to-back `question()` calls),\n// so we read chunks ourselves and emit one line per call.\nfunction makeLineReader(): () => Promise<string> {\n let buffer = ''\n let ended = false\n const queue: ((line: string) => void)[] = []\n\n const tryDeliver = (): void => {\n while (queue.length > 0) {\n const nlIdx = buffer.indexOf('\\n')\n if (nlIdx === -1) {\n if (ended) {\n const resolve = queue.shift()\n resolve?.(buffer)\n buffer = ''\n } else {\n return\n }\n } else {\n const line = buffer.slice(0, nlIdx)\n buffer = buffer.slice(nlIdx + 1)\n const resolve = queue.shift()\n resolve?.(line)\n }\n }\n }\n\n process.stdin.setEncoding('utf8')\n process.stdin.on('data', (chunk) => {\n buffer += chunk\n tryDeliver()\n })\n process.stdin.on('end', () => {\n ended = true\n tryDeliver()\n })\n\n return () =>\n new Promise<string>((resolve) => {\n queue.push(resolve)\n tryDeliver()\n })\n}\n\nasync function askYes(readLine: () => Promise<string>, prompt: string): Promise<boolean> {\n process.stdout.write(`${prompt} [y/N] `)\n const answer = (await readLine()).trim().toLowerCase()\n return answer === 'y' || answer === 'yes'\n}\n\nfunction removePath(p: string): boolean {\n if (!existsSync(p)) return false\n rmSync(p, { recursive: true, force: true })\n return true\n}\n\nexport const uninstallCommand = defineCommand({\n meta: {\n name: 'uninstall',\n description: 'Wipe bazilion state from ~/.bazilion (or BAZILION_HOME)',\n },\n args: {\n home: { type: 'string', description: 'Override BAZILION_HOME' },\n yes: {\n type: 'boolean',\n description: 'Skip confirmations (data tier only unless --all is set)',\n },\n all: {\n type: 'boolean',\n description: 'Also remove configs, logs, and skills (full wipe)',\n },\n },\n async run({ args }) {\n const paths = resolveCliPaths(args.home)\n const dbFile = join(paths.home, 'bazilion.db')\n const profilesDir = join(paths.home, 'profiles')\n const agentsDir = join(paths.home, 'agents')\n const groupsDir = join(paths.home, 'groups')\n const skillsDir = join(paths.home, 'skills')\n const logsDir = join(paths.home, 'logs')\n\n if (!existsSync(paths.home)) {\n console.log(`nothing to remove: ${paths.home} does not exist`)\n return\n }\n\n console.log(`about to uninstall bazilion at ${paths.home}`)\n console.log('')\n\n const dataTargets = [\n dbFile,\n `${dbFile}-wal`,\n `${dbFile}-shm`,\n profilesDir,\n agentsDir,\n groupsDir,\n ]\n\n const needsPrompt = !args.yes\n const readLine = needsPrompt ? makeLineReader() : null\n const wipeData =\n args.yes ||\n (await askYes(\n readLine as () => Promise<string>,\n 'remove DB + agent / profile / workspace data?',\n ))\n if (!wipeData) {\n console.log('aborted')\n process.stdin.pause()\n return\n }\n\n // Tier 2: ask only after data wipe is confirmed — configs/logs/skills are\n // reusable across reinstalls, so the two-tier split lets an operator\n // factory-reset agents while keeping credentials + imported skills.\n const wipeAll =\n args.all ||\n (args.yes\n ? false\n : await askYes(\n readLine as () => Promise<string>,\n 'also remove configs, logs, and skills? (full wipe of ~/.bazilion)',\n ))\n\n process.stdin.pause()\n\n for (const p of dataTargets) {\n if (removePath(p)) console.log(`removed ${p}`)\n }\n\n if (wipeAll) {\n const configTargets = [paths.authFile, logsDir, skillsDir]\n for (const p of configTargets) {\n if (removePath(p)) console.log(`removed ${p}`)\n }\n // If nothing else is left in $BAZILION_HOME, drop the empty dir too so\n // a subsequent `bazilion serve` re-bootstraps into a truly fresh home.\n if (readdirSync(paths.home).length === 0) {\n rmSync(paths.home, { recursive: true, force: true })\n console.log(`removed ${paths.home}`)\n } else {\n console.log(`${paths.home} still has unmanaged files; left in place`)\n }\n } else {\n console.log('')\n console.log('kept: auth.json, logs/, skills/')\n console.log(`re-run 'bazilion serve' to recreate the DB when you're ready.`)\n }\n },\n})\n"],"mappings":";;;AAAA,SAAS,iBAAAA,iBAAe,YAAY,iBAAiB;;;ACArD;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACf;AAAA,EACA,UAAY;AAAA,EACZ,MAAQ;AAAA,IACN,KAAO;AAAA,EACT;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAQ;AAAA,EACR,KAAO;AAAA,IACL,UAAY;AAAA,EACd;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,EACX;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AAAA,EACA,cAAgB;AAAA,IACd,qBAAqB;AAAA,IACrB,+BAA+B;AAAA,IAC/B,uBAAuB;AAAA,IACvB,iCAAiC;AAAA,IACjC,wBAAwB;AAAA,IACxB,eAAe;AAAA,IACf,WAAW;AAAA,IACX,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,UAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,SAAW;AAAA,IACX,QAAU;AAAA,IACV,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,EAC5B;AACF;;;AClDO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACxC;AAAA,EACA;AAAA,EACA,YAAY,QAAgB,MAAgB;AAC1C,UAAM,GAAG,MAAM,KAAK,KAAK,KAAK,EAAE;AAChC,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AACF;AAEA,eAAe,aAAa,KAAmC;AAC7D,SAAO,OAAO,QAAQ,aAAa,MAAM,IAAI,IAAI;AACnD;AAEO,SAAS,aAAa,KAAmB;AAC9C,iBAAe,cAA+C;AAC5D,UAAM,QAAQ,MAAM,aAAa,IAAI,KAAK;AAC1C,WAAO;AAAA,MACL,eAAe,UAAU,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9B,QAAQ,IAAI;AAAA,IACd;AAAA,EACF;AAEA,iBAAe,QAAW,QAAgB,MAAc,MAA4B;AAClF,UAAM,UAAkC,EAAE,GAAI,MAAM,YAAY,EAAG;AACnE,QAAI,SAAS,OAAW,SAAQ,cAAc,IAAI;AAClD,UAAM,MAAM,MAAM,MAAM,GAAG,IAAI,SAAS,GAAG,IAAI,IAAI;AAAA,MACjD;AAAA,MACA;AAAA,MACA,MAAM,SAAS,SAAY,KAAK,UAAU,IAAI,IAAI;AAAA,IACpD,CAAC;AACD,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,MAAO,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE;AACrE,YAAM,IAAI,eAAe,IAAI,QAAQ,GAAG;AAAA,IAC1C;AACA,QAAI,IAAI,WAAW,IAAK,QAAO;AAC/B,WAAQ,MAAM,IAAI,KAAK;AAAA,EACzB;AAKA,iBAAe,cAAiB,MAAc,MAA4B;AACxE,UAAM,MAAM,MAAM,MAAM,GAAG,IAAI,SAAS,GAAG,IAAI,IAAI;AAAA,MACjD,QAAQ;AAAA,MACR,SAAS,EAAE,GAAI,MAAM,YAAY,EAAG;AAAA,MACpC,MAAM;AAAA,IACR,CAAC;AACD,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,MAAO,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE;AACrE,YAAM,IAAI,eAAe,IAAI,QAAQ,GAAG;AAAA,IAC1C;AACA,QAAI,IAAI,WAAW,IAAK,QAAO;AAC/B,WAAQ,MAAM,IAAI,KAAK;AAAA,EACzB;AAEA,kBAAgB,OAAU,QAAgB,MAAc,MAAmC;AACzF,UAAM,UAAkC,EAAE,GAAI,MAAM,YAAY,EAAG;AACnE,QAAI,SAAS,OAAW,SAAQ,cAAc,IAAI;AAClD,UAAM,MAAM,MAAM,MAAM,GAAG,IAAI,SAAS,GAAG,IAAI,IAAI;AAAA,MACjD;AAAA,MACA;AAAA,MACA,MAAM,SAAS,SAAY,KAAK,UAAU,IAAI,IAAI;AAAA,IACpD,CAAC;AACD,QAAI,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM;AACxB,YAAM,MAAO,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE;AACrE,YAAM,IAAI,eAAe,IAAI,QAAQ,GAAG;AAAA,IAC1C;AACA,UAAM,SAAS,IAAI,KAAK,UAAU;AAClC,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AACb,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AACV,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AACxB,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,KAAK,EAAG,OAAM,KAAK,MAAM,IAAI;AAAA,MACxC;AAAA,IACF;AACA,QAAI,OAAO,KAAK,EAAG,OAAM,KAAK,MAAM,MAAM;AAAA,EAC5C;AAEA,SAAO;AAAA,IACL,KAAK,CAAI,MAAc,QAAW,OAAO,CAAC;AAAA,IAC1C,MAAM,CAAI,GAAW,MAAgB,QAAW,QAAQ,GAAG,CAAC;AAAA,IAC5D;AAAA,IACA,KAAK,CAAI,GAAW,MAAgB,QAAW,OAAO,GAAG,CAAC;AAAA,IAC1D,OAAO,CAAI,GAAW,MAAgB,QAAW,SAAS,GAAG,CAAC;AAAA,IAC9D,KAAK,CAAI,MAAc,QAAW,UAAU,CAAC;AAAA,IAC7C;AAAA,EACF;AACF;;;AClHA,SAAS,YAAY,oBAAoB;AAOlC,SAAS,aAAa,UAA4B;AACvD,MAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,UAAM,IAAI,MAAM,GAAG,QAAQ,6DAA6D;AAAA,EAC1F;AACA,QAAM,MAAM,aAAa,UAAU,MAAM;AACzC,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,MAAI,OAAO,OAAO,UAAU,YAAY,CAAC,OAAO,OAAO;AACrD,UAAM,IAAI,MAAM,GAAG,QAAQ,+BAA+B;AAAA,EAC5D;AACA,SAAO,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,UAAU,KAAK;AAC9D;;;ACjBA,SAAS,eAAe;AACxB,SAAS,YAAY;AAOd,SAAS,gBAAgB,MAAyB;AACvD,QAAM,OAAO,QAAQ,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,GAAG,WAAW;AAC7E,SAAO,EAAE,MAAM,MAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACzD;;;ACCO,SAAS,mBAAiC;AAC/C,QAAM,SAAS,QAAQ,IAAI;AAC3B,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,UAAU,SAAU,QAAO,EAAE,WAAW,QAAQ,OAAO,SAAS;AAEpE,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,OAAO,aAAa,MAAM,QAAQ;AAIxC,MAAI,KAAK,QAAQ,UAAU,KAAK,OAAO,OAAO;AAC5C,WAAO;AAAA,MACL,WAAW,UAAU,KAAK,OAAO;AAAA,MACjC,OAAO,KAAK,OAAO;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AAAA,IACL,WAAW,UAAU;AAAA,IACrB,OAAO,KAAK;AAAA,EACd;AACF;AAEO,SAASC,cAAa,MAAoB,iBAAiB,GAAmB;AACnF,SAAO,aAAoB,EAAE,WAAW,IAAI,WAAW,OAAO,IAAI,MAAM,CAAC;AAC3E;;;ACpCA,SAAS,OAAO,cAAc;AAC9B,SAAS,uBAAuB;AAgBhC,SAAS,qBAAqB;;;ACPvB,SAAS,UAAU,MAAkB,MAAM,MAAgB;AAChE,MAAI,KAAK,WAAW,EAAG,QAAO,CAAC;AAC/B,QAAM,WAAW,KAAK,CAAC,GAAG,UAAU;AACpC,QAAM,SAAmB,IAAI,MAAc,QAAQ,EAAE,KAAK,CAAC;AAC3D,aAAW,OAAO,MAAM;AACtB,aAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,YAAM,OAAO,IAAI,CAAC,KAAK;AACvB,YAAM,OAAO,OAAO,CAAC,KAAK;AAC1B,UAAI,KAAK,SAAS,KAAM,QAAO,CAAC,IAAI,KAAK;AAAA,IAC3C;AAAA,EACF;AACA,SAAO,KAAK;AAAA,IAAI,CAAC,QACf,IACG,IAAI,CAAC,MAAM,MAAM;AAGhB,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,cAAQ,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC;AAAA,IAC3C,CAAC,EACA,KAAK,GAAG;AAAA,EACb;AACF;;;ADVA,IAAM,WAAW,cAAc;AAAA,EAC7B,MAAM,EAAE,MAAM,SAAS,aAAa,6CAA6C;AAAA,EACjF,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,UAAU,UAAU,MAAM,aAAa,aAAa;AAAA,IACrE,MAAM,EAAE,MAAM,UAAU,aAAa,wCAAwC;AAAA,IAC7E,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,OAAO,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,IACvE,WAAW;AAAA,MACT,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA0B;AAAA,MAC9B,WAAW,KAAK;AAAA,MAChB,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,gBAAgB,KAAK;AAAA,MACrB,SAAS,KAAK;AAAA,IAChB;AACA,UAAM,QAAQ,MAAM,OAAO,KAAY,eAAe,IAAI;AAC1D,YAAQ,IAAI,iBAAiB,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG;AACvD,YAAQ,IAAI,QAAQ,MAAM,GAAG,EAAE;AAAA,EACjC;AACF,CAAC;AAED,IAAM,UAAU,cAAc;AAAA,EAC5B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,qBAAqB;AAAA,IAC5E,MAAM,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,IACxD,OAAO,EAAE,MAAM,UAAU,aAAa,+CAA+C;AAAA,IACrF,WAAW;AAAA,MACT,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI,KAAK,SAAS,UAAa,KAAK,UAAU,UAAa,KAAK,cAAc,QAAW;AACvF,cAAQ,MAAM,qEAAqE;AACnF,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAgC,CAAC;AACvC,QAAI,KAAK,SAAS,OAAW,MAAK,OAAO,KAAK;AAC9C,QAAI,KAAK,UAAU,QAAW;AAC5B,WAAK,gBAAgB,KAAK,UAAU,KAAK,OAAO,KAAK;AAAA,IACvD;AACA,QAAI,KAAK,cAAc,OAAW,MAAK,iBAAiB,KAAK;AAC7D,UAAM,QAAQ,MAAM,OAAO,MAAa,eAAe,KAAK,EAAE,IAAI,IAAI;AACtE,YAAQ,IAAI,iBAAiB,MAAM,EAAE,KAAK,MAAM,IAAI,GAAG;AAAA,EACzD;AACF,CAAC;AAED,IAAM,UAAU,cAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,EACjD,MAAM;AAAA,IACJ,KAAK,EAAE,MAAM,WAAW,aAAa,0BAA0B;AAAA,IAC/D,MAAM,EAAE,MAAM,WAAW,OAAO,KAAK,aAAa,mCAAmC;AAAA,EACvF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,IAAI,KAAK,MAAM,0BAA0B;AAC/C,UAAM,OAAO,MAAM,OAAO,IAAa,cAAc,CAAC,EAAE;AACxD,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI,aAAa;AACzB;AAAA,IACF;AACA,UAAM,OAAO,KAAK;AAAA,MAAI,CAAC,MACrB,KAAK,OACD,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS;AAAA;AAAA,QAEpC,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI;AAAA;AAAA,IACzC;AACA,eAAW,QAAQ,UAAU,IAAI,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtD;AACF,CAAC;AAED,IAAM,UAAU,cAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,qBAAqB;AAAA,EACxD,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAmB,eAAe,KAAK,EAAE,EAAE;AAClE,YAAQ,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE;AAC7B,YAAQ,IAAI,YAAY,EAAE,MAAM,IAAI,EAAE;AACtC,YAAQ,IAAI,YAAY,EAAE,MAAM,MAAM,EAAE;AACxC,YAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;AACtC,YAAQ,IAAI,YAAY,EAAE,KAAK,EAAE;AACjC,YAAQ,IAAI,YAAY,EAAE,MAAM,GAAG,EAAE;AACrC,YAAQ,IAAI,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;AACpD,YAAQ,IAAI,SAAS;AACrB,QAAI,EAAE,OAAO,WAAW,GAAG;AACzB,cAAQ,IAAI,UAAU;AAAA,IACxB,OAAO;AACL,iBAAW,KAAK,EAAE,OAAQ,SAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,IAChD;AAAA,EACF;AACF,CAAC;AAED,IAAM,aAAa,cAAc;AAAA,EAC/B,MAAM,EAAE,MAAM,WAAW,aAAa,mBAAmB;AAAA,EACzD,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAO,KAAK,eAAe,KAAK,EAAE,UAAU;AAClD,YAAQ,IAAI,kBAAkB,KAAK,EAAE,EAAE;AAAA,EACzC;AACF,CAAC;AAED,IAAM,eAAe,cAAc;AAAA,EACjC,MAAM,EAAE,MAAM,aAAa,aAAa,oCAAoC;AAAA,EAC5E,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAO,KAAK,eAAe,KAAK,EAAE,YAAY;AACpD,YAAQ,IAAI,oBAAoB,KAAK,EAAE,EAAE;AAAA,EAC3C;AACF,CAAC;AAED,IAAM,YAAY,cAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,2CAA2C;AAAA,EAChF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAO,IAAI,eAAe,KAAK,EAAE,EAAE;AACzC,YAAQ,IAAI,iBAAiB,KAAK,EAAE,EAAE;AAAA,EACxC;AACF,CAAC;AAQD,SAAS,WAAW,GAAiB,OAAyB;AAC5D,UAAQ,EAAE,MAAM;AAAA,IACd,KAAK;AACH,cAAQ,OAAO,MAAM,EAAE,KAAK;AAC5B,YAAM,gBAAgB;AACtB;AAAA,IACF,KAAK;AACH,UAAI,MAAM,eAAe;AAEvB,gBAAQ,OAAO,MAAM,IAAI;AACzB,cAAM,gBAAgB;AAAA,MACxB,OAAO;AACL,gBAAQ,IAAI,EAAE,IAAI;AAAA,MACpB;AACA;AAAA,IACF,KAAK;AACH,UAAI,MAAM,eAAe;AACvB,gBAAQ,OAAO,MAAM,IAAI;AACzB,cAAM,gBAAgB;AAAA,MACxB;AACA,cAAQ,IAAI,YAAY,EAAE,IAAI,IAAI,EAAE,SAAS,GAAG;AAChD;AAAA,IACF,KAAK;AACH,cAAQ,IAAI,cAAc,EAAE,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG;AACnE;AAAA,IACF,KAAK;AACH,cAAQ,IAAI,kBAAkB,EAAE,IAAI,WAAM,EAAE,KAAK,GAAG;AACpD;AAAA,IACF,KAAK;AACH,UAAI,MAAM,eAAe;AACvB,gBAAQ,OAAO,MAAM,IAAI;AACzB,cAAM,gBAAgB;AAAA,MACxB;AACA,cAAQ,IAAI,aAAa,EAAE,KAAK,GAAG;AACnC;AAAA,EACJ;AACF;AAEA,eAAe,WACb,QACA,SACA,SACe;AACf,QAAM,QAAoB,EAAE,eAAe,MAAM;AACjD,mBAAiB,SAAS,OAAO,OAAkB,QAAQ,eAAe,OAAO,SAAS;AAAA,IACxF;AAAA,EACF,CAAC,GAAG;AACF,QAAI,MAAM,SAAS,SAAS;AAC1B,UAAI,MAAM,MAAM,SAAS,eAAgB,YAAW,MAAM,OAAO,KAAK;AAAA,IACxE,WAAW,MAAM,SAAS,SAAS;AACjC,UAAI,MAAM,cAAe,SAAQ,OAAO,MAAM,IAAI;AAClD,YAAM,IAAI,MAAM,MAAM,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,IAAM,UAAU,cAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,qBAAqB;AAAA,EACxD,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,WAAW,MAAM,OAAO,IAAmB,eAAe,KAAK,EAAE,EAAE;AAEzE,QAAI,KAAK,SAAS;AAChB,YAAM,WAAW,QAAQ,SAAS,MAAM,IAAI,KAAK,OAAO;AACxD;AAAA,IACF;AAEA,YAAQ,IAAI,iBAAiB,SAAS,MAAM,IAAI,KAAK,SAAS,KAAK,GAAG;AACtE,YAAQ,IAAI,sBAAsB;AAElC,UAAM,KAAK,gBAAgB,EAAE,OAAO,OAAO,QAAQ,OAAO,CAAC;AAC3D,OAAG,UAAU,IAAI;AACjB,OAAG,OAAO;AAEV,qBAAiB,QAAQ,IAAI;AAC3B,YAAM,UAAU,KAAK,KAAK;AAC1B,UAAI,YAAY,WAAW,YAAY,QAAS;AAChD,UAAI,CAAC,SAAS;AACZ,WAAG,OAAO;AACV;AAAA,MACF;AACA,UAAI;AACF,cAAM,WAAW,QAAQ,SAAS,MAAM,IAAI,OAAO;AAAA,MACrD,SAAS,KAAK;AACZ,gBAAQ,MAAM,UAAW,IAAc,OAAO,EAAE;AAAA,MAClD;AACA,SAAG,OAAO;AAAA,IACZ;AACA,OAAG,MAAM;AAAA,EACX;AACF,CAAC;AAED,IAAM,eAAe,cAAc;AAAA,EACjC,MAAM,EAAE,MAAM,cAAc,aAAa,yCAAyC;AAAA,EAClF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,OAAO,EAAE,MAAM,WAAW,aAAa,sBAAsB;AAAA,EAC/D;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI,CAAC,KAAK,OAAO;AACf,cAAQ,OAAO,MAAM,8BAA8B,KAAK,EAAE,UAAU;AACpE,YAAM,SAAS,MAAM,IAAI,QAAgB,CAACC,aAAY;AACpD,gBAAQ,MAAM,KAAK,QAAQ,CAAC,MAAMA,SAAQ,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,MAC3E,CAAC;AACD,UAAI,WAAW,OAAO,WAAW,OAAO;AACtC,gBAAQ,IAAI,SAAS;AACrB;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAASD,cAAa;AAC5B,UAAM,OAAO,KAAK,eAAe,KAAK,EAAE,aAAa;AACrD,YAAQ,IAAI,0BAA0B,KAAK,EAAE,EAAE;AAAA,EACjD;AACF,CAAC;AAED,IAAM,cAAc,cAAc;AAAA,EAChC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,MAAM,UAAU,UAAU,MAAM,aAAa,qCAAqC;AAAA,EAC5F;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,IAAI,OAAO,KAAK,IAAI;AAC1B,QAAI,CAAC,OAAO,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,UAAU,CAAC,GAAG;AACxD,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,UAAM,SAASA,cAAa;AAC5B,UAAM,OAA4B,EAAE,WAAW,EAAE;AACjD,UAAM,MAAM,MAAM,OAAO;AAAA,MACvB,eAAe,KAAK,EAAE;AAAA,MACtB;AAAA,IACF;AACA,YAAQ;AAAA,MACN,YAAY,IAAI,MAAM,WAAM,IAAI,KAAK,cAAc,IAAI,SAAS,IAAI,KAAK;AAAA,IAC3E;AAAA,EACF;AACF,CAAC;AAED,SAAS,YAAY,GAAmB;AACtC,MAAI,IAAI,KAAM,QAAO,GAAG,CAAC;AACzB,MAAI,IAAI,OAAO,KAAM,QAAO,IAAI,IAAI,MAAM,QAAQ,CAAC,CAAC;AACpD,SAAO,IAAI,KAAK,OAAO,OAAO,QAAQ,CAAC,CAAC;AAC1C;AAEA,IAAM,iBAAiB,cAAc;AAAA,EACnC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,MAAM,EAAE,MAAM,WAAW,aAAa,0CAA0C;AAAA,EAClF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,QAAQ,KAAK,UAAU,KAAK,OAAO,cAAc;AACvD,UAAM,MAAM,MAAM,OAAO,IAAyB,eAAe,KAAK,EAAE,gBAAgB,KAAK,EAAE;AAC/F,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AACxC;AAAA,IACF;AAEA,UAAM,MAAM,CAAC,OAAe,WAC1B,GAAG,MAAM,eAAe,CAAC,YAAY,OAAO,eAAe,CAAC;AAE9D,YAAQ,IAAI,yBAAkB,IAAI,OAAO,EAAE;AAC3C,YAAQ,IAAI,UAAU,IAAI,KAAK,EAAE;AACjC,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,kBAAkB;AAC9B,YAAQ,IAAI,YAAY,IAAI,IAAI,aAAa,OAAO,IAAI,aAAa,MAAM,CAAC,EAAE;AAC9E,QAAI,IAAI,aAAa,MAAM,SAAS,GAAG;AACrC,cAAQ,IAAI,kBAAkB;AAC9B,iBAAW,KAAK,IAAI,aAAa,OAAO;AACtC,gBAAQ,IAAI,SAAS,EAAE,IAAI,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE;AAAA,MAC1D;AAAA,IACF;AACA,QAAI,IAAI,aAAa,kBAAkB,GAAG;AACxC,cAAQ,IAAI,kBAAkB,IAAI,aAAa,gBAAgB,eAAe,CAAC,QAAQ;AAAA,IACzF;AACA,QAAI,IAAI,aAAa,iBAAiB,GAAG;AACvC,cAAQ,IAAI,kBAAkB,IAAI,aAAa,eAAe,eAAe,CAAC,QAAQ;AAAA,IACxF;AACA,QAAI,IAAI,aAAa,cAAc,GAAG;AACpC,cAAQ,IAAI,oBAAoB,IAAI,aAAa,YAAY,eAAe,CAAC,QAAQ;AAAA,IACvF;AACA,YAAQ,IAAI,kBAAkB,IAAI,aAAa,gBAAgB,eAAe,CAAC,QAAQ;AACvF,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,UAAU;AACtB,YAAQ,IAAI,YAAY,IAAI,MAAM,KAAK,EAAE;AACzC,YAAQ;AAAA,MACN,qBAAqB,IAAI,MAAM,YAAY,eAAe,CAAC,YAAY,SAAS,IAAI,MAAM,WAAW,EAAE,eAAe,CAAC;AAAA,IACzH;AACA,YAAQ,IAAI,gBAAgB,IAAI,MAAM,UAAU,eAAe,CAAC,QAAQ;AACxE,QAAI,IAAI,MAAM,QAAQ,SAAS,GAAG;AAChC,cAAQ,IAAI,6BAA6B;AACzC,iBAAW,KAAK,IAAI,MAAM,SAAS;AACjC,cAAM,SAAS,EAAE,cAAc,OAAO,KAAK,EAAE,UAAU,aAAa;AACpE,gBAAQ,IAAI,SAAS,EAAE,IAAI,KAAK,EAAE,YAAY,eAAe,CAAC,SAAS,MAAM,EAAE;AAAA,MACjF;AAAA,IACF;AACA,YAAQ,IAAI,EAAE;AACd,QAAI,IAAI,OAAO,QAAQ,GAAG;AACxB,cAAQ,IAAI,WAAW;AACvB,cAAQ,IAAI,YAAY,IAAI,OAAO,KAAK,EAAE;AAC1C,iBAAW,KAAK,IAAI,OAAO,SAAS;AAClC,gBAAQ,IAAI,SAAS,EAAE,IAAI,KAAK,EAAE,WAAW,eAAe,CAAC,QAAQ;AAAA,MACvE;AACA,cAAQ,IAAI,EAAE;AAAA,IAChB;AACA,YAAQ,IAAI,UAAU;AACtB,YAAQ,IAAI,SAAS,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,EAAE;AAC1E,QAAI,IAAI,MAAM,cAAc,GAAG;AAC7B,cAAQ,IAAI,gBAAgB,IAAI,MAAM,YAAY,eAAe,CAAC,QAAQ;AAAA,IAC5E;AACA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,YAAY;AACxB,YAAQ,IAAI,kBAAkB,IAAI,QAAQ,cAAc,EAAE;AAC1D,YAAQ,IAAI,kBAAkB,IAAI,QAAQ,iBAAiB,EAAE;AAC7D,YAAQ,IAAI,kBAAkB,IAAI,IAAI,QAAQ,OAAO,IAAI,QAAQ,cAAc,CAAC,EAAE;AAClF,YAAQ,IAAI,kBAAkB,YAAY,IAAI,QAAQ,KAAK,CAAC,EAAE;AAC9D,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,UAAU,IAAI,IAAI,OAAO,OAAO,IAAI,OAAO,MAAM,CAAC,EAAE;AAAA,EAClE;AACF,CAAC;AAED,SAAS,SAAS,OAAuB;AACvC,SAAO,KAAK,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AACzC;AAEA,IAAM,iBAAiB,cAAc;AAAA,EACnC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,aAAa;AAAA,MACX,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,OAAO,EAAE,MAAM,WAAW,aAAa,sBAAsB;AAAA,EAC/D;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI,CAAC,KAAK,OAAO;AACf,cAAQ,OAAO;AAAA,QACb,4BAA4B,KAAK,EAAE;AAAA,MACrC;AACA,YAAM,SAAS,MAAM,IAAI,QAAgB,CAACC,aAAY;AACpD,gBAAQ,MAAM,KAAK,QAAQ,CAAC,MAAMA,SAAQ,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,MAC3E,CAAC;AACD,UAAI,WAAW,OAAO,WAAW,OAAO;AACtC,gBAAQ,IAAI,SAAS;AACrB;AAAA,MACF;AAAA,IACF;AACA,UAAM,cAAc,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,CAAC,IAAI;AACpE,QAAI,gBAAgB,WAAc,CAAC,OAAO,SAAS,WAAW,KAAK,cAAc,IAAI;AACnF,cAAQ,MAAM,4CAA4C;AAC1D,cAAQ,WAAW;AACnB;AAAA,IACF;AACA,UAAM,OAA2B,CAAC;AAClC,QAAI,gBAAgB,OAAW,MAAK,WAAW,KAAK,MAAM,WAAW;AACrE,QAAI,KAAK,aAAc,MAAK,qBAAqB,KAAK;AACtD,UAAM,SAASD,cAAa;AAC5B,UAAM,MAAM,MAAM,OAAO,KAA0B,eAAe,KAAK,EAAE,iBAAiB,IAAI;AAC9F,YAAQ;AAAA,MACN,cAAc,IAAI,MAAM,WAAM,IAAI,KAAK,aAAa,IAAI,UAAU,gBAAgB,IAAI,QAAQ;AAAA,IAChG;AACA,YAAQ;AAAA,MACN,YAAY,IAAI,aAAa,eAAe,CAAC,YAAO,IAAI,YAAY,eAAe,CAAC;AAAA,IACtF;AACA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,UAAU;AACtB,YAAQ,IAAI,IAAI,OAAO;AAAA,EACzB;AACF,CAAC;AAID,IAAM,cAAc,cAAc;AAAA,EAChC,MAAM,EAAE,MAAM,OAAO,aAAa,6BAA6B;AAAA,EAC/D,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IAC5C,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC9C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAA2B,EAAE,OAAO,KAAK,MAAM;AACrD,UAAM,OAAO,KAAK,eAAe,KAAK,KAAK,WAAW,IAAI;AAC1D,YAAQ,IAAI,kBAAkB,KAAK,KAAK,OAAO,KAAK,KAAK,EAAE;AAAA,EAC7D;AACF,CAAC;AAED,IAAM,aAAa,cAAc;AAAA,EAC/B,MAAM,EAAE,MAAM,MAAM,aAAa,+BAA+B;AAAA,EAChE,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IAC5C,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC9C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAO,IAAI,eAAe,KAAK,KAAK,WAAW,mBAAmB,KAAK,KAAK,CAAC,EAAE;AACrF,YAAQ,IAAI,kBAAkB,KAAK,KAAK,SAAS,KAAK,KAAK,EAAE;AAAA,EAC/D;AACF,CAAC;AAED,IAAM,WAAW,cAAc;AAAA,EAC7B,MAAM,EAAE,MAAM,SAAS,aAAa,mCAAmC;AAAA,EACvE,aAAa;AAAA,IACX,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF,CAAC;AAID,IAAM,UAAU,cAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,qCAAqC;AAAA,EACxE,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IAC5C,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC9C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAyB,EAAE,SAAS,KAAK,MAAM;AACrD,UAAM,OAAO,MAAM,eAAe,KAAK,KAAK,UAAU,IAAI;AAC1D,YAAQ,IAAI,SAAS,KAAK,KAAK,aAAa,KAAK,KAAK,EAAE;AAAA,EAC1D;AACF,CAAC;AAED,IAAM,iBAAiB,cAAc;AAAA,EACnC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,MAAM,WAAW,aAAa,wCAAwC;AAAA,EAChF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAO,MAAM,OAAO,IAAyB,eAAe,KAAK,EAAE,gBAAgB;AACzF,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,IAAI,CAAC;AAChC;AAAA,IACF;AACA,YAAQ,IAAI,KAAK,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,YAAY,kBAAkB;AAAA,EAClF;AACF,CAAC;AAED,IAAM,YAAY,cAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,2CAA2C;AAAA,EAChF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASA,cAAa;AAC5B,UAAM,OAAO,KAAK,eAAe,KAAK,EAAE,SAAS;AACjD,YAAQ,IAAI,6BAA6B,KAAK,EAAE,EAAE;AAAA,EACpD;AACF,CAAC;AAEM,IAAM,eAAe,cAAc;AAAA,EACxC,MAAM,EAAE,MAAM,SAAS,aAAa,yBAAyB;AAAA,EAC7D,aAAa;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,cAAc;AAAA,IACd,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,gBAAgB;AAAA,EAClB;AACF,CAAC;;;AExjBD,SAAS,wBAAwB;AACjC,SAAS,iBAAAE,sBAAqB;AAG9B,SAAS,aAAa,IAA2B;AAC/C,MAAI,CAAC,GAAI,QAAO;AAChB,QAAM,IAAI,IAAI,KAAK,EAAE;AACrB,SAAO,EAAE,YAAY,EAAE,QAAQ,WAAW,GAAG;AAC/C;AAEA,IAAM,iBAAiBC,eAAc;AAAA,EACnC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,MAAM;AACV,UAAM,SAASC,cAAa;AAK5B,YAAQ,IAAI,4CAA4C;AACxD,YAAQ,IAAI,+DAA+D;AAC3E,UAAM,QAAQ,MAAM,iBAAiB;AAAA,MACnC,QAAQ,CAAC,EAAE,IAAI,MAAqB;AAClC,gBAAQ,IAAI,EAAE;AACd,gBAAQ,IAAI,YAAO,GAAG,EAAE;AACxB,gBAAQ,IAAI,EAAE;AAAA,MAChB;AAAA,MACA,UAAU,OAAO,WAAyC;AACxD,gBAAQ,OAAO,MAAM,GAAG,OAAO,OAAO,IAAI;AAC1C,eAAO,IAAI,QAAgB,CAACC,aAAY;AACtC,kBAAQ,MAAM,KAAK,QAAQ,CAAC,MAAMA,SAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,QAC7D,CAAC;AAAA,MACH;AAAA,MACA,YAAY,CAAC,QAAgB;AAC3B,gBAAQ,IAAI,KAAK,GAAG,EAAE;AAAA,MACxB;AAAA,IACF,CAAC;AACD,UAAM,SAAS,MAAM,OAAO,IAAuB,oBAAoB;AAAA,MACrE,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,IACjB,CAAC;AACD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,kBAAa;AACzB,QAAI,OAAO,UAAW,SAAQ,IAAI,YAAY,OAAO,SAAS,EAAE;AAChE,YAAQ,IAAI,yBAAyB,aAAa,OAAO,SAAS,CAAC,EAAE;AACrE,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,0EAA0E;AACtF,YAAQ,IAAI,qEAAqE;AAAA,EACnF;AACF,CAAC;AAED,IAAM,kBAAkBF,eAAc;AAAA,EACpC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,MAAM;AACV,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,kBAAkB;AACnC,YAAQ,IAAI,wCAAwC;AAAA,EACtD;AACF,CAAC;AAED,IAAM,kBAAkBD,eAAc;AAAA,EACpC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,MAAM;AACV,UAAM,SAASC,cAAa;AAC5B,UAAM,SAAS,MAAM,OAAO,IAAuB,kBAAkB;AACrE,QAAI,CAAC,OAAO,WAAW;AACrB,cAAQ,IAAI,uDAAkD;AAC9D;AAAA,IACF;AACA,YAAQ,IAAI,kBAAa;AACzB,QAAI,OAAO,UAAW,SAAQ,IAAI,YAAY,OAAO,SAAS,EAAE;AAChE,YAAQ,IAAI,yBAAyB,aAAa,OAAO,SAAS,CAAC,EAAE;AAAA,EACvE;AACF,CAAC;AAED,IAAM,YAAYD,eAAc;AAAA,EAC9B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF,CAAC;AAEM,IAAM,cAAcA,eAAc;AAAA,EACvC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,EACV;AACF,CAAC;;;AC7GD,SAAS,aAAa;AACtB,SAAS,mBAAmB,cAAAG,aAAY,WAAW,aAAa,cAAc;AAC9E,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;AAI9B,IAAM,YAAYC,eAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,0DAA0D;AAAA,EAC/F,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,iBAAiB;AAC7B,UAAM,QAAO,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACjD,UAAM,SAAS,QAAQ,KAAK,UAAU,mBAAmB,IAAI,SAAS;AAEtE,YAAQ,IAAI,6BAAwB,MAAM,EAAE;AAC5C,UAAM,MAAM,MAAM,MAAM,GAAG,IAAI,SAAS,eAAe;AAAA,MACrD,SAAS,EAAE,eAAe,UAAU,IAAI,KAAK,IAAI,QAAQ,IAAI,UAAU;AAAA,IACzE,CAAC;AACD,QAAI,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM;AACxB,UAAI,MAAc,IAAI;AACtB,UAAI;AACF,cAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,cAAM,KAAK,SAAS;AAAA,MACtB,QAAQ;AAAA,MAAC;AACT,YAAM,IAAI,MAAM,kBAAkB,GAAG,EAAE;AAAA,IACzC;AACA,UAAM,SAAS,SAAS,QAAQ,IAAI,IAAI,GAAG,kBAAkB,MAAM,CAAC;AACpE,YAAQ,IAAI,MAAM;AAAA,EACpB;AACF,CAAC;AAOD,eAAe,mBAAmB,MAAgC;AAChE,MAAI;AACF,UAAM,OAAO,IAAI,gBAAgB;AACjC,UAAM,QAAQ,WAAW,MAAM,KAAK,MAAM,GAAG,GAAG;AAGhD,UAAM,MAAM,MAAM,MAAM,oBAAoB,IAAI,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AACjF,iBAAa,KAAK;AAClB,WAAO,IAAI,UAAU,OAAO,IAAI,SAAS;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,aAAaA,eAAc;AAAA,EAC/B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,MAAM,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,IAC9D,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,OAAO,QAAQ,KAAK,IAAI;AAC9B,QAAI,CAACC,YAAW,IAAI,EAAG,OAAM,IAAI,MAAM,0BAA0B,IAAI,EAAE;AAEvE,UAAM,QAAQ,gBAAgB,KAAK,IAAI;AACvC,UAAM,aAAa,MAAM;AAMzB,UAAM,cAAc,CAAC,KAAK,QAAQ,CAAC,QAAQ,IAAI;AAC/C,QAAI,eAAe,CAAC,KAAK,SAAU,MAAM,mBAAmB,IAAI,GAAI;AAClE,YAAM,IAAI;AAAA,QACR;AAAA,MAEF;AAAA,IACF;AAEA,QAAIA,YAAW,UAAU,GAAG;AAC1B,YAAM,UAAU,YAAY,UAAU;AACtC,UAAI,QAAQ,SAAS,GAAG;AACtB,YAAI,CAAC,KAAK,OAAO;AACf,gBAAM,IAAI;AAAA,YACR,GAAG,UAAU;AAAA,UACf;AAAA,QACF;AACA,eAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACrD;AAAA,IACF;AACA,cAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAEzC,YAAQ,IAAI,cAAc,IAAI,WAAM,UAAU,EAAE;AAChD,UAAM,IAAI,QAAc,CAAC,KAAK,QAAQ;AACpC,YAAM,OAAO,MAAM,OAAO,CAAC,QAAQ,MAAM,MAAM,UAAU,GAAG,EAAE,OAAO,UAAU,CAAC;AAChF,WAAK,GAAG,SAAS,GAAG;AACpB,WAAK,GAAG,QAAQ,CAAC,SAAS;AACxB,YAAI,SAAS,EAAG,KAAI;AAAA,YACf,KAAI,IAAI,MAAM,wBAAwB,IAAI,EAAE,CAAC;AAAA,MACpD,CAAC;AAAA,IACH,CAAC;AAED,YAAQ,IAAI,eAAe,UAAU,EAAE;AACvC,YAAQ,IAAI,yEAAyE;AAAA,EACvF;AACF,CAAC;AAEM,IAAM,gBAAgBD,eAAc;AAAA,EACzC,MAAM,EAAE,MAAM,UAAU,aAAa,gDAAgD;AAAA,EACrF,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAMF,CAAC;;;ACtID,SAAS,iBAAAE,sBAAqB;AAgB9B,eAAe,KAAK,KAAkB,MAAgB,KAA+B;AACnF,QAAM,UAAU,IAAI,eAAe,CAAC;AACpC,QAAM,WAAW,OAAO,KAAK,OAAO;AACpC,QAAM,QAAQ,QAAQ,IAAI,QAAQ,CAAC,CAAC;AACpC,MAAI,KAAK,EAAE,MAAM,MAAM,UAAU,MAAM,CAAC;AACxC,aAAW,QAAQ,UAAU;AAC3B,UAAM,IAAI,QAAQ,IAAI;AACtB,UAAM,MAAO,MAAM,QAAQ,QAAQ,CAAC;AACpC,UAAM,KAAK,KAAK,CAAC,GAAG,MAAM,IAAI,GAAG,GAAG;AAAA,EACtC;AACF;AAEA,SAAS,QAAQ,MAA8E;AAC7F,QAAM,MAAgB,CAAC;AACvB,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,IAAI,GAAG;AAE9C,QAAI,IAAI,SAAS,aAAc;AAC/B,QAAI,KAAK,KAAK,IAAI,EAAE;AACpB,UAAM,UAAU,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC;AAClF,eAAW,KAAK,QAAS,KAAI,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,WAAW,MAAyB;AAC3C,QAAM,QAAQ,KACX,IAAI,CAAC,MAAM;AACV,UAAM,MAAM,EAAE,KAAK,WAAW,IAAI,OAAO,KAAK,UAAU,EAAE,KAAK,KAAK,GAAG,CAAC;AACxE,UAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG;AAC9C,WAAO,OAAO,GAAG;AAAA,gCAAoC,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA,EAC5E,CAAC,EACA,KAAK,IAAI;AACZ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBP,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQP;AAEA,SAAS,UAAU,MAAyB;AAK1C,QAAM,OAAO,WAAW,IAAI;AAC5B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKP,IAAI;AACN;AAEA,SAAS,WAAW,MAAyB;AAC3C,QAAM,QAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,aAAW,KAAK,MAAM;AACpB,QAAI,EAAE,KAAK,WAAW,GAAG;AACvB,iBAAW,KAAK,EAAE,KAAM,OAAM,KAAK,sDAAsD,CAAC,EAAE;AAC5F,iBAAW,MAAM,EAAE,OAAO;AACxB,cAAM,OAAO,GAAG,WAAW,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI;AACjD,cAAM,QAAQ,CAAC,GAAG,WAAW,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI;AACnD,cAAM,QAAkB,CAAC,iDAAiD;AAC1E,YAAI,MAAO,OAAM,KAAK,MAAM,KAAK,EAAE;AACnC,YAAI,KAAM,OAAM,KAAK,MAAM,IAAI,EAAE;AACjC,cAAM,KAAK,MAAM,KAAK,GAAG,CAAC;AAAA,MAC5B;AAAA,IACF,OAAO;AAIL,YAAM,QAAQ,EAAE,KAAK,IAAI,CAAC,MAAM,+BAA+B,CAAC,EAAE,EAAE,KAAK,QAAQ;AACjF,iBAAW,KAAK,EAAE,MAAM;AACtB,cAAM,KAAK,4BAA4B,KAAK,QAAQ,CAAC,EAAE;AAAA,MACzD;AACA,iBAAW,MAAM,EAAE,OAAO;AACxB,cAAM,OAAO,GAAG,WAAW,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI;AACjD,cAAM,QAAQ,CAAC,GAAG,WAAW,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI;AACnD,cAAM,QAAkB,CAAC,4BAA4B,KAAK,GAAG;AAC7D,YAAI,MAAO,OAAM,KAAK,MAAM,KAAK,EAAE;AACnC,YAAI,KAAM,OAAM,KAAK,MAAM,IAAI,EAAE;AACjC,cAAM,KAAK,MAAM,KAAK,GAAG,CAAC;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACA,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC5B;AAEO,SAAS,kBAAkBC,OAAmB;AACnD,SAAOD,eAAc;AAAA,IACnB,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,YAAM,OAAkB,CAAC;AACzB,YAAM,KAAKC,OAAM,CAAC,GAAG,IAAI;AACzB,YAAM,QAAQ,OAAO,KAAK,KAAK,EAAE,YAAY;AAC7C,UAAI,UAAU,OAAQ,SAAQ,IAAI,WAAW,IAAI,CAAC;AAAA,eACzC,UAAU,MAAO,SAAQ,IAAI,UAAU,IAAI,CAAC;AAAA,eAC5C,UAAU,OAAQ,SAAQ,IAAI,WAAW,IAAI,CAAC;AAAA,UAClD,OAAM,IAAI,MAAM,sBAAsB,KAAK,KAAK,2BAA2B;AAAA,IAClF;AAAA,EACF,CAAC;AACH;;;ACnJA,SAAS,iBAAAC,sBAAqB;AAI9B,SAAS,aAAa,GAA8B;AAClD,MAAI,CAAC,EAAE,IAAK,QAAO;AACnB,MAAI,EAAE,SAAS,SAAU,QAAO,EAAE,WAAW;AAC7C,SAAO,EAAE,SAAS;AACpB;AAEA,IAAMC,WAAUC,eAAc;AAAA,EAC5B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,MAAM;AACV,UAAM,SAASC,cAAa;AAE5B,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,IAA4B,uBAAuB;AACtF,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO,IAA2B,sBAAsB;AACnF,UAAM,MAAqB,CAAC,GAAG,WAAW,GAAG,QAAQ;AAErD,UAAM,OAAmB,CAAC;AAC1B,eAAW,OAAO,KAAK;AACrB,iBAAW,KAAK,IAAI,QAAQ;AAC1B,aAAK,KAAK,CAAC,IAAI,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC;AAAA,MACvD;AAAA,IACF;AACA,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI,wBAAwB;AACpC;AAAA,IACF;AACA,eAAW,QAAQ,UAAU,IAAI,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtD;AACF,CAAC;AAED,IAAM,SAASD,eAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAwB,EAAE,OAAO,KAAK,MAAM;AAClD,UAAM,QAAQ,MAAM,OAAO;AAAA,MACzB,sBAAsB,mBAAmB,KAAK,MAAM,CAAC;AAAA,MACrD;AAAA,IACF;AACA,YAAQ,IAAI,GAAG,MAAM,MAAM,KAAK,MAAM,IAAI,MAAM,aAAa,KAAK,CAAC,EAAE;AAAA,EACvE;AACF,CAAC;AAED,IAAM,QAAQD,eAAc;AAAA,EAC1B,MAAM,EAAE,MAAM,MAAM,aAAa,oCAAoC;AAAA,EACrE,MAAM;AAAA,IACJ,QAAQ,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,wBAAwB;AAAA,EACrF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,sBAAsB,mBAAmB,KAAK,MAAM,CAAC,EAAE;AACxE,YAAQ,IAAI,WAAW,KAAK,MAAM,EAAE;AAAA,EACtC;AACF,CAAC;AAEM,IAAM,gBAAgBD,eAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,aAAa;AAAA,IACX,MAAMD;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF,CAAC;;;AC7FD,SAAS,iBAAAG,sBAAqB;AAGvB,IAAM,gBAAgBC,eAAc;AAAA,EACzC,MAAM,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,EACtE,MAAM,MAAM;AACV,UAAM,SAASC,cAAa;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAkB,aAAa;AAEtD,aAAS,MAAM,OAAe,WAAoB,MAAqB;AACrE,YAAM,OAAO,YAAY,WAAM;AAC/B,YAAM,OAAO,CAAC,aAAa,OAAO,WAAM,IAAI,KAAK;AACjD,cAAQ,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE;AAAA,IACzC;AAEA,YAAQ,IAAI,kBAAkB,EAAE,IAAI,EAAE;AACtC,YAAQ,IAAI;AACZ,YAAQ,IAAI,OAAO;AACnB,UAAM,mBAAmB,EAAE,MAAM,IAAI;AACrC,UAAM,mBAAmB,EAAE,MAAM,IAAI,oDAAoD;AACzF,UAAM,oBAAoB,EAAE,MAAM,MAAM,oDAAoD;AAC5F,UAAM,uBAAuB,EAAE,MAAM,QAAQ;AAC7C,UAAM,qBAAqB,EAAE,MAAM,MAAM;AACzC,UAAM,qBAAqB,EAAE,MAAM,MAAM;AAEzC,QAAI,EAAE,UAAU;AACd,cAAQ,IAAI;AACZ,cAAQ,IAAI,UAAU;AACtB,UAAI,EAAE,SAAS,IAAI;AACjB,gBAAQ,IAAI,KAAK,EAAE,SAAS,QAAQ,aAAa;AACjD,gBAAQ;AAAA,UACN,KAAK,EAAE,SAAS,YAAY,qBAAqB,EAAE,SAAS,WAAW;AAAA,QACzE;AACA,gBAAQ,IAAI,KAAK,EAAE,SAAS,MAAM,WAAW;AAAA,MAC/C,OAAO;AACL,cAAM,iBAAiB,OAAO,EAAE,SAAS,KAAK;AAAA,MAChD;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,gBAAgB;AAC5B,YAAQ,IAAI,KAAK,EAAE,OAAO,SAAS,qBAAqB;AACxD,QAAI,EAAE,OAAO,cAAc,GAAG;AAC5B,YAAM,oBAAoB,OAAO,GAAG,EAAE,OAAO,WAAW,uBAAuB;AAAA,IACjF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,0CAA0C;AACtD,QAAI,EAAE,UAAU,WAAW,WAAW,GAAG;AACvC,cAAQ,IAAI,mCAAmC;AAC/C,cAAQ,IAAI,kEAAkE;AAAA,IAChF,OAAO;AACL,iBAAW,QAAQ,EAAE,UAAU,YAAY;AACzC,gBAAQ,IAAI,YAAO,IAAI,EAAE;AAAA,MAC3B;AAAA,IACF;AACA,YAAQ;AAAA,MACN,sBAAiB,EAAE,UAAU,SAAS,OAAO,GAC3C,EAAE,UAAU,SAAS,SAAS,mBAAmB,EACnD;AAAA,IACF;AACA,YAAQ,IAAI,sBAAiB,EAAE,UAAU,OAAO,OAAO,EAAE;AAEzD,YAAQ,IAAI;AACZ,YAAQ,IAAI,sDAAsD;AAClE,QAAI,EAAE,UAAU,cAAc;AAC5B,cAAQ,IAAI,6CAAwC,EAAE,UAAU,YAAY,GAAG;AAAA,IACjF,OAAO;AACL,cAAQ,IAAI,mFAA8E;AAAA,IAC5F;AACA,QAAI,EAAE,UAAU,YAAY;AAC1B,cAAQ,IAAI,qBAAgB,EAAE,UAAU,UAAU,EAAE;AAAA,IACtD,OAAO;AACL,cAAQ,IAAI,oDAAoD;AAAA,IAClE;AACA,QAAI,CAAC,EAAE,UAAU,gBAAgB,CAAC,EAAE,UAAU,YAAY;AACxD,cAAQ,IAAI,iFAAuE;AAAA,IACrF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,sBAAsB;AAClC,QAAI,EAAE,SAAS,QAAQ;AACrB,cAAQ,IAAI,YAAO,EAAE,SAAS,IAAI,QAAQ;AAC1C,cAAQ,IAAI,gDAAgD;AAAA,IAC9D,OAAO;AACL,cAAQ,IAAI,OAAO,EAAE,SAAS,IAAI,6CAA6C;AAAA,IACjF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,iBAAiB;AAC7B,YAAQ;AAAA,MACN,KAAK,EAAE,UAAU,UAAU,WAAM,GAAG,aAClC,EAAE,UAAU,UAAU,UAAU,EAAE,UAAU,MAAM,QAAQ,2BAC5D;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,oBAAoB;AAChC,YAAQ,IAAI,KAAK,EAAE,SAAS,MAAM,uBAAuB,EAAE,SAAS,QAAQ,WAAW;AACvF,YAAQ,IAAI,KAAK,EAAE,OAAO,MAAM,sBAAsB;AAEtD,UAAM,mBAAmB,EAAE,UAAU,WAAW,SAAS;AACzD,UAAM,eAAe,EAAE,UAAU,KAAK,EAAE,SAAS,WAAW,KAAK;AACjE,UAAM,aAAa,EAAE,UAAU,KAAK,EAAE,SAAS,cAAc,KAAK;AAElE,YAAQ,IAAI;AACZ,QAAI,CAAC,EAAE,IAAI;AACT,cAAQ,IAAI,qBAAgB;AAC5B,cAAQ,KAAK,CAAC;AAAA,IAChB;AAMA,QAAI,CAAC,eAAe,CAAC,WAAW;AAC9B,cAAQ,IAAI,qDAAgD;AAC5D,YAAM,OAAiB,CAAC;AACxB,UAAI,CAAC,kBAAkB;AACrB,aAAK,KAAK,+EAA+E;AACzF,aAAK,KAAK,uDAAuD;AAAA,MACnE;AACA,UAAI,CAAC,YAAa,MAAK,KAAK,mEAA8D;AAC1F,UAAI,CAAC,UAAW,MAAK,KAAK,yDAAyD;AACnF,iBAAW,QAAQ,KAAM,SAAQ,IAAI,IAAI;AAAA,IAC3C,OAAO;AACL,cAAQ,IAAI,iBAAY;AAAA,IAC1B;AAAA,EACF;AACF,CAAC;;;AClID,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,SAAAC,cAAa;AAEtB,SAAS,iBAAAC,sBAAqB;AAI9B,IAAM,SAASC,eAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,IACpE,MAAM,EAAE,MAAM,UAAU,aAAa,kCAAkC;AAAA,IACvE,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA6B;AAAA,MACjC,IAAI,KAAK;AAAA,MACT,GAAI,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,MACvC,GAAI,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,IACzC;AACA,UAAM,IAAI,MAAM,OAAO,KAAY,eAAe,IAAI;AACtD,YAAQ,IAAI,oBAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AAAA,EACrD;AACF,CAAC;AAED,IAAMC,WAAUF,eAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,EACjD,MAAM,MAAM;AACV,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,MAAM,OAAO,IAAa,aAAa;AACpD,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI,aAAa;AACzB;AAAA,IACF;AACA,UAAM,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AAC3C,eAAW,QAAQ,UAAU,IAAI,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtD;AACF,CAAC;AAED,IAAME,SAAQH,eAAc;AAAA,EAC1B,MAAM,EAAE,MAAM,MAAM,aAAa,8BAA8B;AAAA,EAC/D,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,eAAe,KAAK,EAAE,EAAE;AACzC,YAAQ,IAAI,iBAAiB,KAAK,EAAE,EAAE;AAAA,EACxC;AACF,CAAC;AAED,eAAe,YAA6B;AAC1C,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAASG,OAAO,QAAO,KAAK,KAAe;AAC5D,SAAO,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM;AAC9C;AAEA,IAAM,gBAAgBJ,eAAc;AAAA,EAClC,MAAM,EAAE,MAAM,QAAQ,aAAa,4BAA4B;AAAA,EAC/D,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK,EAAE;AAAA,EACnD,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAW,eAAe,KAAK,EAAE,EAAE;AAC1D,YAAQ,OAAO,MAAM,EAAE,MAAM;AAC7B,QAAI,EAAE,UAAU,CAAC,EAAE,OAAO,SAAS,IAAI,EAAG,SAAQ,OAAO,MAAM,IAAI;AAAA,EACrE;AACF,CAAC;AAED,IAAM,eAAeD,eAAc;AAAA,EACjC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,MAAM,UAAU,aAAa,gCAAgC;AAAA,IACrE,cAAc,EAAE,MAAM,WAAW,aAAa,0BAA0B;AAAA,IACxE,MAAM,EAAE,MAAM,UAAU,aAAa,iBAAiB;AAAA,EACxD;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI;AACJ,QAAI,KAAK,YAAY,EAAG,WAAU,MAAM,UAAU;AAAA,aACzC,KAAK,KAAM,WAAUK,cAAa,KAAK,MAAM,MAAM;AAAA,aACnD,KAAK,SAAS,OAAW,WAAU,KAAK;AAAA,SAC5C;AACH,cAAQ,MAAM,4DAA4D;AAC1E,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM,SAASJ,cAAa;AAC5B,UAAM,OAA8B,EAAE,QAAQ,QAAQ;AACtD,UAAM,OAAO,IAAI,eAAe,KAAK,EAAE,YAAY,IAAI;AACvD,YAAQ,IAAI,6BAA6B,KAAK,EAAE,KAAK,QAAQ,MAAM,SAAS;AAAA,EAC9E;AACF,CAAC;AAED,IAAM,iBAAiBD,eAAc;AAAA,EACnC,MAAM,EAAE,MAAM,SAAS,aAAa,qCAAqC;AAAA,EACzE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK,EAAE;AAAA,EACnD,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA8B,EAAE,QAAQ,GAAG;AACjD,UAAM,OAAO,IAAI,eAAe,KAAK,EAAE,YAAY,IAAI;AACvD,YAAQ,IAAI,6BAA6B,KAAK,EAAE,EAAE;AAAA,EACpD;AACF,CAAC;AAED,IAAM,YAAYD,eAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,WAAW,aAAa,iCAAiC;AAAA,EACvE,aAAa;AAAA,IACX,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AACF,CAAC;AAEM,IAAM,eAAeA,eAAc;AAAA,EACxC,MAAM,EAAE,MAAM,SAAS,aAAa,yCAAyC;AAAA,EAC7E,aAAa;AAAA,IACX,KAAK;AAAA,IACL,MAAME;AAAA,IACN,IAAIC;AAAA,IACJ,WAAW;AAAA,EACb;AACF,CAAC;;;AClID,SAAS,iBAAAG,sBAAqB;AAI9B,SAAS,WAAW,SAAyB;AAC3C,MAAI;AACF,UAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,QAAI,OAAO,IAAI,SAAS,SAAU,QAAO,IAAI;AAAA,EAC/C,QAAQ;AAAA,EAAC;AACT,SAAO;AACT;AAEA,SAAS,WAAW,GAAsB;AACxC,QAAM,OAAO,IAAI,KAAK,EAAE,SAAS,EAAE,YAAY;AAC/C,QAAM,QAAQ,EAAE,SAAS,SAAS;AAClC,QAAM,OAAO,WAAW,EAAE,OAAO;AACjC,QAAM,UAAU,KAAK,SAAS,KAAK,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,WAAM;AAC7D,SAAO,CAAC,EAAE,IAAI,OAAO,MAAM,QAAQ,EAAE,YAAY,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,GAAG;AAChF;AAEA,IAAMC,WAAUC,eAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,kCAAkC;AAAA,EACrE,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,qBAAqB;AAAA,IAC/E,QAAQ,EAAE,MAAM,WAAW,aAAa,4BAA4B;AAAA,EACtE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,KAAK,KAAK,SAAS,cAAc;AACvC,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO;AAAA,MAChC,eAAe,KAAK,KAAK,YAAY,EAAE;AAAA,IACzC;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI,KAAK,SAAS,yBAAyB,eAAe;AAClE;AAAA,IACF;AACA,eAAW,QAAQ,UAAU,SAAS,IAAI,UAAU,CAAC,EAAG,SAAQ,IAAI,IAAI;AAAA,EAC1E;AACF,CAAC;AAED,IAAMC,WAAUF,eAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,gCAAgC;AAAA,EACnE,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,EACtE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAa,iBAAiB,KAAK,EAAE,EAAE;AAC9D,UAAM,OAAO,IAAI,KAAK,EAAE,SAAS,EAAE,YAAY;AAC/C,UAAM,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,EAAE,YAAY,IAAI;AAC3D,YAAQ,IAAI,cAAc,EAAE,EAAE,EAAE;AAChC,YAAQ,IAAI,cAAc,EAAE,WAAW,EAAE;AACzC,YAAQ,IAAI,cAAc,EAAE,SAAS,EAAE;AACvC,YAAQ,IAAI,cAAc,IAAI,EAAE;AAChC,YAAQ,IAAI,cAAc,IAAI,EAAE;AAChC,QAAI,EAAE,QAAS,SAAQ,IAAI,cAAc,EAAE,OAAO,EAAE;AACpD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,WAAW,EAAE,OAAO,CAAC;AAAA,EACnC;AACF,CAAC;AAED,IAAM,UAAUD,eAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,yBAAyB;AAAA,EAC5D,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,EACtE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,MAAe,iBAAiB,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACtE,YAAQ,IAAI,gBAAgB,KAAK,EAAE,EAAE;AAAA,EACvC;AACF,CAAC;AAEM,IAAM,eAAeD,eAAc;AAAA,EACxC,MAAM,EAAE,MAAM,SAAS,aAAa,wBAAwB;AAAA,EAC5D,aAAa;AAAA,IACX,MAAMD;AAAA,IACN,MAAMG;AAAA,IACN,MAAM;AAAA,EACR;AACF,CAAC;;;ACjFD,SAAS,cAAAC,aAAY,gBAAAC,eAAc,qBAAqB;AACxD,SAAS,iBAAAC,sBAAqB;AAI9B,SAAS,gBAAgB,KAAqB;AAC5C,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,GAAG;AAAA,EACnB,QAAQ;AACN,UAAM,IAAI,MAAM,yBAAyB,GAAG,EAAE;AAAA,EAChD;AACA,MAAI,CAAC,YAAY,KAAK,IAAI,QAAQ,GAAG;AACnC,UAAM,IAAI,MAAM,iCAAiC,IAAI,QAAQ,EAAE;AAAA,EACjE;AAEA,SAAO,GAAG,IAAI,MAAM,GAAG,IAAI,SAAS,QAAQ,OAAO,EAAE,CAAC;AACxD;AAEA,eAAe,YAAY,QAAgB,OAA8B;AACvE,QAAM,MAAM,MAAM,MAAM,GAAG,MAAM,eAAe;AAAA,IAC9C,SAAS,EAAE,eAAe,UAAU,KAAK,IAAI,QAAQ,OAAO;AAAA,EAC9D,CAAC;AACD,MAAI,IAAI,WAAW,IAAK,OAAM,IAAI,MAAM,6BAA6B;AACrE,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,mBAAmB,IAAI,MAAM,mBAAmB;AAC/E;AAEO,IAAM,eAAeC,eAAc;AAAA,EACxC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ,EAAE,MAAM,UAAU,aAAa,oCAAoC;AAAA,IAC3E,OAAO,EAAE,MAAM,UAAU,aAAa,0CAA0C;AAAA,IAChF,YAAY,EAAE,MAAM,WAAW,aAAa,wCAAwC;AAAA,IACpF,OAAO,EAAE,MAAM,WAAW,aAAa,kDAAkD;AAAA,EAC3F;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,QAAQ,gBAAgB;AAC9B,QAAI,CAACC,YAAW,MAAM,QAAQ,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,GAAG,MAAM,QAAQ;AAAA,MACnB;AAAA,IACF;AACA,UAAM,OAAO,KAAK,MAAMC,cAAa,MAAM,UAAU,MAAM,CAAC;AAE5D,QAAI,KAAK,OAAO;AACd,UAAI,CAAC,KAAK,QAAQ;AAChB,gBAAQ,IAAI,0CAAqC;AACjD;AAAA,MACF;AACA,aAAO,KAAK;AACZ,oBAAc,MAAM,UAAU,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,GAAM,EAAE,MAAM,IAAM,CAAC;AACnF,cAAQ,IAAI,+DAA+D;AAC3E;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,UAAU,CAAC,KAAK,OAAO;AAC/B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,gBAAgB,KAAK,MAAM;AAC1C,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,YAAY,QAAQ,KAAK,KAAK;AAAA,IACtC;AACA,SAAK,SAAS,EAAE,QAAQ,OAAO,KAAK,MAAM;AAC1C,kBAAc,MAAM,UAAU,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,GAAM,EAAE,MAAM,IAAM,CAAC;AACnF,YAAQ,IAAI,iBAAiB,MAAM,EAAE;AACrC,YAAQ,IAAI,2EAA2E;AAAA,EACzF;AACF,CAAC;;;ACvED,SAAS,iBAAAC,uBAAqB;AAG9B,SAAS,UAAU,KAAqB;AACtC,SAAO,IAAI,MAAM,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,GAAG;AACxD;AAEA,IAAM,WAAWC,gBAAc;AAAA,EAC7B,MAAM,EAAE,MAAM,SAAS,aAAa,8CAA8C;AAAA,EAClF,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,IACvE,KAAK,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,kCAAkC;AAAA,IAC1F,SAAS,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,mBAAmB;AAAA,EACjF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAMC,SAAQ,MAAM,OAAO;AAAA,MACzB,eAAe,KAAK,KAAK,WAAW,UAAU,KAAK,GAAG,CAAC;AAAA,MACvD,EAAE,SAAS,KAAK,QAAQ;AAAA,IAC1B;AACA,YAAQ,IAAI,SAASA,OAAM,GAAG,KAAKA,OAAM,QAAQ,MAAM,SAAS;AAAA,EAClE;AACF,CAAC;AAED,IAAMC,WAAUH,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,6CAA6C;AAAA,EAChF,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,IACvE,KAAK,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC5C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAMC,SAAQ,MAAM,OAAO;AAAA,MACzB,eAAe,KAAK,KAAK,WAAW,UAAU,KAAK,GAAG,CAAC;AAAA,IACzD;AACA,YAAQ,IAAIA,OAAM,OAAO;AAAA,EAC3B;AACF,CAAC;AAED,IAAM,YAAYF,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,EACtE,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,IACvE,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IAC5C,OAAO,EAAE,MAAM,UAAU,aAAa,2BAA2B;AAAA,EACnE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,QAAQ,KAAK,QAAQ,OAAO,SAAS,KAAK,OAAO,EAAE,IAAI;AAC7D,UAAM,SAAS,IAAI,gBAAgB,EAAE,GAAG,KAAK,OAAO,OAAO,OAAO,KAAK,EAAE,CAAC;AAC1E,UAAM,OAAO,MAAM,OAAO,IAAiB,eAAe,KAAK,KAAK,kBAAkB,MAAM,EAAE;AAC9F,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI,cAAc;AAC1B;AAAA,IACF;AACA,eAAW,KAAK,MAAM;AACpB,cAAQ,IAAI,GAAG,EAAE,GAAG,IAAK,EAAE,QAAQ,WAAW,MAAM,GAAG,CAAC,EAAE;AAAA,IAC5D;AAAA,EACF;AACF,CAAC;AAED,IAAMG,WAAUJ,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,8CAA8C;AAAA,EACjF,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,EACzE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,MAAM,MAAM,OAAO,IAAmB,eAAe,KAAK,KAAK,SAAS;AAC9E,QAAI,IAAI,WAAW,GAAG;AACpB,cAAQ,IAAI,qBAAqB;AACjC;AAAA,IACF;AACA,eAAW,KAAK,KAAK;AACnB,cAAQ,IAAI,GAAG,EAAE,GAAG,IAAK,EAAE,QAAQ,MAAM,GAAG;AAAA,IAC9C;AAAA,EACF;AACF,CAAC;AAED,IAAMI,SAAQL,gBAAc;AAAA,EAC1B,MAAM,EAAE,MAAM,MAAM,aAAa,+CAA+C;AAAA,EAChF,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,aAAa;AAAA,IACvE,KAAK,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC5C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,eAAe,KAAK,KAAK,WAAW,UAAU,KAAK,GAAG,CAAC,EAAE;AAC1E,YAAQ,IAAI,WAAW,KAAK,GAAG,EAAE;AAAA,EACnC;AACF,CAAC;AAEM,IAAM,gBAAgBD,gBAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,MAAMG;AAAA,IACN,QAAQ;AAAA,IACR,MAAMC;AAAA,IACN,IAAIC;AAAA,EACN;AACF,CAAC;;;ACzGD,SAAS,SAAAC,cAAa;AACtB,SAAS,mBAAmB;AAC5B,SAAS,gBAAAC,eAAc,UAAAC,SAAQ,iBAAAC,sBAAqB;AACpD,SAAS,cAAc;AACvB,SAAS,QAAAC,aAAY;;;ACqLd,IAAM,gBAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ADjLA,SAAS,iBAAAC,uBAAqB;AAI9B,SAAS,SAAS,GAA6C;AAC7D,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,MAAM,EACT,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB,SAAO,IAAI,SAAS,IAAI,MAAM;AAChC;AAEA,SAAS,gBAAgB,GAA+C;AACtE,MAAI,MAAM,OAAW,QAAO;AAC5B,MAAI,MAAM,SAAS,MAAM,WAAY,QAAO;AAC5C,QAAM,IAAI,MAAM,mDAAmD,CAAC,GAAG;AACzE;AAEA,IAAMC,aAAYC,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,EAC5D,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,eAAe;AAAA,IACtE,MAAM,EAAE,MAAM,UAAU,aAAa,kCAAkC;AAAA,IACvE,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,aAAa,gBAAgB,KAAK,aAAa,CAAC;AACtD,UAAM,eAAe,CAAC,SACpB,OAAOC,cAAa,MAAM,MAAM,IAAI;AACtC,UAAM,OAA6B;AAAA,MACjC,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,cAAc,KAAK;AAAA,MACnB;AAAA,MACA,eAAe,SAAS,KAAK,MAAM;AAAA,MACnC,MAAM,aAAa,KAAK,WAAW,CAAC;AAAA,MACpC,UAAU,aAAa,KAAK,eAAe,CAAC;AAAA,MAC5C,WAAW,KAAK,gBAAgB,IAC5B,OACC,aAAa,KAAK,gBAAgB,CAAC,KAAK;AAAA,MAC7C,QAAQ,aAAa,KAAK,aAAa,CAAC;AAAA,MACxC,OAAO,aAAa,KAAK,YAAY,CAAC;AAAA,MACtC,WAAW,aAAa,KAAK,gBAAgB,CAAC;AAAA,IAChD;AACA,UAAM,SAASC,cAAa;AAC5B,UAAM,UAAU,MAAM,OAAO,KAAc,iBAAiB,IAAI;AAChE,YAAQ,IAAI,mBAAmB,QAAQ,EAAE,OAAO,QAAQ,GAAG,EAAE;AAAA,EAC/D;AACF,CAAC;AAED,IAAMC,WAAUH,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,gBAAgB;AAAA,EACnD,MAAM,MAAM;AACV,UAAM,SAASE,cAAa;AAC5B,UAAM,OAAO,MAAM,OAAO,IAAe,eAAe;AACxD,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI,eAAe;AAC3B;AAAA,IACF;AACA,UAAM,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC;AAC3D,eAAW,QAAQ,UAAU,IAAI,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtD;AACF,CAAC;AAED,IAAME,WAAUJ,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,uBAAuB;AAAA,EAC1D,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASE,cAAa;AAC5B,UAAM,SAAS,MAAM,OAAO,IAAmB,iBAAiB,KAAK,EAAE,EAAE;AACzE,YAAQ,IAAI,KAAK,OAAO,QAAQ,EAAE,EAAE;AACpC,YAAQ,IAAI,mBAAmB,OAAO,QAAQ,IAAI,EAAE;AACpD,YAAQ,IAAI,mBAAmB,OAAO,QAAQ,GAAG,EAAE;AACnD,YAAQ,IAAI,mBAAmB,OAAO,QAAQ,YAAY,EAAE;AAC5D,YAAQ,IAAI,mBAAmB,OAAO,QAAQ,UAAU,EAAE;AAC1D,YAAQ;AAAA,MACN,mBACE,OAAO,cAAc,WAAW,IAAI,WAAW,OAAO,cAAc,KAAK,IAAI,CAC/E;AAAA,IACF;AACA,YAAQ,IAAI,cAAc,OAAO,MAAM,cAAc,OAAO,QAAQ,IAAI,EAAE;AAC1E,YAAQ,IAAI,cAAc,OAAO,MAAM,WAAW,OAAO,QAAQ,IAAI,EAAE;AACvE,YAAQ,IAAI,cAAc,OAAO,MAAM,UAAU,OAAO,QAAQ,IAAI,EAAE;AACtE,YAAQ,IAAI,cAAc,OAAO,MAAM,cAAc,OAAO,QAAQ,IAAI,EAAE;AAC1E,QAAI,OAAO,UAAU;AACnB,YAAM,SAAS,OAAO,QAAQ,OAAO,QAAQ,EAC1C,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,OAAO,MAAM,YAAY,EAAE,SAAS,CAAC,EACvD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAC3B,KAAK,IAAI;AACZ,UAAI,OAAQ,SAAQ,IAAI,cAAc,MAAM,EAAE;AAAA,IAChD;AAAA,EACF;AACF,CAAC;AAED,IAAMG,WAAUL,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,iCAAiC;AAAA,EACpE,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa,SAAS,cAAc,KAAK,IAAI,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI,CAAE,cAAoC,SAAS,KAAK,IAAI,GAAG;AAC7D,YAAM,IAAI,MAAM,qBAAqB,KAAK,IAAI,cAAc,cAAc,KAAK,IAAI,CAAC,EAAE;AAAA,IACxF;AACA,UAAM,OAAO,KAAK;AAClB,UAAM,SAASE,cAAa;AAC5B,UAAM,EAAE,QAAQ,IAAI,MAAM,OAAO;AAAA,MAC/B,iBAAiB,KAAK,EAAE,UAAU,IAAI;AAAA,IACxC;AACA,UAAM,UAAUI,MAAK,OAAO,GAAG,YAAY,KAAK,EAAE,IAAI,IAAI,IAAI,YAAY,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE;AAC9F,IAAAC,eAAc,SAAS,OAAO;AAC9B,QAAI;AACF,YAAM,SAAS,QAAQ,IAAI,UAAU,QAAQ,IAAI,UAAU;AAC3D,YAAM,OAAe,MAAM,IAAI,QAAQ,CAACC,UAAS,WAAW;AAC1D,cAAM,QAAQC,OAAM,QAAQ,CAAC,OAAO,GAAG,EAAE,OAAO,UAAU,CAAC;AAC3D,cAAM,GAAG,SAAS,MAAM;AACxB,cAAM,GAAG,SAAS,CAAC,MAAMD,SAAQ,KAAK,CAAC,CAAC;AAAA,MAC1C,CAAC;AACD,UAAI,SAAS,EAAG,OAAM,IAAI,MAAM,2BAA2B,IAAI,EAAE;AACjE,YAAM,UAAUP,cAAa,SAAS,MAAM;AAC5C,UAAI,YAAY,SAAS;AACvB,gBAAQ,IAAI,cAAc;AAC1B;AAAA,MACF;AACA,YAAM,OAAuB,EAAE,SAAS,QAAQ;AAChD,YAAM,OAAO,IAAI,iBAAiB,KAAK,EAAE,UAAU,IAAI,IAAI,IAAI;AAC/D,cAAQ,IAAI,SAAS,IAAI,EAAE;AAAA,IAC7B,UAAE;AACA,UAAI;AACF,QAAAS,QAAO,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,MACjC,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EACF;AACF,CAAC;AAED,IAAM,YAAYV,gBAAc;AAAA,EAC9B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,IACxD,OAAO,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,IAC1D,eAAe;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,QAAQ,EAAE,MAAM,UAAU,aAAa,8CAA8C;AAAA,EACvF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,OAA6B,CAAC;AACpC,QAAI,KAAK,SAAS,OAAW,MAAK,OAAO,KAAK;AAC9C,QAAI,KAAK,UAAU,OAAW,MAAK,eAAe,KAAK;AACvD,UAAM,OAAO,gBAAgB,KAAK,aAAa,CAAC;AAChD,QAAI,SAAS,OAAW,MAAK,aAAa;AAC1C,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,gBAAgB,KAAK,OACvB,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AAAA,IACnB;AACA,QAAI,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG;AAClC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAASE,cAAa;AAC5B,UAAM,UAAU,MAAM,OAAO,MAAe,iBAAiB,KAAK,EAAE,IAAI,IAAI;AAC5E,YAAQ,IAAI,mBAAmB,QAAQ,EAAE,EAAE;AAAA,EAC7C;AACF,CAAC;AAED,IAAMS,aAAYX,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,6CAA6C;AAAA,EAClF,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASE,cAAa;AAC5B,UAAM,OAAO,IAAI,iBAAiB,KAAK,EAAE,EAAE;AAC3C,YAAQ,IAAI,mBAAmB,KAAK,EAAE,EAAE;AAAA,EAC1C;AACF,CAAC;AAEM,IAAM,iBAAiBF,gBAAc;AAAA,EAC1C,MAAM,EAAE,MAAM,WAAW,aAAa,kBAAkB;AAAA,EACxD,aAAa;AAAA,IACX,QAAQD;AAAA,IACR,MAAMI;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,QAAQ;AAAA,IACR,QAAQM;AAAA,EACV;AACF,CAAC;;;AE1PD,SAAS,iBAAAC,uBAAqB;AAI9B,IAAMC,WAAUC,gBAAc;AAAA,EAC5B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,WAAW,aAAa,8BAA8B;AAAA,EACzE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,IAA4B,uBAAuB;AACtF,UAAM,WAAW,KAAK,UAAU,UAAU,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI;AACrE,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI,wBAAwB;AACpC;AAAA,IACF;AACA,UAAM,OAAO,SAAS,IAAI,CAAC,MAAM;AAAA,MAC/B,EAAE;AAAA,MACF,EAAE,UAAU,YAAY;AAAA,MACxB,GAAG,EAAE,QAAQ,MAAM;AAAA,MACnB,GAAG,EAAE,QAAQ,MAAM;AAAA,MACnB,EAAE,UAAU,KAAK,QAAQ,EAAE,OAAO;AAAA,IACpC,CAAC;AACD,eAAW,QAAQ,UAAU,IAAI,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtD;AACF,CAAC;AAED,IAAM,YAAYD,gBAAc;AAAA,EAC9B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,gBAAgB;AAAA,EAC3E;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,IAA4B,uBAAuB;AACtF,UAAM,IAAI,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;AAClD,QAAI,CAAC,GAAG;AACN,cAAQ,MAAM,qBAAqB,KAAK,IAAI,EAAE;AAC9C,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,YAAY,UAAU,GAAG;AAC/D,QAAI,CAAC,EAAE,QAAS,SAAQ,IAAI,UAAU,EAAE,OAAO,aAAa;AAE5D,YAAQ,IAAI,cAAc;AAC1B,QAAI,EAAE,QAAQ,WAAW,EAAG,SAAQ,IAAI,uDAAkD;AAAA,QACrF,YAAW,KAAK,EAAE,QAAS,SAAQ,IAAI,KAAK,CAAC,EAAE;AAEpD,YAAQ,IAAI,2BAA2B;AACvC,QAAI,EAAE,QAAQ,WAAW,EAAG,SAAQ,IAAI,WAAW;AAAA,QAC9C,YAAW,KAAK,EAAE,QAAS,SAAQ,IAAI,KAAK,CAAC,EAAE;AAEpD,QAAI,EAAE,MAAM;AACV,cAAQ,IAAI,sCAAsC;AAClD,UAAI,EAAE,KAAK,MAAO,SAAQ,IAAI,aAAa,EAAE,KAAK,KAAK,GAAG;AAAA,eACjD,EAAE,KAAK,OAAO,WAAW,EAAG,SAAQ,IAAI,WAAW;AAAA,UACvD,YAAW,KAAK,EAAE,KAAK,OAAQ,SAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,IAC1D;AAAA,EACF;AACF,CAAC;AAED,IAAM,eAAeD,gBAAc;AAAA,EACjC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,gBAAgB;AAAA,IACzE,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,SAAS,KAAK,OACjB,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB,UAAM,OAAiC,EAAE,OAAO;AAChD,UAAM,QAAQ,MAAM,OAAO;AAAA,MACzB,yBAAyB,mBAAmB,KAAK,IAAI,CAAC;AAAA,MACtD;AAAA,IACF;AACA,YAAQ,IAAI,SAAS,MAAM,OAAO,MAAM,yBAAyB,KAAK,IAAI,EAAE;AAC5E,eAAW,KAAK,MAAM,OAAQ,SAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,EACpD;AACF,CAAC;AAED,IAAM,YAAYD,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,4CAA4C;AAAA,EACjF,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,+BAA+B;AAAA,EAC1F;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,MAAM,MAAM,OAAO;AAAA,MACvB,yBAAyB,mBAAmB,KAAK,IAAI,CAAC;AAAA,MACtD,EAAE,SAAS,KAAK;AAAA,IAClB;AACA,YAAQ,IAAI,GAAG,IAAI,IAAI,WAAW;AAAA,EACpC;AACF,CAAC;AAED,IAAM,aAAaD,gBAAc;AAAA,EAC/B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,cAAc;AAAA,EACzE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,MAAM,MAAM,OAAO;AAAA,MACvB,yBAAyB,mBAAmB,KAAK,IAAI,CAAC;AAAA,MACtD,EAAE,SAAS,MAAM;AAAA,IACnB;AACA,YAAQ,IAAI,GAAG,IAAI,IAAI,YAAY;AAAA,EACrC;AACF,CAAC;AAED,IAAM,UAAUD,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,oDAAoD;AAAA,EACvF,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,SAAS,EAAE,MAAM,UAAU,aAAa,0CAA0C;AAAA,EACpF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA4B,EAAE,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ;AAC7E,YAAQ,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,WAAW,gBAAgB,EAAE;AACnE,UAAM,MAAM,MAAM,OAAO,KAA2B,uBAAuB,IAAI;AAC/E,YAAQ,IAAI,MAAM,IAAI,OAAO,EAAE;AAC/B,QAAI,IAAI,OAAO;AACb,cAAQ,IAAI,IAAI,IAAI,MAAM,YAAY,QAAQ,IAAI,MAAM,gBAAgB,OAAO;AAAA,IACjF;AAAA,EACF;AACF,CAAC;AAEM,IAAM,kBAAkBD,gBAAc;AAAA,EAC3C,MAAM,EAAE,MAAM,YAAY,aAAa,gCAAgC;AAAA,EACvE,aAAa;AAAA,IACX,MAAMD;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,MAAM;AAAA,EACR;AACF,CAAC;;;ACxKD,SAAS,iBAAAG,uBAAqB;AAGvB,IAAM,cAAcC,gBAAc;AAAA,EACvC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,kBAAkB;AAAA,IAC3E,IAAI,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,qBAAqB;AAAA,IAC5E,SAAS,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,eAAe;AAAA,EAC7E;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA2B;AAAA,MAC/B,MAAM,KAAK;AAAA,MACX,SAAS,EAAE,MAAM,KAAK,QAAQ;AAAA,IAChC;AACA,UAAM,MAAM,MAAM,OAAO,KAAc,eAAe,KAAK,EAAE,aAAa,IAAI;AAC9E,YAAQ,IAAI,gBAAgB,IAAI,EAAE,EAAE;AAAA,EACtC;AACF,CAAC;;;ACvBD,SAAS,SAAAC,cAAa;AACtB,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,QAAAC,aAAY;AACrB,SAAS,iBAAAC,uBAAqB;AAK9B,IAAM,qBAAqBD,MAAK,YAAY,SAAS,WAAW;AAChE,IAAM,oBAAoBA,MAAK,YAAY,SAAS,MAAM,MAAM,MAAM,UAAU,OAAO,UAAU;AACjG,IAAM,cAAcD,YAAW,kBAAkB,IAAI,qBAAqB;AAEnE,IAAM,eAAeE,gBAAc;AAAA,EACxC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IAC3D,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI,CAACF,YAAW,WAAW,GAAG;AAC5B,YAAM,IAAI;AAAA,QACR,gCAAgC,WAAW;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,MAAyB,EAAE,GAAG,QAAQ,IAAI;AAChD,QAAI,KAAK,KAAM,KAAI,OAAO,KAAK;AAC/B,QAAI,KAAK,KAAM,KAAI,OAAO,KAAK;AAE/B,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,OAAO,KAAK,QAAQ;AAE1B,QAAI,SAAS,eAAe,SAAS,eAAe,SAAS,OAAO;AAClE,cAAQ,MAAM,EAAE;AAChB,cAAQ,MAAM,qBAAgB,IAAI,sDAAiD;AACnF,cAAQ,MAAM,qEAAqE;AACnF,cAAQ,MAAM,oDAAoD;AAClE,cAAQ,MAAM,EAAE;AAAA,IAClB;AAEA,YAAQ,IAAI,sCAAsC,IAAI,IAAI,IAAI,EAAE;AAChE,YAAQ,IAAI,mDAAmD;AAQ/D,UAAM,WAAW,YAAY,SAAS,KAAK,IACvC,CAAC,YAAY,WAAW,WAAW,IACnC,CAAC,WAAW;AAChB,UAAM,OAAOD,OAAM,QAAQ,UAAU;AAAA,MACnC;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,YAAY;AAChB,UAAM,YAAY,MAAY;AAC5B,kBAAY;AACZ,UAAI;AACF,aAAK,KAAK,SAAS;AAAA,MACrB,QAAQ;AAAA,MAAC;AAAA,IACX;AAGA,YAAQ,GAAG,UAAU,MAAM;AACzB,kBAAY;AAAA,IACd,CAAC;AACD,YAAQ,GAAG,WAAW,SAAS;AAE/B,UAAM,IAAI,QAAc,CAACI,UAAS,WAAW;AAC3C,WAAK,GAAG,SAAS,CAAC,QAAQ,OAAO,GAAG,CAAC;AACrC,WAAK,GAAG,SAAS,CAAC,SAAS;AAGzB,YAAI,WAAW;AACb,kBAAQ,WAAW;AACnB,UAAAA,SAAQ;AAAA,QACV,WAAW,SAAS,KAAK,SAAS,MAAM;AACtC,UAAAA,SAAQ;AAAA,QACV,OAAO;AACL,kBAAQ,WAAW;AACnB,UAAAA,SAAQ;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF,CAAC;;;AC9FD,SAAS,cAAAC,aAAY,gBAAAC,eAAc,gBAAgB;AACnD,SAAS,UAAU,WAAAC,gBAAe;AAOlC,SAAS,iBAAAC,uBAAqB;AAI9B,IAAMC,WAAUC,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,wDAAwD;AAAA,EAC3F,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,UAAU,aAAa,0CAA0C;AAAA,EAClF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAE5B,QAAI,KAAK,OAAO;AACd,YAAM,MAAM,MAAM,OAAO,IAA4B,eAAe,KAAK,KAAK,SAAS;AACvF,UAAI,IAAI,SAAS,WAAW,KAAK,IAAI,QAAQ,WAAW,GAAG;AACzD,gBAAQ,IAAI,oCAAoC;AAChD;AAAA,MACF;AACA,YAAMC,QAAO,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;AAC5D,iBAAW,QAAQ,UAAUA,KAAI,EAAG,SAAQ,IAAI,IAAI;AACpD,iBAAW,KAAK,IAAI,SAAS;AAC3B,gBAAQ,IAAI,aAAa,EAAE,IAAI,WAAM,EAAE,MAAM,GAAG;AAAA,MAClD;AACA;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,OAAO,IAAiB,aAAa;AAC1D,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAI,gEAAgE;AAC5E;AAAA,IACF;AACA,UAAM,OAAO,OAAO,IAAI,CAAC,MAAM;AAAA,MAC7B,EAAE;AAAA,MACF,EAAE,aAAa,iBAAiB,EAAE,UAAU,MAAM,EAAE;AAAA,IACtD,CAAC;AACD,eAAW,QAAQ,UAAU,IAAI,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtD;AACF,CAAC;AAED,IAAM,YAAYF,gBAAc;AAAA,EAC9B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aACE;AAAA,IACJ;AAAA,IACA,OAAO,EAAE,MAAM,WAAW,aAAa,4BAA4B;AAAA,EACrE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAK5B,UAAM,UAAUE,SAAQ,KAAK,IAAI;AACjC,UAAM,aACJ,KAAK,KAAK,YAAY,EAAE,SAAS,MAAM,KAAKC,YAAW,OAAO,KAAK,SAAS,OAAO,EAAE,OAAO;AAE9F,QAAI;AACJ,QAAI,YAAY;AACd,YAAM,QAAQC,cAAa,OAAO;AAClC,YAAM,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,OAAO,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC7E,YAAM,KAAK,IAAI,SAAS;AACxB,SAAG,IAAI,QAAQ,IAAI;AACnB,UAAI,KAAK,MAAO,IAAG,IAAI,SAAS,MAAM;AACtC,eAAS,MAAM,OAAO,cAAoC,sBAAsB,EAAE;AAAA,IACpF,OAAO;AACL,YAAM,OAA4B;AAAA,QAChC,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK;AAAA,MACd;AACA,eAAS,MAAM,OAAO,KAA2B,sBAAsB,IAAI;AAAA,IAC7E;AAEA,QAAI,OAAO,SAAS,WAAW,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC/D,cAAQ,IAAI,qBAAqB;AACjC;AAAA,IACF;AACA,eAAW,QAAQ,OAAO,UAAU;AAClC,cAAQ,IAAI,YAAY,IAAI,EAAE;AAAA,IAChC;AACA,eAAW,KAAK,OAAO,SAAS;AAC9B,cAAQ,IAAI,WAAW,EAAE,IAAI,KAAK,EAAE,MAAM,EAAE;AAAA,IAC9C;AAAA,EACF;AACF,CAAC;AAED,IAAMC,SAAQN,gBAAc;AAAA,EAC1B,MAAM,EAAE,MAAM,MAAM,aAAa,4BAA4B;AAAA,EAC7D,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC7C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,eAAe,mBAAmB,KAAK,IAAI,CAAC,EAAE;AAC/D,YAAQ,IAAI,iBAAiB,KAAK,IAAI,EAAE;AAAA,EAC1C;AACF,CAAC;AAEM,IAAM,eAAeD,gBAAc;AAAA,EACxC,MAAM,EAAE,MAAM,SAAS,aAAa,2BAA2B;AAAA,EAC/D,aAAa;AAAA,IACX,MAAMD;AAAA,IACN,QAAQ;AAAA,IACR,IAAIO;AAAA,EACN;AACF,CAAC;;;ACvHD,SAAS,yBAAyB;AAOlC,SAAS,iBAAAC,uBAAqB;AAC9B,OAAO,YAAY;AAMnB,SAAS,SAAS,GAAuB;AACvC,QAAM,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,UAAU,EAAE,YAAY,IAAI;AACnE,QAAM,QAAQ,EAAE,YAAY,YAAY;AACxC,SAAO,CAAC,EAAE,IAAI,OAAO,EAAE,OAAO,SAAS,IAAI,EAAE;AAC/C;AAQA,SAAS,gBAAgB,MAA2D;AAClF,QAAM,aAAuB,CAAC;AAC9B,aAAW,OAAO,OAAO,OAAO,kBAAkB,CAAC,GAAG;AACpD,eAAW,KAAK,OAAO,CAAC,GAAG;AACzB,UAAI,EAAE,WAAW,UAAU,CAAC,EAAE,SAAU,YAAW,KAAK,EAAE,OAAO;AAAA,IACnE;AAAA,EACF;AACA,QAAM,CAAC,OAAO,GAAG,IAAI,IAAI;AACzB,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,UAAU,KAAK,IAAI,IAAI;AACtC,SAAO,KAAK,SAAS,IACjB,EAAE,QAAQ,SAAS,2BAA2B,WAAW,KAAK,IAAI,CAAC,kBAAa,KAAK,GAAG,IACxF,EAAE,OAAO;AACf;AAEA,SAAS,gBAAgB,UAAsC;AAC7D,MAAI,SAAU,QAAO,SAAS,QAAQ,OAAO,EAAE;AAE/C,QAAM,MAAM,iBAAiB;AAC7B,QAAM,UAAU,IAAI,IAAI,IAAI,SAAS;AACrC,QAAM,aACJ,QAAQ,aAAa,eACrB,QAAQ,aAAa,eACrB,QAAQ,aAAa;AAEvB,MAAI,CAAC,WAAY,QAAO,IAAI,UAAU,QAAQ,OAAO,EAAE;AAEvD,QAAM,WAAW,gBAAgB,QAAQ,QAAQ,MAAM;AACvD,MAAI,CAAC,UAAU;AACb,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AACA,MAAI,SAAS,QAAS,SAAQ,KAAK,UAAK,SAAS,OAAO,EAAE;AAC1D,SAAO,SAAS;AAClB;AAEA,IAAMC,aAAYC,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,oCAAoC;AAAA,EACzE,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,MAAM,aAAa,uBAAuB;AAAA,IACjF,IAAI;AAAA,MACF,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA2B,EAAE,OAAO,KAAK,MAAM;AACrD,UAAM,MAAM,MAAM,OAAO,KAA0B,eAAe,IAAI;AACtE,YAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,EAAE;AACnC,YAAQ,IAAI,UAAU,IAAI,KAAK,KAAK,EAAE;AACtC,YAAQ,IAAI,UAAU,IAAI,KAAK,EAAE;AACjC,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,yDAAoD;AAEhE,QAAI,CAAC,KAAK,GAAI;AAEd,UAAM,YAAY,gBAAgB,KAAK,MAAM;AAC7C,UAAM,UAAU,0BAA0B,mBAAmB,SAAS,CAAC,UAAU,mBAAmB,IAAI,KAAK,CAAC;AAC9G,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,gBAAgB,OAAO,EAAE;AACrC,YAAQ,IAAI,EAAE;AACd,WAAO,SAAS,SAAS,EAAE,OAAO,KAAK,GAAG,CAAC,OAAO,QAAQ,IAAI,EAAE,CAAC;AAAA,EACnE;AACF,CAAC;AAED,IAAMC,WAAUF,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,kBAAkB;AAAA,EACrD,MAAM;AAAA,IACJ,KAAK,EAAE,MAAM,WAAW,aAAa,yBAAyB;AAAA,EAChE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,KAAK,KAAK,MAAM,sBAAsB;AAC5C,UAAM,EAAE,OAAO,IAAI,MAAM,OAAO,IAAwB,cAAc,EAAE,EAAE;AAC1E,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAI,aAAa;AACzB;AAAA,IACF;AACA,eAAW,QAAQ,UAAU,OAAO,IAAI,QAAQ,CAAC,EAAG,SAAQ,IAAI,IAAI;AAAA,EACtE;AACF,CAAC;AAED,IAAM,eAAeD,gBAAc;AAAA,EACjC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AACJ,UAAM,QAAQ,gBAAgB;AAC9B,YAAQ,IAAI,aAAa,MAAM,QAAQ,EAAE,KAAK;AAAA,EAChD;AACF,CAAC;AAED,IAAM,YAAYA,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,EAC1D,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,eAAe,KAAK,EAAE,EAAE;AACzC,YAAQ,IAAI,iBAAiB,KAAK,EAAE,EAAE;AAAA,EACxC;AACF,CAAC;AAEM,IAAM,eAAeD,gBAAc;AAAA,EACxC,MAAM,EAAE,MAAM,SAAS,aAAa,wCAAwC;AAAA,EAC5E,aAAa;AAAA,IACX,QAAQD;AAAA,IACR,MAAMG;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF,CAAC;;;AC5ID,SAAS,iBAAAC,uBAAqB;AAI9B,IAAMC,UAASC,gBAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,OAAO,aAAa,6CAA6C;AAAA,EAC/E,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,IAC5C,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,IACA,UAAU,EAAE,MAAM,WAAW,aAAa,2BAA2B;AAAA,EACvE;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI,CAAC,KAAK,UAAU,CAAC,KAAK,MAAM;AAC9B,YAAM,IAAI,MAAM,6DAA6D;AAAA,IAC/E;AACA,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA6B,KAAK,QACpC;AAAA,MACE,MAAM;AAAA,MACN,aAAa,OAAO,KAAK,KAAK;AAAA,MAC9B,SAAS,KAAK;AAAA,MACd,SAAS,CAAC,KAAK;AAAA,IACjB,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,MACd,SAAS,CAAC,KAAK;AAAA,IACjB;AACJ,UAAM,MAAM,MAAM,OAAO,KAA4B,eAAe,KAAK,KAAK,aAAa,IAAI;AAC/F,UAAM,IAAI,IAAI;AACd,UAAM,OAAO,EAAE,SAAS,aAAa,SAAS,EAAE,WAAW,MAAM,SAAS,EAAE,QAAQ;AACpF,YAAQ,IAAI,GAAG,EAAE,EAAE,IAAK,IAAI,IAAK,EAAE,UAAU,YAAY,UAAU,EAAE;AAAA,EACvE;AACF,CAAC;AAED,SAAS,WAAW,GAA2B;AAC7C,QAAM,OAAO,EAAE,SAAS,aAAa,SAAS,EAAE,WAAW,MAAM,SAAS,EAAE,QAAQ;AACpF,QAAM,OAAO,EAAE,cAAc,IAAI,KAAK,EAAE,WAAW,EAAE,YAAY,IAAI;AACrE,QAAM,QAAQ,EAAE,UAAU,YAAY;AACtC,QAAM,aAAa,EAAE,QAAQ,SAAS,KAAK,GAAG,EAAE,QAAQ,MAAM,GAAG,EAAE,CAAC,WAAM,EAAE;AAC5E,SAAO,CAAC,EAAE,IAAI,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,UAAU,GAAG;AAC/D;AAEA,IAAMC,YAAUF,gBAAc;AAAA,EAC5B,MAAM,EAAE,MAAM,QAAQ,aAAa,6BAA6B;AAAA,EAChE,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC9C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO;AAAA,MAChC,eAAe,KAAK,KAAK;AAAA,IAC3B;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI,eAAe;AAC3B;AAAA,IACF;AACA,eAAW,QAAQ,UAAU,SAAS,IAAI,UAAU,CAAC,EAAG,SAAQ,IAAI,IAAI;AAAA,EAC1E;AACF,CAAC;AAED,IAAME,SAAQH,gBAAc;AAAA,EAC1B,MAAM,EAAE,MAAM,MAAM,aAAa,mBAAmB;AAAA,EACpD,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAAO,IAAI,iBAAiB,KAAK,EAAE,EAAE;AAC3C,YAAQ,IAAI,mBAAmB,KAAK,EAAE,EAAE;AAAA,EAC1C;AACF,CAAC;AAED,IAAMG,aAAYJ,gBAAc;AAAA,EAC9B,MAAM,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,EACxD,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA6B,EAAE,SAAS,KAAK;AACnD,UAAM,OAAO,MAAM,iBAAiB,KAAK,EAAE,IAAI,IAAI;AACnD,YAAQ,IAAI,mBAAmB,KAAK,EAAE,EAAE;AAAA,EAC1C;AACF,CAAC;AAED,IAAMI,cAAaL,gBAAc;AAAA,EAC/B,MAAM,EAAE,MAAM,WAAW,aAAa,oBAAoB;AAAA,EAC1D,MAAM;AAAA,IACJ,IAAI,EAAE,MAAM,cAAc,UAAU,KAAK;AAAA,EAC3C;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,SAASC,cAAa;AAC5B,UAAM,OAA6B,EAAE,SAAS,MAAM;AACpD,UAAM,OAAO,MAAM,iBAAiB,KAAK,EAAE,IAAI,IAAI;AACnD,YAAQ,IAAI,oBAAoB,KAAK,EAAE,EAAE;AAAA,EAC3C;AACF,CAAC;AAEM,IAAM,iBAAiBD,gBAAc;AAAA,EAC1C,MAAM,EAAE,MAAM,WAAW,aAAa,0CAA0C;AAAA,EAChF,aAAa;AAAA,IACX,KAAKD;AAAA,IACL,MAAMG;AAAA,IACN,IAAIC;AAAA,IACJ,QAAQC;AAAA,IACR,SAASC;AAAA,EACX;AACF,CAAC;;;AChID,SAAS,cAAAC,aAAY,eAAAC,cAAa,UAAAC,eAAc;AAChD,SAAS,QAAAC,aAAY;AACrB,SAAS,iBAAAC,uBAAqB;AAM9B,SAAS,iBAAwC;AAC/C,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,QAAM,QAAoC,CAAC;AAE3C,QAAM,aAAa,MAAY;AAC7B,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,QAAQ,OAAO,QAAQ,IAAI;AACjC,UAAI,UAAU,IAAI;AAChB,YAAI,OAAO;AACT,gBAAMC,WAAU,MAAM,MAAM;AAC5B,UAAAA,WAAU,MAAM;AAChB,mBAAS;AAAA,QACX,OAAO;AACL;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,OAAO,OAAO,MAAM,GAAG,KAAK;AAClC,iBAAS,OAAO,MAAM,QAAQ,CAAC;AAC/B,cAAMA,WAAU,MAAM,MAAM;AAC5B,QAAAA,WAAU,IAAI;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,MAAM,YAAY,MAAM;AAChC,UAAQ,MAAM,GAAG,QAAQ,CAAC,UAAU;AAClC,cAAU;AACV,eAAW;AAAA,EACb,CAAC;AACD,UAAQ,MAAM,GAAG,OAAO,MAAM;AAC5B,YAAQ;AACR,eAAW;AAAA,EACb,CAAC;AAED,SAAO,MACL,IAAI,QAAgB,CAACA,aAAY;AAC/B,UAAM,KAAKA,QAAO;AAClB,eAAW;AAAA,EACb,CAAC;AACL;AAEA,eAAe,OAAO,UAAiC,QAAkC;AACvF,UAAQ,OAAO,MAAM,GAAG,MAAM,SAAS;AACvC,QAAM,UAAU,MAAM,SAAS,GAAG,KAAK,EAAE,YAAY;AACrD,SAAO,WAAW,OAAO,WAAW;AACtC;AAEA,SAAS,WAAW,GAAoB;AACtC,MAAI,CAACC,YAAW,CAAC,EAAG,QAAO;AAC3B,EAAAC,QAAO,GAAG,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC1C,SAAO;AACT;AAEO,IAAM,mBAAmBC,gBAAc;AAAA,EAC5C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,IAC9D,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,QAAQ,gBAAgB,KAAK,IAAI;AACvC,UAAM,SAASC,MAAK,MAAM,MAAM,aAAa;AAC7C,UAAM,cAAcA,MAAK,MAAM,MAAM,UAAU;AAC/C,UAAM,YAAYA,MAAK,MAAM,MAAM,QAAQ;AAC3C,UAAM,YAAYA,MAAK,MAAM,MAAM,QAAQ;AAC3C,UAAM,YAAYA,MAAK,MAAM,MAAM,QAAQ;AAC3C,UAAM,UAAUA,MAAK,MAAM,MAAM,MAAM;AAEvC,QAAI,CAACH,YAAW,MAAM,IAAI,GAAG;AAC3B,cAAQ,IAAI,sBAAsB,MAAM,IAAI,iBAAiB;AAC7D;AAAA,IACF;AAEA,YAAQ,IAAI,kCAAkC,MAAM,IAAI,EAAE;AAC1D,YAAQ,IAAI,EAAE;AAEd,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,cAAc,CAAC,KAAK;AAC1B,UAAM,WAAW,cAAc,eAAe,IAAI;AAClD,UAAM,WACJ,KAAK,OACJ,MAAM;AAAA,MACL;AAAA,MACA;AAAA,IACF;AACF,QAAI,CAAC,UAAU;AACb,cAAQ,IAAI,SAAS;AACrB,cAAQ,MAAM,MAAM;AACpB;AAAA,IACF;AAKA,UAAM,UACJ,KAAK,QACJ,KAAK,MACF,QACA,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF;AAEN,YAAQ,MAAM,MAAM;AAEpB,eAAW,KAAK,aAAa;AAC3B,UAAI,WAAW,CAAC,EAAG,SAAQ,IAAI,WAAW,CAAC,EAAE;AAAA,IAC/C;AAEA,QAAI,SAAS;AACX,YAAM,gBAAgB,CAAC,MAAM,UAAU,SAAS,SAAS;AACzD,iBAAW,KAAK,eAAe;AAC7B,YAAI,WAAW,CAAC,EAAG,SAAQ,IAAI,WAAW,CAAC,EAAE;AAAA,MAC/C;AAGA,UAAII,aAAY,MAAM,IAAI,EAAE,WAAW,GAAG;AACxC,QAAAH,QAAO,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACnD,gBAAQ,IAAI,WAAW,MAAM,IAAI,EAAE;AAAA,MACrC,OAAO;AACL,gBAAQ,IAAI,GAAG,MAAM,IAAI,2CAA2C;AAAA,MACtE;AAAA,IACF,OAAO;AACL,cAAQ,IAAI,EAAE;AACd,cAAQ,IAAI,iCAAiC;AAC7C,cAAQ,IAAI,+DAA+D;AAAA,IAC7E;AAAA,EACF;AACF,CAAC;;;AzBvJD,IAAM,UAAU,gBAAI;AAoBpB,IAAM,OAAOI,gBAAc;AAAA,EACzB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF,CAAC;AAKC,KAAK,YAAwC,aAAa,kBAAkB,IAAa;AAO3F,eAAe,kBACb,KACA,SACA,QACuC;AACvC,QAAM,OAAO,IAAI;AACjB,MAAI,QAAQ,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AACxC,UAAM,MAAM,QAAQ,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC;AACvD,UAAM,OAAO,OAAO,IAAI,QAAQ,GAAG,IAAI;AACvC,QAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,aAAO,kBAAkB,KAAK,IAAI,GAAkB,QAAQ,MAAM,MAAM,CAAC,GAAG,GAAG;AAAA,IACjF;AAAA,EACF;AACA,SAAO,CAAC,KAAK,MAAM;AACrB;AAEA,SAAS,WAAW,KAAoB;AACtC,MAAI,eAAe,gBAAgB;AACjC,YAAQ,MAAM,UAAU,IAAI,KAAK,KAAK,EAAE;AACxC,QAAI,IAAI,WAAW,KAAK;AACtB,cAAQ,MAAM,6DAA6D;AAC3E,cAAQ,MAAM,yDAAyD;AAAA,IACzE,WAAW,IAAI,WAAW,KAAK;AAC7B,cAAQ,MAAM,oEAAoE;AAClF,cAAQ,MAAM,iEAAiE;AAC/E,cAAQ,MAAM,uDAAuD;AAAA,IACvE;AACA;AAAA,EACF;AACA,QAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,UAAQ,MAAM,UAAU,GAAG,EAAE;AAG7B,QAAM,QAAQ,eAAe,QAAS,IAAsC,QAAQ;AACpF,QAAM,OAAO,OAAO;AACpB,MAAI,SAAS,kBAAkB,eAAe,KAAK,GAAG,GAAG;AACvD,YAAQ,MAAM,4EAA4E;AAC1F,YAAQ,MAAM,yDAAyD;AAAA,EACzE,WAAW,SAAS,eAAe,YAAY,KAAK,GAAG,GAAG;AACxD,YAAQ,MAAM,wEAAwE;AAAA,EACxF;AACF;AAOA,SAAS,oBAA0B;AACjC,UAAQ,IAAI,kCAAkC,OAAO,GAAG;AACxD,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,iCAAiC;AAC7C,UAAQ,IAAI,EAAE;AACd,QAAM,SAAyD;AAAA,IAC7D;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,CAAC,SAAS,sEAAsE;AAAA,QAChF,CAAC,UAAU,gCAAgC;AAAA,QAC3C,CAAC,aAAa,yDAAyD;AAAA,MACzE;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,CAAC,WAAW,qDAAqD;AAAA,QACjE,CAAC,SAAS,iFAA4E;AAAA,QACtF,CAAC,SAAS,0BAA0B;AAAA,QACpC,CAAC,YAAY,+BAA+B;AAAA,QAC5C,CAAC,UAAU,gDAAgD;AAAA,QAC3D,CAAC,QAAQ,kDAA6C;AAAA,MACxD;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,CAAC,SAAS,mCAAmC;AAAA,QAC7C,CAAC,UAAU,oCAAoC;AAAA,QAC/C,CAAC,QAAQ,0CAA0C;AAAA,QACnD,CAAC,SAAS,uBAAuB;AAAA,QACjC,CAAC,WAAW,yCAAyC;AAAA,MACvD;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,CAAC,CAAC,UAAU,yCAAyC,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,CAAC,SAAS,yDAAyD;AAAA,QACnE,CAAC,SAAS,uCAAuC;AAAA,MACnD;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,CAAC,CAAC,cAAc,mDAAmD,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,QAAM,YAAY;AAClB,aAAW,KAAK,QAAQ;AACtB,YAAQ,IAAI,KAAK,EAAE,KAAK,EAAE;AAC1B,eAAW,CAAC,MAAM,IAAI,KAAK,EAAE,OAAO;AAClC,cAAQ,IAAI,OAAO,KAAK,OAAO,SAAS,CAAC,GAAG,IAAI,EAAE;AAAA,IACpD;AACA,YAAQ,IAAI,EAAE;AAAA,EAChB;AACA,UAAQ,IAAI,uEAAuE;AACrF;AAEA,eAAe,QAAuB;AACpC,QAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,MAAI;AACF,QAAI,QAAQ,SAAS,QAAQ,KAAK,QAAQ,SAAS,IAAI,GAAG;AAGxD,YAAM,kBAAkB,QAAQ,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC;AAC9D,UAAI,CAAC,iBAAiB;AACpB,0BAAkB;AAClB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,YAAM,CAAC,QAAQ,MAAM,IAAI,MAAM,kBAAkB,MAAqB,OAAO;AAC7E,YAAM,UAAU,QAAQ,MAAM;AAC9B,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,QAAI,QAAQ,WAAW,MAAM,QAAQ,CAAC,MAAM,eAAe,QAAQ,CAAC,MAAM,OAAO;AAC/E,cAAQ,IAAI,OAAO;AACnB;AAAA,IACF;AACA,UAAM,WAAW,MAAM,EAAE,QAAQ,CAAC;AAAA,EACpC,SAAS,KAAK;AACZ,eAAW,GAAG;AACd,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,MAAM;","names":["defineCommand","createClient","createClient","resolve","defineCommand","defineCommand","createClient","resolve","existsSync","defineCommand","defineCommand","existsSync","defineCommand","main","defineCommand","listCmd","defineCommand","createClient","defineCommand","defineCommand","createClient","readFileSync","stdin","defineCommand","defineCommand","createClient","listCmd","rmCmd","stdin","readFileSync","defineCommand","listCmd","defineCommand","createClient","showCmd","existsSync","readFileSync","defineCommand","defineCommand","existsSync","readFileSync","defineCommand","defineCommand","createClient","entry","readCmd","listCmd","rmCmd","spawn","readFileSync","rmSync","writeFileSync","join","defineCommand","createCmd","defineCommand","readFileSync","createClient","listCmd","showCmd","editCmd","join","writeFileSync","resolve","spawn","rmSync","deleteCmd","defineCommand","listCmd","defineCommand","createClient","defineCommand","defineCommand","createClient","spawn","existsSync","join","defineCommand","resolve","existsSync","readFileSync","resolve","defineCommand","listCmd","defineCommand","createClient","rows","resolve","existsSync","readFileSync","rmCmd","defineCommand","createCmd","defineCommand","createClient","listCmd","defineCommand","addCmd","defineCommand","createClient","listCmd","rmCmd","enableCmd","disableCmd","existsSync","readdirSync","rmSync","join","defineCommand","resolve","existsSync","rmSync","defineCommand","join","readdirSync","defineCommand"]}