@cloudhal/cli 0.0.0-stage → 0.1.1

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 (796) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +191 -2
  3. package/dist/assets/skills/comment-triage/SKILL.md +34 -0
  4. package/dist/assets/skills/comment-triage/evals/nightly-queue.json +13 -0
  5. package/dist/assets/skills/publish-article/SKILL.md +44 -0
  6. package/dist/assets/skills/publish-article/evals/file-under-category.json +10 -0
  7. package/dist/assets/skills/publish-article/evals/publish-draft.json +8 -0
  8. package/dist/assets/skills/publish-article/evals/schedule-draft.json +10 -0
  9. package/dist/assets/skills/publish-article/references/editorial-checklist.md +9 -0
  10. package/dist/assets/skills/rollback/SKILL.md +23 -0
  11. package/dist/assets/skills/rollback/evals/revert-last.json +4 -0
  12. package/dist/assets/skills/safe-edit/SKILL.md +29 -0
  13. package/dist/assets/skills/safe-edit/evals/retitle.json +4 -0
  14. package/dist/assets/skills/safe-edit/references/retagging.md +8 -0
  15. package/dist/assets/skills/site-bootstrap/SKILL.md +29 -0
  16. package/dist/assets/skills/site-bootstrap/evals/empty-site.json +9 -0
  17. package/dist/assets/skills/site-bootstrap/references/content-guidelines.md +6 -0
  18. package/dist/assets/skills/site-design/SKILL.md +31 -0
  19. package/dist/assets/skills/site-design/evals/landing-page.json +12 -0
  20. package/dist/assets/skills/site-design/references/checklist.md +10 -0
  21. package/dist/assets/skills/site-design/references/guidance.md +13 -0
  22. package/dist/assets/skills/site-design/references/page-recipes.md +34 -0
  23. package/dist/assets/skills/site-design/references/tokens.md +40 -0
  24. package/dist/assets/skills/stale-review/SKILL.md +40 -0
  25. package/dist/assets/skills/stale-review/evals/weekly-review.json +13 -0
  26. package/dist/assets/starters/blog/.yarnrc.yml +2 -0
  27. package/dist/assets/starters/blog/README.md +46 -0
  28. package/dist/assets/starters/blog/_gitignore +5 -0
  29. package/dist/assets/starters/blog/astro.config.mjs +40 -0
  30. package/dist/assets/starters/blog/package.json +35 -0
  31. package/dist/assets/starters/blog/public/favicon.ico +0 -0
  32. package/dist/assets/starters/blog/public/favicon.svg +1 -0
  33. package/dist/assets/starters/blog/public/fonts/fraunces-OFL.txt +93 -0
  34. package/dist/assets/starters/blog/public/fonts/fraunces-latin-ext-wght-normal.woff2 +0 -0
  35. package/dist/assets/starters/blog/public/fonts/fraunces-latin-wght-normal.woff2 +0 -0
  36. package/dist/assets/starters/blog/public/fonts/inter-OFL.txt +93 -0
  37. package/dist/assets/starters/blog/public/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  38. package/dist/assets/starters/blog/public/fonts/inter-latin-wght-normal.woff2 +0 -0
  39. package/dist/assets/starters/blog/public/fonts/jetbrains-mono-OFL.txt +93 -0
  40. package/dist/assets/starters/blog/public/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  41. package/dist/assets/starters/blog/public/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  42. package/dist/assets/starters/blog/public/fonts/source-sans-3-OFL.txt +93 -0
  43. package/dist/assets/starters/blog/public/fonts/source-sans-3-latin-ext-wght-normal.woff2 +0 -0
  44. package/dist/assets/starters/blog/public/fonts/source-sans-3-latin-wght-normal.woff2 +0 -0
  45. package/dist/assets/starters/blog/public/fonts/source-serif-4-OFL.txt +93 -0
  46. package/dist/assets/starters/blog/public/fonts/source-serif-4-latin-ext-wght-normal.woff2 +0 -0
  47. package/dist/assets/starters/blog/public/fonts/source-serif-4-latin-wght-normal.woff2 +0 -0
  48. package/dist/assets/starters/blog/public/fonts/space-grotesk-OFL.txt +93 -0
  49. package/dist/assets/starters/blog/public/fonts/space-grotesk-latin-ext-wght-normal.woff2 +0 -0
  50. package/dist/assets/starters/blog/public/fonts/space-grotesk-latin-wght-normal.woff2 +0 -0
  51. package/dist/assets/starters/blog/src/DESIGN.md +42 -0
  52. package/dist/assets/starters/blog/src/blocks.ts +45 -0
  53. package/dist/assets/starters/blog/src/components/Archive.astro +108 -0
  54. package/dist/assets/starters/blog/src/components/Article.astro +105 -0
  55. package/dist/assets/starters/blog/src/components/Breadcrumbs.astro +25 -0
  56. package/dist/assets/starters/blog/src/components/EntryList.astro +54 -0
  57. package/dist/assets/starters/blog/src/components/LatestPosts.astro +30 -0
  58. package/dist/assets/starters/blog/src/components/MenuPanel.astro +46 -0
  59. package/dist/assets/starters/blog/src/components/NavLink.astro +27 -0
  60. package/dist/assets/starters/blog/src/components/NavMenu.astro +95 -0
  61. package/dist/assets/starters/blog/src/components/NotFound.astro +27 -0
  62. package/dist/assets/starters/blog/src/components/PostTerms.astro +33 -0
  63. package/dist/assets/starters/blog/src/components/RelatedPosts.astro +20 -0
  64. package/dist/assets/starters/blog/src/components/Search.astro +57 -0
  65. package/dist/assets/starters/blog/src/components/SearchDialog.astro +46 -0
  66. package/dist/assets/starters/blog/src/components/blocks/Testimonial.astro +18 -0
  67. package/dist/assets/starters/blog/src/env.d.ts +5 -0
  68. package/dist/assets/starters/blog/src/fonts.ts +15 -0
  69. package/dist/assets/starters/blog/src/icons.ts +12 -0
  70. package/dist/assets/starters/blog/src/layouts/Base.astro +426 -0
  71. package/dist/assets/starters/blog/src/middleware.ts +2 -0
  72. package/dist/assets/starters/blog/src/pages/[...path]/llms.txt.ts +40 -0
  73. package/dist/assets/starters/blog/src/pages/[...path]/rss.xml.ts +93 -0
  74. package/dist/assets/starters/blog/src/pages/[...path]/search.json.ts +23 -0
  75. package/dist/assets/starters/blog/src/pages/[...path].astro +449 -0
  76. package/dist/assets/starters/blog/src/pages/llms.txt.ts +21 -0
  77. package/dist/assets/starters/blog/src/pages/robots.txt.ts +13 -0
  78. package/dist/assets/starters/blog/src/pages/rss.xml.ts +25 -0
  79. package/dist/assets/starters/blog/src/pages/search.json.ts +21 -0
  80. package/dist/assets/starters/blog/src/pages/sitemap.xml.ts +23 -0
  81. package/dist/assets/starters/blog/src/settings.ts +312 -0
  82. package/dist/assets/starters/blog/src/strings.ts +269 -0
  83. package/dist/assets/starters/blog/src/styles/features/ambient.css +185 -0
  84. package/dist/assets/starters/blog/src/styles/features/article.css +215 -0
  85. package/dist/assets/starters/blog/src/styles/features/blocks.css +93 -0
  86. package/dist/assets/starters/blog/src/styles/features/carousel.css +266 -0
  87. package/dist/assets/starters/blog/src/styles/features/chrome-menus.css +264 -0
  88. package/dist/assets/starters/blog/src/styles/features/chrome.css +193 -0
  89. package/dist/assets/starters/blog/src/styles/features/comments.css +75 -0
  90. package/dist/assets/starters/blog/src/styles/features/icons.css +70 -0
  91. package/dist/assets/starters/blog/src/styles/features/languages.css +34 -0
  92. package/dist/assets/starters/blog/src/styles/features/live-surfaces.css +235 -0
  93. package/dist/assets/starters/blog/src/styles/features/motion-effects.css +217 -0
  94. package/dist/assets/starters/blog/src/styles/features/motion-scroll.css +309 -0
  95. package/dist/assets/starters/blog/src/styles/features/motion.css +254 -0
  96. package/dist/assets/starters/blog/src/styles/features/overlays.css +324 -0
  97. package/dist/assets/starters/blog/src/styles/features/prose.css +140 -0
  98. package/dist/assets/starters/blog/src/styles/features/search-dialog.css +144 -0
  99. package/dist/assets/starters/blog/src/styles/features/search.css +59 -0
  100. package/dist/assets/starters/blog/src/styles/features/surface-media.css +123 -0
  101. package/dist/assets/starters/blog/src/styles/features/surfaces.css +309 -0
  102. package/dist/assets/starters/blog/src/styles/features/tokens.css +100 -0
  103. package/dist/assets/starters/blog/src/styles/fonts.css +113 -0
  104. package/dist/assets/starters/blog/src/styles/global.css +30 -0
  105. package/dist/assets/starters/blog/src/theme.ts +48 -0
  106. package/dist/assets/starters/blog/tsconfig.json +5 -0
  107. package/dist/assets/studio/.assetsignore +2 -0
  108. package/dist/assets/studio/_headers +14 -0
  109. package/dist/assets/studio/assets/AccountPage-Dzr5d8sk.js +2 -0
  110. package/dist/assets/studio/assets/ActivityPage-C0HlgSI5.js +2 -0
  111. package/dist/assets/studio/assets/AgentModes-B81a2nUo.js +2 -0
  112. package/dist/assets/studio/assets/AgentsPage-BzCOyX4g.js +2 -0
  113. package/dist/assets/studio/assets/AnalyticsPage-7yb7DBOH.js +3 -0
  114. package/dist/assets/studio/assets/ApprovalsPage-_tqc02mk.js +3 -0
  115. package/dist/assets/studio/assets/Archive.es-C0uhxndN.js +2 -0
  116. package/dist/assets/studio/assets/ArrowClockwise.es-BA0pzb0Y.js +2 -0
  117. package/dist/assets/studio/assets/ArrowCounterClockwise.es-Bn2jikgp.js +2 -0
  118. package/dist/assets/studio/assets/ArrowSquareOut.es-BWeH9CSw.js +2 -0
  119. package/dist/assets/studio/assets/ArrowUp.es-Bh0pVk-S.js +2 -0
  120. package/dist/assets/studio/assets/ArrowsMerge.es-gfKOrxGd.js +2 -0
  121. package/dist/assets/studio/assets/ArticleEditorPage-Bcb81dXC.js +2 -0
  122. package/dist/assets/studio/assets/ArticlesPage-152INxny.js +2 -0
  123. package/dist/assets/studio/assets/AssetPage-ddWJt0hs.js +2 -0
  124. package/dist/assets/studio/assets/Audit-BCzf5vBq.js +2 -0
  125. package/dist/assets/studio/assets/AuditBadges-C4sNtzf9.js +2 -0
  126. package/dist/assets/studio/assets/AuthLayout-Cidy_2Lu.js +2 -0
  127. package/dist/assets/studio/assets/AutocompleteItem-drxau0wm3735nihq-C-iAptWL.js +2 -0
  128. package/dist/assets/studio/assets/AutomationsPage-Dc6g5v_v.js +2 -0
  129. package/dist/assets/studio/assets/BlockPropsForm-fj5gMAa0.js +2 -0
  130. package/dist/assets/studio/assets/BlockSection-CnUXl5Sg.js +2 -0
  131. package/dist/assets/studio/assets/BodyChanges-M0zcsivC.js +4 -0
  132. package/dist/assets/studio/assets/BookOpenText.es-BfXzf_Vn.js +2 -0
  133. package/dist/assets/studio/assets/BuildPage-C1Nwy4dt.js +2 -0
  134. package/dist/assets/studio/assets/CSPContext-ctyrgg64girv38ls-2UvfJ5m0.js +2 -0
  135. package/dist/assets/studio/assets/CalendarCheck.es-DWymuVqi.js +2 -0
  136. package/dist/assets/studio/assets/CalendarPlus.es-YGFiosIm.js +2 -0
  137. package/dist/assets/studio/assets/CaretLeft.es-BUnHcaxq.js +2 -0
  138. package/dist/assets/studio/assets/CaretRight.es-D_coqYai.js +2 -0
  139. package/dist/assets/studio/assets/CaretUp.es-DBg3pdpL.js +2 -0
  140. package/dist/assets/studio/assets/CheckCircle.es-XJ9Tr9Tu.js +2 -0
  141. package/dist/assets/studio/assets/ClockClockwise.es-1egHMnBk.js +2 -0
  142. package/dist/assets/studio/assets/ClockCountdown.es-BR_zz6vi.js +2 -0
  143. package/dist/assets/studio/assets/Columns-DGrju-Ia.js +2 -0
  144. package/dist/assets/studio/assets/ComboboxEmpty-o0q20j2l2syar9kx-Bf-42bzQ.js +2 -0
  145. package/dist/assets/studio/assets/CommandMenu-CH5CJ8Kg.js +2 -0
  146. package/dist/assets/studio/assets/CommentThreadControls-D04pICZT.js +2 -0
  147. package/dist/assets/studio/assets/CommentThreadPage-BP0N9T4z.js +2 -0
  148. package/dist/assets/studio/assets/CommenterPage-CeFR4pn4.js +2 -0
  149. package/dist/assets/studio/assets/Comments-CnfKPS2z.js +2 -0
  150. package/dist/assets/studio/assets/CommentsPage-BlP_knlf.js +2 -0
  151. package/dist/assets/studio/assets/CompositeItem-hzuk5x3e5zsfgnyj-XaSr50DG.js +2 -0
  152. package/dist/assets/studio/assets/CompositeRoot-g72lchaerolf5dc9-B2BokDIY.js +2 -0
  153. package/dist/assets/studio/assets/ConfirmDialog-DEHkMoTj.js +2 -0
  154. package/dist/assets/studio/assets/Crumbs-Ci_RdgHU.js +2 -0
  155. package/dist/assets/studio/assets/DeviceMobile.es-B4PwJ85Q.js +2 -0
  156. package/dist/assets/studio/assets/DeviceTablet.es-BpxIF5z6.js +2 -0
  157. package/dist/assets/studio/assets/DialogRoot-hl3genvzl9h8ridm-BRUDLjaw.js +2 -0
  158. package/dist/assets/studio/assets/DialogTrigger-g44cuem7n4wez533-B5K8lQD3.js +2 -0
  159. package/dist/assets/studio/assets/DirectionalIcon-BKKMj3KT.js +2 -0
  160. package/dist/assets/studio/assets/DotsThree.es-C-pT5SgE.js +2 -0
  161. package/dist/assets/studio/assets/DownloadSimple.es-Cq4-UK-k.js +2 -0
  162. package/dist/assets/studio/assets/EditorLayout-DVegYcZT.js +2 -0
  163. package/dist/assets/studio/assets/EditorPreview-DsZG4-oJ.js +2 -0
  164. package/dist/assets/studio/assets/Elevation-Ca3Q8sk-.js +2 -0
  165. package/dist/assets/studio/assets/ElevationRequest-B0_Q_gVT.js +2 -0
  166. package/dist/assets/studio/assets/EnvelopeSimple.es-g-hlqV74.js +2 -0
  167. package/dist/assets/studio/assets/Eye.es-DqovdtPt.js +2 -0
  168. package/dist/assets/studio/assets/EyeSlash.es-YoqigHIr.js +2 -0
  169. package/dist/assets/studio/assets/File.es-VYp_u8mn.js +2 -0
  170. package/dist/assets/studio/assets/FolderSimple.es-CbGWmBJc.js +2 -0
  171. package/dist/assets/studio/assets/FolderSimplePlus.es-C9Fl6ewY.js +2 -0
  172. package/dist/assets/studio/assets/ForgotPasswordPage-LNtBXfC8.js +2 -0
  173. package/dist/assets/studio/assets/Funnel.es-L1Sdi8-A.js +2 -0
  174. package/dist/assets/studio/assets/Gating-BdY3KxOv.js +2 -0
  175. package/dist/assets/studio/assets/Gauge.es-D0Pz39Z0.js +2 -0
  176. package/dist/assets/studio/assets/GitDiff.es-fB1csyEF.js +2 -0
  177. package/dist/assets/studio/assets/GlobeHemisphereWest.es-C34XiLRk.js +2 -0
  178. package/dist/assets/studio/assets/GovernanceDialog-DR0m4Bhp.js +2 -0
  179. package/dist/assets/studio/assets/HandPalm.es-CB5OlkOg.js +2 -0
  180. package/dist/assets/studio/assets/Heartbeat.es-DZziz772.js +2 -0
  181. package/dist/assets/studio/assets/Hourglass.es-aqS22q0y.js +2 -0
  182. package/dist/assets/studio/assets/House.es-BQyZgbwu.js +2 -0
  183. package/dist/assets/studio/assets/IconBase.es-BZDpYMnj.js +2 -0
  184. package/dist/assets/studio/assets/Image.es-BcOUS77O.js +2 -0
  185. package/dist/assets/studio/assets/InsetPanel-CHSg953_.js +2 -0
  186. package/dist/assets/studio/assets/InvitePage-CZ-4Clg6.js +2 -0
  187. package/dist/assets/studio/assets/Key.es-DE551dL3.js +2 -0
  188. package/dist/assets/studio/assets/Lightning.es-D0IF-5OW.js +2 -0
  189. package/dist/assets/studio/assets/LinkBreak.es-BvGThatb.js +2 -0
  190. package/dist/assets/studio/assets/LinkSimple.es-BB_3GfFO.js +2 -0
  191. package/dist/assets/studio/assets/ListBullets.es-DzSyoNA1.js +2 -0
  192. package/dist/assets/studio/assets/ListToolbar-CE70usqf.js +2 -0
  193. package/dist/assets/studio/assets/LockSimple.es-D3HQqnoN.js +2 -0
  194. package/dist/assets/studio/assets/LoginPage-BfUjD7n3.js +2 -0
  195. package/dist/assets/studio/assets/MediaPage-D7h4RBbB.js +2 -0
  196. package/dist/assets/studio/assets/MediaPicker-DlJLkaGR.js +2 -0
  197. package/dist/assets/studio/assets/MediaUpload-BpTyBTHG.js +2 -0
  198. package/dist/assets/studio/assets/MembersPage-BNu1FOBL.js +2 -0
  199. package/dist/assets/studio/assets/Menus-ChmyHrPc.js +2 -0
  200. package/dist/assets/studio/assets/Monitor.es-CeaPWdET.js +2 -0
  201. package/dist/assets/studio/assets/NavigationPage-C10U827y.js +2 -0
  202. package/dist/assets/studio/assets/NewSiteDialog-D7SUMMY3.js +2 -0
  203. package/dist/assets/studio/assets/PageEditorPage-DBJUAqjk.js +5 -0
  204. package/dist/assets/studio/assets/PagesPage-Bwm8b58m.js +2 -0
  205. package/dist/assets/studio/assets/PasswordField-Cn0g88_l.js +2 -0
  206. package/dist/assets/studio/assets/PencilSimple.es-CsZ-k9wK.js +2 -0
  207. package/dist/assets/studio/assets/Plus.es-XNm1OB5Q.js +2 -0
  208. package/dist/assets/studio/assets/PreviewPanel-ChFoJD1H.js +2 -0
  209. package/dist/assets/studio/assets/Prohibit.es-CAvPLn3v.js +2 -0
  210. package/dist/assets/studio/assets/ProhibitInset.es-DsnL02EX.js +2 -0
  211. package/dist/assets/studio/assets/ProjectPage-e5BSkkda.js +2 -0
  212. package/dist/assets/studio/assets/Question.es-BqQtQle2.js +2 -0
  213. package/dist/assets/studio/assets/Readers-CvhU7wCy.js +3 -0
  214. package/dist/assets/studio/assets/RedirectDialog-DCNKLV43.js +2 -0
  215. package/dist/assets/studio/assets/RedirectsPage-CR1Di-T6.js +2 -0
  216. package/dist/assets/studio/assets/ReleaseApproval-gkciKrWx.js +2 -0
  217. package/dist/assets/studio/assets/ReleasePage-BRa167d9.js +2 -0
  218. package/dist/assets/studio/assets/ReleaseParts-BEMf510p.js +2 -0
  219. package/dist/assets/studio/assets/ResetPasswordPage-DLpZlh7i.js +2 -0
  220. package/dist/assets/studio/assets/RowMenu-BTHdea9k.js +2 -0
  221. package/dist/assets/studio/assets/ScheduleCard-BQWUIwPX.js +2 -0
  222. package/dist/assets/studio/assets/ScheduleDialog-B-QQ_Z3F.js +2 -0
  223. package/dist/assets/studio/assets/ScheduleHistoryPage-wv3pKfaZ.js +2 -0
  224. package/dist/assets/studio/assets/ScheduleStatusBadge-DHGmEyDv.js +2 -0
  225. package/dist/assets/studio/assets/SchedulerStalled-DUmZxbV4.js +2 -0
  226. package/dist/assets/studio/assets/Schedules-R6HfROIM.js +3 -0
  227. package/dist/assets/studio/assets/SchedulesPage-CIbzmMag.js +2 -0
  228. package/dist/assets/studio/assets/ScopeBadge-DM2PO5Xk.js +2 -0
  229. package/dist/assets/studio/assets/SectionCard-SzT8t6oM.js +2 -0
  230. package/dist/assets/studio/assets/Seo-CYyFHl3G.js +2 -0
  231. package/dist/assets/studio/assets/SeoPreview-tarmyT2Y.js +2 -0
  232. package/dist/assets/studio/assets/Settings-C407Vxml.js +2 -0
  233. package/dist/assets/studio/assets/ShieldCheck.es-BOXTHH7h.js +2 -0
  234. package/dist/assets/studio/assets/ShieldWarning.es-DPxoDMpT.js +2 -0
  235. package/dist/assets/studio/assets/SignIn.es-jAzHZG6b.js +2 -0
  236. package/dist/assets/studio/assets/SiteAccessField-D34vIaAo.js +2 -0
  237. package/dist/assets/studio/assets/SiteOverviewPage-Bm0-f1bp.js +4 -0
  238. package/dist/assets/studio/assets/SiteSettingsPage-tq4SzyMQ.js +3 -0
  239. package/dist/assets/studio/assets/SitesPage-B2QS2zaq.js +4 -0
  240. package/dist/assets/studio/assets/SkillsPage-BtFk0bBw.js +3 -0
  241. package/dist/assets/studio/assets/SlidersHorizontal.es-Bg-14CTG.js +2 -0
  242. package/dist/assets/studio/assets/SnapshotsPage-cltqpJLv.js +2 -0
  243. package/dist/assets/studio/assets/SourceEditor-UA14mu6Q.js +16 -0
  244. package/dist/assets/studio/assets/Sparkle.es-OfyfGCDe.js +2 -0
  245. package/dist/assets/studio/assets/Star.es-DhrrAurR.js +2 -0
  246. package/dist/assets/studio/assets/StatTile-DyU32i8V.js +2 -0
  247. package/dist/assets/studio/assets/Status-BgB2wP8j.js +2 -0
  248. package/dist/assets/studio/assets/StatusActions-tY-DY4Wa.js +3 -0
  249. package/dist/assets/studio/assets/StopCircle.es-a6tRK2fc.js +2 -0
  250. package/dist/assets/studio/assets/Table.es-6S52tmK7.js +2 -0
  251. package/dist/assets/studio/assets/TableSkeleton-CbqPrk-p.js +2 -0
  252. package/dist/assets/studio/assets/TagsMigration-BggsWH7A.js +2 -0
  253. package/dist/assets/studio/assets/Taxonomy-CeQUBEeZ.js +2 -0
  254. package/dist/assets/studio/assets/TaxonomyPage-hm0h5Ug5.js +2 -0
  255. package/dist/assets/studio/assets/TermEditorPage-tRUgbC0f.js +2 -0
  256. package/dist/assets/studio/assets/TermPickers-cZIwRG5t.js +2 -0
  257. package/dist/assets/studio/assets/TerminalWindow.es-DRFBT_Ie.js +2 -0
  258. package/dist/assets/studio/assets/TextAa.es-CuNv62rI.js +2 -0
  259. package/dist/assets/studio/assets/Toast-BHyBhGXI.js +2 -0
  260. package/dist/assets/studio/assets/ToolbarRootContext-eqk40r8uh4h6r211-DBIMpkd1.js +2 -0
  261. package/dist/assets/studio/assets/TranslationList-Cc4K8uy_.js +2 -0
  262. package/dist/assets/studio/assets/TranslationsPage-MFJsWMgX.js +2 -0
  263. package/dist/assets/studio/assets/Trash.es-CxKLVMOQ.js +2 -0
  264. package/dist/assets/studio/assets/User.es-BLqDj7XT.js +2 -0
  265. package/dist/assets/studio/assets/UserCircle.es-D4ZFhshn.js +2 -0
  266. package/dist/assets/studio/assets/Warning.es-LZXqwHRF.js +2 -0
  267. package/dist/assets/studio/assets/XCircle.es-3fJHkmwA.js +2 -0
  268. package/dist/assets/studio/assets/account-BXWuYNDB.js +2 -0
  269. package/dist/assets/studio/assets/activity-C0we9-m8.js +2 -0
  270. package/dist/assets/studio/assets/agents-BBsojpg9.js +4 -0
  271. package/dist/assets/studio/assets/aiSettings.ar-BhZdR6qG.js +2 -0
  272. package/dist/assets/studio/assets/aiSettings.de-CXaCGWio.js +2 -0
  273. package/dist/assets/studio/assets/aiSettings.en-C8dj9xkg.js +2 -0
  274. package/dist/assets/studio/assets/aiSettings.es-avCBqU5-.js +2 -0
  275. package/dist/assets/studio/assets/aiSettings.fa-CKFnDB0Q.js +2 -0
  276. package/dist/assets/studio/assets/aiSettings.fr-35_A52Su.js +2 -0
  277. package/dist/assets/studio/assets/aiSettings.he-CbsdxPL1.js +2 -0
  278. package/dist/assets/studio/assets/aiSettings.hi-y4QpRZgC.js +2 -0
  279. package/dist/assets/studio/assets/aiSettings.id-CO4I-Nr1.js +2 -0
  280. package/dist/assets/studio/assets/aiSettings.it-B-OytWUY.js +2 -0
  281. package/dist/assets/studio/assets/aiSettings.ja-ClLGRpLX.js +2 -0
  282. package/dist/assets/studio/assets/aiSettings.ko-CedNf6wA.js +2 -0
  283. package/dist/assets/studio/assets/aiSettings.nl-DuEVpMb_.js +2 -0
  284. package/dist/assets/studio/assets/aiSettings.pl-wXUoviqN.js +2 -0
  285. package/dist/assets/studio/assets/aiSettings.pt-BR-Dm3HTskY.js +2 -0
  286. package/dist/assets/studio/assets/aiSettings.ru-DOWh4XHX.js +2 -0
  287. package/dist/assets/studio/assets/aiSettings.tr-xC2kyYK8.js +2 -0
  288. package/dist/assets/studio/assets/aiSettings.uk-DrE0ioQJ.js +2 -0
  289. package/dist/assets/studio/assets/aiSettings.zh-Hans-CBZ7ePsr.js +2 -0
  290. package/dist/assets/studio/assets/analytics-range-BqKm9TTo.js +2 -0
  291. package/dist/assets/studio/assets/analytics.ar-DFKPNZOf.js +2 -0
  292. package/dist/assets/studio/assets/analytics.de-CE2_NGRB.js +2 -0
  293. package/dist/assets/studio/assets/analytics.en-BjRe9VE9.js +2 -0
  294. package/dist/assets/studio/assets/analytics.es-DmWAl1lg.js +2 -0
  295. package/dist/assets/studio/assets/analytics.fa-YJ3Xk-rc.js +2 -0
  296. package/dist/assets/studio/assets/analytics.fr-BDyCguOG.js +2 -0
  297. package/dist/assets/studio/assets/analytics.he-BJ5kfLvV.js +2 -0
  298. package/dist/assets/studio/assets/analytics.hi-Cc9ZxzNg.js +2 -0
  299. package/dist/assets/studio/assets/analytics.id-CyUlDO82.js +2 -0
  300. package/dist/assets/studio/assets/analytics.it-NlLzAH3s.js +2 -0
  301. package/dist/assets/studio/assets/analytics.ja-DWrGTLXw.js +2 -0
  302. package/dist/assets/studio/assets/analytics.ko-BtZwKyZk.js +2 -0
  303. package/dist/assets/studio/assets/analytics.nl-CAny5E3q.js +2 -0
  304. package/dist/assets/studio/assets/analytics.pl-CpcS7l9b.js +2 -0
  305. package/dist/assets/studio/assets/analytics.pt-BR-BAK_LNqi.js +2 -0
  306. package/dist/assets/studio/assets/analytics.ru-BhvbWlC_.js +2 -0
  307. package/dist/assets/studio/assets/analytics.tr-aCP2FxF6.js +2 -0
  308. package/dist/assets/studio/assets/analytics.uk-CAGnu8AX.js +2 -0
  309. package/dist/assets/studio/assets/analytics.zh-Hans-NF-Le9KQ.js +2 -0
  310. package/dist/assets/studio/assets/analyticsSettings.ar-C5r58XUn.js +2 -0
  311. package/dist/assets/studio/assets/analyticsSettings.de-DVXtSeKl.js +2 -0
  312. package/dist/assets/studio/assets/analyticsSettings.en-Dn_QYKbo.js +2 -0
  313. package/dist/assets/studio/assets/analyticsSettings.es-BdkgtxLM.js +2 -0
  314. package/dist/assets/studio/assets/analyticsSettings.fa-CPuBleHO.js +2 -0
  315. package/dist/assets/studio/assets/analyticsSettings.fr-BSq7kZAb.js +2 -0
  316. package/dist/assets/studio/assets/analyticsSettings.he-Bt4A9H0D.js +2 -0
  317. package/dist/assets/studio/assets/analyticsSettings.hi-ii2QSWPw.js +2 -0
  318. package/dist/assets/studio/assets/analyticsSettings.id-CIZyEXYS.js +2 -0
  319. package/dist/assets/studio/assets/analyticsSettings.it-Sevpe-t4.js +2 -0
  320. package/dist/assets/studio/assets/analyticsSettings.ja-C_52hTsO.js +2 -0
  321. package/dist/assets/studio/assets/analyticsSettings.ko-Bpr2STd6.js +2 -0
  322. package/dist/assets/studio/assets/analyticsSettings.nl-DYfP6Uld.js +2 -0
  323. package/dist/assets/studio/assets/analyticsSettings.pl-BuJZVVIi.js +2 -0
  324. package/dist/assets/studio/assets/analyticsSettings.pt-BR-C4BNIRKw.js +2 -0
  325. package/dist/assets/studio/assets/analyticsSettings.ru-CiMbwjeg.js +2 -0
  326. package/dist/assets/studio/assets/analyticsSettings.tr-Csuqe5q9.js +2 -0
  327. package/dist/assets/studio/assets/analyticsSettings.uk-DVRqhoqA.js +2 -0
  328. package/dist/assets/studio/assets/analyticsSettings.zh-Hans-Y3Ei4xGe.js +2 -0
  329. package/dist/assets/studio/assets/api-Sbz4Rbu7.js +4 -0
  330. package/dist/assets/studio/assets/api-errors-FBnZYqCy.js +2 -0
  331. package/dist/assets/studio/assets/appearance.ar-CjHmVq1_.js +2 -0
  332. package/dist/assets/studio/assets/appearance.de-RD44SQgd.js +2 -0
  333. package/dist/assets/studio/assets/appearance.en-mFJuOtIH.js +2 -0
  334. package/dist/assets/studio/assets/appearance.es-Dn1vcVTZ.js +2 -0
  335. package/dist/assets/studio/assets/appearance.fa-DclMXXrQ.js +2 -0
  336. package/dist/assets/studio/assets/appearance.fr-CRqH6-pt.js +2 -0
  337. package/dist/assets/studio/assets/appearance.he-COP1zzas.js +2 -0
  338. package/dist/assets/studio/assets/appearance.hi-CnnlhSEx.js +2 -0
  339. package/dist/assets/studio/assets/appearance.id-aSp7eOOW.js +2 -0
  340. package/dist/assets/studio/assets/appearance.it-D4AXypSF.js +2 -0
  341. package/dist/assets/studio/assets/appearance.ja-BoMHIaWB.js +2 -0
  342. package/dist/assets/studio/assets/appearance.ko-BqysekcN.js +2 -0
  343. package/dist/assets/studio/assets/appearance.nl-DkQd7NMN.js +2 -0
  344. package/dist/assets/studio/assets/appearance.pl-YvYqfbPP.js +2 -0
  345. package/dist/assets/studio/assets/appearance.pt-BR-8R80D9mc.js +2 -0
  346. package/dist/assets/studio/assets/appearance.ru-CLiGYIyF.js +2 -0
  347. package/dist/assets/studio/assets/appearance.tr-T9TtsGiz.js +2 -0
  348. package/dist/assets/studio/assets/appearance.uk-C-AHWC43.js +2 -0
  349. package/dist/assets/studio/assets/appearance.zh-Hans-0HyzAidT.js +2 -0
  350. package/dist/assets/studio/assets/approvals-BB74ogKx.js +2 -0
  351. package/dist/assets/studio/assets/ar-6o5tS7uI.js +6 -0
  352. package/dist/assets/studio/assets/ar-CS6h3U7d.js +2 -0
  353. package/dist/assets/studio/assets/areArraysEqual-bcx201k1x9ziizym-DpJhDMgE.js +2 -0
  354. package/dist/assets/studio/assets/auth-BXDbnIpO.js +4 -0
  355. package/dist/assets/studio/assets/badge-dq8bx752b9dp7dst-D1xrG37q.js +2 -0
  356. package/dist/assets/studio/assets/banner-msnmqm7of2lck01x-DRzQHuca.js +2 -0
  357. package/dist/assets/studio/assets/bash-jpzh6zbf5237424t-bmc95DGl.js +1 -0
  358. package/dist/assets/studio/assets/blockIcon-DmMm6cQr.js +2 -0
  359. package/dist/assets/studio/assets/blocks-CvH3xqPj.js +3 -0
  360. package/dist/assets/studio/assets/body-blocks-D3YZCH_O.js +6 -0
  361. package/dist/assets/studio/assets/bodyEditor.ar-DIDA9Sn4.js +2 -0
  362. package/dist/assets/studio/assets/bodyEditor.de-qfipY5HQ.js +2 -0
  363. package/dist/assets/studio/assets/bodyEditor.en-B8FW4NF8.js +2 -0
  364. package/dist/assets/studio/assets/bodyEditor.es-t2G9FCJv.js +2 -0
  365. package/dist/assets/studio/assets/bodyEditor.fa-C4B5tIHm.js +2 -0
  366. package/dist/assets/studio/assets/bodyEditor.fr-B93u2T8B.js +2 -0
  367. package/dist/assets/studio/assets/bodyEditor.he-AjBYzDbH.js +2 -0
  368. package/dist/assets/studio/assets/bodyEditor.hi-BL4B8EIK.js +2 -0
  369. package/dist/assets/studio/assets/bodyEditor.id-DaiRImPk.js +2 -0
  370. package/dist/assets/studio/assets/bodyEditor.it-COSRU27e.js +2 -0
  371. package/dist/assets/studio/assets/bodyEditor.ja-4ELaS2Vi.js +2 -0
  372. package/dist/assets/studio/assets/bodyEditor.ko-DzXpHAYj.js +2 -0
  373. package/dist/assets/studio/assets/bodyEditor.nl-7a_XD53a.js +2 -0
  374. package/dist/assets/studio/assets/bodyEditor.pl-o2L5fJfH.js +2 -0
  375. package/dist/assets/studio/assets/bodyEditor.pt-BR-CRnn6BFL.js +2 -0
  376. package/dist/assets/studio/assets/bodyEditor.ru-BS2txhVI.js +2 -0
  377. package/dist/assets/studio/assets/bodyEditor.tr-DXm3ACCU.js +2 -0
  378. package/dist/assets/studio/assets/bodyEditor.uk-D32F3Hv3.js +2 -0
  379. package/dist/assets/studio/assets/bodyEditor.zh-Hans-DzWUdSMX.js +2 -0
  380. package/dist/assets/studio/assets/build.ar-CvCBBGmP.js +2 -0
  381. package/dist/assets/studio/assets/build.de-Dh25xQiI.js +2 -0
  382. package/dist/assets/studio/assets/build.en-Byn4-h2I.js +2 -0
  383. package/dist/assets/studio/assets/build.es-ClTjZJkv.js +2 -0
  384. package/dist/assets/studio/assets/build.fa-BKTGFm97.js +2 -0
  385. package/dist/assets/studio/assets/build.fr-DWmKJ0b2.js +2 -0
  386. package/dist/assets/studio/assets/build.he-CMkIxK5A.js +2 -0
  387. package/dist/assets/studio/assets/build.hi-bSlyuwEN.js +2 -0
  388. package/dist/assets/studio/assets/build.id-DYXKpcM4.js +2 -0
  389. package/dist/assets/studio/assets/build.it-DshuVK4I.js +2 -0
  390. package/dist/assets/studio/assets/build.ja-DUQGeTAB.js +2 -0
  391. package/dist/assets/studio/assets/build.ko-BgOecD0b.js +2 -0
  392. package/dist/assets/studio/assets/build.nl-CqcFxeNS.js +2 -0
  393. package/dist/assets/studio/assets/build.pl-DOh2FAZL.js +2 -0
  394. package/dist/assets/studio/assets/build.pt-BR-DIS1WMA1.js +2 -0
  395. package/dist/assets/studio/assets/build.ru-CT93GG0h.js +2 -0
  396. package/dist/assets/studio/assets/build.tr-BJ066yTf.js +2 -0
  397. package/dist/assets/studio/assets/build.uk-foNFYsBE.js +2 -0
  398. package/dist/assets/studio/assets/build.zh-Hans-D0aEdiJR.js +2 -0
  399. package/dist/assets/studio/assets/button-pa1bq9b85hawg41a-BcGpLLER.js +2 -0
  400. package/dist/assets/studio/assets/calendar-locale-D4aJYygH.js +2 -0
  401. package/dist/assets/studio/assets/charts-DL9SbRU8.js +39 -0
  402. package/dist/assets/studio/assets/checkbox-lbo436duy7krxcsk-BmusNS83.js +6 -0
  403. package/dist/assets/studio/assets/clamp-jcjhzx71s6wt1rnc-D0kAXd-u.js +2 -0
  404. package/dist/assets/studio/assets/clipboard-text-gd6s3n1bqse9zgt8-DXnAaY6R.js +2 -0
  405. package/dist/assets/studio/assets/code-eu8kzwqnlhoyin24-_5wcX_Lj.js +2 -0
  406. package/dist/assets/studio/assets/collapsible-l8g94on4w7qfosmn-udgP1bfF.js +2 -0
  407. package/dist/assets/studio/assets/combobox-hdxtsm2gqcxxgfju-BzzDlvd3.js +2 -0
  408. package/dist/assets/studio/assets/comment-model-CArtcrfg.js +4 -0
  409. package/dist/assets/studio/assets/comment-settings-M6JXROM1.js +2 -0
  410. package/dist/assets/studio/assets/comments-B1PIozwq.js +2 -0
  411. package/dist/assets/studio/assets/comments.ar-7NPLRbXL.js +2 -0
  412. package/dist/assets/studio/assets/comments.de-BML9h-8i.js +2 -0
  413. package/dist/assets/studio/assets/comments.en-DXe1aP-J.js +2 -0
  414. package/dist/assets/studio/assets/comments.es-B9qnqc6H.js +2 -0
  415. package/dist/assets/studio/assets/comments.fa-q5l6LTXH.js +2 -0
  416. package/dist/assets/studio/assets/comments.fr-7tNmTLTd.js +2 -0
  417. package/dist/assets/studio/assets/comments.he-C6eZFBr_.js +2 -0
  418. package/dist/assets/studio/assets/comments.hi-BBW7jI8Z.js +2 -0
  419. package/dist/assets/studio/assets/comments.id-XxjsE0p0.js +2 -0
  420. package/dist/assets/studio/assets/comments.it-3QvytToA.js +2 -0
  421. package/dist/assets/studio/assets/comments.ja-SEFPl5By.js +2 -0
  422. package/dist/assets/studio/assets/comments.ko-B_laV8JW.js +2 -0
  423. package/dist/assets/studio/assets/comments.nl-sc5X58Ly.js +2 -0
  424. package/dist/assets/studio/assets/comments.pl-DF090zb0.js +2 -0
  425. package/dist/assets/studio/assets/comments.pt-BR-DItdiBpU.js +2 -0
  426. package/dist/assets/studio/assets/comments.ru-BQjNpLAH.js +2 -0
  427. package/dist/assets/studio/assets/comments.tr-B22wAK59.js +2 -0
  428. package/dist/assets/studio/assets/comments.uk-D7MXty4-.js +2 -0
  429. package/dist/assets/studio/assets/comments.zh-Hans-Cuxj9eiV.js +2 -0
  430. package/dist/assets/studio/assets/commentsSettings.ar-CFEC5U3P.js +2 -0
  431. package/dist/assets/studio/assets/commentsSettings.de-B7jRspXp.js +2 -0
  432. package/dist/assets/studio/assets/commentsSettings.en-CjQdkMZH.js +2 -0
  433. package/dist/assets/studio/assets/commentsSettings.es-hozx4ts0.js +2 -0
  434. package/dist/assets/studio/assets/commentsSettings.fa-Idlvxfyt.js +2 -0
  435. package/dist/assets/studio/assets/commentsSettings.fr-CUYc20e7.js +2 -0
  436. package/dist/assets/studio/assets/commentsSettings.he-DXrfjejv.js +2 -0
  437. package/dist/assets/studio/assets/commentsSettings.hi-Bc2QmPb_.js +2 -0
  438. package/dist/assets/studio/assets/commentsSettings.id-BlqU87IM.js +2 -0
  439. package/dist/assets/studio/assets/commentsSettings.it-BxURj-49.js +2 -0
  440. package/dist/assets/studio/assets/commentsSettings.ja--0JkaZKL.js +2 -0
  441. package/dist/assets/studio/assets/commentsSettings.ko-Bc51E0cW.js +2 -0
  442. package/dist/assets/studio/assets/commentsSettings.nl-BAfV9gzf.js +2 -0
  443. package/dist/assets/studio/assets/commentsSettings.pl-CqCY2bHr.js +2 -0
  444. package/dist/assets/studio/assets/commentsSettings.pt-BR-C1W1xEAM.js +2 -0
  445. package/dist/assets/studio/assets/commentsSettings.ru-BNldyy_U.js +2 -0
  446. package/dist/assets/studio/assets/commentsSettings.tr-DoM2JLr_.js +2 -0
  447. package/dist/assets/studio/assets/commentsSettings.uk-B07IS9-u.js +2 -0
  448. package/dist/assets/studio/assets/commentsSettings.zh-Hans-iQA7XsFn.js +2 -0
  449. package/dist/assets/studio/assets/composite-ab8dmdfoj6tmhcn1-DBTnwEaq.js +2 -0
  450. package/dist/assets/studio/assets/core-n0de50o00ej2ecfe-gtt67pEc.js +13 -0
  451. package/dist/assets/studio/assets/countries-110m-CmKPZPcB.json +1 -0
  452. package/dist/assets/studio/assets/createToastManager-onmoqrmr8zo02rif-DtEv4lxV.js +2 -0
  453. package/dist/assets/studio/assets/css-j501gxq1am2gnikh-BsVw1vtW.js +2 -0
  454. package/dist/assets/studio/assets/date-picker-BSgojKR2.js +1 -0
  455. package/dist/assets/studio/assets/date-picker-cotkexrpqu5tjikv-C9Knj8LQ.js +2 -0
  456. package/dist/assets/studio/assets/de-BN-GS_nX.js +6 -0
  457. package/dist/assets/studio/assets/de-COZWf0tz.js +2 -0
  458. package/dist/assets/studio/assets/deleteLabels-DwQes2_M.js +2 -0
  459. package/dist/assets/studio/assets/dialog-glpnivujociqs9lh-BefDeRGC.js +2 -0
  460. package/dist/assets/studio/assets/diff-g2re0kj6fh27rgg5-woXpYk--.js +2 -0
  461. package/dist/assets/studio/assets/editor-C9MhZu7g.js +218 -0
  462. package/dist/assets/studio/assets/empty-hkvg3is3uc6dj1at-BGNUzomN.js +2 -0
  463. package/dist/assets/studio/assets/engine-javascript-e9xj8hhz9xfqhpnu-CaOb2Rd2.js +142 -0
  464. package/dist/assets/studio/assets/engine-oniguruma-ias56ildu01gf939-BO8SA_1o.js +2 -0
  465. package/dist/assets/studio/assets/errors-svQ83Q62.js +2 -0
  466. package/dist/assets/studio/assets/es-C1E3agwU.js +6 -0
  467. package/dist/assets/studio/assets/es-Cpr7u5Cz.js +2 -0
  468. package/dist/assets/studio/assets/fa-8y3tvKw6.js +2 -0
  469. package/dist/assets/studio/assets/fa-VZyv0VcS.js +6 -0
  470. package/dist/assets/studio/assets/format-DGE2c-4V.js +2 -0
  471. package/dist/assets/studio/assets/fr-IaaUvy1z.js +6 -0
  472. package/dist/assets/studio/assets/fr-IvKa5dhW.js +2 -0
  473. package/dist/assets/studio/assets/getElementTransform-cuiqmjglkrz4db6c-CjP1vzKy.js +2 -0
  474. package/dist/assets/studio/assets/github-light-hir7yctc38258pwt-EUqPIrTm.js +2 -0
  475. package/dist/assets/studio/assets/graphql-n9vlzkvcp2j19p7a-qc8EicCw.js +2 -0
  476. package/dist/assets/studio/assets/hcl-ohpfnrffs96hzyj5-Dh228itO.js +2 -0
  477. package/dist/assets/studio/assets/he-Ca3dnXtb.js +6 -0
  478. package/dist/assets/studio/assets/he-DG-oJz8N.js +2 -0
  479. package/dist/assets/studio/assets/hi-BXkaH5dy.js +6 -0
  480. package/dist/assets/studio/assets/hi-CngsNxV4.js +2 -0
  481. package/dist/assets/studio/assets/html-nimj6ljkkifnc9ni-_gDbiBIU.js +2 -0
  482. package/dist/assets/studio/assets/i18n-Cjiv6Esx.js +7 -0
  483. package/dist/assets/studio/assets/id-BuNEmn7g.js +6 -0
  484. package/dist/assets/studio/assets/id-CrWAlC6J.js +2 -0
  485. package/dist/assets/studio/assets/index-Boved2Nz.js +4 -0
  486. package/dist/assets/studio/assets/index-DaI1wvdp.css +2 -0
  487. package/dist/assets/studio/assets/inertValue-e0o6qvuef83v78fk-DAETOorM.js +2 -0
  488. package/dist/assets/studio/assets/inline-copy-text-gbd7jhwpor27l4rq-PUCnUeNZ.js +2 -0
  489. package/dist/assets/studio/assets/input-c8lv9ulv0kortliq-Cum0c7P1.js +5 -0
  490. package/dist/assets/studio/assets/input-group-fjr4r5ax0x78ppax-e-s-YUWj.js +2 -0
  491. package/dist/assets/studio/assets/input-h5ox92gf13ge04hp-jfy1uD8s.js +2 -0
  492. package/dist/assets/studio/assets/intl-C22KAx_l.js +2 -0
  493. package/dist/assets/studio/assets/it-BbkGji4q.js +2 -0
  494. package/dist/assets/studio/assets/it-DEB0m7yM.js +6 -0
  495. package/dist/assets/studio/assets/ja-BJv09PXI.js +6 -0
  496. package/dist/assets/studio/assets/ja-CLpIeite.js +2 -0
  497. package/dist/assets/studio/assets/javascript-b6fq9bl50fdj6813-BgS3c2Ky.js +2 -0
  498. package/dist/assets/studio/assets/json-h2g0z143t3cs13d7-qhed-kSA.js +2 -0
  499. package/dist/assets/studio/assets/jsonc-jxlzvingck161eej-CYpm1nAK.js +2 -0
  500. package/dist/assets/studio/assets/jsx-jp7a33937sef92sn-Bz0zcwM4.js +2 -0
  501. package/dist/assets/studio/assets/ko-Cikp2ojH.js +6 -0
  502. package/dist/assets/studio/assets/ko-u0y0T6iL.js +2 -0
  503. package/dist/assets/studio/assets/languages-CbQ722uB.js +2 -0
  504. package/dist/assets/studio/assets/layer-dialog-j5ywmzs46ccg6oqy-DyWF5y24.js +2 -0
  505. package/dist/assets/studio/assets/link-cqyfjezntvr53rh7-CwZJ95XT.js +10 -0
  506. package/dist/assets/studio/assets/markdown-eybeqjr58vfygtz1-BYOwaDjH.js +2 -0
  507. package/dist/assets/studio/assets/marked.esm-DCShygCS.js +68 -0
  508. package/dist/assets/studio/assets/media-DqHiLqTz.js +21 -0
  509. package/dist/assets/studio/assets/media.ar-Dx9z7Ceu.js +2 -0
  510. package/dist/assets/studio/assets/media.de-D6vlydhW.js +2 -0
  511. package/dist/assets/studio/assets/media.en-BT47PRGz.js +2 -0
  512. package/dist/assets/studio/assets/media.es-CDRleryS.js +2 -0
  513. package/dist/assets/studio/assets/media.fa-DXam9tY_.js +2 -0
  514. package/dist/assets/studio/assets/media.fr-DKfkWH0D.js +2 -0
  515. package/dist/assets/studio/assets/media.he-COj2GX3h.js +2 -0
  516. package/dist/assets/studio/assets/media.hi-1a0-Fk6b.js +2 -0
  517. package/dist/assets/studio/assets/media.id-CAgR7je9.js +2 -0
  518. package/dist/assets/studio/assets/media.it-huMn4qfV.js +2 -0
  519. package/dist/assets/studio/assets/media.ja-DIiDhxEt.js +2 -0
  520. package/dist/assets/studio/assets/media.ko-CEzTT9w2.js +2 -0
  521. package/dist/assets/studio/assets/media.nl-DAcAkgwj.js +2 -0
  522. package/dist/assets/studio/assets/media.pl-BIZYXHQa.js +2 -0
  523. package/dist/assets/studio/assets/media.pt-BR-C1Xda0__.js +2 -0
  524. package/dist/assets/studio/assets/media.ru-DQzNvBXO.js +2 -0
  525. package/dist/assets/studio/assets/media.tr-BaqtqqOw.js +2 -0
  526. package/dist/assets/studio/assets/media.uk-DGk-oYWc.js +2 -0
  527. package/dist/assets/studio/assets/media.zh-Hans-CrLAn2xd.js +2 -0
  528. package/dist/assets/studio/assets/menus.ar-BABqU-We.js +2 -0
  529. package/dist/assets/studio/assets/menus.de-Ba8EWf-g.js +2 -0
  530. package/dist/assets/studio/assets/menus.en-CJ5d7ms0.js +2 -0
  531. package/dist/assets/studio/assets/menus.es-CA6YLxuk.js +2 -0
  532. package/dist/assets/studio/assets/menus.fa-C7O8Jr5Z.js +2 -0
  533. package/dist/assets/studio/assets/menus.fr-Bq5ukcBM.js +2 -0
  534. package/dist/assets/studio/assets/menus.he-BiYUZo7X.js +2 -0
  535. package/dist/assets/studio/assets/menus.hi-CPYsx5YL.js +2 -0
  536. package/dist/assets/studio/assets/menus.id-B5JAh3Kk.js +2 -0
  537. package/dist/assets/studio/assets/menus.it-DpdTqaL4.js +2 -0
  538. package/dist/assets/studio/assets/menus.ja-NH9k2gC3.js +2 -0
  539. package/dist/assets/studio/assets/menus.ko-C_MCO4Mp.js +2 -0
  540. package/dist/assets/studio/assets/menus.nl-CLflbcbY.js +2 -0
  541. package/dist/assets/studio/assets/menus.pl-DLXN0-US.js +2 -0
  542. package/dist/assets/studio/assets/menus.pt-BR-Djh61S7r.js +2 -0
  543. package/dist/assets/studio/assets/menus.ru-Dn7rmQ8H.js +2 -0
  544. package/dist/assets/studio/assets/menus.tr-BOeLMbHv.js +2 -0
  545. package/dist/assets/studio/assets/menus.uk-BVwLEGId.js +2 -0
  546. package/dist/assets/studio/assets/menus.zh-Hans-X7QVgirl.js +2 -0
  547. package/dist/assets/studio/assets/meter-majprsslwmpbmkzg-DBo7nISC.js +2 -0
  548. package/dist/assets/studio/assets/names-R-Dypr9Y.js +2 -0
  549. package/dist/assets/studio/assets/nl-BiYEXj4B.js +6 -0
  550. package/dist/assets/studio/assets/nl-CraQgOQ0.js +2 -0
  551. package/dist/assets/studio/assets/pagination-oaenm9t7ou3lmcgw-DjC4Zsp5.js +2 -0
  552. package/dist/assets/studio/assets/pl-Iaem81Jv.js +6 -0
  553. package/dist/assets/studio/assets/pl-Z99ZIGWL.js +2 -0
  554. package/dist/assets/studio/assets/preload-helper-DjzSQ1t3.js +1 -0
  555. package/dist/assets/studio/assets/pt-BR-CM8N0OoK.js +6 -0
  556. package/dist/assets/studio/assets/pt-BR-CjvH9SeS.js +2 -0
  557. package/dist/assets/studio/assets/python-nrpnmxq4r6yp6fcd-gzcpVVnB.js +2 -0
  558. package/dist/assets/studio/assets/radio-35dx7y6rjrezbjsp-DY9M1ouC.js +2 -0
  559. package/dist/assets/studio/assets/react-CDCuUAOg.js +10 -0
  560. package/dist/assets/studio/assets/readers.ar-YaMfL_Lj.js +2 -0
  561. package/dist/assets/studio/assets/readers.de-wAkjNmXo.js +2 -0
  562. package/dist/assets/studio/assets/readers.en-CbmwKSip.js +2 -0
  563. package/dist/assets/studio/assets/readers.es-Clx8q_tO.js +2 -0
  564. package/dist/assets/studio/assets/readers.fa-8cssg4YZ.js +2 -0
  565. package/dist/assets/studio/assets/readers.fr-JJ3OFBav.js +2 -0
  566. package/dist/assets/studio/assets/readers.he-B0yqdtyq.js +2 -0
  567. package/dist/assets/studio/assets/readers.hi-i7cAeleO.js +2 -0
  568. package/dist/assets/studio/assets/readers.id-BdaxiKFf.js +2 -0
  569. package/dist/assets/studio/assets/readers.it-DXf3Um9S.js +2 -0
  570. package/dist/assets/studio/assets/readers.ja-B2eb6ZUO.js +2 -0
  571. package/dist/assets/studio/assets/readers.ko-BX4g0Q7l.js +2 -0
  572. package/dist/assets/studio/assets/readers.nl-cWSL2Ylr.js +2 -0
  573. package/dist/assets/studio/assets/readers.pl-C4WdmkML.js +2 -0
  574. package/dist/assets/studio/assets/readers.pt-BR-x4dMCgC9.js +2 -0
  575. package/dist/assets/studio/assets/readers.ru-BukUgT1q.js +2 -0
  576. package/dist/assets/studio/assets/readers.tr-nYS49xYR.js +2 -0
  577. package/dist/assets/studio/assets/readers.uk-DbcRoxdR.js +2 -0
  578. package/dist/assets/studio/assets/readers.zh-Hans-DcGU8fSg.js +2 -0
  579. package/dist/assets/studio/assets/reading-keys-CBjq-Jc-.js +2 -0
  580. package/dist/assets/studio/assets/resolveAriaLabelledBy-nc8mdie5shy87nsb-asx42i8W.js +2 -0
  581. package/dist/assets/studio/assets/resolveValueLabel-hpmsash3ektitvnb-X_gYut6U.js +2 -0
  582. package/dist/assets/studio/assets/roles-B7USahqW.js +2 -0
  583. package/dist/assets/studio/assets/rolldown-runtime-hePW80VL.js +1 -0
  584. package/dist/assets/studio/assets/rolldown-runtime-hi7ti5xiuxsegr96-DK3Fl9T5.js +2 -0
  585. package/dist/assets/studio/assets/ru-2qsjd_Gm.js +6 -0
  586. package/dist/assets/studio/assets/ru-CwyHst7f.js +2 -0
  587. package/dist/assets/studio/assets/schedule-notices-DSgNUP07.js +2 -0
  588. package/dist/assets/studio/assets/scheduleSettings.ar-DjCN-gPq.js +2 -0
  589. package/dist/assets/studio/assets/scheduleSettings.de-CkLy189g.js +2 -0
  590. package/dist/assets/studio/assets/scheduleSettings.en-Ke9GgFqw.js +2 -0
  591. package/dist/assets/studio/assets/scheduleSettings.es-DMlXyS4t.js +2 -0
  592. package/dist/assets/studio/assets/scheduleSettings.fa-B8pDw0e4.js +2 -0
  593. package/dist/assets/studio/assets/scheduleSettings.fr-D93CiYDm.js +2 -0
  594. package/dist/assets/studio/assets/scheduleSettings.he-Ce8vr2xp.js +2 -0
  595. package/dist/assets/studio/assets/scheduleSettings.hi-ClQTAEIx.js +2 -0
  596. package/dist/assets/studio/assets/scheduleSettings.id-TZ0m_tpl.js +2 -0
  597. package/dist/assets/studio/assets/scheduleSettings.it-v63UBHwg.js +2 -0
  598. package/dist/assets/studio/assets/scheduleSettings.ja-DjNw2QpF.js +2 -0
  599. package/dist/assets/studio/assets/scheduleSettings.ko-D-tIgkq1.js +2 -0
  600. package/dist/assets/studio/assets/scheduleSettings.nl-CQM8NRDu.js +2 -0
  601. package/dist/assets/studio/assets/scheduleSettings.pl-CUY8YZhH.js +2 -0
  602. package/dist/assets/studio/assets/scheduleSettings.pt-BR-2YkyZTua.js +2 -0
  603. package/dist/assets/studio/assets/scheduleSettings.ru-D-XI8CtL.js +2 -0
  604. package/dist/assets/studio/assets/scheduleSettings.tr-ChWn742p.js +2 -0
  605. package/dist/assets/studio/assets/scheduleSettings.uk-Czj_lfWV.js +2 -0
  606. package/dist/assets/studio/assets/scheduleSettings.zh-Hans-B1hytO83.js +2 -0
  607. package/dist/assets/studio/assets/schedules-BHug03zB.js +2 -0
  608. package/dist/assets/studio/assets/schedules-api-B7c4AXSw.js +2 -0
  609. package/dist/assets/studio/assets/schedules-search-B-7SpriY.js +2 -0
  610. package/dist/assets/studio/assets/schedules.ar-fkzR2RAY.js +2 -0
  611. package/dist/assets/studio/assets/schedules.de-DbgcJ6cl.js +2 -0
  612. package/dist/assets/studio/assets/schedules.en-D7O8u4iy.js +2 -0
  613. package/dist/assets/studio/assets/schedules.es-C3AvgW6g.js +2 -0
  614. package/dist/assets/studio/assets/schedules.fa-1UfcjmAY.js +2 -0
  615. package/dist/assets/studio/assets/schedules.fr-KDBHjGVO.js +2 -0
  616. package/dist/assets/studio/assets/schedules.he-D8Pds1dL.js +2 -0
  617. package/dist/assets/studio/assets/schedules.hi-DNpu7GlX.js +2 -0
  618. package/dist/assets/studio/assets/schedules.id-FewyiLfv.js +2 -0
  619. package/dist/assets/studio/assets/schedules.it-CY96E2q3.js +2 -0
  620. package/dist/assets/studio/assets/schedules.ja-CN3N8MH6.js +2 -0
  621. package/dist/assets/studio/assets/schedules.ko-B9ah4ZVM.js +2 -0
  622. package/dist/assets/studio/assets/schedules.nl-u3tZ7Ckd.js +2 -0
  623. package/dist/assets/studio/assets/schedules.pl-Bofx1Ubo.js +2 -0
  624. package/dist/assets/studio/assets/schedules.pt-BR-BFxLBiyp.js +2 -0
  625. package/dist/assets/studio/assets/schedules.ru-C5ZnKmGt.js +2 -0
  626. package/dist/assets/studio/assets/schedules.tr-Bfi96rHj.js +2 -0
  627. package/dist/assets/studio/assets/schedules.uk-BU4Kj6Az.js +2 -0
  628. package/dist/assets/studio/assets/schedules.zh-Hans-DDsu_SeS.js +2 -0
  629. package/dist/assets/studio/assets/scrollable-b6m9ze1u7ps0q1qn-BDQyLiel.js +2 -0
  630. package/dist/assets/studio/assets/select-futox5zqr3r80y9a-5U5PtwHa.js +2 -0
  631. package/dist/assets/studio/assets/seo-C-YSZ4mD.js +2 -0
  632. package/dist/assets/studio/assets/serializeValue-ipcakiw32jb7kany-B_EucO5O.js +2 -0
  633. package/dist/assets/studio/assets/shellscript-i4m7lo8wi0f5bl8b-CLZ0U2zV.js +2 -0
  634. package/dist/assets/studio/assets/site-settings-Cmq0DkaT.js +2 -0
  635. package/dist/assets/studio/assets/skeleton-line-m9dyh126t9k07jvg-CHsT8Hs3.js +4 -0
  636. package/dist/assets/studio/assets/sql-hqp2eekl7qhmxe92-BsFa4tDR.js +2 -0
  637. package/dist/assets/studio/assets/stringifyLocale-bxsgxdnzaef2vcar-CkHjdQTJ.js +2 -0
  638. package/dist/assets/studio/assets/styles-kl02oyrlnld7arja-BX5Ypy0Y.js +2 -0
  639. package/dist/assets/studio/assets/switch-cqsvolm7h69z7vgg-sFG02Szv.js +2 -0
  640. package/dist/assets/studio/assets/table-yf8ul2e5nbemioi1-DNq9jhfh.js +2 -0
  641. package/dist/assets/studio/assets/tabs-gf57qqf1wcclaejq-Cay-6qhK.js +2 -0
  642. package/dist/assets/studio/assets/tag-input-ohfybx5dbxy3houy-DhZt3VBi.js +2 -0
  643. package/dist/assets/studio/assets/tanstack-BiJ_7SEB.js +3 -0
  644. package/dist/assets/studio/assets/taxonomy-S-y5xbUa.js +2 -0
  645. package/dist/assets/studio/assets/toml-oyqrgosuct25x413-CcmNWLt0.js +2 -0
  646. package/dist/assets/studio/assets/toolbar-h213d8e22yjh5cwq-CipG_KSA.js +2 -0
  647. package/dist/assets/studio/assets/tr-BK-gVqHj.js +6 -0
  648. package/dist/assets/studio/assets/tr-DOAJHdbH.js +2 -0
  649. package/dist/assets/studio/assets/tsx-pem8x69upvmibv6l-udAQXfEw.js +2 -0
  650. package/dist/assets/studio/assets/typescript-pe5y016phdwbgws7-bsJCZSQ-.js +2 -0
  651. package/dist/assets/studio/assets/uk-9ZV1-TPI.js +2 -0
  652. package/dist/assets/studio/assets/uk-PoqqfkaM.js +6 -0
  653. package/dist/assets/studio/assets/useAnalyticsCard-MXajmsui.js +2 -0
  654. package/dist/assets/studio/assets/useAriaLabelledBy-ox8dum59shmgypq1-gkARNgzh.js +2 -0
  655. package/dist/assets/studio/assets/useBaseUiId-lg1teubxudgin0w2-CrAc3DRu.js +3 -0
  656. package/dist/assets/studio/assets/useButton-h7s9aq1sfw6arawe-BbWTOEat.js +4 -0
  657. package/dist/assets/studio/assets/useChartPalette-DXG2lo2x.js +2 -0
  658. package/dist/assets/studio/assets/useClick-l0p0endoxrlp0ae5-Bbq8u-IC.js +2 -0
  659. package/dist/assets/studio/assets/useCompositeItem-p7090ga00dpqcg5j-CiGYXm-8.js +2 -0
  660. package/dist/assets/studio/assets/useDebounced-DmPVYKCM.js +2 -0
  661. package/dist/assets/studio/assets/useListNavigation-3nyjs362qcau34in-DAKhz5rq.js +2 -0
  662. package/dist/assets/studio/assets/useMe-z-wff5FW.js +2 -0
  663. package/dist/assets/studio/assets/usePaging-BiNrjkE2.js +2 -0
  664. package/dist/assets/studio/assets/usePendingApprovals-BRHKM3-1.js +2 -0
  665. package/dist/assets/studio/assets/useRender-onwjigxa00uch2ip-DueSv9wh.js +2 -0
  666. package/dist/assets/studio/assets/useRenderDialogRoot-lddunc01twftravv-CpXvIQfS.js +2 -0
  667. package/dist/assets/studio/assets/useSettled-C0sKy_Gd.js +2 -0
  668. package/dist/assets/studio/assets/useTriggerFocusGuards-lz7wt484xltizro4-Dd4azd_G.js +2 -0
  669. package/dist/assets/studio/assets/util-B4GkKYcU.js +2 -0
  670. package/dist/assets/studio/assets/vesper-g839e590k3dxnwh3-DdrHHSXu.js +2 -0
  671. package/dist/assets/studio/assets/w3c-keyname-BOAvb0qz.js +2 -0
  672. package/dist/assets/studio/assets/wasm-cpasy0o9lsjrm39j-BnjxR4X6.js +2 -0
  673. package/dist/assets/studio/assets/workflow-D1TOv5ea.js +2 -0
  674. package/dist/assets/studio/assets/yaml-kzk5ddyekbyha04v-rwi0_p6S.js +2 -0
  675. package/dist/assets/studio/assets/zh-Hans-BYiQm8Cr.js +6 -0
  676. package/dist/assets/studio/assets/zh-Hans-D57DCm9K.js +2 -0
  677. package/dist/assets/studio/index.html +111 -0
  678. package/dist/bin/cloudhal.d.ts +2 -0
  679. package/dist/bin/cloudhal.js +10 -0
  680. package/dist/src/assets.d.ts +37 -0
  681. package/dist/src/assets.js +189 -0
  682. package/dist/src/blocks.d.ts +26 -0
  683. package/dist/src/blocks.js +102 -0
  684. package/dist/src/cli/commands-content.d.ts +7 -0
  685. package/dist/src/cli/commands-content.js +145 -0
  686. package/dist/src/cli/commands-local.d.ts +13 -0
  687. package/dist/src/cli/commands-local.js +167 -0
  688. package/dist/src/cli/commands-ops.d.ts +6 -0
  689. package/dist/src/cli/commands-ops.js +175 -0
  690. package/dist/src/cli/commands-remote.d.ts +8 -0
  691. package/dist/src/cli/commands-remote.js +131 -0
  692. package/dist/src/cli/commands-site.d.ts +4 -0
  693. package/dist/src/cli/commands-site.js +52 -0
  694. package/dist/src/cli/help.d.ts +2 -0
  695. package/dist/src/cli/help.js +83 -0
  696. package/dist/src/cli/prompts.d.ts +7 -0
  697. package/dist/src/cli/prompts.js +35 -0
  698. package/dist/src/cli/types.d.ts +26 -0
  699. package/dist/src/cli/types.js +42 -0
  700. package/dist/src/cli.d.ts +174 -0
  701. package/dist/src/cli.js +95 -0
  702. package/dist/src/cloudflare/admin.d.ts +54 -0
  703. package/dist/src/cloudflare/admin.js +156 -0
  704. package/dist/src/cloudflare/build.d.ts +5 -0
  705. package/dist/src/cloudflare/build.js +36 -0
  706. package/dist/src/cloudflare/config.d.ts +1082 -0
  707. package/dist/src/cloudflare/config.js +458 -0
  708. package/dist/src/cloudflare/search.d.ts +37 -0
  709. package/dist/src/cloudflare/search.js +47 -0
  710. package/dist/src/cloudflare/wrangler.d.ts +27 -0
  711. package/dist/src/cloudflare/wrangler.js +133 -0
  712. package/dist/src/commands/ai.d.ts +39 -0
  713. package/dist/src/commands/ai.js +264 -0
  714. package/dist/src/commands/analytics.d.ts +94 -0
  715. package/dist/src/commands/analytics.js +347 -0
  716. package/dist/src/commands/astro.d.ts +22 -0
  717. package/dist/src/commands/astro.js +87 -0
  718. package/dist/src/commands/chrome.d.ts +22 -0
  719. package/dist/src/commands/chrome.js +90 -0
  720. package/dist/src/commands/comments-local.d.ts +40 -0
  721. package/dist/src/commands/comments-local.js +114 -0
  722. package/dist/src/commands/comments.d.ts +45 -0
  723. package/dist/src/commands/comments.js +285 -0
  724. package/dist/src/commands/deploy/attach.d.ts +2 -0
  725. package/dist/src/commands/deploy/attach.js +190 -0
  726. package/dist/src/commands/deploy/context.d.ts +21 -0
  727. package/dist/src/commands/deploy/context.js +22 -0
  728. package/dist/src/commands/deploy/options.d.ts +98 -0
  729. package/dist/src/commands/deploy/options.js +106 -0
  730. package/dist/src/commands/deploy/prepare.d.ts +55 -0
  731. package/dist/src/commands/deploy/prepare.js +298 -0
  732. package/dist/src/commands/deploy/resources.d.ts +26 -0
  733. package/dist/src/commands/deploy/resources.js +157 -0
  734. package/dist/src/commands/deploy/schedules-guard.d.ts +24 -0
  735. package/dist/src/commands/deploy/schedules-guard.js +95 -0
  736. package/dist/src/commands/deploy/served-sites.d.ts +28 -0
  737. package/dist/src/commands/deploy/served-sites.js +86 -0
  738. package/dist/src/commands/deploy/settings.d.ts +24 -0
  739. package/dist/src/commands/deploy/settings.js +115 -0
  740. package/dist/src/commands/deploy/ship.d.ts +46 -0
  741. package/dist/src/commands/deploy/ship.js +174 -0
  742. package/dist/src/commands/deploy/state.d.ts +30 -0
  743. package/dist/src/commands/deploy/state.js +102 -0
  744. package/dist/src/commands/deploy.d.ts +52 -0
  745. package/dist/src/commands/deploy.js +223 -0
  746. package/dist/src/commands/domain.d.ts +15 -0
  747. package/dist/src/commands/domain.js +44 -0
  748. package/dist/src/commands/init.d.ts +18 -0
  749. package/dist/src/commands/init.js +142 -0
  750. package/dist/src/commands/mail-local.d.ts +7 -0
  751. package/dist/src/commands/mail-local.js +30 -0
  752. package/dist/src/commands/mcp.d.ts +22 -0
  753. package/dist/src/commands/mcp.js +113 -0
  754. package/dist/src/commands/media-placeholders.d.ts +29 -0
  755. package/dist/src/commands/media-placeholders.js +239 -0
  756. package/dist/src/commands/media.d.ts +32 -0
  757. package/dist/src/commands/media.js +182 -0
  758. package/dist/src/commands/migrate.d.ts +16 -0
  759. package/dist/src/commands/migrate.js +63 -0
  760. package/dist/src/commands/motion.d.ts +29 -0
  761. package/dist/src/commands/motion.js +118 -0
  762. package/dist/src/commands/owner.d.ts +18 -0
  763. package/dist/src/commands/owner.js +39 -0
  764. package/dist/src/commands/render.d.ts +26 -0
  765. package/dist/src/commands/render.js +94 -0
  766. package/dist/src/commands/scheduler-local.d.ts +55 -0
  767. package/dist/src/commands/scheduler-local.js +237 -0
  768. package/dist/src/commands/schedules.d.ts +32 -0
  769. package/dist/src/commands/schedules.js +170 -0
  770. package/dist/src/commands/search.d.ts +14 -0
  771. package/dist/src/commands/search.js +53 -0
  772. package/dist/src/commands/site.d.ts +46 -0
  773. package/dist/src/commands/site.js +151 -0
  774. package/dist/src/commands/snapshot.d.ts +10 -0
  775. package/dist/src/commands/snapshot.js +50 -0
  776. package/dist/src/commands/studio.d.ts +29 -0
  777. package/dist/src/commands/studio.js +172 -0
  778. package/dist/src/commands/sync.d.ts +42 -0
  779. package/dist/src/commands/sync.js +211 -0
  780. package/dist/src/commands/tokens.d.ts +12 -0
  781. package/dist/src/commands/tokens.js +45 -0
  782. package/dist/src/config-search.d.ts +24 -0
  783. package/dist/src/config-search.js +41 -0
  784. package/dist/src/config.d.ts +168 -0
  785. package/dist/src/config.js +348 -0
  786. package/dist/src/index.d.ts +16 -0
  787. package/dist/src/index.js +82 -0
  788. package/dist/src/project-setup.d.ts +21 -0
  789. package/dist/src/project-setup.js +50 -0
  790. package/dist/src/render-chrome.d.ts +9 -0
  791. package/dist/src/render-chrome.js +140 -0
  792. package/dist/src/starter-files.d.ts +4 -0
  793. package/dist/src/starter-files.js +51 -0
  794. package/dist/src/studio-build.d.ts +43 -0
  795. package/dist/src/studio-build.js +138 -0
  796. package/package.json +63 -3
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Reader comments for `cloudhal studio` and `cloudhal mcp` (RFC-0007 §15.2): the project's SQLite
3
+ * store, and the keys from `CLOUDHAL_COMMENTS_KEY` or the data directory's `comments.key` (which
4
+ * `cloudhal dev` creates on the first comment request). Without a key the queue, moderation and
5
+ * MCP tools still work; commenter emails and stored secrets answer 503 until there is one.
6
+ *
7
+ * There is no cron on Node, so `startLocalCommentsJob` runs the admin Worker's hourly job (the
8
+ * same `runCommentsHourly`: retention, comments of deleted entries, threads closed by time, old
9
+ * salts) at start and every hour while the process runs. There is no edge cache either: the job
10
+ * empties the purge queue moderation filled, so nothing waits for a purge that never comes.
11
+ */
12
+ import { readFile, writeFile } from "node:fs/promises";
13
+ import path from "node:path";
14
+ import { runCommentsHourly } from "@cloudhal/cloudflare/comments";
15
+ import {
16
+
17
+ deriveCommentKeys,
18
+ MIN_SECRET_LENGTH,
19
+ randomBytes,
20
+ toBase64Url,
21
+ } from "@cloudhal/comments";
22
+ import { SqlCommentStore } from "@cloudhal/comments/sql";
23
+
24
+
25
+
26
+ const usable = (k ) => typeof k === "string" && k.length >= MIN_SECRET_LENGTH;
27
+
28
+ /** The data directory's key file (`cloudhal dev` creates the same one). */
29
+ export const LOCAL_KEY_FILE = "comments.key";
30
+
31
+ /**
32
+ * The project's comments keys: `CLOUDHAL_COMMENTS_KEY`, else `<dataDir>/comments.key`; with
33
+ * `create`, a missing file is created (256 random bits, owner-only), as `cloudhal dev` does.
34
+ */
35
+ export async function localCommentsKeys(
36
+ dataDir ,
37
+ o = {},
38
+ ) {
39
+ const env = o.env ?? process.env;
40
+ let secret = env.CLOUDHAL_COMMENTS_KEY;
41
+ if (!usable(secret)) {
42
+ try {
43
+ secret = (await readFile(path.join(dataDir, LOCAL_KEY_FILE), "utf8")).trim();
44
+ } catch {
45
+ secret = undefined;
46
+ }
47
+ }
48
+ if (!usable(secret) && o.create) {
49
+ secret = toBase64Url(randomBytes(32));
50
+ await writeFile(path.join(dataDir, LOCAL_KEY_FILE), `${secret}\n`, { mode: 0o600 });
51
+ }
52
+ return usable(secret) ? deriveCommentKeys(secret) : undefined;
53
+ }
54
+
55
+ export async function localComments(
56
+ sql ,
57
+ dataDir ,
58
+ env = process.env,
59
+ ) {
60
+ const keys = await localCommentsKeys(dataDir, { env });
61
+ const store = new SqlCommentStore(sql);
62
+ return {
63
+ store,
64
+ ...(keys ? { keys } : {}),
65
+ // no edge cache locally: a queued purge is done at once (Studio shows nothing waiting)
66
+ onQueued: (siteId ) => {
67
+ drainPurgeQueue(store, siteId).catch(() => {});
68
+ },
69
+ };
70
+ }
71
+
72
+ /** Empties a site's (or every site's) comment purge queue: locally there is nothing to purge. */
73
+ export async function drainPurgeQueue(store , siteId ) {
74
+ let drained = 0;
75
+ for (const id of siteId ? [siteId] : await store.purgeQueue.sites()) {
76
+ const r = await store.sql.run("DELETE FROM comment_purge_queue WHERE site_id = ?", [id]);
77
+ drained += r.changes;
78
+ }
79
+ return drained;
80
+ }
81
+
82
+ /** One run of the local hourly job; returns what it did (for logs and tests). */
83
+ export async function runLocalCommentsJob(
84
+ graph ,
85
+ store ,
86
+ now = new Date(),
87
+ ) {
88
+ const report = await runCommentsHourly({ graph, store, now });
89
+ return { ...report, drained: await drainPurgeQueue(store) };
90
+ }
91
+
92
+ /**
93
+ * Starts the hourly comments job on its own timer: once now, then every hour; errors are logged,
94
+ * never thrown. Returns a stop function.
95
+ *
96
+ * @deprecated `cloudhal studio`, `mcp` and `dev` run the job as the `comments.hourly` system job
97
+ * of the scheduler's Node ticker (RFC-0008 §8.4, `scheduler-local.ts`).
98
+ */
99
+ export function startLocalCommentsJob(
100
+ graph ,
101
+ store ,
102
+ log = (l) => process.stderr.write(`${l}\n`),
103
+ intervalMs = 3_600_000,
104
+ ) {
105
+ const tick = () => {
106
+ runLocalCommentsJob(graph, store).catch((e) =>
107
+ log(`comments hourly job failed: ${e instanceof Error ? e.message : String(e)}`),
108
+ );
109
+ };
110
+ tick();
111
+ const timer = setInterval(tick, intervalMs);
112
+ timer.unref?.();
113
+ return () => clearInterval(timer);
114
+ }
@@ -0,0 +1,45 @@
1
+ import { type CommentsStatus, type ImportProblem } from "@cloudhal/comments/sql";
2
+ import { type SyncOptions } from "./sync.js";
3
+ export interface CommentsCliOptions extends SyncOptions {
4
+ /** Talk to the deployment (deployment token) instead of the local SQLite. */
5
+ readonly remote?: boolean;
6
+ }
7
+ export interface CommentsStatusResult extends CommentsStatus {
8
+ /** The comments key is there (emails and stored secrets can be read). */
9
+ readonly key: boolean;
10
+ /** `cloudhal.json` `comments.available` (local), or the deployment answered (remote). */
11
+ readonly available: boolean;
12
+ readonly where: "local" | "remote";
13
+ }
14
+ /** `cloudhal comments status [--remote]`: counts, pending, the daily cap and the purge queue. */
15
+ export declare function commentsStatusCli(options: CommentsCliOptions & {
16
+ readonly now?: () => Date;
17
+ }): Promise<CommentsStatusResult>;
18
+ export declare function describeCommentsStatus(s: CommentsStatusResult): string[];
19
+ export interface CommentsExportCliOptions extends CommentsCliOptions {
20
+ /** Also export commenters' emails (`--with-personal-data`). */
21
+ readonly personal?: boolean;
22
+ /** Write here instead of returning the text. */
23
+ readonly out?: string;
24
+ readonly now?: () => Date;
25
+ }
26
+ /** `cloudhal comments export [--remote] [--with-personal-data] [--out file]`. */
27
+ export declare function commentsExportCli(options: CommentsExportCliOptions): Promise<{
28
+ text: string;
29
+ comments: number;
30
+ commenters: number;
31
+ }>;
32
+ export interface CommentsImportCliOptions extends CommentsCliOptions {
33
+ /** The JSON-lines file (`--in`). */
34
+ readonly file: string;
35
+ readonly now?: () => Date;
36
+ }
37
+ export interface CommentsImportResult {
38
+ readonly imported: number;
39
+ readonly skipped: number;
40
+ readonly commenters: number;
41
+ /** Line numbers are the file's. */
42
+ readonly invalid: readonly ImportProblem[];
43
+ }
44
+ /** `cloudhal comments import --in <file> [--remote]`: idempotent; safe to run again. */
45
+ export declare function commentsImportCli(options: CommentsImportCliOptions): Promise<CommentsImportResult>;
@@ -0,0 +1,285 @@
1
+ /**
2
+ * `cloudhal comments status|export|import` (RFC-0007 §9.4, §15.4, D8). Comments are not in
3
+ * push/pull bundles: they move as JSON lines (a header, then `Comment` records oldest first, then,
4
+ * with `--with-personal-data`, commenter lines with their email).
5
+ *
6
+ * Locally the commands work on the project's SQLite; `--remote` talks to the deployment's admin
7
+ * Worker with the deployment token (`/api/admin/sites/:siteId/comments/…`): the export is fetched
8
+ * page by page, the import sent in batches of at most 50 lines. Import is idempotent (by id, and
9
+ * by importer origin), so an interrupted import can simply be run again. Replies whose parent
10
+ * arrives in a later batch are retried once at the end.
11
+ */
12
+ import { readFile, writeFile } from "node:fs/promises";
13
+ import path from "node:path";
14
+ import {
15
+
16
+ commentsStatus,
17
+ exportPage,
18
+
19
+
20
+ importLines,
21
+ PARENT_MISSING,
22
+ SqlCommentStore,
23
+ } from "@cloudhal/comments/sql";
24
+ import { openLocalStore } from "@cloudhal/core-ts/local";
25
+ import { commentsAvailable, readProjectConfig } from "../config.js";
26
+ import { localComments, localCommentsKeys } from "./comments-local.js";
27
+ import { brief, deployment, } from "./sync.js";
28
+
29
+
30
+
31
+
32
+
33
+
34
+ /** Lines per import request, and their size (the admin route takes 200 lines). */
35
+ const BATCH_LINES = 50;
36
+ const BATCH_BYTES = 1024 * 1024;
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+ async function remote(
47
+ options ,
48
+ pathname ,
49
+ init = {},
50
+ ) {
51
+ const { cfg, adminUrl, token, fetch: f } = await deployment(options);
52
+ const url = new URL(
53
+ `/api/admin/sites/${encodeURIComponent(cfg.siteId)}/comments${pathname}`,
54
+ adminUrl,
55
+ );
56
+ const res = await f(url, {
57
+ ...init,
58
+ headers: { authorization: `Bearer ${token}`, "content-type": "application/x-ndjson" },
59
+ });
60
+ if (!res.ok) {
61
+ const body = await res.text();
62
+ throw new Error(
63
+ res.status === 404 && /not enabled/.test(body)
64
+ ? "reader comments are not available on this deployment (comments.available is false, or the Workers have no CLOUDHAL_COMMENTS_KEY yet: run `cloudhal deploy`)"
65
+ : `${url.pathname} failed (${res.status}): ${brief(body)}`,
66
+ );
67
+ }
68
+ return res;
69
+ }
70
+
71
+ /** `cloudhal comments status [--remote]`: counts, pending, the daily cap and the purge queue. */
72
+ export async function commentsStatusCli(
73
+ options ,
74
+ ) {
75
+ if (options.remote) {
76
+ const s = (await (await remote(options, "/status")).json())
77
+
78
+ ;
79
+ return { ...s, available: true, where: "remote" };
80
+ }
81
+ const cfg = await readProjectConfig(options.projectDir);
82
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
83
+ try {
84
+ const c = await localComments(local.sql, local.dataDir);
85
+ const s = await commentsStatus(c.store, cfg.siteId, options.now?.() ?? new Date());
86
+ return { ...s, key: Boolean(c.keys), available: commentsAvailable(cfg), where: "local" };
87
+ } finally {
88
+ await local.close();
89
+ }
90
+ }
91
+
92
+ export function describeCommentsStatus(s ) {
93
+ const c = s.counts;
94
+ const age = (at ) => {
95
+ if (!at) return "";
96
+ const h = Math.max(0, Math.round((Date.now() - Date.parse(at)) / 3_600_000));
97
+ return h < 1 ? " (oldest under an hour)" : ` (oldest ${h} h)`;
98
+ };
99
+ return [
100
+ `comments: ${s.available ? "available" : "unavailable"} for this ${s.where === "remote" ? "deployment" : "project (cloudhal.json)"}${s.key ? "" : "; no comments key yet, so emails and stored secrets cannot be read"}`,
101
+ `site ${s.siteId}: ${s.settings.enabled ? "on" : "off"}${s.settings.stored ? "" : " (never turned on)"}${s.settings.enabled ? ` · collections ${s.settings.collections.join(", ") || "none"} · ${s.settings.protection === "turnstile" ? "Turnstile" : "proof of work"}${s.settings.allowWithoutScript ? " · posts without JavaScript allowed" : ""} · threads close ${s.settings.closeAfterDays === null ? "never" : `after ${s.settings.closeAfterDays} days`}` : ""}`,
102
+ `comments: ${c.approved} approved · ${c.pending} pending${age(s.pending.oldestAt)} · ${c.reported} reported · ${c.hidden} hidden · ${c.spam} spam · ${c.deleted} deleted`,
103
+ `today (UTC): ${s.today.stored} of ${s.today.cap} stored submissions${s.today.withoutScript ? ` (${s.today.withoutScript} without JavaScript)` : ""}${s.today.paused ? " · PAUSED until midnight UTC" : ""}`,
104
+ `purge queue: ${s.purge.queued} tag(s)${s.purge.takedowns ? `, ${s.purge.takedowns} takedown(s)` : ""}${s.purge.oldestAt ? `, oldest ${s.purge.oldestAt}` : ""} · purge requests in the last minute: ${s.purge.lastMinute} (Workers Cache allows 5 a minute)`,
105
+ ];
106
+ }
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+ /** `cloudhal comments export [--remote] [--with-personal-data] [--out file]`. */
117
+ export async function commentsExportCli(
118
+ options ,
119
+ ) {
120
+ const lines = [];
121
+ let comments = 0;
122
+ let commenters = 0;
123
+ const count = (page ) => {
124
+ for (const l of page) {
125
+ if (l.startsWith('{"commenter"')) commenters++;
126
+ else if (!l.startsWith('{"cloudhal"')) comments++;
127
+ }
128
+ };
129
+ if (options.remote) {
130
+ let cursor ;
131
+ for (let calls = 0; calls < 100_000; calls++) {
132
+ const q = new URLSearchParams({
133
+ ...(cursor ? { cursor } : {}),
134
+ ...(options.personal ? { personal: "1" } : {}),
135
+ });
136
+ const res = await remote(options, `/export${q.size ? `?${q}` : ""}`);
137
+ const page = (await res.text()).split("\n").filter((l) => l.trim() !== "");
138
+ count(page);
139
+ lines.push(...page);
140
+ cursor = res.headers.get("cloudhal-next-cursor") ?? undefined;
141
+ options.log?.(
142
+ `exported ${comments} comment(s)${commenters ? `, ${commenters} commenter(s)` : ""}`,
143
+ );
144
+ if (!cursor) break;
145
+ }
146
+ } else {
147
+ const cfg = await readProjectConfig(options.projectDir);
148
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
149
+ try {
150
+ const c = await localComments(local.sql, local.dataDir);
151
+ if (options.personal && !c.keys)
152
+ throw new Error(
153
+ "no comments key in this project (.cloudhal/comments.key or CLOUDHAL_COMMENTS_KEY), so there are no readable emails to export",
154
+ );
155
+ let cursor ;
156
+ for (;;) {
157
+ const page = await exportPage(c.store, cfg.siteId, {
158
+ cursor,
159
+ personal: options.personal,
160
+ keys: c.keys,
161
+ now: options.now?.() ?? new Date(),
162
+ });
163
+ count(page.lines);
164
+ lines.push(...page.lines);
165
+ cursor = page.next;
166
+ if (!cursor) break;
167
+ }
168
+ } finally {
169
+ await local.close();
170
+ }
171
+ }
172
+ const text = `${lines.join("\n")}\n`;
173
+ if (options.out)
174
+ await writeFile(path.resolve(options.projectDir, options.out), text, {
175
+ // personal data: readable by the owner only
176
+ mode: options.personal ? 0o600 : 0o644,
177
+ });
178
+ return { text, comments, commenters };
179
+ }
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+ /** `cloudhal comments import --in <file> [--remote]`: idempotent; safe to run again. */
196
+ export async function commentsImportCli(
197
+ options ,
198
+ ) {
199
+ const text = await readFile(path.resolve(options.projectDir, options.file), "utf8");
200
+ const all = text.split("\n").map((l, i) => ({ line: i + 1, text: l }));
201
+ const filled = all.filter((l) => l.text.trim() !== "");
202
+ const first = filled[0];
203
+ if (!first) throw new Error(`${options.file} is empty`);
204
+ try {
205
+ const head = JSON.parse(first.text) ;
206
+ if (head.cloudhal !== "comments" || head.version !== 1) throw new Error("no header");
207
+ } catch {
208
+ throw new Error(
209
+ `${options.file} is not a Cloudhal comments export (the first line must be {"cloudhal":"comments","version":1,…})`,
210
+ );
211
+ }
212
+
213
+ let send ;
214
+ let close = async () => {};
215
+ if (options.remote) {
216
+ send = async (lines) =>
217
+ (await (
218
+ await remote(options, "/import", { method: "POST", body: `${lines.join("\n")}\n` })
219
+ ).json()) ;
220
+ } else {
221
+ const cfg = await readProjectConfig(options.projectDir);
222
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
223
+ close = () => local.close();
224
+ const personal = filled.some((l) => l.text.startsWith('{"commenter"'));
225
+ // emails are encrypted under the project's key: create it when the file brings some
226
+ const keys = await localCommentsKeys(local.dataDir, { create: personal });
227
+ const store = new SqlCommentStore(local.sql);
228
+ send = (lines) =>
229
+ importLines(store, cfg.siteId, lines, {
230
+ keys,
231
+ now: options.now?.() ?? new Date(),
232
+ entries: async (ids) => {
233
+ const wanted = new Set(ids);
234
+ const found = new Set ();
235
+ for (const e of await local.store.listContentEntries(cfg.siteId))
236
+ if (wanted.has(e.id)) found.add(e.id);
237
+ return found;
238
+ },
239
+ });
240
+ }
241
+
242
+ let imported = 0;
243
+ let skipped = 0;
244
+ let commenters = 0;
245
+ const invalid = [];
246
+ const run = async (batch ) => {
247
+ const r = await send(batch.map((l) => l.text));
248
+ imported += r.imported;
249
+ skipped += r.skipped;
250
+ commenters += r.commenters;
251
+ const refused = r.invalid.map((p) => ({ ...p, line: batch[p.line - 1]?.line ?? p.line }));
252
+ options.log?.(`imported ${imported}, already there ${skipped}`);
253
+ return refused;
254
+ };
255
+ try {
256
+ const later = [];
257
+ const lineOf = new Map(filled.map((l) => [l.line, l]));
258
+ let batch = [];
259
+ let bytes = 0;
260
+ const flush = async () => {
261
+ if (batch.length === 0) return;
262
+ for (const p of await run(batch)) {
263
+ // a reply whose parent is in a later batch: once more at the end
264
+ const l = lineOf.get(p.line);
265
+ if (p.error === PARENT_MISSING && l) later.push(l);
266
+ else invalid.push(p);
267
+ }
268
+ batch = [];
269
+ bytes = 0;
270
+ };
271
+ for (const l of filled) {
272
+ if (batch.length >= BATCH_LINES || (batch.length > 0 && bytes + l.text.length > BATCH_BYTES))
273
+ await flush();
274
+ batch.push(l);
275
+ bytes += l.text.length;
276
+ }
277
+ await flush();
278
+ for (let i = 0; i < later.length; i += BATCH_LINES)
279
+ invalid.push(...(await run(later.slice(i, i + BATCH_LINES))));
280
+ } finally {
281
+ await close();
282
+ }
283
+ invalid.sort((a, b) => a.line - b.line);
284
+ return { imported, skipped, commenters, invalid };
285
+ }
@@ -0,0 +1,2 @@
1
+ import type { DeployOptions, DeployResult } from "./options.js";
2
+ export declare function deployAttached(options: DeployOptions): Promise<DeployResult>;
@@ -0,0 +1,190 @@
1
+ /**
2
+ * `cloudhal deploy` in a project with `cloudhal.json` `installation` (RFC-0034 §4): a site Worker
3
+ * for another theme that joins an existing installation instead of creating one.
4
+ *
5
+ * - It binds the installation's D1 database, R2 bucket and analytics dataset (its names derive
6
+ * from the installation's deployment name) and takes the installation's preview, purge, comments
7
+ * and deployment secrets, so previews, purges and comments work across both Workers.
8
+ * - Only the site Worker is deployed (`<installation>-site-<slug>`); the installation's Studio
9
+ * stays where it is. The served sites must exist on the installation and use this theme.
10
+ * - It registers itself (`PUT /api/admin/site-workers/:name`). The installation's next
11
+ * `cloudhal deploy` binds it to the admin Worker, which from then on sends these sites' purges
12
+ * here; until then they go to the installation's own site Worker.
13
+ */
14
+ import { chmod, readFile, rm, writeFile } from "node:fs/promises";
15
+ import path from "node:path";
16
+ import { readExistingIds, SITE_CONFIG_FILE, workerNames } from "../../cloudflare/config.js";
17
+ import { deployedUrls, must } from "../../cloudflare/wrangler.js";
18
+ import { readProjectConfig } from "../../config.js";
19
+ import { listSites } from "../site.js";
20
+ import { pushSite, setPrimaryDomain } from "../sync.js";
21
+
22
+
23
+ import { analyticsAndComments, buildSite, deploySettings, loadDeploy } from "./prepare.js";
24
+ import { deployDir, loadOrCreateSecrets, readDeployState, writeDeployState } from "./state.js";
25
+
26
+ /** The secrets an attached site Worker shares with its installation. */
27
+ const SHARED = [
28
+ "CLOUDHAL_PREVIEW_SECRET",
29
+ "CLOUDHAL_PURGE_TOKEN",
30
+ "CLOUDHAL_COMMENTS_KEY",
31
+ "CLOUDHAL_DEPLOY_TOKEN",
32
+ ] ;
33
+
34
+ async function installationOf(projectDir , folder ) {
35
+ const dir = path.resolve(projectDir, folder);
36
+ const cfg = await readProjectConfig(dir).catch(() => {
37
+ throw new Error(`cloudhal.json installation: no Cloudhal project in ${dir}`);
38
+ });
39
+ const state = await readDeployState(dir, cfg.dataDir);
40
+ if (!state?.adminUrl)
41
+ throw new Error(
42
+ `cloudhal.json installation: ${dir} is not deployed yet (run \`cloudhal deploy\` there first)`,
43
+ );
44
+ const secrets = JSON.parse(
45
+ await readFile(path.join(deployDir(dir, cfg.dataDir), "secrets.json"), "utf8"),
46
+ ) ;
47
+ const { databaseId } = await readExistingIds(path.join(dir, SITE_CONFIG_FILE));
48
+ if (!databaseId) throw new Error(`cloudhal.json installation: no D1 database id in ${dir}`);
49
+ return { dir, cfg, state: { ...state, adminUrl: state.adminUrl }, secrets, databaseId };
50
+ }
51
+
52
+ export async function deployAttached(options ) {
53
+ const own = await readProjectConfig(options.projectDir);
54
+ const inst = await installationOf(options.projectDir, own.installation );
55
+ const loaded = await loadDeploy({ ...options, name: inst.state.name });
56
+ const base = { ...loaded.base, siteName: `${inst.state.name}-site-${loaded.site.slug}` };
57
+ const previous = {
58
+ ...(loaded.previous ?? inst.state),
59
+ name: inst.state.name,
60
+ adminUrl: inst.state.adminUrl,
61
+ };
62
+ const ctx = { ...loaded, base, names: workerNames(base), previous };
63
+ const { cfg, log, names } = ctx;
64
+ log(`joining the installation ${inst.state.name} (${inst.dir}) as ${names.site}`);
65
+
66
+ // The installation's secrets, kept here too so remote commands (push, pull) reach it.
67
+ const secrets = await loadOrCreateSecrets(ctx.dir);
68
+ for (const key of SHARED) if (inst.secrets[key]) secrets[key] = inst.secrets[key];
69
+ const secretsFile = path.join(ctx.dir, "secrets.json");
70
+ await writeFile(secretsFile, `${JSON.stringify(secrets, null, 2)}\n`, { mode: 0o600 });
71
+ await chmod(secretsFile, 0o600);
72
+
73
+ const { analytics, comments } = await analyticsAndComments(ctx);
74
+ const { observability, scheduler, schedules, plan } = await deploySettings(ctx);
75
+ const withIds = { ...base, databaseId: inst.databaseId };
76
+ const site = await buildSite(ctx, { withIds, analytics, comments, observability });
77
+ const result = {
78
+ names,
79
+ siteConfig: site.siteConfig,
80
+ adminConfig: "",
81
+ scheduler,
82
+ schedules,
83
+ analytics: analytics ? { enabled: true, dataset: analytics.dataset } : { enabled: false },
84
+ comments: { available: comments.available },
85
+ };
86
+ if (options.dryRun) {
87
+ await must(
88
+ ctx.run,
89
+ ["deploy", "--dry-run", "--outdir", path.join(ctx.dir, "out/site")],
90
+ options.projectDir,
91
+ );
92
+ log("dry run complete: the site Worker's bundle is in .cloudhal/deploy/out");
93
+ return { dryRun: true, ...result };
94
+ }
95
+
96
+ const siteSecrets = path.join(ctx.dir, "site-secrets.json");
97
+ let siteUrl ;
98
+ try {
99
+ await writeFile(
100
+ siteSecrets,
101
+ JSON.stringify({
102
+ CLOUDHAL_PREVIEW_SECRET: secrets.CLOUDHAL_PREVIEW_SECRET,
103
+ CLOUDHAL_PURGE_TOKEN: secrets.CLOUDHAL_PURGE_TOKEN,
104
+ CLOUDHAL_COMMENTS_KEY: secrets.CLOUDHAL_COMMENTS_KEY,
105
+ }),
106
+ { mode: 0o600 },
107
+ );
108
+ log(`deploying ${names.site}`);
109
+ const deployed = await must(
110
+ ctx.run,
111
+ ["deploy", "--secrets-file", siteSecrets],
112
+ options.projectDir,
113
+ );
114
+ siteUrl = deployedUrls(deployed.records)[0];
115
+ } finally {
116
+ await rm(siteSecrets, { force: true });
117
+ }
118
+ await writeDeployState(options.projectDir, cfg.dataDir, {
119
+ name: inst.state.name,
120
+ adminUrl: inst.state.adminUrl,
121
+ ...(siteUrl ? { siteUrl } : {}),
122
+ deployedAt: new Date().toISOString(),
123
+ analytics: analytics ? "on" : "off",
124
+ comments: comments.available ? "on" : "off",
125
+ scheduler,
126
+ plan,
127
+ });
128
+ // This project's own site joins the installation if it is not there yet.
129
+ const { pushed } = await pushSite({
130
+ projectDir: options.projectDir,
131
+ adminUrl: inst.state.adminUrl,
132
+ ifAbsent: true,
133
+ ...(options.fetch ? { fetch: options.fetch } : {}),
134
+ log,
135
+ });
136
+ await register(ctx, {
137
+ adminUrl: inst.state.adminUrl,
138
+ token: secrets.CLOUDHAL_DEPLOY_TOKEN,
139
+ siteUrl,
140
+ });
141
+ // A site without a hostname gets the Worker's workers.dev address as its primary one, as a
142
+ // first deploy does: previews, hreflang across editions and same-origin checks need one.
143
+ if (siteUrl) {
144
+ const sites = await listSites({
145
+ projectDir: options.projectDir,
146
+ remote: true,
147
+ adminUrl: inst.state.adminUrl,
148
+ ...(options.fetch ? { fetch: options.fetch } : {}),
149
+ });
150
+ if (sites.find((x) => x.id === cfg.siteId)?.hosts.length === 0)
151
+ await setPrimaryDomain({
152
+ projectDir: options.projectDir,
153
+ adminUrl: inst.state.adminUrl,
154
+ hostname: new URL(siteUrl).host,
155
+ ...(options.fetch ? { fetch: options.fetch } : {}),
156
+ });
157
+ }
158
+ log(
159
+ `run \`cloudhal deploy\` in ${inst.dir} once, so the installation's Studio sends these sites' cache purges to ${names.site}`,
160
+ );
161
+ return {
162
+ dryRun: false,
163
+ ...result,
164
+ ...(siteUrl ? { siteUrl } : {}),
165
+ adminUrl: inst.state.adminUrl,
166
+ pushed,
167
+ };
168
+ }
169
+
170
+ async function register(
171
+ ctx ,
172
+ input ,
173
+ ) {
174
+ const { cfg, site, names, options, log } = ctx;
175
+ const f = options.fetch ?? fetch;
176
+ const res = await f(new URL(`/api/admin/site-workers/${names.site}`, input.adminUrl), {
177
+ method: "PUT",
178
+ headers: { authorization: `Bearer ${input.token}`, "content-type": "application/json" },
179
+ body: JSON.stringify({
180
+ url: input.siteUrl ?? `https://${names.site}.workers.dev`,
181
+ theme: site.theme.name,
182
+ siteIds: cfg.sites ?? [cfg.siteId],
183
+ }),
184
+ });
185
+ if (!res.ok)
186
+ throw new Error(
187
+ `registering ${names.site} failed: ${res.status} ${(await res.text()).slice(0, 300)}`,
188
+ );
189
+ log(`registered ${names.site} with the installation`);
190
+ }
@@ -0,0 +1,21 @@
1
+ /** What every phase of `cloudhal deploy` reads: the options, the project, its site and names. */
2
+ import type { Site } from "@cloudhal/core-contracts";
3
+ import type { DeploymentNames, workerNames } from "../../cloudflare/config.js";
4
+ import type { WranglerRunner } from "../../cloudflare/wrangler.js";
5
+ import type { ProjectConfig } from "../../config.js";
6
+ import type { DeployOptions } from "./options.js";
7
+ import type { DeployState } from "./state.js";
8
+ export interface DeployContext {
9
+ readonly options: DeployOptions;
10
+ readonly log: (line: string) => void;
11
+ /** `cloudhal.json`, with the analytics decision made (asked once in a terminal). */
12
+ readonly cfg: ProjectConfig;
13
+ /** `<dataDir>/deploy`: secrets, state and generated configs. */
14
+ readonly dir: string;
15
+ readonly run: WranglerRunner;
16
+ readonly site: Site;
17
+ /** The last deploy of this project, if any. */
18
+ readonly previous: DeployState | undefined;
19
+ readonly base: DeploymentNames;
20
+ readonly names: ReturnType<typeof workerNames>;
21
+ }
@@ -0,0 +1,22 @@
1
+ /** What every phase of `cloudhal deploy` reads: the options, the project, its site and names. */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+