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
@@ -116,6 +116,45 @@ export type RestrictedReference = Simplify<ResolvedReferenceMeta & {
116
116
  }>;
117
117
  /** Assemble a {@link RestrictedReference}. Takes no target data, so none can leak into it. */
118
118
  export declare function buildRestrictedReference(meta: ResolvedReferenceMeta, title: string): RestrictedReference;
119
+ /**
120
+ * What a reference resolves to when its id names no readable entry: a deleted target, an id a
121
+ * merge or hand edit left behind, or one naming a collection. It carries the id and nothing else,
122
+ * so a save of the referring entry writes the id back rather than erasing it, and a renderer can
123
+ * say which entry is missing. The production build fails on one (`static/index.ts`,
124
+ * `assertNoDanglingReferences`).
125
+ */
126
+ export type MissingReference = {
127
+ id: string;
128
+ unavailable: true;
129
+ reason: 'missing';
130
+ };
131
+ /** Assemble a {@link MissingReference}. */
132
+ export declare function buildMissingReference(id: string): MissingReference;
133
+ /**
134
+ * Every reference value that is not the target's data. Narrow on `unavailable`, then on `reason`:
135
+ * only a `'restricted'` one carries a title and URL.
136
+ */
137
+ export type UnavailableReference = RestrictedReference | MissingReference;
138
+ /**
139
+ * The resolved-target member of a reference field's value type `T`: the object members that
140
+ * are not marked `unavailable`. When `T` has none (`unknown`, or `string | null` for a reference
141
+ * without `resolvedSchema`), any resolved reference.
142
+ */
143
+ export type ResolvedReferenceOf<T> = unknown extends T ? AnyResolvedReference : [Exclude<Extract<T, object>, {
144
+ unavailable: true;
145
+ }>] extends [never] ? AnyResolvedReference : Exclude<Extract<T, object>, {
146
+ unavailable: true;
147
+ }>;
148
+ type AnyResolvedReference = Record<string, unknown> & ResolvedReferenceMeta;
149
+ /**
150
+ * Whether a reference field's value is its resolved target, narrowing it to that target's type.
151
+ *
152
+ * True for a record carrying a string `id` and not marked `unavailable`. False for everything
153
+ * else a reference can hold: `null` or `undefined` (empty, or in live preview, still resolving),
154
+ * a bare id string (a reference that was not resolved), and a reference marked `unavailable` (a
155
+ * target the reader may not see, or one that no longer exists).
156
+ */
157
+ export declare function isResolvedReference<T>(value: T): value is T & ResolvedReferenceOf<T>;
119
158
  /**
120
159
  * Recursively flatten inline groups (type: 'group') out of a field tuple: they contribute
121
160
  * no key to the content shape, so their children merge into the parent level and
@@ -171,9 +210,16 @@ type SelectOptionValue<O> = O extends {
171
210
  type SelectValue<F extends InferableField> = F extends {
172
211
  options: infer O extends readonly unknown[];
173
212
  } ? [O[number]] extends [never] ? string : SelectOptionValue<O[number]> : string;
213
+ /**
214
+ * The key a list item or block carries (`ITEM_KEY` in item-keys.ts), spelled out as `ImageValue`
215
+ * is. Every canopy read returns it; optional so data built by hand, such as a write, needn't.
216
+ */
217
+ type ItemKeyed = {
218
+ _key?: string;
219
+ };
174
220
  type ObjectValue<F extends InferableField & {
175
221
  fields: readonly InferableField[];
176
- }> = F['list'] extends true ? Array<InferContentShape<F['fields']>> : InferContentShape<F['fields']>;
222
+ }> = F['list'] extends true ? Array<InferContentShape<F['fields']> & ItemKeyed> : InferContentShape<F['fields']>;
177
223
  /**
178
224
  * Distributes over each member of a block-templates union to produce a discriminated union. The
179
225
  * bare type parameter `T` is what makes the conditional distribute: `{ name: 'hero'; ... } |
@@ -185,7 +231,7 @@ type DistributeBlockTemplate<T> = T extends {
185
231
  } ? {
186
232
  template: N & string;
187
233
  value: InferContentShape<Extract<Fields, readonly InferableField[]>>;
188
- } : never;
234
+ } & ItemKeyed : never;
189
235
  type BlockValue<F extends InferableField & {
190
236
  templates: ReadonlyArray<{
191
237
  name: string;
@@ -228,7 +274,7 @@ type FieldValue<F extends InferableField> = F extends {
228
274
  resolvedSchema: infer S;
229
275
  } ? ScalarValue<F, (InferContentShape<Extract<S, readonly InferableField[]>> & ResolvedReferenceMeta & {
230
276
  unavailable?: undefined;
231
- }) | RestrictedReference | null> : F extends {
277
+ }) | UnavailableReference | null> : F extends {
232
278
  type: 'reference';
233
279
  } ? ScalarValue<F, string | null> : F extends {
234
280
  type: 'image';
@@ -54,6 +54,24 @@ export function buildRestrictedReference(meta, title) {
54
54
  reason: 'restricted',
55
55
  };
56
56
  }
57
+ /** Assemble a {@link MissingReference}. */
58
+ export function buildMissingReference(id) {
59
+ return { id, unavailable: true, reason: 'missing' };
60
+ }
61
+ /**
62
+ * Whether a reference field's value is its resolved target, narrowing it to that target's type.
63
+ *
64
+ * True for a record carrying a string `id` and not marked `unavailable`. False for everything
65
+ * else a reference can hold: `null` or `undefined` (empty, or in live preview, still resolving),
66
+ * a bare id string (a reference that was not resolved), and a reference marked `unavailable` (a
67
+ * target the reader may not see, or one that no longer exists).
68
+ */
69
+ export function isResolvedReference(value) {
70
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
71
+ return false;
72
+ const record = value;
73
+ return typeof record.id === 'string' && record[RESTRICTED_REFERENCE_MARKER] !== true;
74
+ }
57
75
  /** Define an entry schema's field array with literal inference, without sprinkling `as const`. */
58
76
  export const defineEntrySchema = (fields) => fields;
59
77
  /**
@@ -1,7 +1,79 @@
1
- import { type SimpleGitOptions, type StatusResult } from 'simple-git';
1
+ import { type SimpleGit, type SimpleGitOptions, type StatusResult } from 'simple-git';
2
+ import type { CanopyConfig } from './config/index.js';
2
3
  import type { OperatingMode } from './operating-mode/index.js';
4
+ import type { WorkerStartupFailure } from './task-queue/worker-status.js';
5
+ import type { ProvisionLog } from './utils/provision-log.js';
3
6
  export declare function gitChildEnv(overrides: Record<string, string>): Record<string, string>;
4
7
  export declare function gitNetworkChildEnv(): Record<string, string>;
8
+ /**
9
+ * Settings written into every bare `remote.git` CanopyCMS creates: the worker's (prod) and the
10
+ * simulated remote (dev). A push runs `receive-pack` with remote.git's own config and none of the
11
+ * pusher's: git unsets `GIT_CONFIG_PARAMETERS` before spawning it for a local-path push. Unset, a
12
+ * push starts auto-housekeeping there (detached, or inside a Lambda that is frozen mid-run) that
13
+ * repacks while another process clones, and pushes under the default `unpackLimit` (100) leave
14
+ * loose objects that every local clone copies one NFS round trip at a time.
15
+ *
16
+ * Never an `extensions.*` key: once a repo is at `repositoryformatversion` 1, a git that does not
17
+ * know the key refuses it, and Lambda runs git 2.39.
18
+ * @internal Exported for tests.
19
+ */
20
+ export declare const REMOTE_GIT_CONFIG: ReadonlyArray<readonly [key: string, value: string]>;
21
+ /**
22
+ * Write each of {@link REMOTE_GIT_CONFIG} into the bare repo `gitDir` only where it differs. `git`
23
+ * is how the worker passes the instance it runs every shared repository with.
24
+ */
25
+ export declare function ensureRemoteGitConfig(gitDir: string, git?: SimpleGit): Promise<void>;
26
+ interface BareRemoteObjectCounts {
27
+ loose: number;
28
+ packs: number;
29
+ }
30
+ export type BareRemoteRepackResult = {
31
+ repacked: false;
32
+ before: BareRemoteObjectCounts;
33
+ } | {
34
+ repacked: true;
35
+ before: BareRemoteObjectCounts;
36
+ after: BareRemoteObjectCounts;
37
+ ms: number;
38
+ };
39
+ /**
40
+ * Repack the bare repo `gitDir` once it holds more than {@link REMOTE_GIT_MAX_LOOSE_OBJECTS}
41
+ * loose objects or {@link REMOTE_GIT_MAX_PACKS} packs, then pack its refs. Under
42
+ * {@link REMOTE_GIT_CONFIG} every push adds a pack, and nothing else ever compacts them.
43
+ *
44
+ * Safe beside concurrent pushes and clones, which is why it is `--cruft` with no expiry:
45
+ * unreachable objects move into a cruft pack rather than being dropped, so a push that read an
46
+ * old object before the repack still finds it, and a repack only deletes packs it listed when it
47
+ * began. A clone that hardlinked a pack keeps that inode when the repack unlinks the remote's
48
+ * name for it, and packs are never modified in place. `repack -d` also removes the loose objects
49
+ * it packed and their emptied fan-out directories. `git` as for `ensureRemoteGitConfig`.
50
+ */
51
+ export declare function repackBareRemoteIfNeeded(gitDir: string, git?: SimpleGit): Promise<BareRemoteRepackResult>;
52
+ /**
53
+ * simple-git reads a git that exited by signal (exit code null, often with no stderr) as success,
54
+ * so a clone or checkout the OOM killer stopped would pass for complete. Given as `errors` to a
55
+ * GitManager's own instance, to `cloneRepo`'s, and to the worker's ref probes of an existing
56
+ * remote.git (worker/cms-worker.ts); its static helpers and the bare-remote functions do not pass
57
+ * it yet (safeinsights/canopycms#845).
58
+ */
59
+ export declare function failOnSignalExit(error: Buffer | Error | undefined, result: {
60
+ exitCode: number;
61
+ }): Buffer | Error | undefined;
62
+ /**
63
+ * Config every workspace clone writes into its own `.git/config`: the managed
64
+ * marker that ensureRemote's guard checks, and a fallback author for internal
65
+ * commits such as the orphan settings init (ensureAuthor() sets the real one
66
+ * before user-facing commits).
67
+ */
68
+ export declare function managedWorkspaceConfig(gitBotAuthorName: string, gitBotAuthorEmail: string): Record<string, string>;
69
+ export interface CloneRepoOptions {
70
+ /** The clone's remote name; git's default is `origin`. */
71
+ remoteName?: string;
72
+ /** Leave the working tree unpopulated for the caller to check out. */
73
+ noCheckout?: boolean;
74
+ /** Written into the new repo's own config by the clone (`git clone -c`). */
75
+ config?: Record<string, string>;
76
+ }
5
77
  /**
6
78
  * Remote-tracking namespace that `syncGit()`'s GitHub fetch lands refs in
7
79
  * (`+refs/heads/*:${GITHUB_TRACKING_REF_PREFIX}*`), instead of writing
@@ -17,8 +89,8 @@ export declare function gitNetworkChildEnv(): Record<string, string>;
17
89
  * next push no-ops and the editor's commit never arrives while the branch still
18
90
  * reports `synced`. Confining `+`/`--prune` to this namespace keeps them off
19
91
  * those local heads; `reconcileTrackedBranches()` (worker/git-sync.ts) is what
20
- * subsequently, and non-destructively, brings `refs/heads/*` toward what is
21
- * tracked here.
92
+ * then brings `refs/heads/*` toward GitHub's branches, never moving a head it
93
+ * finds editor work in.
22
94
  */
23
95
  export declare const GITHUB_TRACKING_REF_PREFIX = "refs/remotes/github/";
24
96
  /**
@@ -78,7 +150,13 @@ export declare class GitRemoteRefMissingError extends Error {
78
150
  */
79
151
  export declare class RemoteNotReadyError extends Error {
80
152
  readonly expectedRemotePath: string;
81
- constructor(expectedRemotePath: string);
153
+ readonly workerStartupFailure?: WorkerStartupFailure | undefined;
154
+ /**
155
+ * @param workerStartupFailure - The startup failure the worker recorded, if it recorded one;
156
+ * a current one means the worker is not coming without an admin's fix.
157
+ * @param configured - `expectedRemotePath` is a configured local remote, not the auto-detected one.
158
+ */
159
+ constructor(expectedRemotePath: string, workerStartupFailure?: WorkerStartupFailure | undefined, configured?: boolean);
82
160
  }
83
161
  export interface ResolveRemoteUrlOptions {
84
162
  mode: OperatingMode;
@@ -93,6 +171,10 @@ export interface ResolveRemoteUrlOptions {
93
171
  */
94
172
  allowNetworkRemoteInProd?: boolean;
95
173
  }
174
+ /** Where prod reads an unset base branch from: the remote a workspace would clone. */
175
+ type BaseBranchRemoteOptions = Pick<CanopyConfig, 'defaultRemoteUrl' | 'sourceRoot' | 'allowNetworkRemoteInProd'> & {
176
+ remoteUrl?: string;
177
+ };
96
178
  export interface InitializeWorkspaceOptions {
97
179
  workspacePath: string;
98
180
  branchName: string;
@@ -119,6 +201,8 @@ export interface InitializeWorkspaceOptions {
119
201
  * only; settings workspaces commit by explicit path and don't need it.
120
202
  */
121
203
  gitExcludePattern?: string;
204
+ /** Times each provisioning step; no step lines are printed without one. */
205
+ provisionLog?: ProvisionLog;
122
206
  }
123
207
  export declare class GitManager {
124
208
  private readonly git;
@@ -127,7 +211,13 @@ export declare class GitManager {
127
211
  private readonly remote;
128
212
  private readonly skipIndexMarker;
129
213
  constructor(options: GitManagerOptions, gitOptions?: Partial<SimpleGitOptions>);
130
- static cloneRepo(remoteUrl: string, targetPath: string, baseBranch?: string): Promise<void>;
214
+ /**
215
+ * Single-branch clone of `baseBranch`, retried once: a clone can lose a race
216
+ * with the worker's repack of `remote.git` deleting a pack it had just
217
+ * listed. Before the retry it clears only what it created itself, so a
218
+ * target that held files beforehand is never touched.
219
+ */
220
+ static cloneRepo(remoteUrl: string, targetPath: string, baseBranch?: string, options?: CloneRepoOptions): Promise<void>;
131
221
  /**
132
222
  * Initializes a local bare git repository to simulate a remote for dev mode,
133
223
  * seeded with the current state of baseBranch. Idempotent: an existing remote
@@ -178,10 +268,10 @@ export declare class GitManager {
178
268
  * Delete `refs/heads/<branch>` from a bare local mirror, if present. A
179
269
  * no-op (not an error) when the ref doesn't exist.
180
270
  *
181
- * The explicit path for removing a deleted branch's local head, which the
182
- * sync loop deliberately is not (reconcileTrackedBranches never deletes a
183
- * head — see GITHUB_TRACKING_REF_PREFIX). Called by api/branch.ts's
184
- * deleteBranchHandler: a head left in `remote.git` forever makes the
271
+ * The path that removes a deleted branch's local head at once; the sync
272
+ * loop's reconcileTrackedBranches removes one only after GitHub no longer
273
+ * has the branch. Called by api/branch.ts's deleteBranchHandler: a head
274
+ * left in `remote.git` makes the
185
275
  * create -> publish -> squash-merge -> delete -> reuse-the-name cycle reject
186
276
  * the reused branch's first publish non-fast-forward against the stale head
187
277
  * (`GitManager.push()` pushes the branch to the same name, and a squash-merged old tip is
@@ -234,7 +324,10 @@ export declare class GitManager {
234
324
  * @param source - Where `url` came from, for the thrown error message only.
235
325
  */
236
326
  private static assertRemoteUrlAllowedInMode;
237
- /** The not-ready error for a mode whose remote is auto-detected, or `undefined` for other modes. */
327
+ /**
328
+ * The not-ready error for a mode whose remote is auto-detected, carrying the worker's recorded
329
+ * startup failure, or `undefined` for other modes.
330
+ */
238
331
  private static remoteNotReadyError;
239
332
  /**
240
333
  * Resolves the remote URL for git operations following the priority:
@@ -252,6 +345,38 @@ export declare class GitManager {
252
345
  * @returns Remote URL or undefined if no remote is needed
253
346
  */
254
347
  static resolveRemoteUrl(options: ResolveRemoteUrlOptions): Promise<string | undefined>;
348
+ /**
349
+ * {@link resolveRemoteUrl} for a workspace about to be cloned, which needs a
350
+ * remote: none resolving is the worker-not-ready error in a mode whose
351
+ * remote the worker creates, and a configuration error otherwise.
352
+ */
353
+ static resolveCloneRemoteUrl(options: ResolveRemoteUrlOptions): Promise<string>;
354
+ /**
355
+ * Prod's base branch when `defaultBaseBranch` is unset: the branch named by the HEAD of the
356
+ * remote the workspaces clone from, read locally because the Lambda has no internet. That
357
+ * remote is the bare `remote.git` the worker keeps, whose HEAD it sets to the base branch it
358
+ * uses (worker/cms-worker.ts `recordBaseBranchInRemoteHead`), so the two agree.
359
+ *
360
+ * While that remote does not exist yet, whether auto-detected or configured as a local path,
361
+ * `'pending'` resolves `undefined` and `'throw'` rejects with {@link RemoteNotReadyError}. A network remote, or a HEAD that names no branch, throws
362
+ * `BaseBranchUnresolvedError`.
363
+ */
364
+ static detectBaseBranch(config: BaseBranchRemoteOptions, whenNoRemote: 'pending'): Promise<string | undefined>;
365
+ static detectBaseBranch(config: BaseBranchRemoteOptions, whenNoRemote: 'throw'): Promise<string>;
366
+ /**
367
+ * The base branch a workspace about to be provisioned forks from: the configured one, else
368
+ * dev's git HEAD (resolveBaseBranch), else prod's remote HEAD ({@link detectBaseBranch}), which
369
+ * rejects with RemoteNotReadyError while the worker has not created the remote.
370
+ */
371
+ static resolveWorkspaceBaseBranch(options: BaseBranchRemoteOptions & {
372
+ mode: OperatingMode;
373
+ baseBranch?: string;
374
+ }): Promise<string>;
375
+ /**
376
+ * {@link cloneRepo} for a workspace, failing with one message that names the
377
+ * workspace, the remote and the base branch, which git's own error mixes.
378
+ */
379
+ static cloneWorkspace(remoteUrl: string, workspacePath: string, baseBranch: string, options: CloneRepoOptions): Promise<void>;
255
380
  /**
256
381
  * Check whether a git repository is already initialized at `workspacePath`.
257
382
  *
@@ -288,6 +413,14 @@ export declare class GitManager {
288
413
  */
289
414
  private invalidateContentIndexes;
290
415
  checkoutBranch(branch: string): Promise<void>;
416
+ /**
417
+ * The one checkout of a `--no-checkout` clone, which has the base branch
418
+ * and its remote-tracking ref and nothing else, so neither the branch
419
+ * listing nor the fetch that {@link checkoutBranch} starts with is needed.
420
+ * The missing index makes git populate the whole tree, even for the base
421
+ * branch HEAD already names.
422
+ */
423
+ checkoutFreshClone(branch: string): Promise<void>;
291
424
  private checkoutBranchInner;
292
425
  pullBase(): Promise<void>;
293
426
  private pullBaseInner;
@@ -295,10 +428,25 @@ export declare class GitManager {
295
428
  private pullCurrentBranchInner;
296
429
  rebaseOntoBase(): Promise<void>;
297
430
  private rebaseOntoBaseInner;
431
+ /** `--sparse` stages a named path outside a sparse clone's cone (branch-sparse.ts). */
298
432
  add(files: string | string[]): Promise<void>;
433
+ /**
434
+ * Restrict the working tree to `dirs` in cone mode, which always keeps the root-level files.
435
+ * Runs before a `--no-checkout` clone's one checkout, which invalidates the content caches.
436
+ */
437
+ setSparseCone(dirs: readonly string[]): Promise<void>;
299
438
  /** Stage every working-tree change except canopycms's own state. See {@link stageAllExceptCanopyState}. */
300
439
  addAllExceptCanopyState(): Promise<void>;
301
440
  commit(message: string): Promise<void>;
441
+ /** The checked-out commit's SHA. */
442
+ headSha(): Promise<string>;
443
+ /**
444
+ * Move the checked-out branch back to `sha`, leaving everything after it unstaged in the
445
+ * working tree (`reset --mixed`). Takes a SHA the caller read itself, never a relative ref:
446
+ * a commit call that committed nothing still resolves, so "the last commit" is not always
447
+ * the caller's.
448
+ */
449
+ resetKeepingChanges(sha: string): Promise<void>;
302
450
  push(branch?: string): Promise<void>;
303
451
  /**
304
452
  * The checked-out branch's plain name. `rev-parse --abbrev-ref HEAD` prints
@@ -330,10 +478,23 @@ export declare class GitManager {
330
478
  * constraint.
331
479
  */
332
480
  listChangedPathsSinceBase(): Promise<string[]>;
481
+ /**
482
+ * Repo-relative paths of every file in the base branch's just-fetched tip or in its merge base
483
+ * with HEAD, limited to `under` (a repo-relative directory) when given. The merge base counts
484
+ * because a file the base deleted after the fork is still the base's on a branch not yet
485
+ * rebased. Reads commits, never the working tree, so a sparse clone lists the whole base.
486
+ */
487
+ listBaseFiles(under?: string): Promise<string[]>;
488
+ /** Fetch the base branch and return its tip, pinned as pullBaseInner explains. */
489
+ private fetchBaseTip;
490
+ /** Repo-relative paths of every file in `rev`'s tree, under `under` when given. */
491
+ private listTreeFiles;
333
492
  ensureAuthor(author: {
334
493
  name: string;
335
494
  email: string;
336
495
  }): Promise<void>;
496
+ /** Writes each key into this repo's own config only where it differs. */
497
+ ensureLocalConfig(values: Record<string, string>): Promise<void>;
337
498
  ensureRemote(remoteUrl: string): Promise<void>;
338
499
  hasUncommittedChanges(): Promise<boolean>;
339
500
  getUncommittedFiles(): Promise<string[]>;
@@ -399,3 +560,4 @@ export declare class GitManager {
399
560
  */
400
561
  private isEmptyInitialBranch;
401
562
  }
563
+ export {};