canopycms 0.0.68-int.98 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (688) hide show
  1. package/CHANGELOG.md +2131 -0
  2. package/README.md +47 -63
  3. package/dist/ai/generate.d.ts +5 -0
  4. package/dist/ai/generate.js +244 -115
  5. package/dist/ai/index.d.ts +1 -1
  6. package/dist/ai/json-to-markdown.d.ts +21 -1
  7. package/dist/ai/json-to-markdown.js +120 -57
  8. package/dist/ai/references.d.ts +72 -0
  9. package/dist/ai/references.js +223 -0
  10. package/dist/ai/resolve-branch.js +9 -2
  11. package/dist/ai/to-plain-text.d.ts +17 -8
  12. package/dist/ai/to-plain-text.js +18 -15
  13. package/dist/ai/types.d.ts +84 -3
  14. package/dist/api/admin-branch-health.d.ts +24 -1
  15. package/dist/api/admin-branch-health.js +52 -20
  16. package/dist/api/admin.d.ts +23 -5
  17. package/dist/api/admin.js +36 -1
  18. package/dist/api/assets.js +88 -78
  19. package/dist/api/branch-create-window.d.ts +12 -0
  20. package/dist/api/branch-create-window.js +13 -0
  21. package/dist/api/branch-merge.d.ts +1 -1
  22. package/dist/api/branch-merge.js +1 -1
  23. package/dist/api/branch-review.d.ts +3 -3
  24. package/dist/api/branch-review.js +16 -7
  25. package/dist/api/branch-status.d.ts +16 -6
  26. package/dist/api/branch-status.js +57 -12
  27. package/dist/api/branch-withdraw.d.ts +2 -2
  28. package/dist/api/branch-withdraw.js +8 -3
  29. package/dist/api/branch.d.ts +25 -12
  30. package/dist/api/branch.js +164 -103
  31. package/dist/api/client.d.ts +78 -58
  32. package/dist/api/client.js +150 -117
  33. package/dist/api/comments.d.ts +12 -3
  34. package/dist/api/comments.js +118 -9
  35. package/dist/api/content.d.ts +9 -9
  36. package/dist/api/content.js +131 -22
  37. package/dist/api/entries-constants.d.ts +14 -3
  38. package/dist/api/entries-constants.js +14 -3
  39. package/dist/api/entries.d.ts +40 -2
  40. package/dist/api/entries.js +102 -6
  41. package/dist/api/github-sync.d.ts +19 -0
  42. package/dist/api/github-sync.js +50 -3
  43. package/dist/api/groups.d.ts +4 -4
  44. package/dist/api/groups.js +2 -1
  45. package/dist/api/guards.js +23 -3
  46. package/dist/api/index.d.ts +3 -1
  47. package/dist/api/index.js +1 -0
  48. package/dist/api/permissions.d.ts +21 -2
  49. package/dist/api/permissions.js +50 -3
  50. package/dist/api/request-deadline.d.ts +59 -0
  51. package/dist/api/request-deadline.js +73 -0
  52. package/dist/api/resolve-references.js +8 -7
  53. package/dist/api/route-builder.d.ts +14 -0
  54. package/dist/api/route-builder.js +14 -1
  55. package/dist/api/schema.d.ts +11 -9
  56. package/dist/api/schema.js +2 -0
  57. package/dist/api/settings-helpers.d.ts +5 -1
  58. package/dist/api/settings-helpers.js +10 -2
  59. package/dist/api/types.d.ts +18 -0
  60. package/dist/api/users-constants.d.ts +6 -0
  61. package/dist/api/users-constants.js +6 -0
  62. package/dist/assets/asset-url.d.ts +28 -16
  63. package/dist/assets/asset-url.js +51 -25
  64. package/dist/assets/finalize.js +3 -0
  65. package/dist/assets/index.d.ts +1 -1
  66. package/dist/assets/materialize.d.ts +153 -0
  67. package/dist/assets/materialize.js +402 -0
  68. package/dist/assets/store-local.d.ts +19 -5
  69. package/dist/assets/store-local.js +69 -10
  70. package/dist/assets/store-s3.d.ts +38 -7
  71. package/dist/assets/store-s3.js +128 -22
  72. package/dist/assets/transform-directives.d.ts +52 -13
  73. package/dist/assets/transform-directives.js +87 -27
  74. package/dist/assets/transform.d.ts +3 -3
  75. package/dist/assets/transform.js +13 -8
  76. package/dist/assets/types.d.ts +31 -4
  77. package/dist/auth/cache.d.ts +1 -1
  78. package/dist/auth/cache.js +1 -1
  79. package/dist/auth/caching-auth-plugin.d.ts +2 -0
  80. package/dist/auth/caching-auth-plugin.js +12 -2
  81. package/dist/auth/file-based-auth-cache.d.ts +8 -0
  82. package/dist/auth/file-based-auth-cache.js +18 -8
  83. package/dist/auth/person-name.d.ts +5 -0
  84. package/dist/auth/person-name.js +8 -0
  85. package/dist/auth/plugin.d.ts +10 -1
  86. package/dist/auth/types.d.ts +2 -0
  87. package/dist/auth/user-metadata-lookup.d.ts +21 -0
  88. package/dist/auth/user-metadata-lookup.js +116 -0
  89. package/dist/authorization/branch.d.ts +1 -1
  90. package/dist/authorization/branch.js +12 -13
  91. package/dist/authorization/groups/schema.d.ts +4 -4
  92. package/dist/authorization/helpers.d.ts +8 -0
  93. package/dist/authorization/helpers.js +8 -0
  94. package/dist/authorization/index.d.ts +1 -1
  95. package/dist/authorization/index.js +1 -1
  96. package/dist/authorization/protected-branch.d.ts +5 -4
  97. package/dist/authorization/protected-branch.js +7 -5
  98. package/dist/branch-health.d.ts +35 -8
  99. package/dist/branch-health.js +54 -18
  100. package/dist/branch-metadata-error.d.ts +27 -0
  101. package/dist/branch-metadata-error.js +23 -0
  102. package/dist/branch-metadata-file.d.ts +205 -24
  103. package/dist/branch-metadata-file.js +126 -25
  104. package/dist/branch-metadata.d.ts +45 -6
  105. package/dist/branch-metadata.js +142 -50
  106. package/dist/branch-provisioning.d.ts +167 -0
  107. package/dist/branch-provisioning.js +501 -0
  108. package/dist/branch-registry.d.ts +8 -0
  109. package/dist/branch-registry.js +61 -9
  110. package/dist/branch-schema-cache.d.ts +29 -12
  111. package/dist/branch-schema-cache.js +64 -21
  112. package/dist/branch-sparse.d.ts +23 -0
  113. package/dist/branch-sparse.js +118 -0
  114. package/dist/branch-workspace.d.ts +42 -3
  115. package/dist/branch-workspace.js +239 -100
  116. package/dist/build/asset-refs.d.ts +94 -0
  117. package/dist/build/asset-refs.js +267 -0
  118. package/dist/build/generate-ai-content.js +5 -0
  119. package/dist/build/inline-flight.d.ts +37 -0
  120. package/dist/build/inline-flight.js +142 -0
  121. package/dist/cli/asset-refs.d.ts +52 -0
  122. package/dist/cli/asset-refs.js +194 -0
  123. package/dist/cli/cli.d.ts +15 -1
  124. package/dist/cli/cli.js +8543 -3193
  125. package/dist/cli/configured-asset-store.d.ts +12 -0
  126. package/dist/cli/configured-asset-store.js +46 -0
  127. package/dist/cli/generate-ai-content.js +4244 -1072
  128. package/dist/cli/init.js +217 -126
  129. package/dist/cli/project-detect.d.ts +2 -0
  130. package/dist/cli/project-detect.js +2 -0
  131. package/dist/cli/template-files/Dockerfile.cms.template +13 -5
  132. package/dist/cli/template-files/cms-stack.ts.template +16 -13
  133. package/dist/client.d.ts +1 -2
  134. package/dist/client.js +1 -2
  135. package/dist/comment-store.d.ts +25 -0
  136. package/dist/comment-store.js +43 -8
  137. package/dist/config/flatten.js +2 -0
  138. package/dist/config/helpers.js +2 -2
  139. package/dist/config/index.d.ts +1 -1
  140. package/dist/config/schemas/config.d.ts +12 -29
  141. package/dist/config/schemas/config.js +9 -12
  142. package/dist/config/schemas/field.d.ts +3 -0
  143. package/dist/config/schemas/field.js +58 -4
  144. package/dist/config/schemas/media.d.ts +4 -13
  145. package/dist/config/schemas/media.js +5 -8
  146. package/dist/config/schemas/url.d.ts +2 -20
  147. package/dist/config/schemas/url.js +2 -25
  148. package/dist/config/types.d.ts +116 -22
  149. package/dist/config/types.js +3 -9
  150. package/dist/config/validation.d.ts +25 -4
  151. package/dist/config/validation.js +116 -3
  152. package/dist/content-id-index.js +2 -2
  153. package/dist/content-index-generation.d.ts +1 -1
  154. package/dist/content-index-generation.js +1 -1
  155. package/dist/content-listing.d.ts +10 -1
  156. package/dist/content-listing.js +22 -5
  157. package/dist/content-reader.d.ts +9 -0
  158. package/dist/content-reader.js +16 -11
  159. package/dist/content-store.d.ts +75 -12
  160. package/dist/content-store.js +249 -86
  161. package/dist/content-tree.js +2 -2
  162. package/dist/context.js +5 -2
  163. package/dist/dangling-reference-log.d.ts +17 -0
  164. package/dist/dangling-reference-log.js +29 -0
  165. package/dist/dev-content-watcher.d.ts +1 -1
  166. package/dist/dev-content-watcher.js +1 -1
  167. package/dist/editor/BranchManager.d.ts +23 -7
  168. package/dist/editor/BranchManager.js +119 -54
  169. package/dist/editor/CanopyEditor.d.ts +1 -1
  170. package/dist/editor/CanopyEditor.js +1 -2
  171. package/dist/editor/CommentsPanel.d.ts +14 -0
  172. package/dist/editor/CommentsPanel.js +68 -43
  173. package/dist/editor/Editor.d.ts +11 -5
  174. package/dist/editor/Editor.js +891 -218
  175. package/dist/editor/EditorAuthGate.d.ts +7 -1
  176. package/dist/editor/EditorAuthGate.js +41 -9
  177. package/dist/editor/EntryNavigator.d.ts +22 -0
  178. package/dist/editor/EntryNavigator.js +353 -105
  179. package/dist/editor/FormHeader.d.ts +25 -0
  180. package/dist/editor/FormHeader.js +82 -0
  181. package/dist/editor/FormRenderer.d.ts +27 -3
  182. package/dist/editor/FormRenderer.js +171 -76
  183. package/dist/editor/PreviewFrame.d.ts +40 -0
  184. package/dist/editor/PreviewFrame.js +215 -0
  185. package/dist/editor/PreviewPane.d.ts +47 -0
  186. package/dist/editor/PreviewPane.js +147 -0
  187. package/dist/editor/PreviewToolbarTools.d.ts +22 -0
  188. package/dist/editor/PreviewToolbarTools.js +73 -0
  189. package/dist/editor/admin/SystemHealthPanel.d.ts +2 -1
  190. package/dist/editor/admin/SystemHealthPanel.js +163 -33
  191. package/dist/editor/admin/useSystemHealth.d.ts +18 -0
  192. package/dist/editor/admin/useSystemHealth.js +70 -1
  193. package/dist/editor/branch-status.d.ts +17 -0
  194. package/dist/editor/branch-status.js +29 -0
  195. package/dist/editor/canopy-path.d.ts +9 -6
  196. package/dist/editor/canopy-path.js +8 -11
  197. package/dist/editor/client-reference-resolver.d.ts +43 -16
  198. package/dist/editor/client-reference-resolver.js +155 -64
  199. package/dist/editor/comments/BranchComments.d.ts +1 -1
  200. package/dist/editor/comments/BranchComments.js +2 -2
  201. package/dist/editor/comments/CloseRefusedNotice.d.ts +4 -0
  202. package/dist/editor/comments/CloseRefusedNotice.js +7 -0
  203. package/dist/editor/comments/CommentThreadsPopover.d.ts +47 -0
  204. package/dist/editor/comments/CommentThreadsPopover.js +274 -0
  205. package/dist/editor/comments/CommentWriteAlert.d.ts +11 -0
  206. package/dist/editor/comments/CommentWriteAlert.js +13 -0
  207. package/dist/editor/comments/EntryComments.d.ts +10 -4
  208. package/dist/editor/comments/EntryComments.js +14 -17
  209. package/dist/editor/comments/FieldWrapper.d.ts +18 -4
  210. package/dist/editor/comments/FieldWrapper.js +62 -28
  211. package/dist/editor/comments/InlineCommentThread.d.ts +9 -2
  212. package/dist/editor/comments/InlineCommentThread.js +11 -47
  213. package/dist/editor/comments/ThreadCarousel.d.ts +1 -1
  214. package/dist/editor/comments/ThreadCarousel.js +18 -21
  215. package/dist/editor/comments/ThreadReplyControls.d.ts +28 -0
  216. package/dist/editor/comments/ThreadReplyControls.js +92 -0
  217. package/dist/editor/comments/field-comment-context.d.ts +14 -0
  218. package/dist/editor/comments/field-comment-context.js +14 -0
  219. package/dist/editor/comments/form-comments.d.ts +48 -0
  220. package/dist/editor/comments/form-comments.js +178 -0
  221. package/dist/editor/comments/item-anchor-copy.d.ts +6 -0
  222. package/dist/editor/comments/item-anchor-copy.js +6 -0
  223. package/dist/editor/comments/move-focus-if-unmoved.d.ts +6 -0
  224. package/dist/editor/comments/move-focus-if-unmoved.js +11 -0
  225. package/dist/editor/comments/popover-placement.d.ts +18 -0
  226. package/dist/editor/comments/popover-placement.js +58 -0
  227. package/dist/editor/comments/use-tracked-writes.d.ts +16 -0
  228. package/dist/editor/comments/use-tracked-writes.js +53 -0
  229. package/dist/editor/components/BranchAccessList.d.ts +15 -0
  230. package/dist/editor/components/BranchAccessList.js +52 -0
  231. package/dist/editor/components/BranchLockBanner.d.ts +22 -0
  232. package/dist/editor/components/BranchLockBanner.js +39 -0
  233. package/dist/editor/components/BranchPill.d.ts +32 -0
  234. package/dist/editor/components/BranchPill.js +33 -0
  235. package/dist/editor/components/BranchesDrawer.d.ts +11 -0
  236. package/dist/editor/components/BranchesDrawer.js +5 -0
  237. package/dist/editor/components/ConfirmDeleteModal.d.ts +6 -1
  238. package/dist/editor/components/ConfirmDeleteModal.js +3 -2
  239. package/dist/editor/components/DestructiveMenuItem.d.ts +7 -0
  240. package/dist/editor/components/DestructiveMenuItem.js +8 -0
  241. package/dist/editor/components/EditorCrashScreen.d.ts +17 -0
  242. package/dist/editor/components/EditorCrashScreen.js +22 -0
  243. package/dist/editor/components/EditorErrorBoundary.d.ts +38 -0
  244. package/dist/editor/components/EditorErrorBoundary.js +40 -0
  245. package/dist/editor/components/EditorHeader.d.ts +56 -106
  246. package/dist/editor/components/EditorHeader.js +130 -131
  247. package/dist/editor/components/EditorRail.d.ts +49 -0
  248. package/dist/editor/components/EditorRail.js +65 -0
  249. package/dist/editor/components/EntryBreadcrumb.d.ts +33 -0
  250. package/dist/editor/components/EntryBreadcrumb.js +56 -0
  251. package/dist/editor/components/EntryCreateModal.d.ts +12 -7
  252. package/dist/editor/components/EntryCreateModal.js +51 -57
  253. package/dist/editor/components/NoEditPermissionNotice.d.ts +6 -5
  254. package/dist/editor/components/NoEditPermissionNotice.js +5 -4
  255. package/dist/editor/components/QuickOpenPalette.d.ts +22 -0
  256. package/dist/editor/components/QuickOpenPalette.js +66 -0
  257. package/dist/editor/components/ReadOnlyDraftNotice.d.ts +11 -0
  258. package/dist/editor/components/ReadOnlyDraftNotice.js +12 -0
  259. package/dist/editor/components/ReasonedMenuItem.d.ts +15 -0
  260. package/dist/editor/components/ReasonedMenuItem.js +15 -0
  261. package/dist/editor/components/ReferencedByList.d.ts +11 -0
  262. package/dist/editor/components/ReferencedByList.js +28 -0
  263. package/dist/editor/components/RelativeTime.d.ts +10 -0
  264. package/dist/editor/components/RelativeTime.js +10 -0
  265. package/dist/editor/components/RenameEntryModal.d.ts +9 -1
  266. package/dist/editor/components/RenameEntryModal.js +19 -31
  267. package/dist/editor/components/RetryToastMessage.d.ts +9 -0
  268. package/dist/editor/components/RetryToastMessage.js +6 -0
  269. package/dist/editor/components/SaveAllResult.d.ts +25 -0
  270. package/dist/editor/components/SaveAllResult.js +86 -0
  271. package/dist/editor/components/SaveSplitButton.d.ts +30 -0
  272. package/dist/editor/components/SaveSplitButton.js +108 -0
  273. package/dist/editor/components/StagedChangesDrawer.d.ts +39 -0
  274. package/dist/editor/components/StagedChangesDrawer.js +92 -0
  275. package/dist/editor/components/UnavailableEntryNotice.d.ts +6 -0
  276. package/dist/editor/components/UnavailableEntryNotice.js +9 -0
  277. package/dist/editor/components/UnavailableTypeMessage.d.ts +6 -0
  278. package/dist/editor/components/UnavailableTypeMessage.js +9 -0
  279. package/dist/editor/components/UndoToastMessage.d.ts +18 -0
  280. package/dist/editor/components/UndoToastMessage.js +10 -0
  281. package/dist/editor/components/UserBadge.d.ts +2 -5
  282. package/dist/editor/components/UserBadge.js +62 -33
  283. package/dist/editor/components/ValidationSummary.d.ts +14 -0
  284. package/dist/editor/components/ValidationSummary.js +24 -0
  285. package/dist/editor/components/index.d.ts +2 -2
  286. package/dist/editor/components/index.js +2 -2
  287. package/dist/editor/context/ApiClientContext.d.ts +8 -2
  288. package/dist/editor/context/ApiClientContext.js +19 -8
  289. package/dist/editor/context/AssetContext.d.ts +13 -35
  290. package/dist/editor/context/AssetContext.js +12 -31
  291. package/dist/editor/context/EditorStateContext.d.ts +4 -4
  292. package/dist/editor/context/EditorStateContext.js +4 -4
  293. package/dist/editor/context/SWRProvider.d.ts +3 -3
  294. package/dist/editor/context/SiteMdxAllowContext.d.ts +4 -0
  295. package/dist/editor/context/SiteMdxAllowContext.js +7 -0
  296. package/dist/editor/context/index.d.ts +2 -1
  297. package/dist/editor/context/index.js +2 -1
  298. package/dist/editor/contrast.d.ts +19 -0
  299. package/dist/editor/contrast.js +41 -0
  300. package/dist/editor/copy.d.ts +18 -0
  301. package/dist/editor/copy.js +18 -0
  302. package/dist/editor/editor-config.js +16 -0
  303. package/dist/editor/editor-utils.d.ts +34 -8
  304. package/dist/editor/editor-utils.js +42 -20
  305. package/dist/editor/entry-search.d.ts +20 -0
  306. package/dist/editor/entry-search.js +34 -0
  307. package/dist/editor/field-breadcrumb.d.ts +12 -0
  308. package/dist/editor/field-breadcrumb.js +85 -0
  309. package/dist/editor/field-props.d.ts +86 -0
  310. package/dist/editor/field-props.js +27 -0
  311. package/dist/editor/field-target.d.ts +30 -0
  312. package/dist/editor/field-target.js +77 -0
  313. package/dist/editor/fields/BlockField.d.ts +12 -0
  314. package/dist/editor/fields/BlockField.js +89 -73
  315. package/dist/editor/fields/CodeField.d.ts +2 -0
  316. package/dist/editor/fields/CodeField.js +6 -2
  317. package/dist/editor/fields/DateTimeField.d.ts +4 -29
  318. package/dist/editor/fields/DateTimeField.js +79 -41
  319. package/dist/editor/fields/ExpandAllButton.d.ts +6 -0
  320. package/dist/editor/fields/ExpandAllButton.js +4 -0
  321. package/dist/editor/fields/FieldCrashFallback.d.ts +17 -0
  322. package/dist/editor/fields/FieldCrashFallback.js +30 -0
  323. package/dist/editor/fields/FieldLabel.d.ts +37 -0
  324. package/dist/editor/fields/FieldLabel.js +19 -0
  325. package/dist/editor/fields/ImageField.d.ts +4 -0
  326. package/dist/editor/fields/ImageField.js +29 -14
  327. package/dist/editor/fields/InlineGroupField.js +4 -3
  328. package/dist/editor/fields/ItemList.d.ts +42 -0
  329. package/dist/editor/fields/ItemList.js +130 -0
  330. package/dist/editor/fields/MarkdownField.d.ts +32 -0
  331. package/dist/editor/fields/MarkdownField.js +223 -46
  332. package/dist/editor/fields/MdxImageDialog.js +1 -1
  333. package/dist/editor/fields/NumberField.d.ts +2 -0
  334. package/dist/editor/fields/NumberField.js +8 -5
  335. package/dist/editor/fields/NumberListField.d.ts +2 -0
  336. package/dist/editor/fields/NumberListField.js +19 -16
  337. package/dist/editor/fields/ObjectField.d.ts +2 -7
  338. package/dist/editor/fields/ObjectField.js +15 -5
  339. package/dist/editor/fields/ObjectListField.d.ts +29 -0
  340. package/dist/editor/fields/ObjectListField.js +57 -0
  341. package/dist/editor/fields/ReferenceField.d.ts +2 -0
  342. package/dist/editor/fields/ReferenceField.js +34 -9
  343. package/dist/editor/fields/SelectField.d.ts +2 -0
  344. package/dist/editor/fields/SelectField.js +11 -2
  345. package/dist/editor/fields/StringListField.d.ts +4 -1
  346. package/dist/editor/fields/StringListField.js +22 -8
  347. package/dist/editor/fields/TextField.d.ts +2 -0
  348. package/dist/editor/fields/TextField.js +6 -2
  349. package/dist/editor/fields/ToggleField.d.ts +2 -0
  350. package/dist/editor/fields/ToggleField.js +8 -3
  351. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +1 -1
  352. package/dist/editor/fields/entry-link/InsertEntryLink.js +1 -1
  353. package/dist/editor/fields/form-expansion.d.ts +9 -0
  354. package/dist/editor/fields/form-expansion.js +2 -0
  355. package/dist/editor/fields/item-expansion.d.ts +15 -0
  356. package/dist/editor/fields/item-expansion.js +60 -0
  357. package/dist/editor/fields/list-item-keys.d.ts +8 -0
  358. package/dist/editor/fields/list-item-keys.js +50 -0
  359. package/dist/editor/fields/list-item-title.d.ts +20 -0
  360. package/dist/editor/fields/list-item-title.js +85 -0
  361. package/dist/editor/fields/markdown-export-options.d.ts +2 -0
  362. package/dist/editor/fields/markdown-export-options.js +8 -0
  363. package/dist/editor/fields/markdown-fidelity-visitors.d.ts +11 -0
  364. package/dist/editor/fields/markdown-fidelity-visitors.js +160 -0
  365. package/dist/editor/fields/mdx-jsx-support.d.ts +5 -1
  366. package/dist/editor/fields/mdx-jsx-support.js +157 -69
  367. package/dist/editor/fields/rich-text-failures.d.ts +5 -0
  368. package/dist/editor/fields/rich-text-failures.js +26 -0
  369. package/dist/editor/fields/toolbar-wrap.d.ts +7 -0
  370. package/dist/editor/fields/toolbar-wrap.js +35 -0
  371. package/dist/editor/form-outline.d.ts +13 -0
  372. package/dist/editor/form-outline.js +70 -0
  373. package/dist/editor/group-manager/GroupCard.d.ts +4 -1
  374. package/dist/editor/group-manager/GroupCard.js +12 -3
  375. package/dist/editor/group-manager/GroupForm.js +1 -1
  376. package/dist/editor/group-manager/InternalGroupsTab.d.ts +2 -1
  377. package/dist/editor/group-manager/InternalGroupsTab.js +4 -4
  378. package/dist/editor/group-manager/MemberList.d.ts +2 -1
  379. package/dist/editor/group-manager/MemberList.js +15 -4
  380. package/dist/editor/group-manager/hooks/useGroupState.d.ts +5 -0
  381. package/dist/editor/group-manager/hooks/useGroupState.js +30 -7
  382. package/dist/editor/group-manager/index.js +34 -5
  383. package/dist/editor/group-manager/types.d.ts +5 -2
  384. package/dist/editor/hooks/create-branch-request.d.ts +20 -0
  385. package/dist/editor/hooks/create-branch-request.js +54 -0
  386. package/dist/editor/hooks/save-all.d.ts +68 -0
  387. package/dist/editor/hooks/save-all.js +61 -0
  388. package/dist/editor/hooks/useBranchActions.d.ts +11 -1
  389. package/dist/editor/hooks/useBranchActions.js +42 -19
  390. package/dist/editor/hooks/useBranchManager.d.ts +21 -0
  391. package/dist/editor/hooks/useBranchManager.js +321 -125
  392. package/dist/editor/hooks/useBranchesData.d.ts +8 -4
  393. package/dist/editor/hooks/useBranchesData.js +9 -5
  394. package/dist/editor/hooks/useCommentSystem.d.ts +14 -2
  395. package/dist/editor/hooks/useCommentSystem.js +79 -55
  396. package/dist/editor/hooks/useCommentsData.d.ts +11 -7
  397. package/dist/editor/hooks/useCommentsData.js +20 -19
  398. package/dist/editor/hooks/useDraftManager.d.ts +77 -3
  399. package/dist/editor/hooks/useDraftManager.js +887 -94
  400. package/dist/editor/hooks/useEditorLayout.d.ts +53 -7
  401. package/dist/editor/hooks/useEditorLayout.js +98 -20
  402. package/dist/editor/hooks/useEntriesData.d.ts +2 -1
  403. package/dist/editor/hooks/useEntriesData.js +18 -4
  404. package/dist/editor/hooks/useEntryManager.d.ts +41 -2
  405. package/dist/editor/hooks/useEntryManager.js +227 -41
  406. package/dist/editor/hooks/useGroupManager.js +13 -16
  407. package/dist/editor/hooks/usePermissionManager.js +14 -6
  408. package/dist/editor/hooks/usePreviewMarks.d.ts +21 -0
  409. package/dist/editor/hooks/usePreviewMarks.js +33 -0
  410. package/dist/editor/hooks/useReferenceResolution.d.ts +10 -3
  411. package/dist/editor/hooks/useReferenceResolution.js +34 -177
  412. package/dist/editor/hooks/useSchemaManager.d.ts +25 -6
  413. package/dist/editor/hooks/useSchemaManager.js +97 -39
  414. package/dist/editor/hooks/useUserMetadata.d.ts +14 -4
  415. package/dist/editor/hooks/useUserMetadata.js +76 -47
  416. package/dist/editor/hooks/user-metadata-batcher.d.ts +8 -0
  417. package/dist/editor/hooks/user-metadata-batcher.js +33 -0
  418. package/dist/editor/media/AssetCard.d.ts +6 -7
  419. package/dist/editor/media/AssetCard.js +24 -31
  420. package/dist/editor/media/AssetListRow.d.ts +16 -0
  421. package/dist/editor/media/AssetListRow.js +41 -0
  422. package/dist/editor/media/CropStep.js +6 -1
  423. package/dist/editor/media/MediaLibrary.d.ts +4 -3
  424. package/dist/editor/media/MediaLibrary.js +11 -4
  425. package/dist/editor/media/MediaLibraryBody.d.ts +3 -3
  426. package/dist/editor/media/MediaLibraryBody.js +195 -80
  427. package/dist/editor/media/MediaLibrarySkeleton.d.ts +6 -0
  428. package/dist/editor/media/MediaLibrarySkeleton.js +14 -0
  429. package/dist/editor/media/crop-math.d.ts +3 -4
  430. package/dist/editor/media/crop-math.js +11 -22
  431. package/dist/editor/media/editor-image-src.d.ts +8 -0
  432. package/dist/editor/media/editor-image-src.js +10 -0
  433. package/dist/editor/media/format-bytes.d.ts +2 -0
  434. package/dist/editor/media/format-bytes.js +23 -0
  435. package/dist/editor/media/media-library-prefs.d.ts +23 -0
  436. package/dist/editor/media/media-library-prefs.js +49 -0
  437. package/dist/editor/media/media-library-view.d.ts +34 -0
  438. package/dist/editor/media/media-library-view.js +40 -0
  439. package/dist/editor/media/useAssetLibrary.d.ts +30 -0
  440. package/dist/editor/media/useAssetLibrary.js +126 -0
  441. package/dist/editor/media/useStableAssetOrder.d.ts +11 -0
  442. package/dist/editor/media/useStableAssetOrder.js +37 -0
  443. package/dist/editor/media/useThumbnailFailure.d.ts +6 -0
  444. package/dist/editor/media/useThumbnailFailure.js +16 -0
  445. package/dist/editor/permission-manager/GroupSelector.js +2 -2
  446. package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -1
  447. package/dist/editor/permission-manager/PermissionEditor.js +15 -4
  448. package/dist/editor/permission-manager/PermissionLevelBadge.js +1 -1
  449. package/dist/editor/permission-manager/PermissionTree.d.ts +1 -1
  450. package/dist/editor/permission-manager/UserSelector.d.ts +1 -1
  451. package/dist/editor/permission-manager/UserSelector.js +3 -3
  452. package/dist/editor/permission-manager/index.js +12 -3
  453. package/dist/editor/permission-manager/types.d.ts +5 -2
  454. package/dist/editor/platform.d.ts +3 -0
  455. package/dist/editor/platform.js +9 -0
  456. package/dist/editor/preview-asset-base.d.ts +9 -0
  457. package/dist/editor/preview-asset-base.js +17 -0
  458. package/dist/editor/preview-bridge.d.ts +51 -27
  459. package/dist/editor/preview-bridge.js +103 -144
  460. package/dist/editor/preview-marks.d.ts +15 -0
  461. package/dist/editor/preview-marks.js +74 -0
  462. package/dist/editor/preview-path.d.ts +12 -0
  463. package/dist/editor/preview-path.js +45 -1
  464. package/dist/editor/preview-scale.d.ts +27 -0
  465. package/dist/editor/preview-scale.js +34 -0
  466. package/dist/editor/raw-asset-base.d.ts +5 -0
  467. package/dist/editor/raw-asset-base.js +14 -0
  468. package/dist/editor/relative-time.d.ts +4 -4
  469. package/dist/editor/relative-time.js +16 -8
  470. package/dist/editor/schema-editor/CollectionEditor.d.ts +20 -3
  471. package/dist/editor/schema-editor/CollectionEditor.js +361 -62
  472. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +5 -1
  473. package/dist/editor/schema-editor/EntryTypeEditor.js +11 -6
  474. package/dist/editor/schema-editor/collection-draft.d.ts +22 -0
  475. package/dist/editor/schema-editor/collection-draft.js +40 -0
  476. package/dist/editor/schema-editor/index.d.ts +1 -1
  477. package/dist/editor/schema-label.d.ts +10 -0
  478. package/dist/editor/schema-label.js +17 -0
  479. package/dist/editor/settings-conflict.d.ts +5 -0
  480. package/dist/editor/settings-conflict.js +8 -0
  481. package/dist/editor/shell/ActivityRail.d.ts +37 -0
  482. package/dist/editor/shell/ActivityRail.js +91 -0
  483. package/dist/editor/shell/EditorShell.d.ts +17 -0
  484. package/dist/editor/shell/EditorShell.js +31 -0
  485. package/dist/editor/shell/PaneLayout.d.ts +28 -0
  486. package/dist/editor/shell/PaneLayout.js +116 -0
  487. package/dist/editor/shell/SidePanelHost.d.ts +35 -0
  488. package/dist/editor/shell/SidePanelHost.js +184 -0
  489. package/dist/editor/shell/TopBar.d.ts +12 -0
  490. package/dist/editor/shell/TopBar.js +14 -0
  491. package/dist/editor/shell/host-chrome.d.ts +16 -0
  492. package/dist/editor/shell/host-chrome.js +69 -0
  493. package/dist/editor/slug.d.ts +16 -0
  494. package/dist/editor/slug.js +43 -0
  495. package/dist/editor/theme.d.ts +2 -1
  496. package/dist/editor/theme.js +314 -13
  497. package/dist/editor/unanswered.d.ts +17 -0
  498. package/dist/editor/unanswered.js +26 -0
  499. package/dist/editor/unavailable-entry-type.d.ts +20 -0
  500. package/dist/editor/unavailable-entry-type.js +28 -0
  501. package/dist/editor/undo-removal.d.ts +57 -0
  502. package/dist/editor/undo-removal.js +163 -0
  503. package/dist/editor/user-display.d.ts +4 -0
  504. package/dist/editor/user-display.js +5 -0
  505. package/dist/editor/utils/confirm-modal.d.ts +8 -0
  506. package/dist/editor/utils/confirm-modal.js +12 -0
  507. package/dist/editor/utils/editor-errors.d.ts +19 -0
  508. package/dist/editor/utils/editor-errors.js +32 -0
  509. package/dist/editor/utils/focus-return.d.ts +56 -0
  510. package/dist/editor/utils/focus-return.js +106 -0
  511. package/dist/entry-link-resolver.d.ts +11 -1
  512. package/dist/entry-link-resolver.js +65 -5
  513. package/dist/entry-schema-registry.d.ts +3 -3
  514. package/dist/entry-schema-registry.js +7 -4
  515. package/dist/entry-schema.d.ts +49 -3
  516. package/dist/entry-schema.js +18 -0
  517. package/dist/git-manager.d.ts +172 -10
  518. package/dist/git-manager.js +449 -107
  519. package/dist/github-service.d.ts +39 -2
  520. package/dist/github-service.js +101 -7
  521. package/dist/http/handler.js +74 -9
  522. package/dist/http/types.d.ts +2 -0
  523. package/dist/http/worker-not-ready.d.ts +9 -4
  524. package/dist/http/worker-not-ready.js +59 -6
  525. package/dist/index.d.ts +2 -0
  526. package/dist/index.js +3 -0
  527. package/dist/item-keys.d.ts +46 -0
  528. package/dist/item-keys.js +235 -0
  529. package/dist/operating-mode/editor-mode-check.d.ts +15 -0
  530. package/dist/operating-mode/editor-mode-check.js +24 -0
  531. package/dist/operating-mode/mode-env.d.ts +13 -14
  532. package/dist/operating-mode/mode-env.js +13 -14
  533. package/dist/operating-mode/types.d.ts +2 -2
  534. package/dist/paths/branch.d.ts +0 -1
  535. package/dist/paths/branch.js +1 -8
  536. package/dist/paths/index.d.ts +1 -1
  537. package/dist/paths/index.js +1 -1
  538. package/dist/paths/validation.js +0 -2
  539. package/dist/preview.d.ts +8 -0
  540. package/dist/preview.js +7 -0
  541. package/dist/reference-resolver.js +1 -0
  542. package/dist/resolve-canopy-user.d.ts +1 -1
  543. package/dist/resolve-canopy-user.js +1 -1
  544. package/dist/schema/meta-loader.d.ts +18 -8
  545. package/dist/schema/meta-loader.js +42 -9
  546. package/dist/schema/registry-fingerprint.d.ts +14 -0
  547. package/dist/schema/registry-fingerprint.js +63 -0
  548. package/dist/schema/resolver.d.ts +7 -4
  549. package/dist/schema/resolver.js +7 -6
  550. package/dist/schema/schema-store.d.ts +7 -10
  551. package/dist/schema/schema-store.js +13 -11
  552. package/dist/schema/schema-unavailable-error.d.ts +11 -0
  553. package/dist/schema/schema-unavailable-error.js +15 -0
  554. package/dist/schema/types.d.ts +22 -0
  555. package/dist/schema-registry-record.d.ts +35 -0
  556. package/dist/schema-registry-record.js +134 -0
  557. package/dist/server.d.ts +79 -9
  558. package/dist/server.js +62 -8
  559. package/dist/services.d.ts +33 -5
  560. package/dist/services.js +155 -37
  561. package/dist/settings-workspace.d.ts +23 -3
  562. package/dist/settings-workspace.js +159 -45
  563. package/dist/stamp-on-publish.d.ts +36 -0
  564. package/dist/stamp-on-publish.js +71 -0
  565. package/dist/static/index.d.ts +58 -5
  566. package/dist/static/index.js +133 -3
  567. package/dist/static/seo.d.ts +5 -5
  568. package/dist/static/seo.js +5 -5
  569. package/dist/submission-attribution.d.ts +8 -0
  570. package/dist/submission-attribution.js +22 -0
  571. package/dist/system-users.d.ts +12 -0
  572. package/dist/system-users.js +12 -0
  573. package/dist/task-queue/cms-task-queue.d.ts +1 -1
  574. package/dist/task-queue/cms-task-queue.js +1 -1
  575. package/dist/task-queue/index.d.ts +1 -1
  576. package/dist/task-queue/index.js +1 -1
  577. package/dist/task-queue/task-queue.d.ts +6 -0
  578. package/dist/task-queue/task-queue.js +29 -0
  579. package/dist/task-queue/worker-status.d.ts +35 -9
  580. package/dist/task-queue/worker-status.js +84 -17
  581. package/dist/types.d.ts +90 -9
  582. package/dist/url-collision.js +3 -3
  583. package/dist/url-exclusivity-fixtures.d.ts +8 -1
  584. package/dist/url-exclusivity-fixtures.js +11 -1
  585. package/dist/user.js +2 -1
  586. package/dist/utils/atomic-write.js +2 -1
  587. package/dist/utils/base-branch.d.ts +13 -0
  588. package/dist/utils/base-branch.js +23 -0
  589. package/dist/utils/content-serialize.d.ts +15 -7
  590. package/dist/utils/content-serialize.js +353 -51
  591. package/dist/utils/content-write-lock.d.ts +6 -1
  592. package/dist/utils/content-write-lock.js +21 -6
  593. package/dist/utils/debug.d.ts +1 -1
  594. package/dist/utils/debug.js +5 -3
  595. package/dist/utils/error.js +13 -2
  596. package/dist/utils/escape-text.d.ts +7 -0
  597. package/dist/utils/escape-text.js +27 -0
  598. package/dist/utils/fs.d.ts +12 -4
  599. package/dist/utils/fs.js +18 -5
  600. package/dist/utils/git.d.ts +21 -1
  601. package/dist/utils/git.js +63 -8
  602. package/dist/utils/json-source-splice.d.ts +14 -0
  603. package/dist/utils/json-source-splice.js +120 -0
  604. package/dist/utils/markdown-body-splice.d.ts +39 -0
  605. package/dist/utils/markdown-body-splice.js +421 -0
  606. package/dist/utils/occ-json-write.js +18 -12
  607. package/dist/utils/provision-log.d.ts +25 -0
  608. package/dist/utils/provision-log.js +49 -0
  609. package/dist/utils/provisioning-lock.d.ts +32 -1
  610. package/dist/utils/provisioning-lock.js +78 -32
  611. package/dist/utils/sanitize-href.d.ts +9 -23
  612. package/dist/utils/sanitize-href.js +14 -28
  613. package/dist/utils/title-field.d.ts +10 -0
  614. package/dist/utils/title-field.js +47 -0
  615. package/dist/utils/yaml-source-splice.d.ts +58 -0
  616. package/dist/utils/yaml-source-splice.js +515 -0
  617. package/dist/validation/block-structural-keys.d.ts +1 -1
  618. package/dist/validation/block-structural-keys.js +1 -1
  619. package/dist/validation/deletion-checker.d.ts +21 -29
  620. package/dist/validation/deletion-checker.js +41 -117
  621. package/dist/validation/entry-validator.d.ts +6 -10
  622. package/dist/validation/entry-validator.js +19 -26
  623. package/dist/validation/field-traversal.d.ts +22 -0
  624. package/dist/validation/field-traversal.js +39 -8
  625. package/dist/validation/markdown-safety.d.ts +68 -0
  626. package/dist/validation/markdown-safety.js +596 -0
  627. package/dist/validation/mdx-allowlist.d.ts +55 -0
  628. package/dist/validation/mdx-allowlist.js +183 -0
  629. package/dist/validation/reference-validator.d.ts +2 -0
  630. package/dist/validation/reference-validator.js +3 -0
  631. package/dist/version.d.ts +1 -1
  632. package/dist/version.js +1 -1
  633. package/dist/worker/branch-policy.d.ts +124 -0
  634. package/dist/worker/branch-policy.js +243 -0
  635. package/dist/worker/bundle-header.d.ts +117 -0
  636. package/dist/worker/bundle-header.js +253 -0
  637. package/dist/worker/cms-worker.d.ts +236 -142
  638. package/dist/worker/cms-worker.js +772 -285
  639. package/dist/worker/gateway-egress.d.ts +43 -0
  640. package/dist/worker/gateway-egress.js +209 -0
  641. package/dist/worker/gateway-instance.d.ts +42 -0
  642. package/dist/worker/gateway-instance.js +129 -0
  643. package/dist/worker/git-process.d.ts +81 -0
  644. package/dist/worker/git-process.js +234 -0
  645. package/dist/worker/git-sync.d.ts +34 -17
  646. package/dist/worker/git-sync.js +394 -131
  647. package/dist/worker/github-auth.d.ts +9 -9
  648. package/dist/worker/github-auth.js +13 -15
  649. package/dist/worker/github-gateway-http.d.ts +62 -0
  650. package/dist/worker/github-gateway-http.js +977 -0
  651. package/dist/worker/github-gateway-wire.d.ts +590 -0
  652. package/dist/worker/github-gateway-wire.js +488 -0
  653. package/dist/worker/github-gateway.d.ts +238 -0
  654. package/dist/worker/github-gateway.js +726 -0
  655. package/dist/worker/github-mirror-upkeep.d.ts +75 -0
  656. package/dist/worker/github-mirror-upkeep.js +266 -0
  657. package/dist/worker/github-mirror.d.ts +364 -0
  658. package/dist/worker/github-mirror.js +1030 -0
  659. package/dist/worker/github-transfer.d.ts +56 -0
  660. package/dist/worker/github-transfer.js +444 -0
  661. package/dist/worker/history-rewrite.d.ts +4 -5
  662. package/dist/worker/history-rewrite.js +12 -17
  663. package/dist/worker/provisioned-workspace.d.ts +5 -5
  664. package/dist/worker/provisioned-workspace.js +5 -5
  665. package/dist/worker/rebase.d.ts +1 -1
  666. package/dist/worker/rebase.js +58 -54
  667. package/dist/worker/remote-git-maintenance.d.ts +3 -0
  668. package/dist/worker/remote-git-maintenance.js +12 -0
  669. package/dist/worker/schema-gate.d.ts +49 -0
  670. package/dist/worker/schema-gate.js +226 -0
  671. package/dist/worker/self-checks.d.ts +107 -0
  672. package/dist/worker/self-checks.js +358 -0
  673. package/dist/worker/shared-repo-git.d.ts +96 -0
  674. package/dist/worker/shared-repo-git.js +459 -0
  675. package/dist/worker/sparse-cone.d.ts +20 -0
  676. package/dist/worker/sparse-cone.js +136 -0
  677. package/dist/worker/stale-mirror.d.ts +82 -0
  678. package/dist/worker/stale-mirror.js +130 -0
  679. package/dist/worker/task-runner.d.ts +5 -3
  680. package/dist/worker/task-runner.js +287 -186
  681. package/dist/worker/worker-context.d.ts +36 -37
  682. package/package.json +35 -7
  683. package/dist/editor/EditorPanes.d.ts +0 -10
  684. package/dist/editor/EditorPanes.js +0 -98
  685. package/dist/editor/components/EditorFooter.d.ts +0 -11
  686. package/dist/editor/components/EditorFooter.js +0 -9
  687. package/dist/editor/components/EditorSidebar.d.ts +0 -67
  688. package/dist/editor/components/EditorSidebar.js +0 -22
@@ -1,7 +1,7 @@
1
- import type { Octokit } from '@octokit/rest';
2
1
  import type { SanitizedBranchName } from '../paths/types.js';
3
2
  import type { Task, TaskQueueLogger } from '../task-queue/cms-task-queue.js';
4
3
  import type { WorkerStatusReport } from '../types.js';
4
+ import type { GitHubGateway } from './github-gateway.js';
5
5
  /**
6
6
  * The slice of {@link import('./cms-worker.js').CmsWorker} that its extracted
7
7
  * clusters (task-runner.ts, git-sync.ts, rebase.ts, history-rewrite.ts) may
@@ -13,19 +13,16 @@ import type { WorkerStatusReport } from '../types.js';
13
13
  * back onto the live instance and never snapshotted, and `CmsWorker.ctx()`
14
14
  * builds a fresh context per call. That is load-bearing, not stylistic. The
15
15
  * `cms-worker*.test.ts` files drive the class by reaching through the instance:
16
- * they REPLACE `buildGitHubUrl` (aiming pushes at a local fixture repo rather
17
- * than github.com), `executeTask` and `pushBranchToGitHub`, ASSIGN a mock over
18
- * the `octokit` field, set `running` directly, and SUBCLASS to override the two
19
- * rebase test hooks. A context that captured any of those at construction would
20
- * hand the extracted code the pre-test value — which for `buildGitHubUrl` means
21
- * a test's push going to github.com for real. Functions (`ctx.octokit()`) make
22
- * the late binding visible at every call site, which a getter would hide.
16
+ * they INSTALL a GitHub gateway aimed at a local fixture repository (and an
17
+ * Octokit stub) with `useLocalGitHubGateway` (test-utils/worker-gateway.ts),
18
+ * REPLACE `executeTask` and `pushBranchToGitHub`, set `running` directly, and
19
+ * SUBCLASS to override the two rebase test hooks. A context that captured any
20
+ * of those at construction would hand the extracted code the pre-test value --
21
+ * which for the gateway means a test's push going to github.com for real.
22
+ * Functions (`ctx.github()`) make the late binding visible at every call site,
23
+ * which a getter would hide.
23
24
  */
24
25
  export interface WorkerContext {
25
- /** GitHub owner, e.g. 'safeinsights'. */
26
- readonly githubOwner: string;
27
- /** GitHub repo name. */
28
- readonly githubRepo: string;
29
26
  /**
30
27
  * The base branch's RAW git ref name. Git refs (fetch/rev-list/merge against
31
28
  * it) must use this; filesystem paths must use `sanitizedBaseBranch`.
@@ -49,6 +46,8 @@ export interface WorkerContext {
49
46
  readonly contentBranchesPath: string;
50
47
  /** Content root directory name relative to repo root (default: 'content'). */
51
48
  readonly contentRoot: string;
49
+ /** Longest the schema gate holds the base branch before advancing anyway (worker/schema-gate.ts). */
50
+ readonly schemaHoldMaxMs: number;
52
51
  /** Per-task timeout in ms; also simple-git's inactivity block timeout. */
53
52
  readonly taskTimeoutMs: number;
54
53
  /** Max tasks to process per `processTaskQueue` cycle. */
@@ -57,30 +56,11 @@ export interface WorkerContext {
57
56
  readonly maxRetries: number;
58
57
  /** Task-queue debug logger. */
59
58
  readonly log: TaskQueueLogger;
60
- /** The worker's Octokit client, read at call time (tests replace it). */
61
- octokit(): Octokit;
62
59
  /**
63
- * The tokenized GitHub clone URL, resolved at call time (tests replace this
64
- * method to point at a local fixture repo). Async because under GitHub App
65
- * auth the credential is minted on demand and lasts about an hour (see
66
- * worker/github-auth.ts); the token path resolves immediately.
67
- *
68
- * A caller that needs the URL more than once resolves it ONCE into a local --
69
- * see pushBranchToGitHub, where a second resolution inside the stale-lease
70
- * catch would replace the very error being classified. Anything derived from
71
- * it can embed the bot token, so a message reaching worker-status.json,
72
- * branch.json or a task file goes through `redactCredentials` first.
60
+ * The worker's GitHub gateway (worker/github-gateway.ts), read at call time:
61
+ * every use of the GitHub credential and of Octokit goes through it.
73
62
  */
74
- buildGitHubUrl(): Promise<string>;
75
- /**
76
- * Re-read the GitHub credential because an operation that used it just
77
- * failed, read at call time. Best-effort and NEVER throws: a failed read, or
78
- * one that does not settle within `taskTimeoutMs`, is logged and swallowed,
79
- * because every caller is already reporting the failure that matters. The
80
- * next `buildGitHubUrl()`/`octokit()` sees any rotated value. See
81
- * `CmsWorker.refreshGitHubCredential`.
82
- */
83
- refreshGitHubCredential(): Promise<void>;
63
+ github(): GitHubGateway;
84
64
  /**
85
65
  * Workspace directory for a branch named by its GIT REF name — the form task
86
66
  * payloads carry. Sanitizes; `feature/x` lives in `feature-x`.
@@ -98,15 +78,34 @@ export interface WorkerContext {
98
78
  * Push a branch from remote.git to GitHub, read at call time. Routed through
99
79
  * the instance for the same reason as `executeTask`: cms-worker.test.ts
100
80
  * replaces it with a spy and asserts the spy was NOT called on the
101
- * base-branch-refusal path.
81
+ * base-branch-refusal path. `signal` kills the push's git process when it
82
+ * aborts (simple-git's `abort` option).
102
83
  */
103
- pushBranchToGitHub(branch: string): Promise<void>;
104
- /** Whether the worker is still running; both poll loops bail when false. */
84
+ pushBranchToGitHub(branch: string, signal?: AbortSignal): Promise<void>;
85
+ /** Whether the worker is running; both poll loops bail when false. */
105
86
  isRunning(): boolean;
87
+ /**
88
+ * Whether `stop()` has been called. Every loop checks it at its boundaries
89
+ * (before a claim, a sync stage, a branch rebase), never mid-step. Distinct
90
+ * from `!isRunning()`, which is also true of a worker never started, as the
91
+ * test entry points drive it.
92
+ */
93
+ isDraining(): boolean;
94
+ /**
95
+ * Aborts when a draining `stop()` reaches its deadline: in-flight work that
96
+ * observes it is cut off so the worker can exit. See `CmsWorker.stop`.
97
+ */
98
+ shutdownSignal(): AbortSignal;
106
99
  /** The worker's self-reported status object, lazily initialized. */
107
100
  ensureStatusReport(): WorkerStatusReport;
108
101
  /** This deployment's own settings branch name. Throws on an invalid name. */
109
102
  ensureSettingsBranch(): string;
103
+ /**
104
+ * What this worker's tracked-branch warnings have said, by key (git-sync.ts's `warnOnce`): a
105
+ * diverged branch's tips and reason, an unchecked orphan's error. Held per instance, so a
106
+ * restarted worker warns afresh.
107
+ */
108
+ warnedDivergences(): Map<string, string>;
110
109
  /**
111
110
  * Test hook: fires when the rebase has reported conflicted files and is about
112
111
  * to `checkout --theirs` them. No-op in production.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "//": "@codemirror/language, @lezer/highlight: workaround — @mdxeditor/editor uses cm6-theme-basic-light which peer-requires these but mdxeditor doesn't declare them as dependencies",
3
3
  "name": "canopycms",
4
- "version": "0.0.68-int.98",
4
+ "version": "0.1.0",
5
5
  "description": "CanopyCMS core package: schema-driven content, branch-aware editing, and editor UI for Next.js.",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -11,6 +11,14 @@
11
11
  },
12
12
  "private": false,
13
13
  "type": "module",
14
+ "sideEffects": [
15
+ "./src/cli/cli.ts",
16
+ "./dist/cli/cli.js",
17
+ "./src/editor/theme.tsx",
18
+ "./dist/editor/theme.js",
19
+ "./src/test-utils/console-spy.ts",
20
+ "./src/test-utils/quiet-provision-log.ts"
21
+ ],
14
22
  "main": "dist/index.js",
15
23
  "types": "dist/index.d.ts",
16
24
  "bin": {
@@ -27,6 +35,11 @@
27
35
  "import": "./dist/client.js",
28
36
  "require": "./dist/client.js"
29
37
  },
38
+ "./preview": {
39
+ "types": "./dist/preview.d.ts",
40
+ "import": "./dist/preview.js",
41
+ "require": "./dist/preview.js"
42
+ },
30
43
  "./server": {
31
44
  "types": "./dist/server.d.ts",
32
45
  "import": "./dist/server.js",
@@ -79,14 +92,16 @@
79
92
  }
80
93
  },
81
94
  "files": [
82
- "dist"
95
+ "dist",
96
+ "CHANGELOG.md"
83
97
  ],
84
98
  "engines": {
85
99
  "node": ">=22.12.0"
86
100
  },
87
101
  "dependencies": {
88
- "@aws-sdk/client-s3": "^3.600.0",
102
+ "@aws-sdk/client-s3": "^3.1092.0",
89
103
  "@aws-sdk/s3-presigned-post": "^3.600.0",
104
+ "@aws-sdk/s3-request-presigner": "^3.600.0",
90
105
  "@clack/prompts": "^1.1.0",
91
106
  "@codemirror/language": "^6.0.0",
92
107
  "@dnd-kit/core": "^6.3.1",
@@ -96,11 +111,12 @@
96
111
  "@lezer/highlight": "^1.0.0",
97
112
  "@mantine/colors-generator": "^7.14.2",
98
113
  "@mantine/core": "^7.14.2",
114
+ "@mantine/dates": "7.17.8",
99
115
  "@mantine/dropzone": "7.17.8",
100
116
  "@mantine/hooks": "^7.14.2",
101
117
  "@mantine/modals": "^7.14.2",
102
118
  "@mantine/notifications": "^7.14.2",
103
- "@mdxeditor/editor": "^3.52.4",
119
+ "@mdxeditor/editor": "^4.3.2",
104
120
  "@octokit/auth-token": "^4.0.0",
105
121
  "@octokit/plugin-throttling": "^8.2.0",
106
122
  "@octokit/rest": "^20.0.2",
@@ -108,18 +124,28 @@
108
124
  "chokidar": "^4.0.3",
109
125
  "chroma-js": "^3.2.0",
110
126
  "content-disposition": "^2.0.1",
127
+ "dataloader": "^2.2.3",
128
+ "dayjs": "1.11.21",
111
129
  "fast-deep-equal": "^3.1.3",
112
130
  "file-type": "^21.3.2",
113
131
  "gray-matter": "^4.0.3",
114
132
  "image-size": "^2.0.2",
115
133
  "jiti": "^2.6.1",
134
+ "jsonc-parser": "^3.3.1",
135
+ "lru-cache": "^10.4.3",
136
+ "mdast-util-from-markdown": "^2.0.3",
137
+ "mdast-util-gfm": "^3.1.0",
138
+ "mdast-util-mdx": "^3.0.0",
139
+ "micromark-extension-gfm": "^3.0.0",
140
+ "micromark-extension-mdxjs": "^3.0.0",
116
141
  "minimatch": "^9.0.7",
117
142
  "minimist": "^1.2.8",
118
143
  "pathe": "^1.1.2",
119
144
  "picocolors": "^1.1.1",
120
145
  "proper-lockfile": "^4.1.2",
121
146
  "react-easy-crop": "^6.2.2",
122
- "react-split-pane": "^0.1.92",
147
+ "react-remove-scroll": "^2.7.2",
148
+ "react-resizable-panels": "4.14.1",
123
149
  "sanitize-html": "^2.17.5",
124
150
  "sharp": "^0.35.3",
125
151
  "short-uuid": "^6.0.3",
@@ -133,8 +159,8 @@
133
159
  "react-dom": "^18.0.0 || ^19.0.0"
134
160
  },
135
161
  "devDependencies": {
136
- "@smithy/util-stream": "^3.0.0 || ^4.0.0",
137
162
  "@playwright/test": "^1.57.0",
163
+ "@smithy/util-stream": "^3.0.0 || ^4.0.0",
138
164
  "@storybook/addon-essentials": "^8.1.11",
139
165
  "@storybook/react": "^8.1.11",
140
166
  "@storybook/react-vite": "^8.1.11",
@@ -147,9 +173,9 @@
147
173
  "@types/react": "^18.3.12",
148
174
  "@types/react-dom": "^18.3.1",
149
175
  "@types/sanitize-html": "^2.16.1",
150
- "aws-sdk-client-mock": "^4.0.0",
151
176
  "@vitejs/plugin-react": "^5.1.0",
152
177
  "autoprefixer": "^10.4.20",
178
+ "aws-sdk-client-mock": "^4.0.0",
153
179
  "esbuild": "^0.25.0",
154
180
  "jsdom": "^24.1.3",
155
181
  "postcss": "^8.5.10",
@@ -157,6 +183,7 @@
157
183
  "react-dom": "^18.3.1",
158
184
  "storybook": "^8.6.17",
159
185
  "tsx": "^4.19.0",
186
+ "typescript": "^5.6.3",
160
187
  "vite": "^6.4.2",
161
188
  "vitest": "^4.1.0"
162
189
  },
@@ -168,6 +195,7 @@
168
195
  "test": "vitest run",
169
196
  "typecheck": "tsc --noEmit",
170
197
  "generate:client": "npx tsx scripts/generate-client.ts",
198
+ "generate:aws-example": "tsx scripts/generate-aws-example.ts",
171
199
  "storybook": "storybook dev -p 6006 -c .storybook",
172
200
  "storybook:build": "storybook build -c .storybook"
173
201
  }
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- export type PaneLayout = 'side' | 'stacked';
3
- export interface EditorPanesProps {
4
- layout?: PaneLayout;
5
- onLayoutChange?: (layout: PaneLayout) => void;
6
- preview?: React.ReactNode;
7
- form?: React.ReactNode;
8
- }
9
- export declare const EditorPanes: React.FC<EditorPanesProps>;
10
- export default EditorPanes;
@@ -1,98 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useMemo, useRef, useState, useEffect } from 'react';
4
- import { Box, Paper, rem } from '@mantine/core';
5
- import SplitPane from 'react-split-pane';
6
- export const EditorPanes = ({ layout: layoutProp = 'side', onLayoutChange: _, preview, form, }) => {
7
- const TypedSplitPane = SplitPane;
8
- const splitContainerRef = useRef(null);
9
- const [layout, setLayout] = useState(layoutProp);
10
- const [sidePrimarySize, setSidePrimarySize] = useState(52);
11
- const [stackedPrimarySize, setStackedPrimarySize] = useState(58);
12
- // Turn off iframe/pane pointer events while dragging so the gutter keeps receiving mouse events.
13
- const [isDragging, setIsDragging] = useState(false);
14
- useEffect(() => {
15
- setLayout(layoutProp);
16
- }, [layoutProp]);
17
- const direction = layout === 'side' ? 'vertical' : 'horizontal';
18
- const primarySize = useMemo(() => (layout === 'side' ? sidePrimarySize : stackedPrimarySize), [layout, sidePrimarySize, stackedPrimarySize]);
19
- const resizerStyle = useMemo(() => ({
20
- background: layout === 'side'
21
- ? 'linear-gradient(90deg, var(--mantine-color-gray-0), var(--mantine-color-gray-1))'
22
- : 'linear-gradient(180deg, var(--mantine-color-gray-0), var(--mantine-color-gray-1))',
23
- boxShadow: isDragging
24
- ? 'inset 0 0 0 1px var(--mantine-color-brand-4), 0 0 0 1px var(--mantine-color-brand-1)'
25
- : 'inset 0 0 0 1px var(--mantine-color-gray-3)',
26
- cursor: layout === 'side' ? 'col-resize' : 'row-resize',
27
- width: layout === 'side' ? rem(12) : '100%',
28
- height: layout === 'side' ? '100%' : rem(12),
29
- margin: layout === 'side' ? `0 -${rem(2)}` : `-${rem(2)} 0`,
30
- borderRadius: layout === 'side' ? rem(0) : rem(0),
31
- transition: 'box-shadow 120ms ease, background 120ms ease',
32
- flexShrink: 0,
33
- }), [isDragging, layout]);
34
- const updateSizeFromPixels = (nextPixels, nextLayout) => {
35
- const total = nextLayout === 'side'
36
- ? (splitContainerRef.current?.clientWidth ?? 0)
37
- : (splitContainerRef.current?.clientHeight ?? 0);
38
- // Guard: ensure valid dimensions before calculating
39
- if (!total || total <= 0 || nextPixels <= 0)
40
- return;
41
- const percent = Math.min(85, Math.max(15, (nextPixels / total) * 100));
42
- if (nextLayout === 'side') {
43
- setSidePrimarySize(percent);
44
- }
45
- else {
46
- setStackedPrimarySize(percent);
47
- }
48
- };
49
- return (_jsx(Box, { h: "100%", style: { minHeight: '70vh' }, children: _jsx(Paper, { radius: 0, shadow: "xs", withBorder: true, style: {
50
- display: 'flex',
51
- height: '100%',
52
- minHeight: 0,
53
- overflow: 'hidden',
54
- flexDirection: layout === 'side' ? 'row' : 'column',
55
- width: '100%',
56
- }, children: _jsx(Box, { ref: splitContainerRef, style: { display: 'flex', flex: 1, minHeight: 0, width: '100%' }, children: _jsxs(TypedSplitPane, { split: direction, minSize: 120, size: `${primarySize}%`, allowResize: true, onChange: (next) => updateSizeFromPixels(next, layout), onDragStarted: () => setIsDragging(true), onDragFinished: (next) => {
57
- updateSizeFromPixels(next, layout);
58
- setIsDragging(false);
59
- }, style: {
60
- position: 'relative',
61
- minHeight: 0,
62
- width: '100%',
63
- height: '100%',
64
- userSelect: isDragging ? 'none' : undefined,
65
- }, paneStyle: {
66
- minWidth: 0,
67
- minHeight: 0,
68
- display: 'flex',
69
- overflow: 'auto',
70
- }, resizerStyle: resizerStyle, children: [_jsx(Box, { "data-testid": "preview-pane", style: {
71
- minWidth: 0,
72
- minHeight: 0,
73
- overflow: 'auto',
74
- flex: 1,
75
- pointerEvents: isDragging ? 'none' : undefined,
76
- }, children: _jsx(Box, { h: "100%", w: "100%", style: {
77
- minHeight: '100%',
78
- minWidth: 0,
79
- overflow: 'auto',
80
- flex: 1,
81
- pointerEvents: isDragging ? 'none' : undefined,
82
- }, children: preview ?? 'Preview' }) }), _jsx(Box, { "data-testid": "form-pane", style: {
83
- minWidth: 0,
84
- minHeight: 0,
85
- overflow: 'auto',
86
- flex: 1,
87
- pointerEvents: isDragging ? 'none' : undefined,
88
- }, children: _jsx(Box, { h: "100%", w: "100%", style: {
89
- padding: 20,
90
- minHeight: '100%',
91
- minWidth: 0,
92
- overflow: 'auto',
93
- flex: 1,
94
- pointerEvents: isDragging ? 'none' : undefined,
95
- backgroundColor: 'var(--mantine-color-gray-1)',
96
- }, children: form ?? 'Form' }) })] }) }) }) }));
97
- };
98
- export default EditorPanes;
@@ -1,11 +0,0 @@
1
- export interface EditorFooterProps {
2
- /**
3
- * Optional custom footer content.
4
- */
5
- children?: React.ReactNode;
6
- }
7
- /**
8
- * Footer component for the Editor.
9
- * Displays static links (Terms, Privacy) and copyright notice.
10
- */
11
- export declare function EditorFooter({ children }: EditorFooterProps): import("react/jsx-runtime").JSX.Element;
@@ -1,9 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Group, Paper, Text } from '@mantine/core';
3
- /**
4
- * Footer component for the Editor.
5
- * Displays static links (Terms, Privacy) and copyright notice.
6
- */
7
- export function EditorFooter({ children }) {
8
- return (_jsx(Paper, { withBorder: true, radius: 0, shadow: "sm", px: "md", py: "xs", style: { position: 'fixed', left: 0, right: 0, bottom: 0, zIndex: 40 }, children: children ?? (_jsxs(Group, { gap: "md", justify: "center", children: [_jsx(Text, { size: "xs", c: "dimmed", children: "Terms" }), _jsx(Text, { size: "xs", c: "dimmed", children: "Privacy" }), _jsx(Text, { size: "xs", c: "dimmed", children: "\u00A9 CanopyCMS" })] })) }));
9
- }
@@ -1,67 +0,0 @@
1
- import type { PaneLayout } from '../EditorPanes.js';
2
- export interface EditorSidebarProps {
3
- /**
4
- * Current layout mode (side or stacked).
5
- */
6
- layout: PaneLayout;
7
- /**
8
- * Whether field highlighting is enabled.
9
- */
10
- highlightEnabled: boolean;
11
- /**
12
- * Width of the sidebar in pixels.
13
- */
14
- sidebarWidth: number;
15
- /**
16
- * Height of the header in pixels (for positioning).
17
- */
18
- headerHeight: number;
19
- /**
20
- * Height of the footer in pixels (for positioning).
21
- */
22
- footerHeight: number;
23
- /**
24
- * Callback when layout changes.
25
- */
26
- onLayoutChange: (layout: PaneLayout) => void;
27
- /**
28
- * Callback when highlight toggle is clicked.
29
- */
30
- onHighlightToggle: () => void;
31
- /**
32
- * Callback when permission manager should be opened.
33
- */
34
- onPermissionManagerOpen: () => void;
35
- /**
36
- * Callback when group manager should be opened.
37
- */
38
- onGroupManagerOpen: () => void;
39
- /**
40
- * Callback when the media library should be opened.
41
- */
42
- onMediaLibraryOpen: () => void;
43
- /**
44
- * Callback when the System Health panel should be opened. Admin-only:
45
- * the "System health" menu item only renders when this is provided --
46
- * the caller (Editor.tsx) is responsible for the isAdmin() gate.
47
- */
48
- onSystemHealthOpen?: () => void;
49
- /**
50
- * Custom account component to render (e.g., Clerk's UserButton).
51
- * If provided, replaces the default account button.
52
- */
53
- AccountComponent?: React.ComponentType;
54
- /**
55
- * Callback when account button is clicked (if no AccountComponent provided).
56
- */
57
- onAccountClick?: () => void;
58
- /**
59
- * Callback when logout button is clicked.
60
- */
61
- onLogoutClick?: () => void;
62
- }
63
- /**
64
- * Sidebar component for the Editor.
65
- * Contains layout toggle, highlight toggle, settings menu, account button, and logout button.
66
- */
67
- export declare function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHeight, footerHeight, onLayoutChange, onHighlightToggle, onPermissionManagerOpen, onGroupManagerOpen, onMediaLibraryOpen, onSystemHealthOpen, AccountComponent, onAccountClick, onLogoutClick, }: EditorSidebarProps): import("react/jsx-runtime").JSX.Element;
@@ -1,22 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { ActionIcon, Menu, Paper, Stack } from '@mantine/core';
3
- import { IconUserCircle, IconLogout, IconPhoto, IconSettings, IconLayoutColumns, IconLayoutRows, IconSquareDashed, IconActivity, } from '@tabler/icons-react';
4
- /**
5
- * Sidebar component for the Editor.
6
- * Contains layout toggle, highlight toggle, settings menu, account button, and logout button.
7
- */
8
- export function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHeight, footerHeight, onLayoutChange, onHighlightToggle, onPermissionManagerOpen, onGroupManagerOpen, onMediaLibraryOpen, onSystemHealthOpen, AccountComponent, onAccountClick, onLogoutClick, }) {
9
- return (_jsxs(Paper, { withBorder: true, shadow: "sm", radius: 0, style: {
10
- position: 'fixed',
11
- top: headerHeight,
12
- bottom: footerHeight,
13
- right: 0,
14
- width: sidebarWidth,
15
- display: 'flex',
16
- flexDirection: 'column',
17
- justifyContent: 'space-between',
18
- alignItems: 'center',
19
- padding: '10px 6px',
20
- gap: 8,
21
- }, children: [_jsxs(Stack, { gap: "sm", align: "center", style: { width: '100%', paddingTop: 6 }, children: [_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Toggle layout", onClick: () => onLayoutChange(layout === 'side' ? 'stacked' : 'side'), children: layout === 'side' ? _jsx(IconLayoutRows, { size: 18 }) : _jsx(IconLayoutColumns, { size: 18 }) }), _jsx(ActionIcon, { variant: highlightEnabled ? 'filled' : 'subtle', color: highlightEnabled ? 'brand' : 'gray', size: "lg", radius: "md", "aria-pressed": highlightEnabled, "aria-label": "Toggle highlights", onClick: onHighlightToggle, children: _jsx(IconSquareDashed, { size: 18 }) })] }), _jsxs(Stack, { gap: "xs", align: "center", children: [_jsxs(Menu, { shadow: "md", width: 200, position: "left", children: [_jsx(Menu.Target, { children: _jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Settings", children: _jsx(IconSettings, { size: 18 }) }) }), _jsxs(Menu.Dropdown, { children: [_jsx(Menu.Label, { children: "Settings" }), _jsx(Menu.Item, { onClick: onPermissionManagerOpen, children: "Manage Permissions" }), _jsx(Menu.Item, { onClick: onGroupManagerOpen, children: "Manage Groups" }), _jsx(Menu.Item, { leftSection: _jsx(IconPhoto, { size: 14 }), onClick: onMediaLibraryOpen, children: "Media library" }), onSystemHealthOpen && (_jsx(Menu.Item, { leftSection: _jsx(IconActivity, { size: 14 }), onClick: onSystemHealthOpen, children: "System health" }))] })] }), AccountComponent ? (_jsx(AccountComponent, {})) : (_jsxs(_Fragment, { children: [onAccountClick && (_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Account", onClick: onAccountClick, children: _jsx(IconUserCircle, { size: 18 }) })), onLogoutClick && (_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Sign out", onClick: onLogoutClick, children: _jsx(IconLogout, { size: 18 }) }))] }))] })] }));
22
- }