@withbuddi/buddi 0.1.0-pre.36 → 0.1.0-pre.37

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 (607) hide show
  1. package/examples/agents/concierge/agent.md +5 -0
  2. package/examples/skills/letterhead/SKILL.md +21 -0
  3. package/examples/skills/letterhead/assets/letterhead.md +16 -0
  4. package/examples/skills/letterhead/assets/logo.svg +6 -0
  5. package/extension/manifest.json +2 -2
  6. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  7. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  8. package/node_modules/@buddi/cli/dist/doctor-probes.js +38 -3
  9. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  10. package/node_modules/@buddi/cli/dist/doctor.d.ts +25 -0
  11. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  12. package/node_modules/@buddi/cli/dist/doctor.js +28 -0
  13. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  14. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  15. package/node_modules/@buddi/core/dist/actions/approvals.d.ts +7 -0
  16. package/node_modules/@buddi/core/dist/actions/approvals.d.ts.map +1 -1
  17. package/node_modules/@buddi/core/dist/actions/approvals.js +11 -1
  18. package/node_modules/@buddi/core/dist/actions/approvals.js.map +1 -1
  19. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  20. package/node_modules/@buddi/core/dist/agents/catalog.js +2 -2
  21. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  22. package/node_modules/@buddi/core/dist/agents/skills.d.ts +60 -1
  23. package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
  24. package/node_modules/@buddi/core/dist/agents/skills.js +157 -17
  25. package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
  26. package/node_modules/@buddi/core/dist/day-month.d.ts +52 -0
  27. package/node_modules/@buddi/core/dist/day-month.d.ts.map +1 -0
  28. package/node_modules/@buddi/core/dist/day-month.js +101 -0
  29. package/node_modules/@buddi/core/dist/day-month.js.map +1 -0
  30. package/node_modules/@buddi/core/dist/host/build.d.ts +11 -2
  31. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  32. package/node_modules/@buddi/core/dist/host/build.js +115 -4
  33. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  34. package/node_modules/@buddi/core/dist/host/http.d.ts +35 -0
  35. package/node_modules/@buddi/core/dist/host/http.d.ts.map +1 -1
  36. package/node_modules/@buddi/core/dist/host/http.js +133 -29
  37. package/node_modules/@buddi/core/dist/host/http.js.map +1 -1
  38. package/node_modules/@buddi/core/dist/host/types.d.ts +72 -1
  39. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  40. package/node_modules/@buddi/core/dist/index.d.ts +2 -0
  41. package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
  42. package/node_modules/@buddi/core/dist/index.js +2 -0
  43. package/node_modules/@buddi/core/dist/index.js.map +1 -1
  44. package/node_modules/@buddi/core/dist/onboarding/store.d.ts.map +1 -1
  45. package/node_modules/@buddi/core/dist/onboarding/store.js +28 -5
  46. package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
  47. package/node_modules/@buddi/core/dist/onboarding/types.d.ts +10 -0
  48. package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
  49. package/node_modules/@buddi/core/dist/onboarding/types.js.map +1 -1
  50. package/node_modules/@buddi/core/dist/pages.d.ts +145 -11
  51. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  52. package/node_modules/@buddi/core/dist/pages.js +113 -5
  53. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  54. package/node_modules/@buddi/core/dist/plugin/index.d.ts +4 -0
  55. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  56. package/node_modules/@buddi/core/dist/plugin/index.js +2 -0
  57. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  58. package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts +78 -0
  59. package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts.map +1 -0
  60. package/node_modules/@buddi/core/dist/plugin/sign-in.js +54 -0
  61. package/node_modules/@buddi/core/dist/plugin/sign-in.js.map +1 -0
  62. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  63. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  64. package/node_modules/@buddi/core/dist/provider-accounts.d.ts +7 -0
  65. package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
  66. package/node_modules/@buddi/core/dist/provider-accounts.js +15 -0
  67. package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
  68. package/node_modules/@buddi/core/dist/questions/types.d.ts +1 -1
  69. package/node_modules/@buddi/core/dist/questions/types.js +1 -1
  70. package/node_modules/@buddi/core/dist/queue/jobs.d.ts +57 -2
  71. package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
  72. package/node_modules/@buddi/core/dist/queue/jobs.js +114 -0
  73. package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
  74. package/node_modules/@buddi/core/dist/queue/worker.d.ts +24 -2
  75. package/node_modules/@buddi/core/dist/queue/worker.d.ts.map +1 -1
  76. package/node_modules/@buddi/core/dist/queue/worker.js +66 -11
  77. package/node_modules/@buddi/core/dist/queue/worker.js.map +1 -1
  78. package/node_modules/@buddi/core/dist/registry.d.ts +8 -0
  79. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  80. package/node_modules/@buddi/core/dist/registry.js +15 -2
  81. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  82. package/node_modules/@buddi/core/dist/secrets/scrub.d.ts.map +1 -1
  83. package/node_modules/@buddi/core/dist/secrets/scrub.js +15 -0
  84. package/node_modules/@buddi/core/dist/secrets/scrub.js.map +1 -1
  85. package/node_modules/@buddi/core/dist/tools.d.ts +29 -0
  86. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  87. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  88. package/node_modules/@buddi/core/dist/views.d.ts +12 -12
  89. package/node_modules/@buddi/core/dist/widgets.d.ts +14 -1
  90. package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
  91. package/node_modules/@buddi/core/dist/widgets.js +30 -0
  92. package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
  93. package/node_modules/@buddi/core/migrations/074_owner_identity.sql +14 -0
  94. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  95. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
  96. package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -3
  97. package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +8 -0
  99. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  100. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +11 -4
  101. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -1
  102. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  103. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +36 -2
  104. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
  105. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +19 -0
  106. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  107. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +108 -0
  108. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -1
  109. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +4 -4
  110. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  111. package/node_modules/@buddi/gateway/dist/agents/platform.js +11 -0
  112. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  113. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  114. package/node_modules/@buddi/gateway/dist/bootstrap.js +4 -1
  115. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  116. package/node_modules/@buddi/gateway/dist/evals/golden.d.ts +33 -1
  117. package/node_modules/@buddi/gateway/dist/evals/golden.d.ts.map +1 -1
  118. package/node_modules/@buddi/gateway/dist/evals/golden.js +168 -3
  119. package/node_modules/@buddi/gateway/dist/evals/golden.js.map +1 -1
  120. package/node_modules/@buddi/gateway/dist/index.d.ts +1 -0
  121. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  122. package/node_modules/@buddi/gateway/dist/index.js +1 -0
  123. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  124. package/node_modules/@buddi/gateway/dist/missions/dates.d.ts +98 -0
  125. package/node_modules/@buddi/gateway/dist/missions/dates.d.ts.map +1 -0
  126. package/node_modules/@buddi/gateway/dist/missions/dates.js +252 -0
  127. package/node_modules/@buddi/gateway/dist/missions/dates.js.map +1 -0
  128. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +8 -0
  129. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  130. package/node_modules/@buddi/gateway/dist/missions/execute.js +16 -1
  131. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  132. package/node_modules/@buddi/gateway/dist/missions/report.d.ts.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/missions/report.js +1 -0
  134. package/node_modules/@buddi/gateway/dist/missions/report.js.map +1 -1
  135. package/node_modules/@buddi/gateway/dist/ollama-local.d.ts +90 -0
  136. package/node_modules/@buddi/gateway/dist/ollama-local.d.ts.map +1 -0
  137. package/node_modules/@buddi/gateway/dist/ollama-local.js +201 -0
  138. package/node_modules/@buddi/gateway/dist/ollama-local.js.map +1 -0
  139. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +8 -0
  140. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
  141. package/node_modules/@buddi/gateway/dist/plugins-cli.js +22 -1
  142. package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
  143. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  144. package/node_modules/@buddi/gateway/dist/serve.js +50 -5
  145. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  146. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js +2 -2
  147. package/node_modules/@buddi/gateway/dist/system-context.d.ts +21 -1
  148. package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
  149. package/node_modules/@buddi/gateway/dist/system-context.js +76 -2
  150. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  151. package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts.map +1 -1
  152. package/node_modules/@buddi/gateway/dist/telegram/approvals.js +4 -2
  153. package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
  154. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
  155. package/node_modules/@buddi/gateway/dist/telegram/channel.js +6 -1
  156. package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
  157. package/node_modules/@buddi/gateway/dist/telegram/html.d.ts +34 -0
  158. package/node_modules/@buddi/gateway/dist/telegram/html.d.ts.map +1 -0
  159. package/node_modules/@buddi/gateway/dist/telegram/html.js +263 -0
  160. package/node_modules/@buddi/gateway/dist/telegram/html.js.map +1 -0
  161. package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts +6 -0
  162. package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts.map +1 -1
  163. package/node_modules/@buddi/gateway/dist/telegram/notify.js +25 -3
  164. package/node_modules/@buddi/gateway/dist/telegram/notify.js.map +1 -1
  165. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +2 -0
  166. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
  167. package/node_modules/@buddi/gateway/dist/tips/facts.js +4 -1
  168. package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
  169. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
  170. package/node_modules/@buddi/gateway/dist/tips/rules.js +10 -0
  171. package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
  172. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  173. package/node_modules/@buddi/gateway/dist/web/api-routes.js +72 -9
  174. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  175. package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts +1 -1
  176. package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts.map +1 -1
  177. package/node_modules/@buddi/gateway/dist/web/api-scan.js +1 -0
  178. package/node_modules/@buddi/gateway/dist/web/api-scan.js.map +1 -1
  179. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  180. package/node_modules/@buddi/gateway/dist/web/chat.js +9 -0
  181. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  182. package/node_modules/@buddi/gateway/dist/web/composer.d.ts +45 -0
  183. package/node_modules/@buddi/gateway/dist/web/composer.d.ts.map +1 -0
  184. package/node_modules/@buddi/gateway/dist/web/composer.js +85 -0
  185. package/node_modules/@buddi/gateway/dist/web/composer.js.map +1 -0
  186. package/node_modules/@buddi/gateway/dist/web/market.d.ts +20 -1
  187. package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
  188. package/node_modules/@buddi/gateway/dist/web/market.js +41 -1
  189. package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
  190. package/node_modules/@buddi/gateway/dist/web/people.d.ts +44 -0
  191. package/node_modules/@buddi/gateway/dist/web/people.d.ts.map +1 -0
  192. package/node_modules/@buddi/gateway/dist/web/people.js +114 -0
  193. package/node_modules/@buddi/gateway/dist/web/people.js.map +1 -0
  194. package/node_modules/@buddi/gateway/dist/web/server.d.ts +4 -0
  195. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  196. package/node_modules/@buddi/gateway/dist/web/server.js +137 -11
  197. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  198. package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts +101 -0
  199. package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts.map +1 -0
  200. package/node_modules/@buddi/gateway/dist/web/skill-bundles.js +439 -0
  201. package/node_modules/@buddi/gateway/dist/web/skill-bundles.js.map +1 -0
  202. package/node_modules/@buddi/gateway/dist/web/skills.d.ts +57 -1
  203. package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -1
  204. package/node_modules/@buddi/gateway/dist/web/skills.js +171 -9
  205. package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -1
  206. package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts +31 -0
  207. package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts.map +1 -0
  208. package/node_modules/@buddi/gateway/dist/web/zip-read.js +125 -0
  209. package/node_modules/@buddi/gateway/dist/web/zip-read.js.map +1 -0
  210. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  211. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  212. package/node_modules/@buddi/runtime/dist/index.d.ts +1 -0
  213. package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
  214. package/node_modules/@buddi/runtime/dist/index.js +1 -0
  215. package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
  216. package/node_modules/@buddi/runtime/dist/loop.js +11 -1
  217. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  218. package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts +12 -0
  219. package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts.map +1 -0
  220. package/node_modules/@buddi/runtime/dist/plugin-sign-in.js +397 -0
  221. package/node_modules/@buddi/runtime/dist/plugin-sign-in.js.map +1 -0
  222. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  223. package/node_modules/@buddi/tool-artifacts/dist/tools/write.d.ts.map +1 -1
  224. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js +1 -0
  225. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js.map +1 -1
  226. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  227. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  228. package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -1
  229. package/node_modules/@buddi/tool-email/dist/widgets.js +2 -1
  230. package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -1
  231. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  232. package/node_modules/@buddi/tool-host/dist/index.d.ts +2 -1
  233. package/node_modules/@buddi/tool-host/dist/index.d.ts.map +1 -1
  234. package/node_modules/@buddi/tool-host/dist/index.js +3 -2
  235. package/node_modules/@buddi/tool-host/dist/index.js.map +1 -1
  236. package/node_modules/@buddi/tool-host/dist/process.d.ts +4 -0
  237. package/node_modules/@buddi/tool-host/dist/process.d.ts.map +1 -1
  238. package/node_modules/@buddi/tool-host/dist/process.js +4 -2
  239. package/node_modules/@buddi/tool-host/dist/process.js.map +1 -1
  240. package/node_modules/@buddi/tool-host/dist/service.d.ts +66 -17
  241. package/node_modules/@buddi/tool-host/dist/service.d.ts.map +1 -1
  242. package/node_modules/@buddi/tool-host/dist/service.js +172 -9
  243. package/node_modules/@buddi/tool-host/dist/service.js.map +1 -1
  244. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts +55 -0
  245. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts.map +1 -0
  246. package/node_modules/@buddi/tool-host/dist/skill-run.js +132 -0
  247. package/node_modules/@buddi/tool-host/dist/skill-run.js.map +1 -0
  248. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  249. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  250. package/node_modules/@buddi/tool-memory/dist/index.d.ts +1 -0
  251. package/node_modules/@buddi/tool-memory/dist/index.d.ts.map +1 -1
  252. package/node_modules/@buddi/tool-memory/dist/index.js +7 -2
  253. package/node_modules/@buddi/tool-memory/dist/index.js.map +1 -1
  254. package/node_modules/@buddi/tool-memory/dist/people.d.ts +218 -0
  255. package/node_modules/@buddi/tool-memory/dist/people.d.ts.map +1 -0
  256. package/node_modules/@buddi/tool-memory/dist/people.js +582 -0
  257. package/node_modules/@buddi/tool-memory/dist/people.js.map +1 -0
  258. package/node_modules/@buddi/tool-memory/dist/preamble.d.ts +4 -1
  259. package/node_modules/@buddi/tool-memory/dist/preamble.d.ts.map +1 -1
  260. package/node_modules/@buddi/tool-memory/dist/preamble.js +25 -7
  261. package/node_modules/@buddi/tool-memory/dist/preamble.js.map +1 -1
  262. package/node_modules/@buddi/tool-memory/migrations/002_people.sql +40 -0
  263. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  264. package/node_modules/imapflow/CHANGELOG.md +8 -0
  265. package/node_modules/imapflow/dist/cjs/commands/append.js +27 -3
  266. package/node_modules/imapflow/dist/cjs/commands/store.js +31 -6
  267. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +1 -1
  268. package/node_modules/imapflow/dist/cjs/imap-flow.js +1 -1
  269. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  270. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  271. package/node_modules/imapflow/dist/esm/commands/append.js +27 -3
  272. package/node_modules/imapflow/dist/esm/commands/store.js +31 -6
  273. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +1 -1
  274. package/node_modules/imapflow/dist/esm/imap-flow.js +1 -1
  275. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  276. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  277. package/node_modules/imapflow/package.json +4 -4
  278. package/node_modules/pino/CONTRIBUTING.md +5 -1
  279. package/node_modules/pino/LICENSE +1 -1
  280. package/node_modules/pino/README.md +1 -1
  281. package/node_modules/pino/SECURITY.md +18 -2
  282. package/node_modules/pino/browser.js +68 -8
  283. package/node_modules/pino/docs/api.md +75 -4
  284. package/node_modules/pino/docs/asynchronous.md +18 -3
  285. package/node_modules/pino/docs/browser.md +63 -0
  286. package/node_modules/pino/docs/child-loggers.md +22 -1
  287. package/node_modules/pino/docs/ecosystem.md +1 -0
  288. package/node_modules/pino/docs/help.md +11 -3
  289. package/node_modules/pino/docs/lts.md +29 -0
  290. package/node_modules/pino/docs/pretty.md +3 -0
  291. package/node_modules/pino/docs/redaction.md +3 -8
  292. package/node_modules/pino/docs/transports.md +71 -0
  293. package/node_modules/pino/docs/web.md +11 -14
  294. package/node_modules/pino/eslint.config.js +15 -7
  295. package/node_modules/pino/lib/caller.js +10 -0
  296. package/node_modules/pino/lib/meta.js +1 -1
  297. package/node_modules/pino/lib/multistream.js +15 -7
  298. package/node_modules/pino/lib/redaction.js +8 -3
  299. package/node_modules/pino/lib/symbols.js +3 -1
  300. package/node_modules/pino/lib/tools.js +2 -2
  301. package/node_modules/pino/lib/transport.js +14 -1
  302. package/node_modules/pino/lib/worker.js +4 -1
  303. package/node_modules/pino/package.json +14 -22
  304. package/node_modules/pino/pino.d.ts +709 -736
  305. package/node_modules/pino/pino.js +27 -2
  306. package/node_modules/pino/test/basic.test.js +66 -0
  307. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  308. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  309. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  310. package/node_modules/pino/test/caller.test.js +20 -0
  311. package/node_modules/pino/test/escaping.test.js +17 -0
  312. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  313. package/node_modules/pino/test/fixtures/ts/transpile.cjs +3 -3
  314. package/node_modules/pino/test/helper.js +6 -2
  315. package/node_modules/pino/test/multistream.test.js +64 -0
  316. package/node_modules/pino/test/redact.test.js +30 -0
  317. package/node_modules/pino/test/smoke.js +59 -0
  318. package/node_modules/pino/test/transport/core.test.js +85 -0
  319. package/node_modules/pino/test/transport/sync-false.test.js +12 -0
  320. package/node_modules/pino/test/transport/uses-pino-config.test.js +4 -4
  321. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  322. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  323. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  324. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  325. package/node_modules/pino/test/types/{pino-transport.test-d.ts → pino-transport.tst.ts} +85 -70
  326. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  327. package/node_modules/pino/test/types/pino.ts +14 -7
  328. package/node_modules/pino/test/types/{pino.test-d.ts → pino.tst.ts} +135 -137
  329. package/node_modules/pino/test/types/tsconfig.json +10 -0
  330. package/node_modules/pino/tsconfig.json +6 -6
  331. package/node_modules/real-require/README.md +6 -6
  332. package/node_modules/real-require/package.json +10 -21
  333. package/node_modules/real-require/src/index.js +2 -2
  334. package/package.json +2 -2
  335. package/packages/cli/dist/.tsbuildinfo +1 -1
  336. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  337. package/packages/cli/dist/doctor-probes.js +38 -3
  338. package/packages/cli/dist/doctor-probes.js.map +1 -1
  339. package/packages/cli/dist/doctor.d.ts +25 -0
  340. package/packages/cli/dist/doctor.d.ts.map +1 -1
  341. package/packages/cli/dist/doctor.js +28 -0
  342. package/packages/cli/dist/doctor.js.map +1 -1
  343. package/packages/core/dist/.tsbuildinfo +1 -1
  344. package/packages/core/dist/actions/approvals.d.ts +7 -0
  345. package/packages/core/dist/actions/approvals.d.ts.map +1 -1
  346. package/packages/core/dist/actions/approvals.js +11 -1
  347. package/packages/core/dist/actions/approvals.js.map +1 -1
  348. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  349. package/packages/core/dist/agents/catalog.js +2 -2
  350. package/packages/core/dist/agents/catalog.js.map +1 -1
  351. package/packages/core/dist/agents/skills.d.ts +60 -1
  352. package/packages/core/dist/agents/skills.d.ts.map +1 -1
  353. package/packages/core/dist/agents/skills.js +157 -17
  354. package/packages/core/dist/agents/skills.js.map +1 -1
  355. package/packages/core/dist/day-month.d.ts +52 -0
  356. package/packages/core/dist/day-month.d.ts.map +1 -0
  357. package/packages/core/dist/day-month.js +101 -0
  358. package/packages/core/dist/day-month.js.map +1 -0
  359. package/packages/core/dist/host/build.d.ts +11 -2
  360. package/packages/core/dist/host/build.d.ts.map +1 -1
  361. package/packages/core/dist/host/build.js +115 -4
  362. package/packages/core/dist/host/build.js.map +1 -1
  363. package/packages/core/dist/host/http.d.ts +35 -0
  364. package/packages/core/dist/host/http.d.ts.map +1 -1
  365. package/packages/core/dist/host/http.js +133 -29
  366. package/packages/core/dist/host/http.js.map +1 -1
  367. package/packages/core/dist/host/types.d.ts +72 -1
  368. package/packages/core/dist/host/types.d.ts.map +1 -1
  369. package/packages/core/dist/index.d.ts +2 -0
  370. package/packages/core/dist/index.d.ts.map +1 -1
  371. package/packages/core/dist/index.js +2 -0
  372. package/packages/core/dist/index.js.map +1 -1
  373. package/packages/core/dist/onboarding/store.d.ts.map +1 -1
  374. package/packages/core/dist/onboarding/store.js +28 -5
  375. package/packages/core/dist/onboarding/store.js.map +1 -1
  376. package/packages/core/dist/onboarding/types.d.ts +10 -0
  377. package/packages/core/dist/onboarding/types.d.ts.map +1 -1
  378. package/packages/core/dist/onboarding/types.js.map +1 -1
  379. package/packages/core/dist/pages.d.ts +145 -11
  380. package/packages/core/dist/pages.d.ts.map +1 -1
  381. package/packages/core/dist/pages.js +113 -5
  382. package/packages/core/dist/pages.js.map +1 -1
  383. package/packages/core/dist/plugin/index.d.ts +4 -0
  384. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  385. package/packages/core/dist/plugin/index.js +2 -0
  386. package/packages/core/dist/plugin/index.js.map +1 -1
  387. package/packages/core/dist/plugin/sign-in.d.ts +78 -0
  388. package/packages/core/dist/plugin/sign-in.d.ts.map +1 -0
  389. package/packages/core/dist/plugin/sign-in.js +54 -0
  390. package/packages/core/dist/plugin/sign-in.js.map +1 -0
  391. package/packages/core/dist/plugin/version.d.ts +1 -1
  392. package/packages/core/dist/plugin/version.js +1 -1
  393. package/packages/core/dist/provider-accounts.d.ts +7 -0
  394. package/packages/core/dist/provider-accounts.d.ts.map +1 -1
  395. package/packages/core/dist/provider-accounts.js +15 -0
  396. package/packages/core/dist/provider-accounts.js.map +1 -1
  397. package/packages/core/dist/questions/types.d.ts +1 -1
  398. package/packages/core/dist/questions/types.js +1 -1
  399. package/packages/core/dist/queue/jobs.d.ts +57 -2
  400. package/packages/core/dist/queue/jobs.d.ts.map +1 -1
  401. package/packages/core/dist/queue/jobs.js +114 -0
  402. package/packages/core/dist/queue/jobs.js.map +1 -1
  403. package/packages/core/dist/queue/worker.d.ts +24 -2
  404. package/packages/core/dist/queue/worker.d.ts.map +1 -1
  405. package/packages/core/dist/queue/worker.js +66 -11
  406. package/packages/core/dist/queue/worker.js.map +1 -1
  407. package/packages/core/dist/registry.d.ts +8 -0
  408. package/packages/core/dist/registry.d.ts.map +1 -1
  409. package/packages/core/dist/registry.js +15 -2
  410. package/packages/core/dist/registry.js.map +1 -1
  411. package/packages/core/dist/secrets/scrub.d.ts.map +1 -1
  412. package/packages/core/dist/secrets/scrub.js +15 -0
  413. package/packages/core/dist/secrets/scrub.js.map +1 -1
  414. package/packages/core/dist/tools.d.ts +29 -0
  415. package/packages/core/dist/tools.d.ts.map +1 -1
  416. package/packages/core/dist/tools.js.map +1 -1
  417. package/packages/core/dist/views.d.ts +12 -12
  418. package/packages/core/dist/widgets.d.ts +14 -1
  419. package/packages/core/dist/widgets.d.ts.map +1 -1
  420. package/packages/core/dist/widgets.js +30 -0
  421. package/packages/core/dist/widgets.js.map +1 -1
  422. package/packages/core/migrations/074_owner_identity.sql +14 -0
  423. package/packages/gateway/dist/.tsbuildinfo +1 -1
  424. package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
  425. package/packages/gateway/dist/agents/catalog.js +3 -3
  426. package/packages/gateway/dist/agents/catalog.js.map +1 -1
  427. package/packages/gateway/dist/agents/catalogue-package.d.ts +8 -0
  428. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  429. package/packages/gateway/dist/agents/catalogue-package.js +11 -4
  430. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
  431. package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  432. package/packages/gateway/dist/agents/owner-tools.js +36 -2
  433. package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
  434. package/packages/gateway/dist/agents/platform-catalogue.d.ts +19 -0
  435. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  436. package/packages/gateway/dist/agents/platform-catalogue.js +108 -0
  437. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
  438. package/packages/gateway/dist/agents/platform.d.ts +4 -4
  439. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  440. package/packages/gateway/dist/agents/platform.js +11 -0
  441. package/packages/gateway/dist/agents/platform.js.map +1 -1
  442. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  443. package/packages/gateway/dist/bootstrap.js +4 -1
  444. package/packages/gateway/dist/bootstrap.js.map +1 -1
  445. package/packages/gateway/dist/evals/golden.d.ts +33 -1
  446. package/packages/gateway/dist/evals/golden.d.ts.map +1 -1
  447. package/packages/gateway/dist/evals/golden.js +168 -3
  448. package/packages/gateway/dist/evals/golden.js.map +1 -1
  449. package/packages/gateway/dist/index.d.ts +1 -0
  450. package/packages/gateway/dist/index.d.ts.map +1 -1
  451. package/packages/gateway/dist/index.js +1 -0
  452. package/packages/gateway/dist/index.js.map +1 -1
  453. package/packages/gateway/dist/missions/dates.d.ts +98 -0
  454. package/packages/gateway/dist/missions/dates.d.ts.map +1 -0
  455. package/packages/gateway/dist/missions/dates.js +252 -0
  456. package/packages/gateway/dist/missions/dates.js.map +1 -0
  457. package/packages/gateway/dist/missions/execute.d.ts +8 -0
  458. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  459. package/packages/gateway/dist/missions/execute.js +16 -1
  460. package/packages/gateway/dist/missions/execute.js.map +1 -1
  461. package/packages/gateway/dist/missions/report.d.ts.map +1 -1
  462. package/packages/gateway/dist/missions/report.js +1 -0
  463. package/packages/gateway/dist/missions/report.js.map +1 -1
  464. package/packages/gateway/dist/ollama-local.d.ts +90 -0
  465. package/packages/gateway/dist/ollama-local.d.ts.map +1 -0
  466. package/packages/gateway/dist/ollama-local.js +201 -0
  467. package/packages/gateway/dist/ollama-local.js.map +1 -0
  468. package/packages/gateway/dist/plugins-cli.d.ts +8 -0
  469. package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
  470. package/packages/gateway/dist/plugins-cli.js +22 -1
  471. package/packages/gateway/dist/plugins-cli.js.map +1 -1
  472. package/packages/gateway/dist/serve.d.ts.map +1 -1
  473. package/packages/gateway/dist/serve.js +50 -5
  474. package/packages/gateway/dist/serve.js.map +1 -1
  475. package/packages/gateway/dist/surfaces/pending-question.js +2 -2
  476. package/packages/gateway/dist/system-context.d.ts +21 -1
  477. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  478. package/packages/gateway/dist/system-context.js +76 -2
  479. package/packages/gateway/dist/system-context.js.map +1 -1
  480. package/packages/gateway/dist/telegram/approvals.d.ts.map +1 -1
  481. package/packages/gateway/dist/telegram/approvals.js +4 -2
  482. package/packages/gateway/dist/telegram/approvals.js.map +1 -1
  483. package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
  484. package/packages/gateway/dist/telegram/channel.js +6 -1
  485. package/packages/gateway/dist/telegram/channel.js.map +1 -1
  486. package/packages/gateway/dist/telegram/html.d.ts +34 -0
  487. package/packages/gateway/dist/telegram/html.d.ts.map +1 -0
  488. package/packages/gateway/dist/telegram/html.js +263 -0
  489. package/packages/gateway/dist/telegram/html.js.map +1 -0
  490. package/packages/gateway/dist/telegram/notify.d.ts +6 -0
  491. package/packages/gateway/dist/telegram/notify.d.ts.map +1 -1
  492. package/packages/gateway/dist/telegram/notify.js +25 -3
  493. package/packages/gateway/dist/telegram/notify.js.map +1 -1
  494. package/packages/gateway/dist/tips/facts.d.ts +2 -0
  495. package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
  496. package/packages/gateway/dist/tips/facts.js +4 -1
  497. package/packages/gateway/dist/tips/facts.js.map +1 -1
  498. package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
  499. package/packages/gateway/dist/tips/rules.js +10 -0
  500. package/packages/gateway/dist/tips/rules.js.map +1 -1
  501. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  502. package/packages/gateway/dist/web/api-routes.js +72 -9
  503. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  504. package/packages/gateway/dist/web/api-scan.d.ts +1 -1
  505. package/packages/gateway/dist/web/api-scan.d.ts.map +1 -1
  506. package/packages/gateway/dist/web/api-scan.js +1 -0
  507. package/packages/gateway/dist/web/api-scan.js.map +1 -1
  508. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  509. package/packages/gateway/dist/web/chat.js +9 -0
  510. package/packages/gateway/dist/web/chat.js.map +1 -1
  511. package/packages/gateway/dist/web/composer.d.ts +45 -0
  512. package/packages/gateway/dist/web/composer.d.ts.map +1 -0
  513. package/packages/gateway/dist/web/composer.js +85 -0
  514. package/packages/gateway/dist/web/composer.js.map +1 -0
  515. package/packages/gateway/dist/web/market.d.ts +20 -1
  516. package/packages/gateway/dist/web/market.d.ts.map +1 -1
  517. package/packages/gateway/dist/web/market.js +41 -1
  518. package/packages/gateway/dist/web/market.js.map +1 -1
  519. package/packages/gateway/dist/web/people.d.ts +44 -0
  520. package/packages/gateway/dist/web/people.d.ts.map +1 -0
  521. package/packages/gateway/dist/web/people.js +114 -0
  522. package/packages/gateway/dist/web/people.js.map +1 -0
  523. package/packages/gateway/dist/web/server.d.ts +4 -0
  524. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  525. package/packages/gateway/dist/web/server.js +137 -11
  526. package/packages/gateway/dist/web/server.js.map +1 -1
  527. package/packages/gateway/dist/web/skill-bundles.d.ts +101 -0
  528. package/packages/gateway/dist/web/skill-bundles.d.ts.map +1 -0
  529. package/packages/gateway/dist/web/skill-bundles.js +439 -0
  530. package/packages/gateway/dist/web/skill-bundles.js.map +1 -0
  531. package/packages/gateway/dist/web/skills.d.ts +57 -1
  532. package/packages/gateway/dist/web/skills.d.ts.map +1 -1
  533. package/packages/gateway/dist/web/skills.js +171 -9
  534. package/packages/gateway/dist/web/skills.js.map +1 -1
  535. package/packages/gateway/dist/web/zip-read.d.ts +31 -0
  536. package/packages/gateway/dist/web/zip-read.d.ts.map +1 -0
  537. package/packages/gateway/dist/web/zip-read.js +125 -0
  538. package/packages/gateway/dist/web/zip-read.js.map +1 -0
  539. package/packages/install/dist/.tsbuildinfo +1 -1
  540. package/packages/runtime/dist/.tsbuildinfo +1 -1
  541. package/packages/runtime/dist/index.d.ts +1 -0
  542. package/packages/runtime/dist/index.d.ts.map +1 -1
  543. package/packages/runtime/dist/index.js +1 -0
  544. package/packages/runtime/dist/index.js.map +1 -1
  545. package/packages/runtime/dist/loop.js +11 -1
  546. package/packages/runtime/dist/loop.js.map +1 -1
  547. package/packages/runtime/dist/plugin-sign-in.d.ts +12 -0
  548. package/packages/runtime/dist/plugin-sign-in.d.ts.map +1 -0
  549. package/packages/runtime/dist/plugin-sign-in.js +397 -0
  550. package/packages/runtime/dist/plugin-sign-in.js.map +1 -0
  551. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  552. package/packages/tools/artifacts/dist/tools/write.d.ts.map +1 -1
  553. package/packages/tools/artifacts/dist/tools/write.js +1 -0
  554. package/packages/tools/artifacts/dist/tools/write.js.map +1 -1
  555. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  556. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  557. package/packages/tools/email/dist/widgets.d.ts.map +1 -1
  558. package/packages/tools/email/dist/widgets.js +2 -1
  559. package/packages/tools/email/dist/widgets.js.map +1 -1
  560. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  561. package/packages/tools/host/dist/index.d.ts +2 -1
  562. package/packages/tools/host/dist/index.d.ts.map +1 -1
  563. package/packages/tools/host/dist/index.js +3 -2
  564. package/packages/tools/host/dist/index.js.map +1 -1
  565. package/packages/tools/host/dist/process.d.ts +4 -0
  566. package/packages/tools/host/dist/process.d.ts.map +1 -1
  567. package/packages/tools/host/dist/process.js +4 -2
  568. package/packages/tools/host/dist/process.js.map +1 -1
  569. package/packages/tools/host/dist/service.d.ts +66 -17
  570. package/packages/tools/host/dist/service.d.ts.map +1 -1
  571. package/packages/tools/host/dist/service.js +172 -9
  572. package/packages/tools/host/dist/service.js.map +1 -1
  573. package/packages/tools/host/dist/skill-run.d.ts +55 -0
  574. package/packages/tools/host/dist/skill-run.d.ts.map +1 -0
  575. package/packages/tools/host/dist/skill-run.js +132 -0
  576. package/packages/tools/host/dist/skill-run.js.map +1 -0
  577. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  578. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  579. package/packages/tools/memory/dist/index.d.ts +1 -0
  580. package/packages/tools/memory/dist/index.d.ts.map +1 -1
  581. package/packages/tools/memory/dist/index.js +7 -2
  582. package/packages/tools/memory/dist/index.js.map +1 -1
  583. package/packages/tools/memory/dist/people.d.ts +218 -0
  584. package/packages/tools/memory/dist/people.d.ts.map +1 -0
  585. package/packages/tools/memory/dist/people.js +582 -0
  586. package/packages/tools/memory/dist/people.js.map +1 -0
  587. package/packages/tools/memory/dist/preamble.d.ts +4 -1
  588. package/packages/tools/memory/dist/preamble.d.ts.map +1 -1
  589. package/packages/tools/memory/dist/preamble.js +25 -7
  590. package/packages/tools/memory/dist/preamble.js.map +1 -1
  591. package/packages/tools/memory/migrations/002_people.sql +40 -0
  592. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  593. package/packages/web/dist/assets/{index-B_P_ux2I.css → index-CN1AXMI1.css} +1 -1
  594. package/packages/web/dist/assets/index-CQRE9LJX.js +145 -0
  595. package/packages/web/dist/assets/{lottie_light-Dj5SSwxs.js → lottie_light-CKJ88Yuk.js} +1 -1
  596. package/packages/web/dist/build.json +1 -1
  597. package/packages/web/dist/index.html +2 -2
  598. package/packages/web/dist/precache.json +4 -4
  599. package/node_modules/pino/test/types/pino-import.test-d.cts +0 -30
  600. package/node_modules/pino/test/types/pino-multistream.test-d.ts +0 -28
  601. package/node_modules/pino/test/types/pino-top-export.test-d.ts +0 -34
  602. package/node_modules/pino/test/types/pino-type-only.test-d.ts +0 -75
  603. package/node_modules/thread-stream/node_modules/real-require/LICENSE.md +0 -21
  604. package/node_modules/thread-stream/node_modules/real-require/README.md +0 -51
  605. package/node_modules/thread-stream/node_modules/real-require/package.json +0 -38
  606. package/node_modules/thread-stream/node_modules/real-require/src/index.js +0 -14
  607. package/packages/web/dist/assets/index-CjOzIGL7.js +0 -134
@@ -0,0 +1,101 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ export interface RouteReply {
3
+ status: number;
4
+ body: unknown;
5
+ }
6
+ /** A bundle is at most this big unpacked. */
7
+ export declare const BUNDLE_MAX_BYTES: number;
8
+ /** A bundle holds at most this many files. */
9
+ export declare const BUNDLE_MAX_FILES = 500;
10
+ export type RefusalKind = 'notzip' | 'big' | 'count' | 'noskill' | 'paths' | 'frontmatter' | 'executable' | 'damaged';
11
+ export interface Refusal {
12
+ kind: RefusalKind;
13
+ filename: string;
14
+ /** Bytes, for `big`: unpacked, or the upload's own size when it was stopped on the way in. */
15
+ size?: number;
16
+ /** For `count`. */
17
+ files?: number;
18
+ /** For `paths` and `executable`: each entry and why. */
19
+ entries?: Array<{
20
+ path: string;
21
+ why: string;
22
+ target?: string;
23
+ }>;
24
+ /** For `noskill`: where buddi looked (`''` is the top). */
25
+ looked?: string[];
26
+ }
27
+ export type FileKind = 'skill' | 'script' | 'font' | 'image' | 'template' | 'data' | 'other';
28
+ export interface BundleFileRow {
29
+ path: string;
30
+ size: number;
31
+ kind: FileKind;
32
+ /** A script whose name says it sets things up (`setup.sh`, `install.py`). */
33
+ setup?: boolean;
34
+ }
35
+ export interface StagedBundle {
36
+ id: string;
37
+ filename: string;
38
+ /** The zip's own size. */
39
+ packed: number;
40
+ /** Unpacked. */
41
+ size: number;
42
+ files: BundleFileRow[];
43
+ scripts: string[];
44
+ skill: {
45
+ name: string;
46
+ title: string;
47
+ description: string;
48
+ firstLines: string;
49
+ body: string;
50
+ network?: boolean;
51
+ };
52
+ createdAt: string;
53
+ }
54
+ export declare function fileKind(rel: string): FileKind;
55
+ /** Every file in a bundle's folder, SKILL.md first, then by path. */
56
+ export declare function bundleFileRows(dir: string): BundleFileRow[];
57
+ /** The staging folder: `<private>/.incoming/skills` beside the skills folder. */
58
+ export declare function incomingDirFor(skillsDir: string): string;
59
+ /** The filename the browser sent, as a label: its base name, no quotes or line breaks. */
60
+ export declare function uploadLabel(claimed: string | undefined): string;
61
+ /**
62
+ * Stream the request body to a temporary file, counted as it arrives and
63
+ * abandoned the moment it crosses the cap. Returns the path, or the refusal.
64
+ */
65
+ export declare function receiveBundleUpload(incomingDir: string, req: IncomingMessage, filename: string): Promise<{
66
+ path: string;
67
+ } | RouteReply>;
68
+ /** Staged uploads older than an hour, and stray zips, go. */
69
+ export declare function sweepStaged(incomingDir: string, now?: number): void;
70
+ /** The lenient read of SKILL.md's front matter: the top-level `key: value` lines, nested maps skipped. */
71
+ export declare function readBundleFrontmatter(text: string): {
72
+ fields: Record<string, string>;
73
+ body: string;
74
+ } | null;
75
+ /**
76
+ * Read the zip at `zipPath`, check it, and unpack it into a staging folder.
77
+ * Answers the preview, or the refusal with what buddi saw. The zip is
78
+ * removed either way.
79
+ */
80
+ export declare function stageBundle(incomingDir: string, zipPath: string, filename: string, now: Date): RouteReply;
81
+ /** A staged upload by its id: its meta and the folder its files are in. Null when it is gone. */
82
+ export declare function readStaged(incomingDir: string, id: string): {
83
+ staged: StagedBundle;
84
+ dir: string;
85
+ root: string;
86
+ } | null;
87
+ export declare function discardStaged(incomingDir: string, id: string): RouteReply;
88
+ /** A path inside `dir`, or null when it names anything else (or a link). */
89
+ export declare function bundlePath(dir: string, rel: string): string | null;
90
+ /** `{ path, size, kind, text }` for a text file, `{ …, binary: true }` (and `image` for a picture) for the rest. */
91
+ export declare function bundleFileView(dir: string, rel: string): RouteReply;
92
+ /** A picture's bytes and type, for the viewer's <img>. Null for anything that is not a picture. */
93
+ export declare function bundleImage(dir: string, rel: string): {
94
+ bytes: Buffer;
95
+ type: string;
96
+ } | null;
97
+ /** The bundle as a .zip, its folder at the top, for Download. */
98
+ export declare function zipBundle(dir: string, name: string): Uint8Array;
99
+ /** Whether a folder exists (for the accept's collision check). */
100
+ export declare function folderExists(dir: string): boolean;
101
+ //# sourceMappingURL=skill-bundles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-bundles.d.ts","sourceRoot":"","sources":["../../src/web/skill-bundles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,439 @@
1
+ /**
2
+ * Skill bundles, the upload half (specs/skills-zone.md, part 2): a `.zip`
3
+ * holding a SKILL.md with `scripts/` and `assets/` beside it.
4
+ *
5
+ * Nothing in a bundle runs here, ever. The upload is streamed to a temporary
6
+ * folder, read and checked before anything is kept — size, file count, a
7
+ * SKILL.md with front matter, no absolute paths, no `..`, no links, nothing
8
+ * executable outside `scripts/` — and unpacked into a staging folder the
9
+ * preview reads from. Only the owner's "Add the skill" moves it into the
10
+ * skills folder (skills.ts, `acceptBundleRoute`); a staged upload nobody
11
+ * accepted is swept after an hour.
12
+ */
13
+ import { randomUUID } from 'node:crypto';
14
+ import { createWriteStream, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
15
+ import { mkdir, rm } from 'node:fs/promises';
16
+ import path from 'node:path';
17
+ import { pipeline } from 'node:stream/promises';
18
+ import { zipSync } from 'fflate';
19
+ import { BUNDLE_SKILL_FILE, BUNDLE_SCRIPTS_DIR, splitFrontmatter } from '@buddi/core';
20
+ import { isExecutableMode, isSymlink, readZipEntries, readZipMember, ZipFormatError, ZipLimitError } from './zip-read.js';
21
+ /** A bundle is at most this big unpacked. */
22
+ export const BUNDLE_MAX_BYTES = 20 * 1024 * 1024;
23
+ /** A bundle holds at most this many files. */
24
+ export const BUNDLE_MAX_FILES = 500;
25
+ /** The upload itself: a zip a little over the unpacked limit (stored members carry headers). */
26
+ const UPLOAD_MAX_BYTES = BUNDLE_MAX_BYTES + 1024 * 1024;
27
+ /** A staged upload nobody accepted goes after this long. */
28
+ const STAGED_TTL_MS = 60 * 60 * 1000;
29
+ /** The largest file the viewer shows as text. */
30
+ const VIEW_TEXT_MAX = 256 * 1024;
31
+ const refuse = (status, refusal, error) => ({ status, body: { error, refusal } });
32
+ /* ------------------------------------------------------------------ *
33
+ * kinds
34
+ * ------------------------------------------------------------------ */
35
+ const FONT = /\.(ttf|otf|woff2?)$/i;
36
+ const IMAGE = /\.(png|jpe?g|gif|webp|svg|ico)$/i;
37
+ const DATA = /\.(json|csv|tsv|ya?ml|toml|xml)$/i;
38
+ const TEMPLATE = /\.(md|markdown|txt|html?|css|tex|rtf)$/i;
39
+ /** Kept out of everywhere but `scripts/`: what runs, or what a shell or a loader runs. */
40
+ const EXECUTABLE_EXT = /\.(sh|bash|zsh|fish|command|py|pyc|rb|pl|php|js|mjs|cjs|ts|exe|dll|so|dylib|bat|cmd|ps1|vbs|jar|app|bin|elf|msi|scpt|applescript)$/i;
41
+ const RASTER = { '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.gif': 'image/gif', '.webp': 'image/webp', '.svg': 'image/svg+xml', '.ico': 'image/x-icon' };
42
+ export function fileKind(rel) {
43
+ if (rel === BUNDLE_SKILL_FILE)
44
+ return 'skill';
45
+ if (rel.startsWith(`${BUNDLE_SCRIPTS_DIR}/`))
46
+ return 'script';
47
+ if (FONT.test(rel))
48
+ return 'font';
49
+ if (IMAGE.test(rel))
50
+ return 'image';
51
+ if (DATA.test(rel))
52
+ return 'data';
53
+ if (TEMPLATE.test(rel))
54
+ return 'template';
55
+ return 'other';
56
+ }
57
+ function rowOf(rel, size) {
58
+ const kind = fileKind(rel);
59
+ const setup = kind === 'script' && /^(setup|install|bootstrap)([._-]|$)/i.test(path.posix.basename(rel));
60
+ return { path: rel, size, kind, ...(setup ? { setup: true } : {}) };
61
+ }
62
+ /** Every file in a bundle's folder, SKILL.md first, then by path. */
63
+ export function bundleFileRows(dir) {
64
+ const rows = [];
65
+ const walk = (rel) => {
66
+ let entries;
67
+ try {
68
+ entries = readdirSync(path.join(dir, rel), { withFileTypes: true });
69
+ }
70
+ catch {
71
+ return;
72
+ }
73
+ for (const e of entries) {
74
+ const child = rel ? `${rel}/${e.name}` : e.name;
75
+ if (e.isDirectory())
76
+ walk(child);
77
+ else if (e.isFile())
78
+ rows.push(rowOf(child, statSync(path.join(dir, child)).size));
79
+ }
80
+ };
81
+ walk('');
82
+ return rows.sort((a, b) => (a.path === BUNDLE_SKILL_FILE ? -1 : b.path === BUNDLE_SKILL_FILE ? 1 : a.path.localeCompare(b.path)));
83
+ }
84
+ /* ------------------------------------------------------------------ *
85
+ * receiving the upload
86
+ * ------------------------------------------------------------------ */
87
+ /** The staging folder: `<private>/.incoming/skills` beside the skills folder. */
88
+ export function incomingDirFor(skillsDir) {
89
+ return path.join(path.dirname(path.resolve(skillsDir)), '.incoming', 'skills');
90
+ }
91
+ /** The filename the browser sent, as a label: its base name, no quotes or line breaks. */
92
+ export function uploadLabel(claimed) {
93
+ let name = claimed ?? '';
94
+ try {
95
+ name = decodeURIComponent(name);
96
+ }
97
+ catch {
98
+ // As sent.
99
+ }
100
+ return path.basename(name.replace(/\\/g, '/')).replace(/[\r\n"]/g, '').trim().slice(0, 200) || 'bundle.zip';
101
+ }
102
+ /**
103
+ * Stream the request body to a temporary file, counted as it arrives and
104
+ * abandoned the moment it crosses the cap. Returns the path, or the refusal.
105
+ */
106
+ export async function receiveBundleUpload(incomingDir, req, filename) {
107
+ if (!/\.zip$/i.test(filename)) {
108
+ return refuse(415, { kind: 'notzip', filename }, `“${filename}” isn’t a .zip or a .md. A skill is one Markdown file, or a .zip bundle with SKILL.md inside.`);
109
+ }
110
+ sweepStaged(incomingDir);
111
+ await mkdir(incomingDir, { recursive: true, mode: 0o700 });
112
+ const target = path.join(incomingDir, `${randomUUID()}.zip`);
113
+ const declared = Number(req.headers['content-length'] ?? NaN);
114
+ if (Number.isFinite(declared) && declared > UPLOAD_MAX_BYTES) {
115
+ req.resume();
116
+ return refuse(413, { kind: 'big', filename, size: declared }, tooBigSentence(filename, declared));
117
+ }
118
+ let bytes = 0;
119
+ let tooBig = false;
120
+ req.on('data', (chunk) => {
121
+ bytes += chunk.length;
122
+ if (bytes > UPLOAD_MAX_BYTES && !tooBig) {
123
+ tooBig = true;
124
+ req.destroy(new Error('too big'));
125
+ }
126
+ });
127
+ try {
128
+ await pipeline(req, createWriteStream(target, { mode: 0o600 }));
129
+ }
130
+ catch (err) {
131
+ await rm(target, { force: true }).catch(() => { });
132
+ if (tooBig)
133
+ return refuse(413, { kind: 'big', filename, size: bytes }, tooBigSentence(filename, bytes));
134
+ return { status: 400, body: { error: `The upload did not finish: ${err instanceof Error ? err.message : String(err)}` } };
135
+ }
136
+ if (bytes === 0) {
137
+ await rm(target, { force: true }).catch(() => { });
138
+ return { status: 400, body: { error: 'That upload was empty.' } };
139
+ }
140
+ return { path: target };
141
+ }
142
+ function mb(bytes) {
143
+ return `${Math.max(1, Math.round(bytes / (1024 * 1024)))} MB`;
144
+ }
145
+ function tooBigSentence(filename, size) {
146
+ return `“${filename}” is too big: it’s ${mb(size)}; a bundle can be up to ${mb(BUNDLE_MAX_BYTES)} unpacked. Leave large files out — SKILL.md can say where to find them.`;
147
+ }
148
+ /** Staged uploads older than an hour, and stray zips, go. */
149
+ export function sweepStaged(incomingDir, now = Date.now()) {
150
+ let names;
151
+ try {
152
+ names = readdirSync(incomingDir);
153
+ }
154
+ catch {
155
+ return;
156
+ }
157
+ for (const name of names) {
158
+ const full = path.join(incomingDir, name);
159
+ try {
160
+ if (now - lstatSync(full).mtimeMs > STAGED_TTL_MS)
161
+ rmSync(full, { recursive: true, force: true });
162
+ }
163
+ catch {
164
+ // Gone already.
165
+ }
166
+ }
167
+ }
168
+ /* ------------------------------------------------------------------ *
169
+ * checking and unpacking
170
+ * ------------------------------------------------------------------ */
171
+ const IGNORED = (name) => name.startsWith('__MACOSX/') || /(^|\/)\.DS_Store$/.test(name);
172
+ /** Why a member's path is refused, or null. */
173
+ function pathProblem(name) {
174
+ if (name.includes('\0'))
175
+ return 'has a NUL in its name';
176
+ if (name.includes('\\'))
177
+ return 'uses backslashes, which can climb out on some systems';
178
+ if (name.startsWith('/') || /^[A-Za-z]:/.test(name))
179
+ return 'is an absolute path';
180
+ if (name.split('/').some((part) => part === '..'))
181
+ return 'climbs out of the folder';
182
+ return null;
183
+ }
184
+ /** Bytes that start a program: ELF, Mach-O (thin and fat), a Windows executable. */
185
+ function looksLikeProgram(bytes) {
186
+ if (bytes.length < 4)
187
+ return false;
188
+ const b = (i) => bytes[i];
189
+ const word = ((b(0) << 24) | (b(1) << 16) | (b(2) << 8) | b(3)) >>> 0;
190
+ if (word === 0x7f454c46)
191
+ return true;
192
+ if ([0xfeedface, 0xfeedfacf, 0xcefaedfe, 0xcffaedfe, 0xcafebabe].includes(word))
193
+ return true;
194
+ return b(0) === 0x4d && b(1) === 0x5a;
195
+ }
196
+ /** The lenient read of SKILL.md's front matter: the top-level `key: value` lines, nested maps skipped. */
197
+ export function readBundleFrontmatter(text) {
198
+ let split;
199
+ try {
200
+ split = splitFrontmatter(text.replace(/^/, '').replace(/\r\n/g, '\n'));
201
+ }
202
+ catch {
203
+ return null;
204
+ }
205
+ const fields = {};
206
+ for (const line of split.frontmatter.split('\n')) {
207
+ const m = /^([A-Za-z][A-Za-z0-9_-]*):\s*(.*)$/.exec(line);
208
+ if (!m)
209
+ continue;
210
+ const value = m[2].trim().replace(/^(['"])(.*)\1$/, '$2').trim();
211
+ if (value !== '' && value !== '|' && value !== '>')
212
+ fields[m[1].toLowerCase()] = value;
213
+ }
214
+ return { fields, body: split.body };
215
+ }
216
+ /**
217
+ * Read the zip at `zipPath`, check it, and unpack it into a staging folder.
218
+ * Answers the preview, or the refusal with what buddi saw. The zip is
219
+ * removed either way.
220
+ */
221
+ export function stageBundle(incomingDir, zipPath, filename, now) {
222
+ try {
223
+ return stage(incomingDir, zipPath, filename, now);
224
+ }
225
+ finally {
226
+ rmSync(zipPath, { force: true });
227
+ }
228
+ }
229
+ function stage(incomingDir, zipPath, filename, now) {
230
+ const zip = new Uint8Array(readFileSync(zipPath));
231
+ let entries;
232
+ try {
233
+ entries = readZipEntries(zip).filter((e) => !IGNORED(e.name));
234
+ }
235
+ catch (err) {
236
+ return refuse(422, { kind: 'notzip', filename }, `“${filename}” could not be read as a zip: ${err instanceof Error ? err.message : String(err)}`);
237
+ }
238
+ // Paths and links first: one bad entry and nothing is unpacked.
239
+ const bad = [];
240
+ for (const e of entries) {
241
+ const problem = pathProblem(e.name);
242
+ if (problem)
243
+ bad.push({ path: e.name, why: problem });
244
+ else if (isSymlink(e)) {
245
+ let target;
246
+ try {
247
+ target = new TextDecoder().decode(readZipMember(zip, e, 4096)).slice(0, 200);
248
+ }
249
+ catch {
250
+ target = undefined;
251
+ }
252
+ bad.push({ path: e.name, why: 'is a link', ...(target ? { target } : {}) });
253
+ }
254
+ else if (e.encrypted)
255
+ bad.push({ path: e.name, why: 'is encrypted' });
256
+ }
257
+ if (bad.length > 0) {
258
+ return refuse(422, { kind: 'paths', filename, entries: bad }, `“${filename}” was refused: ${bad.length === 1 ? 'one entry reaches' : `${bad.length} entries reach`} outside the bundle or can’t be read (${bad.map((b) => `${b.path} ${b.why}`).join('; ')}), so nothing was unpacked.`);
259
+ }
260
+ const files = entries.filter((e) => !e.directory);
261
+ if (files.length > BUNDLE_MAX_FILES) {
262
+ return refuse(422, { kind: 'count', filename, files: files.length }, `“${filename}” holds ${files.length} files; a bundle can hold up to ${BUNDLE_MAX_FILES}.`);
263
+ }
264
+ const declared = files.reduce((sum, e) => sum + e.size, 0);
265
+ if (declared > BUNDLE_MAX_BYTES)
266
+ return refuse(413, { kind: 'big', filename, size: declared }, tooBigSentence(filename, declared));
267
+ // Where SKILL.md is: at the top, or inside the one folder everything sits in.
268
+ const tops = new Set(entries.map((e) => e.name.split('/')[0]));
269
+ const single = tops.size === 1 && entries.some((e) => e.name.includes('/')) ? `${[...tops][0]}/` : null;
270
+ const prefix = files.some((e) => e.name === BUNDLE_SKILL_FILE) ? '' : single && files.some((e) => e.name === `${single}${BUNDLE_SKILL_FILE}`) ? single : null;
271
+ if (prefix === null) {
272
+ return refuse(422, { kind: 'noskill', filename, looked: single ? ['', single] : [''] }, `No SKILL.md in “${filename}”. buddi looked at the top${single ? ` and inside ${single}` : ''}. A bundle needs SKILL.md in one of them, with scripts/ and assets/ beside it.`);
273
+ }
274
+ const rel = (e) => e.name.slice(prefix.length);
275
+ // Executables outside scripts/: by mode and by name, then by their first bytes as they unpack.
276
+ const executables = [];
277
+ for (const e of files) {
278
+ const r = rel(e);
279
+ if (r.startsWith(`${BUNDLE_SCRIPTS_DIR}/`))
280
+ continue;
281
+ if (isExecutableMode(e))
282
+ executables.push({ path: r, why: 'is marked executable' });
283
+ else if (EXECUTABLE_EXT.test(r))
284
+ executables.push({ path: r, why: 'is a script or a program' });
285
+ }
286
+ const id = randomUUID();
287
+ const root = path.join(incomingDir, id);
288
+ const filesDir = path.join(root, 'files');
289
+ const rows = [];
290
+ let unpacked = 0;
291
+ try {
292
+ mkdirSync(filesDir, { recursive: true, mode: 0o700 });
293
+ for (const e of files) {
294
+ const r = rel(e);
295
+ let bytes;
296
+ try {
297
+ bytes = readZipMember(zip, e, BUNDLE_MAX_BYTES - unpacked);
298
+ }
299
+ catch (err) {
300
+ rmSync(root, { recursive: true, force: true });
301
+ if (err instanceof ZipLimitError) {
302
+ return refuse(413, { kind: 'big', filename, size: declared }, `“${filename}” was refused: ${err.message} Nothing was kept.`);
303
+ }
304
+ if (err instanceof ZipFormatError)
305
+ return refuse(422, { kind: 'damaged', filename }, `“${filename}” is damaged: ${err.message}`);
306
+ throw err;
307
+ }
308
+ unpacked += bytes.length;
309
+ if (!r.startsWith(`${BUNDLE_SCRIPTS_DIR}/`) && looksLikeProgram(bytes) && !executables.some((x) => x.path === r)) {
310
+ executables.push({ path: r, why: 'is a program' });
311
+ }
312
+ const target = path.join(filesDir, r);
313
+ if (!target.startsWith(filesDir + path.sep))
314
+ throw new Error(`refusing ${r}`);
315
+ mkdirSync(path.dirname(target), { recursive: true, mode: 0o755 });
316
+ writeFileSync(target, bytes, { mode: 0o644, flag: 'wx' });
317
+ rows.push(rowOf(r, bytes.length));
318
+ }
319
+ }
320
+ catch (err) {
321
+ rmSync(root, { recursive: true, force: true });
322
+ if (err.code === 'EEXIST') {
323
+ return refuse(422, { kind: 'damaged', filename }, `“${filename}” lists the same file twice, so it was refused.`);
324
+ }
325
+ const code = err.code;
326
+ if (code === 'ENOTDIR' || code === 'EISDIR') {
327
+ return refuse(422, { kind: 'damaged', filename }, `“${filename}” holds a file and a folder with the same name, so it was refused.`);
328
+ }
329
+ throw err;
330
+ }
331
+ if (executables.length > 0) {
332
+ rmSync(root, { recursive: true, force: true });
333
+ return refuse(422, { kind: 'executable', filename, entries: executables }, `“${filename}” was refused: ${executables.map((x) => `${x.path} ${x.why}`).join('; ')}. A bundle keeps anything that runs in scripts/.`);
334
+ }
335
+ const skillText = readFileSync(path.join(filesDir, BUNDLE_SKILL_FILE), 'utf8');
336
+ const fm = readBundleFrontmatter(skillText);
337
+ const description = fm?.fields.description ?? '';
338
+ if (!fm || description === '' || fm.body.trim() === '') {
339
+ rmSync(root, { recursive: true, force: true });
340
+ return refuse(422, { kind: 'frontmatter', filename }, `“${filename}”’s SKILL.md needs front matter with a description (when it’s used) between --- lines, then the steps.`);
341
+ }
342
+ const body = fm.body.trim();
343
+ const heading = /^#\s+(.+)$/m.exec(body)?.[1]?.trim();
344
+ const named = fm.fields.name ?? '';
345
+ const words = (named || filename.replace(/\.zip$/i, '')).replace(/[-_]+/g, ' ').trim();
346
+ const title = (fm.fields.title ?? heading ?? (words.charAt(0).toUpperCase() + words.slice(1))).slice(0, 80);
347
+ const firstLines = body.replace(/^#.*$/m, '').replace(/\s+/g, ' ').trim().slice(0, 160);
348
+ rows.sort((a, b) => (a.path === BUNDLE_SKILL_FILE ? -1 : b.path === BUNDLE_SKILL_FILE ? 1 : a.path.localeCompare(b.path)));
349
+ const staged = {
350
+ id,
351
+ filename,
352
+ packed: zip.length,
353
+ size: unpacked,
354
+ files: rows,
355
+ scripts: rows.filter((r) => r.kind === 'script').map((r) => r.path),
356
+ skill: { name: named, title, description: description.slice(0, 300), firstLines, body, ...(fm.fields.network === 'true' ? { network: true } : {}) },
357
+ createdAt: now.toISOString(),
358
+ };
359
+ writeFileSync(path.join(root, 'meta.json'), JSON.stringify(staged), { mode: 0o600 });
360
+ return { status: 200, body: { staged: previewOf(staged) } };
361
+ }
362
+ /** What the preview shows: everything but the whole text. */
363
+ function previewOf(staged) {
364
+ const { body: _body, ...skill } = staged.skill;
365
+ return { ...staged, skill };
366
+ }
367
+ const STAGED_ID = /^[0-9a-f-]{36}$/;
368
+ /** A staged upload by its id: its meta and the folder its files are in. Null when it is gone. */
369
+ export function readStaged(incomingDir, id) {
370
+ if (!STAGED_ID.test(id))
371
+ return null;
372
+ const root = path.join(incomingDir, id);
373
+ try {
374
+ const staged = JSON.parse(readFileSync(path.join(root, 'meta.json'), 'utf8'));
375
+ return { staged, dir: path.join(root, 'files'), root };
376
+ }
377
+ catch {
378
+ return null;
379
+ }
380
+ }
381
+ export function discardStaged(incomingDir, id) {
382
+ const found = readStaged(incomingDir, id);
383
+ if (found)
384
+ rmSync(found.root, { recursive: true, force: true });
385
+ return { status: 200, body: { discarded: id } };
386
+ }
387
+ /* ------------------------------------------------------------------ *
388
+ * reading one file, for the viewer
389
+ * ------------------------------------------------------------------ */
390
+ /** A path inside `dir`, or null when it names anything else (or a link). */
391
+ export function bundlePath(dir, rel) {
392
+ if (!rel || pathProblem(rel) || rel.split('/').some((p) => p === '' || p === '.'))
393
+ return null;
394
+ const full = path.join(dir, rel);
395
+ if (!full.startsWith(path.resolve(dir) + path.sep))
396
+ return null;
397
+ try {
398
+ const st = lstatSync(full);
399
+ return st.isFile() ? full : null;
400
+ }
401
+ catch {
402
+ return null;
403
+ }
404
+ }
405
+ /** `{ path, size, kind, text }` for a text file, `{ …, binary: true }` (and `image` for a picture) for the rest. */
406
+ export function bundleFileView(dir, rel) {
407
+ const full = bundlePath(dir, rel);
408
+ if (!full)
409
+ return { status: 404, body: { error: `There is no file "${rel}" in this bundle.` } };
410
+ const row = rowOf(rel, statSync(full).size);
411
+ const image = RASTER[path.extname(rel).toLowerCase()] !== undefined;
412
+ if (row.kind === 'font' || (image && !/\.svg$/i.test(rel)) || row.size > VIEW_TEXT_MAX) {
413
+ return { status: 200, body: { file: { ...row, binary: true, ...(image ? { image: true } : {}) } } };
414
+ }
415
+ const bytes = readFileSync(full);
416
+ if (bytes.subarray(0, 8192).includes(0))
417
+ return { status: 200, body: { file: { ...row, binary: true } } };
418
+ return { status: 200, body: { file: { ...row, text: bytes.toString('utf8'), ...(image ? { image: true } : {}) } } };
419
+ }
420
+ /** A picture's bytes and type, for the viewer's <img>. Null for anything that is not a picture. */
421
+ export function bundleImage(dir, rel) {
422
+ const type = RASTER[path.extname(rel).toLowerCase()];
423
+ const full = type ? bundlePath(dir, rel) : null;
424
+ if (!full || !type)
425
+ return null;
426
+ return { bytes: readFileSync(full), type };
427
+ }
428
+ /** The bundle as a .zip, its folder at the top, for Download. */
429
+ export function zipBundle(dir, name) {
430
+ const tree = {};
431
+ for (const row of bundleFileRows(dir))
432
+ tree[`${name}/${row.path}`] = new Uint8Array(readFileSync(path.join(dir, row.path)));
433
+ return zipSync(tree, { level: 6 });
434
+ }
435
+ /** Whether a folder exists (for the accept's collision check). */
436
+ export function folderExists(dir) {
437
+ return existsSync(dir);
438
+ }
439
+ //# sourceMappingURL=skill-bundles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-bundles.js","sourceRoot":"","sources":["../../src/web/skill-bundles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1I,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAC;AAOzI,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,gGAAgG;AAChG,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,4DAA4D;AAC5D,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,iDAAiD;AACjD,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC;AAwCjC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,OAAgB,EAAE,KAAa,EAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAEvH;;wEAEwE;AAExE,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,KAAK,GAAG,kCAAkC,CAAC;AACjD,MAAM,IAAI,GAAG,mCAAmC,CAAC;AACjD,MAAM,QAAQ,GAAG,yCAAyC,CAAC;AAC3D,0FAA0F;AAC1F,MAAM,cAAc,GAAG,qIAAqI,CAAC;AAC7J,MAAM,MAAM,GAA2B,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AAEzM,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,GAAG,KAAK,iBAAiB;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9D,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,GAAW,EAAE,IAAY;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,IAAI,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACzG,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC5B,IAAI,CAAC,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpI,CAAC;AAED;;wEAEwE;AAExE,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,IAAI,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,WAAW;IACb,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC;AAC9G,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,GAAoB,EAAE,QAAgB;IACnG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,+FAA+F,CAAC,CAAC;IAChK,CAAC;IACD,WAAW,CAAC,WAAW,CAAC,CAAC;IACzB,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QAC7D,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QAC/B,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACtB,IAAI,KAAK,GAAG,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,GAAG,IAAI,CAAC;YACd,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACxG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IAC5H,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,EAAE,CAAC,KAAa;IACvB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,IAAY;IACpD,OAAO,IAAI,QAAQ,sBAAsB,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,gBAAgB,CAAC,yEAAyE,CAAC;AAC5K,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC/D,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,aAAa;gBAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpG,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;wEAEwE;AAExE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE1G,+CAA+C;AAC/C,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,uBAAuB,CAAC;IACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,uDAAuD,CAAC;IACxF,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAClF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,0BAA0B,CAAC;IACrF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,SAAS,gBAAgB,CAAC,KAAiB;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACxC,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,KAAK,GAAI,CAAC,CAAC,CAAC,CAAY,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7E,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;YAAE,MAAM,CAAE,CAAC,CAAC,CAAC,CAAY,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAe,EAAE,QAAgB,EAAE,GAAS;IAC3F,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,WAAmB,EAAE,OAAe,EAAE,QAAgB,EAAE,GAAS;IAC9E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,IAAI,OAAmB,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpJ,CAAC;IAED,gEAAgE;IAChE,MAAM,GAAG,GAAoC,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;aACjD,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,MAA0B,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;aAAM,IAAI,CAAC,CAAC,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,MAAM,CACX,GAAG,EACH,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EACzC,IAAI,QAAQ,kBAAkB,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,gBAAgB,yCAAyC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAC1N,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,QAAQ,WAAW,KAAK,CAAC,MAAM,mCAAmC,gBAAgB,GAAG,CAAC,CAAC;IAClK,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAAG,gBAAgB;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnI,8EAA8E;IAC9E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACxG,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9J,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CACX,GAAG,EACH,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACnE,mBAAmB,QAAQ,6BAA6B,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,gFAAgF,CAC9K,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAW,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,+FAA+F;IAC/F,MAAM,WAAW,GAAoC,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC;YAAE,SAAS;QACrD,IAAI,gBAAgB,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;aAC/E,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,KAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC;gBAC/H,CAAC;gBACD,IAAI,GAAG,YAAY,cAAc;oBAAE,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjI,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjH,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC9E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,iDAAiD,CAAC,CAAC;QACnH,CAAC;QACD,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,oEAAoE,CAAC,CAAC;QACtI,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,CACX,GAAG,EACH,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EACtD,IAAI,QAAQ,kBAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD,CACxI,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,EAAE,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACjD,IAAI,CAAC,EAAE,IAAI,WAAW,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,CACX,GAAG,EACH,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,EACjC,IAAI,QAAQ,wGAAwG,CACrH,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5G,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3H,MAAM,MAAM,GAAiB;QAC3B,EAAE;QACF,QAAQ;QACR,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACnJ,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;KAC7B,CAAC;IACF,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAC9D,CAAC;AAED,6DAA6D;AAC7D,SAAS,SAAS,CAAC,MAAoB;IACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/C,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC,iGAAiG;AACjG,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,EAAU;IACxD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAiB,CAAC;QAC9F,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,EAAU;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,KAAK;QAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC;AAClD,CAAC;AAED;;wEAEwE;AAExE,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,GAAW;IACjD,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,GAAW;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,qBAAqB,GAAG,mBAAmB,EAAE,EAAE,CAAC;IAChG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,SAAS,CAAC;IACpE,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;QACvF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IACtG,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC1G,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACtH,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,GAAW;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY;IACjD,MAAM,IAAI,GAA+B,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5H,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}