@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,182 @@
1
+ /**
2
+ * `cloudhal media …` (RFC-0004): local media maintenance.
3
+ *
4
+ * - `import-urls [--dry-run] [--include-markdown] [--allow-host <h>]… | --revert <id>` copies images
5
+ * that pages, entries and terms link by URL into the media library. https URLs go through the
6
+ * SSRF-safe fetcher (resolved, checked and pinned on Node); site paths (`/images/x.jpg`) are read
7
+ * from the project's `public/` directory and must stay inside it; `http:` and anything else is
8
+ * skipped and reported. Revertible; nothing goes live until someone publishes.
9
+ * - `verify [assetId]` recomputes the SHA-256 of stored blobs; for an external file it streams the
10
+ * URL (no size cap, this host only) and records a computed checksum.
11
+ * - `gc [--dry-run]` collects unreferenced content older than 24 hours.
12
+ */
13
+ import { createHash } from "node:crypto";
14
+ import { readFile, realpath } from "node:fs/promises";
15
+ import path from "node:path";
16
+ import {
17
+ importMediaUrls,
18
+
19
+
20
+
21
+ revertMediaImport,
22
+ } from "@cloudhal/core-ts";
23
+ import { openLocalStore } from "@cloudhal/core-ts/local";
24
+ import { MEDIA_LIMITS, MEDIA_TYPES, safeFetch } from "@cloudhal/core-ts/media";
25
+ import { nodeTransport } from "@cloudhal/core-ts/media-node";
26
+ import { readProjectConfig } from "../config.js";
27
+
28
+ const PERSON = { kind: "human" , id: "user_localcli001", name: "cloudhal media" };
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+ /**
42
+ * A site path read from `public/`, confined to it: the resolved real path must stay inside the
43
+ * directory (no `..`, no symlink out of it).
44
+ */
45
+ async function readPublic(projectDir , sitePath ) {
46
+ const clean = decodeURIComponent(sitePath.split(/[?#]/)[0] ?? "");
47
+ if (!clean.startsWith("/") || clean.includes("\0") || clean.includes("\\"))
48
+ return { skip: "not a site path" };
49
+ const root = await realpath(path.join(projectDir, "public")).catch(() => undefined);
50
+ if (!root) return { skip: "the project has no public/ directory" };
51
+ const file = path.resolve(root, `.${clean}`);
52
+ const real = await realpath(file).catch(() => undefined);
53
+ if (!real?.startsWith(`${root}${path.sep}`))
54
+ return { skip: "not found in public/ (or outside it)" };
55
+ return { bytes: new Uint8Array(await readFile(real)) };
56
+ }
57
+
58
+ export async function mediaImportUrls(
59
+ options ,
60
+ ) {
61
+ const cfg = await readProjectConfig(options.projectDir);
62
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
63
+ try {
64
+ if (options.revert)
65
+ return await revertMediaImport(local.store, cfg.siteId, options.revert, { actor: PERSON });
66
+ const site = await local.store.getSite(cfg.siteId);
67
+ const siteHosts = (site?.metadata?.["cloudhal.media.allowHosts"] ?? "")
68
+ .split(/[\s,]+/)
69
+ .filter(Boolean);
70
+ const allowHosts = [...(options.allowHosts ?? []), ...siteHosts];
71
+ const transport = options.transport ?? nodeTransport();
72
+ return await importMediaUrls(local.store, cfg.siteId, {
73
+ actor: PERSON,
74
+ ...(options.dryRun ? { dryRun: true } : {}),
75
+ ...(options.includeMarkdown ? { includeMarkdown: true } : {}),
76
+ load: async (from) => {
77
+ if (from.startsWith("/") && !from.startsWith("//"))
78
+ return readPublic(options.projectDir, from);
79
+ if (!from.startsWith("https://"))
80
+ return { skip: "only https URLs and site paths are imported" };
81
+ const res = await safeFetch(from, {
82
+ transport,
83
+ maxBytes: MEDIA_LIMITS.fetchAsset,
84
+ accept: Object.keys(MEDIA_TYPES).filter((t) => t.startsWith("image/")),
85
+ ...(allowHosts.length ? { allowHosts } : {}),
86
+ blockedHosts: (site?.domains ?? []).map((d) => d.hostname),
87
+ });
88
+ return { bytes: res.bytes, contentType: res.contentType };
89
+ },
90
+ });
91
+ } finally {
92
+ await local.close();
93
+ }
94
+ }
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ export async function mediaVerify(options
103
+
104
+
105
+
106
+ ) {
107
+ const cfg = await readProjectConfig(options.projectDir);
108
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
109
+ try {
110
+ const store = local.store;
111
+ const assets = options.assetId
112
+ ? [await store.getAsset(options.assetId)].filter((a) => a?.siteId === cfg.siteId)
113
+ : (await store.listAssets(cfg.siteId, { limit: 200 })).assets;
114
+ if (options.assetId && assets.length === 0)
115
+ throw new Error(`asset ${options.assetId} not found`);
116
+ const ok = [];
117
+ const problems = [];
118
+ for (const asset of assets) {
119
+ if (!asset) continue;
120
+ if (asset.storage.kind === "blob") {
121
+ const r = await store.verifyMediaBlob(cfg.siteId, asset.sha256);
122
+ if (r === "ok") ok.push(asset.id);
123
+ else
124
+ problems.push({
125
+ assetId: asset.id,
126
+ problem: r === "missing" ? "bytes missing" : "SHA-256 mismatch",
127
+ });
128
+ continue;
129
+ }
130
+ // External: only when asked for by id (it downloads the whole file).
131
+ if (!options.assetId) continue;
132
+ const hash = createHash("sha256");
133
+ const res = await safeFetch(asset.storage.url, {
134
+ transport: options.transport ?? nodeTransport(),
135
+ maxBytes: Number.MAX_SAFE_INTEGER,
136
+ accept: [],
137
+ totalTimeoutMs: 6 * 60 * 60 * 1000,
138
+ onChunk: (c) => hash.update(c),
139
+ });
140
+ const sha256 = hash.digest("hex");
141
+ await store.verifyExternalAsset(asset, { sha256, bytes: res.size });
142
+ if (sha256 === asset.sha256) ok.push(asset.id);
143
+ else
144
+ problems.push({
145
+ assetId: asset.id,
146
+ problem: `declared ${asset.sha256}, computed ${sha256} (recorded)`,
147
+ });
148
+ }
149
+ return { checked: ok.length + problems.length, ok, problems };
150
+ } finally {
151
+ await local.close();
152
+ }
153
+ }
154
+
155
+ export async function mediaGc(options ) {
156
+ const cfg = await readProjectConfig(options.projectDir);
157
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
158
+ try {
159
+ return await local.store.collectMediaGarbage(cfg.siteId, {
160
+ ...(options.dryRun ? { dryRun: true } : {}),
161
+ });
162
+ } finally {
163
+ await local.close();
164
+ }
165
+ }
166
+
167
+ /** Human-readable lines for a run. */
168
+ export function describeMediaImport(r ) {
169
+ if ("restored" in r)
170
+ return [
171
+ `reverted ${r.migrationId}: ${r.restored} node(s) restored, ${r.assetsDeleted} asset(s) deleted`,
172
+ ...(r.edited.length ? [`left alone (edited since): ${r.edited.join(", ")}`] : []),
173
+ ];
174
+ return [
175
+ r.dryRun
176
+ ? `dry run: ${r.sources.length} source(s) in ${r.nodes} node(s)`
177
+ : `imported ${r.assets.length} file(s) into ${r.nodes} node(s); migration id ${r.migrationId}`,
178
+ ...r.sources.map((s) => ` ${s}`),
179
+ ...r.skipped.map((s) => `skipped ${s.from}: ${s.reason}`),
180
+ ...(r.dryRun ? [] : ["nothing is live until you publish; undo with --revert <migration id>"]),
181
+ ];
182
+ }
@@ -0,0 +1,16 @@
1
+ import type { TagsMigrationResult, TagsRevertResult } from "@cloudhal/core-ts";
2
+ export interface MigrateTagsOptions {
3
+ readonly projectDir: string;
4
+ /** Report what would change; write nothing. */
5
+ readonly dryRun?: boolean;
6
+ /** Undo the run with this migration id (the id of its `before tags-to-terms` snapshot). */
7
+ readonly revert?: string;
8
+ }
9
+ /**
10
+ * `cloudhal migrate tags-to-terms`: moves `ContentEntry.tags` into tag terms on the local site
11
+ * (RFC-0002). Resumable and idempotent; `--revert <id>` restores the tags of entries nobody edited
12
+ * since. Nothing goes live until a person publishes.
13
+ */
14
+ export declare function migrateTags(options: MigrateTagsOptions): Promise<TagsMigrationResult | TagsRevertResult>;
15
+ /** Human-readable summary lines for the terminal. */
16
+ export declare function describeMigration(result: TagsMigrationResult | TagsRevertResult): string[];
@@ -0,0 +1,63 @@
1
+ import path from "node:path";
2
+
3
+ import { openLocalStore } from "@cloudhal/core-ts/local";
4
+ import { readProjectConfig } from "../config.js";
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+ const CLI_ACTOR = { kind: "human", id: "user_localcli0001", name: "cloudhal CLI" } ;
15
+
16
+ /**
17
+ * `cloudhal migrate tags-to-terms`: moves `ContentEntry.tags` into tag terms on the local site
18
+ * (RFC-0002). Resumable and idempotent; `--revert <id>` restores the tags of entries nobody edited
19
+ * since. Nothing goes live until a person publishes.
20
+ */
21
+ export async function migrateTags(
22
+ options ,
23
+ ) {
24
+ const cfg = await readProjectConfig(options.projectDir);
25
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
26
+ try {
27
+ if (options.revert !== undefined)
28
+ return await local.store.revertTagsToTerms(cfg.siteId, options.revert, { actor: CLI_ACTOR });
29
+ return await local.store.migrateTagsToTerms(cfg.siteId, CLI_ACTOR, {
30
+ ...(options.dryRun ? { dryRun: true } : {}),
31
+ });
32
+ } finally {
33
+ await local.close();
34
+ }
35
+ }
36
+
37
+ /** Human-readable summary lines for the terminal. */
38
+ export function describeMigration(result ) {
39
+ if ("restored" in result)
40
+ return [
41
+ `reverted ${result.migrationId}: ${result.restored} entries got their tags back`,
42
+ ...(result.edited.length
43
+ ? [`left untouched (edited since the migration): ${result.edited.join(", ")}`]
44
+ : []),
45
+ `deleted ${result.termsDeleted} unused terms${result.taxonomiesDeleted.length ? ` and the empty taxonomies ${result.taxonomiesDeleted.join(", ")}` : ""}`,
46
+ `snapshot ${result.snapshotId}`,
47
+ ];
48
+ if (result.upToDate) return ["nothing to migrate: no entry has tags and the taxonomies exist"];
49
+ const lines = [
50
+ `${result.dryRun ? "would migrate" : "migrated"} ${result.entries} entries: ${result.tags.length} distinct tags, ${result.termsCreated} new terms, ${result.termsReused} reused${result.resumed ? " (resumed)" : ""}`,
51
+ ];
52
+ if (result.taxonomiesCreated.length)
53
+ lines.push(
54
+ `${result.dryRun ? "would create" : "created"} taxonomies: ${result.taxonomiesCreated.join(", ")} (category not required on existing sites)`,
55
+ );
56
+ for (const s of result.skipped) lines.push(`skipped ${s.entryId}: ${s.reason}`);
57
+ if (!result.dryRun)
58
+ lines.push(
59
+ `migration id ${result.migrationId} (undo: cloudhal migrate tags-to-terms --revert ${result.migrationId})`,
60
+ "nothing is live yet: review the snapshot diff and publish",
61
+ );
62
+ return lines;
63
+ }
@@ -0,0 +1,29 @@
1
+ import type { Page } from "@cloudhal/core-contracts";
2
+ /** What one page asks to move (RFC-0024), counted from its surfaces without a browser. */
3
+ export interface PageMotion {
4
+ path: string;
5
+ /** The page's own level, else the site's. */
6
+ level: string;
7
+ reveals: number;
8
+ hovers: number;
9
+ scroll: number;
10
+ splits: number;
11
+ loops: number;
12
+ ambient: number;
13
+ stories: number;
14
+ morphs: string[];
15
+ warnings: string[];
16
+ }
17
+ export interface MotionAudit {
18
+ level: string;
19
+ pageTransition: string;
20
+ pages: PageMotion[];
21
+ }
22
+ /** The budgets of RFC-0024 §2, as `render_page`'s motion-budget check counts them. */
23
+ export declare function auditPage(page: Pick<Page, "path" | "sections" | "motion">, site: string): PageMotion;
24
+ /** `cloudhal motion audit`: the motion every page of the local site asks for, and its budgets. */
25
+ export declare function motionAudit(options: {
26
+ projectDir: string;
27
+ path?: string;
28
+ }): Promise<MotionAudit>;
29
+ export declare function describeMotionAudit(a: MotionAudit): string;
@@ -0,0 +1,118 @@
1
+ import path from "node:path";
2
+
3
+ import { openLocalStore } from "@cloudhal/core-ts/local";
4
+ import { readProjectConfig } from "../config.js";
5
+
6
+ /** What one page asks to move (RFC-0024), counted from its surfaces without a browser. */
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+ const isObj = (v ) =>
29
+ typeof v === "object" && v !== null && !Array.isArray(v);
30
+
31
+ /** The budgets of RFC-0024 §2, as `render_page`'s motion-budget check counts them. */
32
+ export function auditPage(
33
+ page ,
34
+ site ,
35
+ ) {
36
+ const all = page.sections
37
+ .filter((s) => s.kind === "surface")
38
+ .flatMap((s) => s.components);
39
+ const m = (c ) => (isObj(c.motion) ? c.motion : {});
40
+ const count = (f ) => all.filter(f).length;
41
+ const out = {
42
+ path: page.path,
43
+ level: page.motion ?? site,
44
+ reveals: count((c) => typeof m(c).reveal === "string"),
45
+ hovers: count((c) => typeof m(c).hover === "string"),
46
+ scroll: count((c) => typeof m(c).scroll === "string"),
47
+ splits: count((c) => String(m(c).reveal ?? "").startsWith("split-")),
48
+ loops: count(
49
+ (c) =>
50
+ typeof m(c).loop === "string" ||
51
+ c.component === "Marquee" ||
52
+ (c.component === "Heading" && isObj(c.props) && c.props.effect === "rotate-words"),
53
+ ),
54
+ ambient: count((c) => isObj(c.props) && isObj(c.props.ambient)),
55
+ stories: count((c) => c.component === "Scrolly"),
56
+ morphs: all.map((c) => m(c).morph).filter((k) => typeof k === "string"),
57
+ warnings: [],
58
+ };
59
+ if (out.scroll > 6) out.warnings.push(`${out.scroll} scroll effects (keep to 6)`);
60
+ if (out.stories > 1) out.warnings.push(`${out.stories} scroll stories (keep to 1)`);
61
+ if (out.splits > 2) out.warnings.push(`${out.splits} split texts (keep to 2)`);
62
+ if (out.loops > 2) out.warnings.push(`${out.loops} things that loop (keep to 2)`);
63
+ if (out.ambient > 2) out.warnings.push(`${out.ambient} ambient backgrounds (keep to 2)`);
64
+ const dup = out.morphs.filter((k, i) => out.morphs.indexOf(k) !== i);
65
+ if (dup.length) out.warnings.push(`morph keys used twice: ${[...new Set(dup)].join(", ")}`);
66
+ if (out.level === "none" && out.reveals + out.scroll + out.loops + out.ambient > 0)
67
+ out.warnings.push("motion presets on a page whose level is none: nothing will move");
68
+ return out;
69
+ }
70
+
71
+ /** `cloudhal motion audit`: the motion every page of the local site asks for, and its budgets. */
72
+ export async function motionAudit(options
73
+
74
+
75
+ ) {
76
+ const cfg = await readProjectConfig(options.projectDir);
77
+ const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
78
+ try {
79
+ const site = await local.store.getSite(cfg.siteId);
80
+ if (!site) throw new Error(`site ${cfg.siteId} not found`);
81
+ const config = site.theme.config ?? {};
82
+ const level = typeof config.motion === "string" ? config.motion : "none";
83
+ const pages = (await local.store.listPages(cfg.siteId))
84
+ .filter((p) => !options.path || p.path === options.path)
85
+ .sort((a, b) => a.path.localeCompare(b.path));
86
+ return {
87
+ level,
88
+ pageTransition: typeof config.pageTransition === "string" ? config.pageTransition : "none",
89
+ pages: pages.map((p) => auditPage(p, level)),
90
+ };
91
+ } finally {
92
+ await local.close();
93
+ }
94
+ }
95
+
96
+ export function describeMotionAudit(a ) {
97
+ const lines = [`site motion: ${a.level}, page transition: ${a.pageTransition}`];
98
+ for (const p of a.pages) {
99
+ const parts = (
100
+ [
101
+ ["reveals", p.reveals],
102
+ ["hovers", p.hovers],
103
+ ["scroll", p.scroll],
104
+ ["splits", p.splits],
105
+ ["loops", p.loops],
106
+ ["ambient", p.ambient],
107
+ ["stories", p.stories],
108
+ ]
109
+ )
110
+ .filter(([, n]) => n > 0)
111
+ .map(([k, n]) => `${k} ${n}`);
112
+ lines.push(
113
+ `${p.path} (${p.level}) ${parts.length ? parts.join(", ") : "still"}${p.morphs.length ? ` morph: ${p.morphs.join(", ")}` : ""}`,
114
+ );
115
+ for (const w of p.warnings) lines.push(` ! ${w}`);
116
+ }
117
+ return lines.join("\n");
118
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `cloudhal owner transfer --to <email>` — Owner lockout recovery (RFC-0005 §3, open question 7).
3
+ * The operator, who holds the deployment token and is already root for site data, makes an
4
+ * existing member the deployment's Owner; the current Owner becomes an Administrator. Audited as
5
+ * `member.transfer-ownership` with `via: "deploy-token"`.
6
+ */
7
+ import { type SyncOptions } from "./sync.js";
8
+ export interface OwnerTransferOptions extends SyncOptions {
9
+ /** Email of the member who becomes the Owner. */
10
+ readonly to: string;
11
+ }
12
+ export interface OwnerTransferResult {
13
+ from: string | null;
14
+ to: string;
15
+ name: string;
16
+ email: string;
17
+ }
18
+ export declare function transferOwner(options: OwnerTransferOptions): Promise<OwnerTransferResult>;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `cloudhal owner transfer --to <email>` — Owner lockout recovery (RFC-0005 §3, open question 7).
3
+ * The operator, who holds the deployment token and is already root for site data, makes an
4
+ * existing member the deployment's Owner; the current Owner becomes an Administrator. Audited as
5
+ * `member.transfer-ownership` with `via: "deploy-token"`.
6
+ */
7
+ import { brief, deployment, } from "./sync.js";
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ export async function transferOwner(options ) {
22
+ const email = options.to.trim();
23
+ if (!email.includes("@")) throw new Error("usage: cloudhal owner transfer --to <email>");
24
+ const { adminUrl, token, fetch: f } = await deployment(options);
25
+ const res = await f(new URL("/api/admin/owner", adminUrl), {
26
+ method: "POST",
27
+ headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
28
+ body: JSON.stringify({ email }),
29
+ });
30
+ const body = await res.text();
31
+ if (res.status === 404)
32
+ throw new Error(
33
+ `no member with the email ${email} on this deployment (invite them first): ${brief(body)}`,
34
+ );
35
+ if (!res.ok) throw new Error(`owner transfer failed (${res.status}): ${brief(body)}`);
36
+ const result = JSON.parse(body) ;
37
+ options.log?.(`${result.name} <${result.email}> is now the Owner`);
38
+ return result;
39
+ }
@@ -0,0 +1,26 @@
1
+ import { type RenderCheck } from "@cloudhal/mcp-server/render";
2
+ export interface RenderOptions {
3
+ readonly projectDir: string;
4
+ /** A path on the site (`/pricing`) or a full URL. */
5
+ readonly target: string;
6
+ /** Where a path is served; `cloudhal dev` by default. */
7
+ readonly base?: string;
8
+ readonly widths?: readonly number[];
9
+ readonly scheme?: string;
10
+ readonly motion?: string;
11
+ readonly frames?: number;
12
+ /** The folder for the screenshots, relative to the project. */
13
+ readonly out?: string;
14
+ }
15
+ export interface RenderReport {
16
+ url: string;
17
+ files: string[];
18
+ checks: RenderCheck[];
19
+ }
20
+ /**
21
+ * `cloudhal render` (RFC-0024 §8): `render_page`'s browser and checks from the command line, for a
22
+ * page of the running site (`cloudhal dev`) or any URL. Screenshots go to `.cloudhal/renders/`.
23
+ */
24
+ export declare function render(options: RenderOptions): Promise<RenderReport>;
25
+ /** The report as text: the screenshots, then each failed check with its examples. */
26
+ export declare function describeRender(r: RenderReport): string;
@@ -0,0 +1,94 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import {
4
+ RENDER_MOTIONS,
5
+ RENDER_SCHEMES,
6
+ RENDER_WIDTHS,
7
+
8
+
9
+
10
+
11
+ renderPage,
12
+ } from "@cloudhal/mcp-server/render";
13
+ import { chromeRenderer, findChrome } from "../render-chrome.js";
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+ /**
36
+ * `cloudhal render` (RFC-0024 §8): `render_page`'s browser and checks from the command line, for a
37
+ * page of the running site (`cloudhal dev`) or any URL. Screenshots go to `.cloudhal/renders/`.
38
+ */
39
+ export async function render(options ) {
40
+ const chrome = findChrome();
41
+ if (!chrome) throw new Error("no Chrome found (set CHROME_PATH)");
42
+ const url = /^https?:\/\//.test(options.target)
43
+ ? options.target
44
+ : new URL(options.target, options.base ?? "http://localhost:4321").href;
45
+ const widths = (options.widths?.length ? options.widths : [1440, 390]).filter(
46
+ (w) => (RENDER_WIDTHS ).includes(w),
47
+ );
48
+ if (!widths.length) throw new Error(`--width: one or more of ${RENDER_WIDTHS.join(", ")}`);
49
+ const pick = (v , allowed , name ) => {
50
+ if (v === undefined) return undefined;
51
+ if (!(allowed ).includes(v))
52
+ throw new Error(`--${name}: one of ${allowed.join(", ")}`);
53
+ return v ;
54
+ };
55
+ const scheme = pick (options.scheme, RENDER_SCHEMES, "scheme");
56
+ const frames = options.frames ? Math.min(6, Math.max(1, Math.round(options.frames))) : 0;
57
+ const motion =
58
+ pick (options.motion, RENDER_MOTIONS, "motion") ?? (frames ? "full" : "static");
59
+ const result = await renderPage(chromeRenderer(chrome), url, {
60
+ widths,
61
+ fullPage: true,
62
+ ...(scheme ? { scheme } : {}),
63
+ motion,
64
+ ...(frames ? { frames } : {}),
65
+ timeoutMs: 60_000,
66
+ });
67
+ const dir = path.resolve(options.projectDir, options.out ?? ".cloudhal/renders");
68
+ await mkdir(dir, { recursive: true });
69
+ const slug = new URL(url).pathname.replace(/^\/|\/$/g, "").replace(/[^a-z0-9]+/gi, "-") || "home";
70
+ const files = [];
71
+ for (const shot of result.shots)
72
+ for (const [i, jpeg] of shot.images.entries()) {
73
+ const file = path.join(dir, `${slug}-${shot.width}-${i + 1}.jpg`);
74
+ await writeFile(file, jpeg);
75
+ files.push(path.relative(options.projectDir, file));
76
+ }
77
+ return { url, files, checks: result.checks };
78
+ }
79
+
80
+ /** The report as text: the screenshots, then each failed check with its examples. */
81
+ export function describeRender(r ) {
82
+ const failed = r.checks.filter((c) => !c.ok);
83
+ return [
84
+ `rendered ${r.url}`,
85
+ ...r.files.map((f) => ` ${f}`),
86
+ failed.length
87
+ ? `${failed.length} of ${r.checks.length} checks found problems:`
88
+ : `all ${r.checks.length} checks passed`,
89
+ ...failed.flatMap((c) => [
90
+ `✗ ${c.id}: ${c.count} at ${c.widths.join(", ")} px`,
91
+ ...c.examples.map((e) => ` ${e}`),
92
+ ]),
93
+ ].join("\n");
94
+ }
@@ -0,0 +1,55 @@
1
+ import type { SiteGraphStore } from "@cloudhal/core-ts";
2
+ import { type BuiltinInputs, type NotFoundAnalytics } from "@cloudhal/core-ts/automations";
3
+ import { type SchedulerControl, type TickReport, type TickTrigger } from "@cloudhal/core-ts/releases";
4
+ import { type SystemJobDefinition } from "@cloudhal/schedules";
5
+ import type { BlobStore, SqlDriver } from "@cloudhal/storage";
6
+ /** The longest the Node timer sleeps (§8.4). */
7
+ export declare const NODE_TICK_MAX_MS = 60000;
8
+ /**
9
+ * The deployment's automations switch on Node (RFC-0008 §11.6): `CLOUDHAL_AUTOMATIONS=off` stops
10
+ * them, as on the admin Worker; anything else (or nothing) leaves them on.
11
+ */
12
+ export declare function automationsEnabled(env?: Readonly<Record<string, string | undefined>>): boolean;
13
+ export interface LocalSchedulerOptions {
14
+ readonly sql: SqlDriver;
15
+ readonly blobs: BlobStore;
16
+ readonly graph: SiteGraphStore;
17
+ /** Runs the comments job hourly (studio, mcp, dev). Default true. */
18
+ readonly comments?: boolean;
19
+ readonly log?: (line: string) => void;
20
+ /** Clock and timers (tests). */
21
+ readonly now?: () => Date;
22
+ readonly maxIntervalMs?: number;
23
+ /** The project's analytics (the broken-link sweep's 404 rows, RFC-0008 §11.1). */
24
+ readonly analytics?: NotFoundAnalytics | undefined;
25
+ /**
26
+ * Where the local renderer serves the site (`cloudhal dev`): the feed check fetches its
27
+ * `/rss.xml` and `/sitemap.xml` there. Absent (Studio, MCP): the feed check has nothing to fetch.
28
+ */
29
+ readonly siteOrigin?: string | undefined;
30
+ /** The site the local renderer serves (`cloudhal.json` `siteId`). */
31
+ readonly siteId?: string | undefined;
32
+ /** Automations run (§11.6). Default: `automationsEnabled()` of the process environment. */
33
+ readonly automations?: boolean | undefined;
34
+ }
35
+ /** What the Node ticker adds for the built-in jobs (§11.1): local analytics and the local renderer. */
36
+ export declare function localBuiltinInputs(o: LocalSchedulerOptions): BuiltinInputs;
37
+ /** The deployment's periodic jobs on Node: the comments job and the schedules retention. */
38
+ export declare function localSystemJobs(sql: SqlDriver, graph: SiteGraphStore, o: {
39
+ comments: boolean;
40
+ log: (line: string) => void;
41
+ }): SystemJobDefinition[];
42
+ /** One tick on the project's SQLite (the Node timer, `cloudhal schedules run-due`). */
43
+ export declare function runLocalTick(o: LocalSchedulerOptions & {
44
+ trigger: TickTrigger;
45
+ at?: Date;
46
+ }): Promise<TickReport>;
47
+ export interface LocalScheduler extends SchedulerControl {
48
+ /** Resolves once the catch-up tick at start has run (tests). */
49
+ readonly started: Promise<void>;
50
+ /** The next timer, as an instant (tests). */
51
+ nextAt(): number | undefined;
52
+ stop(): void;
53
+ }
54
+ /** Starts the Node ticker (catch-up now, then at most every 60 s). */
55
+ export declare function startLocalScheduler(o: LocalSchedulerOptions): LocalScheduler;