canopycms 0.0.67-int.90 → 0.0.67

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 (539) hide show
  1. package/README.md +30 -3
  2. package/dist/ai/generate.js +1 -27
  3. package/dist/ai/handler.d.ts +0 -4
  4. package/dist/ai/handler.js +0 -11
  5. package/dist/ai/index.d.ts +1 -8
  6. package/dist/ai/index.js +1 -8
  7. package/dist/ai/json-to-markdown.js +15 -58
  8. package/dist/ai/resolve-branch.d.ts +2 -7
  9. package/dist/ai/resolve-branch.js +2 -8
  10. package/dist/ai/strip-mdx.d.ts +5 -13
  11. package/dist/ai/strip-mdx.js +5 -17
  12. package/dist/ai/to-plain-text.d.ts +10 -28
  13. package/dist/ai/to-plain-text.js +10 -28
  14. package/dist/ai/transform-components.d.ts +2 -4
  15. package/dist/ai/transform-components.js +8 -19
  16. package/dist/ai/types.d.ts +5 -10
  17. package/dist/api/admin-branch-health.d.ts +4 -12
  18. package/dist/api/admin-branch-health.js +26 -66
  19. package/dist/api/admin.d.ts +4 -12
  20. package/dist/api/admin.js +10 -26
  21. package/dist/api/assets.d.ts +0 -25
  22. package/dist/api/assets.js +50 -91
  23. package/dist/api/branch-merge.d.ts +1 -1
  24. package/dist/api/branch-merge.js +0 -2
  25. package/dist/api/branch-review.d.ts +0 -8
  26. package/dist/api/branch-review.js +0 -13
  27. package/dist/api/branch-status.d.ts +0 -3
  28. package/dist/api/branch-status.js +8 -33
  29. package/dist/api/branch-withdraw.d.ts +0 -1
  30. package/dist/api/branch-withdraw.js +6 -9
  31. package/dist/api/branch.d.ts +7 -12
  32. package/dist/api/branch.js +7 -44
  33. package/dist/api/client.d.ts +71 -224
  34. package/dist/api/client.js +82 -233
  35. package/dist/api/comments.d.ts +2 -4
  36. package/dist/api/comments.js +0 -17
  37. package/dist/api/content.d.ts +0 -6
  38. package/dist/api/content.js +66 -142
  39. package/dist/api/entries-constants.d.ts +5 -9
  40. package/dist/api/entries-constants.js +5 -9
  41. package/dist/api/entries.d.ts +8 -13
  42. package/dist/api/entries.js +20 -51
  43. package/dist/api/github-sync.d.ts +2 -4
  44. package/dist/api/github-sync.js +4 -8
  45. package/dist/api/groups.d.ts +3 -0
  46. package/dist/api/groups.js +8 -21
  47. package/dist/api/guards.d.ts +4 -16
  48. package/dist/api/guards.js +3 -22
  49. package/dist/api/index.d.ts +4 -4
  50. package/dist/api/permissions.d.ts +2 -0
  51. package/dist/api/permissions.js +18 -40
  52. package/dist/api/reference-options.d.ts +0 -1
  53. package/dist/api/reference-options.js +3 -11
  54. package/dist/api/request-body-hash.d.ts +12 -23
  55. package/dist/api/request-body-hash.js +12 -23
  56. package/dist/api/resolve-references.d.ts +0 -1
  57. package/dist/api/resolve-references.js +13 -28
  58. package/dist/api/route-builder.d.ts +3 -7
  59. package/dist/api/route-builder.js +1 -1
  60. package/dist/api/routes.d.ts +12 -0
  61. package/dist/api/routes.js +47 -0
  62. package/dist/api/schema.d.ts +23 -33
  63. package/dist/api/schema.js +20 -74
  64. package/dist/api/settings-helpers.js +4 -5
  65. package/dist/api/types.d.ts +0 -5
  66. package/dist/api/user.js +0 -5
  67. package/dist/api/validators.d.ts +14 -52
  68. package/dist/api/validators.js +14 -52
  69. package/dist/assets/asset-prefixes.d.ts +4 -8
  70. package/dist/assets/asset-prefixes.js +4 -8
  71. package/dist/assets/asset-src.d.ts +5 -22
  72. package/dist/assets/asset-src.js +5 -21
  73. package/dist/assets/factory.d.ts +1 -2
  74. package/dist/assets/factory.js +1 -2
  75. package/dist/assets/finalize.d.ts +3 -1
  76. package/dist/assets/finalize.js +3 -1
  77. package/dist/assets/index.d.ts +3 -3
  78. package/dist/assets/index.js +1 -1
  79. package/dist/assets/keys.d.ts +5 -3
  80. package/dist/assets/keys.js +6 -3
  81. package/dist/assets/pipeline.d.ts +3 -2
  82. package/dist/assets/pipeline.js +22 -56
  83. package/dist/assets/sharp-loader.d.ts +2 -10
  84. package/dist/assets/sharp-loader.js +2 -10
  85. package/dist/assets/store-local.d.ts +1 -2
  86. package/dist/assets/store-local.js +1 -2
  87. package/dist/assets/store-s3.d.ts +3 -4
  88. package/dist/assets/svg-sanitizer.d.ts +6 -14
  89. package/dist/assets/svg-sanitizer.js +6 -14
  90. package/dist/assets/transform-directives.d.ts +3 -4
  91. package/dist/assets/transform-directives.js +1 -1
  92. package/dist/assets/transform.d.ts +19 -30
  93. package/dist/assets/transform.js +18 -31
  94. package/dist/auth/cache.d.ts +2 -3
  95. package/dist/auth/cache.js +2 -3
  96. package/dist/auth/caching-auth-plugin.d.ts +11 -22
  97. package/dist/auth/caching-auth-plugin.js +12 -14
  98. package/dist/auth/context-helpers.d.ts +6 -20
  99. package/dist/auth/context-helpers.js +5 -17
  100. package/dist/auth/file-based-auth-cache.d.ts +10 -21
  101. package/dist/auth/file-based-auth-cache.js +23 -51
  102. package/dist/auth/plugin.d.ts +29 -61
  103. package/dist/auth/plugin.js +9 -13
  104. package/dist/auth/types.d.ts +11 -20
  105. package/dist/authorization/branch.d.ts +30 -49
  106. package/dist/authorization/branch.js +16 -42
  107. package/dist/authorization/content.d.ts +11 -40
  108. package/dist/authorization/content.js +13 -45
  109. package/dist/authorization/groups/index.d.ts +0 -3
  110. package/dist/authorization/groups/index.js +0 -3
  111. package/dist/authorization/groups/loader.d.ts +14 -28
  112. package/dist/authorization/groups/loader.js +14 -38
  113. package/dist/authorization/groups/schema.d.ts +0 -6
  114. package/dist/authorization/groups/schema.js +4 -7
  115. package/dist/authorization/helpers.d.ts +9 -28
  116. package/dist/authorization/helpers.js +9 -28
  117. package/dist/authorization/index.d.ts +3 -25
  118. package/dist/authorization/index.js +3 -35
  119. package/dist/authorization/path.d.ts +6 -13
  120. package/dist/authorization/path.js +8 -25
  121. package/dist/authorization/permissions/index.d.ts +0 -3
  122. package/dist/authorization/permissions/index.js +0 -3
  123. package/dist/authorization/permissions/loader.d.ts +14 -27
  124. package/dist/authorization/permissions/loader.js +14 -32
  125. package/dist/authorization/permissions/schema.d.ts +1 -6
  126. package/dist/authorization/permissions/schema.js +6 -13
  127. package/dist/authorization/protected-branch.d.ts +36 -65
  128. package/dist/authorization/protected-branch.js +29 -41
  129. package/dist/authorization/settings-file-store.d.ts +38 -81
  130. package/dist/authorization/settings-file-store.js +38 -79
  131. package/dist/authorization/types.d.ts +4 -26
  132. package/dist/authorization/types.js +0 -6
  133. package/dist/authorization/validation.d.ts +1 -23
  134. package/dist/authorization/validation.js +1 -24
  135. package/dist/branch-health.d.ts +39 -67
  136. package/dist/branch-health.js +27 -43
  137. package/dist/branch-metadata-file.d.ts +16 -32
  138. package/dist/branch-metadata-file.js +13 -26
  139. package/dist/branch-metadata.d.ts +49 -80
  140. package/dist/branch-metadata.js +57 -87
  141. package/dist/branch-registry.d.ts +26 -64
  142. package/dist/branch-registry.js +44 -93
  143. package/dist/branch-schema-cache.d.ts +34 -124
  144. package/dist/branch-schema-cache.js +49 -155
  145. package/dist/branch-workspace.d.ts +4 -4
  146. package/dist/branch-workspace.js +15 -19
  147. package/dist/build/generate-ai-content.d.ts +1 -0
  148. package/dist/build/generate-ai-content.js +12 -25
  149. package/dist/build-canopy.d.ts +17 -27
  150. package/dist/build-canopy.js +16 -23
  151. package/dist/build-mode.d.ts +25 -27
  152. package/dist/build-mode.js +25 -29
  153. package/dist/cli/cli.d.ts +15 -26
  154. package/dist/cli/cli.js +601 -978
  155. package/dist/cli/generate-ai-content.js +351 -628
  156. package/dist/cli/github-app-manifest.d.ts +84 -0
  157. package/dist/cli/github-app-manifest.js +161 -0
  158. package/dist/cli/init-github-app.d.ts +110 -444
  159. package/dist/cli/init-github-app.js +236 -773
  160. package/dist/cli/init.js +39 -80
  161. package/dist/cli/migrate.d.ts +13 -10
  162. package/dist/cli/migrate.js +22 -30
  163. package/dist/cli/project-detect.d.ts +17 -31
  164. package/dist/cli/project-detect.js +31 -42
  165. package/dist/cli/project-root.d.ts +4 -11
  166. package/dist/cli/project-root.js +4 -11
  167. package/dist/cli/prompt.d.ts +10 -0
  168. package/dist/cli/prompt.js +67 -0
  169. package/dist/cli/sync.d.ts +0 -8
  170. package/dist/cli/sync.js +8 -28
  171. package/dist/cli/template-files/middleware.ts.template +15 -29
  172. package/dist/cli/templates.d.ts +2 -12
  173. package/dist/cli/templates.js +4 -4
  174. package/dist/client.d.ts +1 -1
  175. package/dist/comment-store.d.ts +32 -53
  176. package/dist/comment-store.js +32 -52
  177. package/dist/config/flatten.d.ts +0 -3
  178. package/dist/config/flatten.js +2 -12
  179. package/dist/config/helpers.js +2 -2
  180. package/dist/config/index.d.ts +2 -2
  181. package/dist/config/index.js +1 -4
  182. package/dist/config/schemas/collection.d.ts +0 -8
  183. package/dist/config/schemas/collection.js +0 -10
  184. package/dist/config/schemas/config.d.ts +6 -78
  185. package/dist/config/schemas/config.js +38 -54
  186. package/dist/config/schemas/field.d.ts +2 -242
  187. package/dist/config/schemas/field.js +9 -20
  188. package/dist/config/schemas/media.js +1 -1
  189. package/dist/config/schemas/permissions.js +0 -2
  190. package/dist/config/schemas/url.d.ts +5 -6
  191. package/dist/config/schemas/url.js +5 -6
  192. package/dist/config/types.d.ts +45 -33
  193. package/dist/config/types.js +0 -1
  194. package/dist/config.d.ts +1 -8
  195. package/dist/config.js +1 -9
  196. package/dist/content-id-index.d.ts +76 -188
  197. package/dist/content-id-index.js +79 -230
  198. package/dist/content-index-generation.d.ts +27 -48
  199. package/dist/content-index-generation.js +35 -84
  200. package/dist/content-index-registry.d.ts +15 -24
  201. package/dist/content-index-registry.js +5 -9
  202. package/dist/content-listing.d.ts +64 -107
  203. package/dist/content-listing.js +68 -118
  204. package/dist/content-reader.d.ts +20 -29
  205. package/dist/content-reader.js +10 -18
  206. package/dist/content-store.d.ts +210 -336
  207. package/dist/content-store.js +413 -657
  208. package/dist/content-tree.d.ts +44 -86
  209. package/dist/content-tree.js +26 -54
  210. package/dist/context.d.ts +67 -94
  211. package/dist/context.js +53 -72
  212. package/dist/dev-content-watcher.d.ts +18 -18
  213. package/dist/dev-content-watcher.js +41 -44
  214. package/dist/editor/BranchManager.d.ts +3 -6
  215. package/dist/editor/BranchManager.js +24 -44
  216. package/dist/editor/CanopyEditor.js +5 -2
  217. package/dist/editor/CommentsPanel.js +0 -2
  218. package/dist/editor/Editor.js +19 -76
  219. package/dist/editor/EditorAuthGate.d.ts +27 -0
  220. package/dist/editor/EditorAuthGate.js +140 -0
  221. package/dist/editor/EntryNavigator.js +0 -20
  222. package/dist/editor/FormRenderer.d.ts +1 -2
  223. package/dist/editor/FormRenderer.js +8 -23
  224. package/dist/editor/admin/SystemHealthPanel.js +20 -37
  225. package/dist/editor/admin/useSystemHealth.d.ts +2 -3
  226. package/dist/editor/admin/useSystemHealth.js +10 -12
  227. package/dist/editor/client-reference-resolver.d.ts +2 -5
  228. package/dist/editor/client-reference-resolver.js +2 -19
  229. package/dist/editor/comments/BranchComments.js +0 -4
  230. package/dist/editor/comments/EntryComments.js +0 -4
  231. package/dist/editor/comments/FieldWrapper.js +0 -4
  232. package/dist/editor/comments/InlineCommentThread.js +0 -2
  233. package/dist/editor/comments/ThreadCarousel.d.ts +0 -58
  234. package/dist/editor/comments/ThreadCarousel.js +0 -12
  235. package/dist/editor/components/EditorFooter.d.ts +0 -8
  236. package/dist/editor/components/EditorFooter.js +0 -5
  237. package/dist/editor/components/EditorHeader.d.ts +0 -31
  238. package/dist/editor/components/EditorHeader.js +21 -71
  239. package/dist/editor/components/EditorSidebar.d.ts +0 -19
  240. package/dist/editor/components/EditorSidebar.js +0 -16
  241. package/dist/editor/components/EntryCreateModal.d.ts +4 -4
  242. package/dist/editor/components/EntryCreateModal.js +7 -22
  243. package/dist/editor/components/RenameEntryModal.js +0 -4
  244. package/dist/editor/components/UserBadge.js +0 -10
  245. package/dist/editor/components/index.js +0 -2
  246. package/dist/editor/context/ApiClientContext.d.ts +8 -7
  247. package/dist/editor/context/ApiClientContext.js +39 -11
  248. package/dist/editor/context/AssetContext.d.ts +7 -17
  249. package/dist/editor/context/AssetContext.js +7 -17
  250. package/dist/editor/context/EditorIdentityContext.d.ts +13 -0
  251. package/dist/editor/context/EditorIdentityContext.js +7 -0
  252. package/dist/editor/context/EditorStateContext.d.ts +10 -41
  253. package/dist/editor/context/EditorStateContext.js +7 -23
  254. package/dist/editor/context/SWRProvider.d.ts +3 -6
  255. package/dist/editor/context/index.d.ts +1 -20
  256. package/dist/editor/context/index.js +1 -20
  257. package/dist/editor/editor-utils.d.ts +8 -47
  258. package/dist/editor/editor-utils.js +19 -72
  259. package/dist/editor/fields/BlockField.d.ts +2 -2
  260. package/dist/editor/fields/BlockField.js +1 -2
  261. package/dist/editor/fields/CodeField.d.ts +0 -1
  262. package/dist/editor/fields/CodeField.js +0 -1
  263. package/dist/editor/fields/DateTimeField.d.ts +15 -22
  264. package/dist/editor/fields/DateTimeField.js +17 -26
  265. package/dist/editor/fields/ImageField.d.ts +2 -2
  266. package/dist/editor/fields/ImageField.js +8 -14
  267. package/dist/editor/fields/InlineGroupField.d.ts +0 -1
  268. package/dist/editor/fields/InlineGroupField.js +0 -1
  269. package/dist/editor/fields/MarkdownField.d.ts +0 -1
  270. package/dist/editor/fields/MarkdownField.js +6 -11
  271. package/dist/editor/fields/MdxImageDialog.d.ts +1 -1
  272. package/dist/editor/fields/MdxImageDialog.js +0 -1
  273. package/dist/editor/fields/NumberField.d.ts +9 -19
  274. package/dist/editor/fields/NumberField.js +11 -22
  275. package/dist/editor/fields/NumberListField.d.ts +7 -10
  276. package/dist/editor/fields/NumberListField.js +7 -10
  277. package/dist/editor/fields/ObjectField.d.ts +5 -8
  278. package/dist/editor/fields/ObjectField.js +0 -1
  279. package/dist/editor/fields/ReferenceField.d.ts +1 -1
  280. package/dist/editor/fields/ReferenceField.js +11 -16
  281. package/dist/editor/fields/SelectField.d.ts +2 -2
  282. package/dist/editor/fields/SelectField.js +0 -1
  283. package/dist/editor/fields/StringListField.d.ts +0 -4
  284. package/dist/editor/fields/StringListField.js +4 -9
  285. package/dist/editor/fields/TextField.d.ts +0 -1
  286. package/dist/editor/fields/TextField.js +0 -1
  287. package/dist/editor/fields/ToggleField.d.ts +0 -1
  288. package/dist/editor/fields/ToggleField.js +0 -1
  289. package/dist/editor/fields/entry-link/EntryLinkContext.js +2 -4
  290. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -3
  291. package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -4
  292. package/dist/editor/group-manager/ExternalGroupsTab.d.ts +0 -3
  293. package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
  294. package/dist/editor/group-manager/GroupCard.d.ts +0 -3
  295. package/dist/editor/group-manager/GroupForm.d.ts +0 -3
  296. package/dist/editor/group-manager/InternalGroupsTab.d.ts +0 -3
  297. package/dist/editor/group-manager/InternalGroupsTab.js +0 -2
  298. package/dist/editor/group-manager/MemberList.d.ts +0 -3
  299. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +0 -3
  300. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -3
  301. package/dist/editor/group-manager/hooks/useGroupState.d.ts +0 -3
  302. package/dist/editor/group-manager/hooks/useGroupState.js +0 -5
  303. package/dist/editor/group-manager/hooks/useUserSearch.d.ts +0 -3
  304. package/dist/editor/group-manager/hooks/useUserSearch.js +0 -3
  305. package/dist/editor/group-manager/index.d.ts +0 -6
  306. package/dist/editor/group-manager/index.js +0 -10
  307. package/dist/editor/group-manager/types.d.ts +2 -5
  308. package/dist/editor/group-manager/types.js +0 -3
  309. package/dist/editor/hooks/index.d.ts +6 -11
  310. package/dist/editor/hooks/index.js +6 -12
  311. package/dist/editor/hooks/useBranchActions.d.ts +0 -14
  312. package/dist/editor/hooks/useBranchActions.js +0 -22
  313. package/dist/editor/hooks/useBranchManager.d.ts +2 -48
  314. package/dist/editor/hooks/useBranchManager.js +4 -64
  315. package/dist/editor/hooks/useBranchesData.d.ts +7 -6
  316. package/dist/editor/hooks/useBranchesData.js +7 -6
  317. package/dist/editor/hooks/useCommentSystem.d.ts +0 -49
  318. package/dist/editor/hooks/useCommentSystem.js +1 -36
  319. package/dist/editor/hooks/useDraftManager.d.ts +2 -35
  320. package/dist/editor/hooks/useDraftManager.js +23 -64
  321. package/dist/editor/hooks/useEditorLayout.d.ts +0 -20
  322. package/dist/editor/hooks/useEditorLayout.js +0 -23
  323. package/dist/editor/hooks/useEntriesData.d.ts +1 -0
  324. package/dist/editor/hooks/useEntriesData.js +2 -3
  325. package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -2
  326. package/dist/editor/hooks/useEntryLinkResolution.js +2 -2
  327. package/dist/editor/hooks/useEntryManager.d.ts +2 -27
  328. package/dist/editor/hooks/useEntryManager.js +29 -78
  329. package/dist/editor/hooks/useGroupManager.d.ts +0 -21
  330. package/dist/editor/hooks/useGroupManager.js +0 -21
  331. package/dist/editor/hooks/usePermissionManager.d.ts +0 -20
  332. package/dist/editor/hooks/usePermissionManager.js +0 -20
  333. package/dist/editor/hooks/useReferenceResolution.d.ts +2 -33
  334. package/dist/editor/hooks/useReferenceResolution.js +1 -48
  335. package/dist/editor/hooks/useSchemaManager.d.ts +8 -27
  336. package/dist/editor/hooks/useSchemaManager.js +0 -19
  337. package/dist/editor/hooks/useUserContext.d.ts +2 -9
  338. package/dist/editor/hooks/useUserContext.js +10 -10
  339. package/dist/editor/hooks/useUserMetadata.d.ts +0 -2
  340. package/dist/editor/hooks/useUserMetadata.js +0 -3
  341. package/dist/editor/media/AssetCard.d.ts +0 -1
  342. package/dist/editor/media/AssetCard.js +1 -2
  343. package/dist/editor/media/CropStep.d.ts +0 -1
  344. package/dist/editor/media/CropStep.js +0 -1
  345. package/dist/editor/media/MediaLibrary.d.ts +1 -2
  346. package/dist/editor/media/MediaLibrary.js +1 -2
  347. package/dist/editor/media/MediaLibraryBody.d.ts +0 -1
  348. package/dist/editor/media/MediaLibraryBody.js +0 -1
  349. package/dist/editor/media/crop-math.d.ts +1 -1
  350. package/dist/editor/media/crop-math.js +1 -1
  351. package/dist/editor/permission-manager/GroupSelector.d.ts +0 -3
  352. package/dist/editor/permission-manager/PermissionEditor.d.ts +0 -4
  353. package/dist/editor/permission-manager/PermissionEditor.js +0 -1
  354. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +0 -7
  355. package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -4
  356. package/dist/editor/permission-manager/PermissionTree.d.ts +0 -4
  357. package/dist/editor/permission-manager/UserSelector.d.ts +0 -3
  358. package/dist/editor/permission-manager/constants.d.ts +0 -3
  359. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +0 -3
  360. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -10
  361. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +0 -14
  362. package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -11
  363. package/dist/editor/permission-manager/index.d.ts +0 -7
  364. package/dist/editor/permission-manager/index.js +0 -16
  365. package/dist/editor/permission-manager/types.d.ts +2 -12
  366. package/dist/editor/permission-manager/types.js +0 -3
  367. package/dist/editor/permission-manager/utils.d.ts +0 -28
  368. package/dist/editor/permission-manager/utils.js +9 -23
  369. package/dist/editor/preview-bridge.d.ts +5 -1
  370. package/dist/editor/preview-bridge.js +4 -4
  371. package/dist/editor/schema-editor/CollectionEditor.d.ts +0 -5
  372. package/dist/editor/schema-editor/CollectionEditor.js +9 -31
  373. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +0 -6
  374. package/dist/editor/schema-editor/EntryTypeEditor.js +3 -24
  375. package/dist/editor/schema-editor/index.d.ts +0 -7
  376. package/dist/editor/schema-editor/index.js +0 -7
  377. package/dist/editor/utils/env.d.ts +3 -18
  378. package/dist/editor/utils/env.js +6 -25
  379. package/dist/entry-link-resolver.d.ts +13 -35
  380. package/dist/entry-link-resolver.js +20 -53
  381. package/dist/entry-schema-registry.d.ts +20 -60
  382. package/dist/entry-schema-registry.js +20 -69
  383. package/dist/entry-schema.d.ts +118 -223
  384. package/dist/entry-schema.js +46 -91
  385. package/dist/git-manager.d.ts +101 -200
  386. package/dist/git-manager.js +211 -384
  387. package/dist/github-service.d.ts +34 -75
  388. package/dist/github-service.js +37 -91
  389. package/dist/http/handler.d.ts +6 -37
  390. package/dist/http/handler.js +65 -120
  391. package/dist/http/router.d.ts +15 -32
  392. package/dist/http/router.js +34 -99
  393. package/dist/http/types.d.ts +15 -40
  394. package/dist/http/types.js +3 -7
  395. package/dist/id.d.ts +4 -10
  396. package/dist/id.js +4 -10
  397. package/dist/index.js +6 -9
  398. package/dist/operating-mode/client-safe-strategy.d.ts +7 -14
  399. package/dist/operating-mode/client-safe-strategy.js +8 -28
  400. package/dist/operating-mode/client-unsafe-strategy.d.ts +6 -16
  401. package/dist/operating-mode/client-unsafe-strategy.js +9 -34
  402. package/dist/operating-mode/client.d.ts +3 -10
  403. package/dist/operating-mode/client.js +3 -8
  404. package/dist/operating-mode/deployment-name-fixtures.d.ts +14 -18
  405. package/dist/operating-mode/deployment-name-fixtures.js +14 -18
  406. package/dist/operating-mode/deployment-name.d.ts +19 -29
  407. package/dist/operating-mode/deployment-name.js +29 -47
  408. package/dist/operating-mode/index.d.ts +4 -25
  409. package/dist/operating-mode/index.js +9 -31
  410. package/dist/operating-mode/mode-env.d.ts +32 -54
  411. package/dist/operating-mode/mode-env.js +36 -58
  412. package/dist/operating-mode/types.d.ts +24 -72
  413. package/dist/operating-mode/types.js +1 -7
  414. package/dist/paths/branch-name.d.ts +30 -40
  415. package/dist/paths/branch-name.js +30 -40
  416. package/dist/paths/branch.d.ts +4 -18
  417. package/dist/paths/branch.js +6 -22
  418. package/dist/paths/index.d.ts +2 -13
  419. package/dist/paths/index.js +3 -23
  420. package/dist/paths/normalize-server.d.ts +3 -15
  421. package/dist/paths/normalize-server.js +3 -15
  422. package/dist/paths/normalize.d.ts +13 -33
  423. package/dist/paths/normalize.js +13 -33
  424. package/dist/paths/resolve.d.ts +4 -17
  425. package/dist/paths/resolve.js +4 -22
  426. package/dist/paths/types.d.ts +12 -34
  427. package/dist/paths/types.js +5 -7
  428. package/dist/paths/validation.d.ts +22 -119
  429. package/dist/paths/validation.js +30 -148
  430. package/dist/reference-resolver.d.ts +0 -13
  431. package/dist/reference-resolver.js +0 -18
  432. package/dist/resolve-canopy-user.d.ts +16 -18
  433. package/dist/resolve-canopy-user.js +17 -26
  434. package/dist/resource-generation.d.ts +16 -25
  435. package/dist/resource-generation.js +34 -97
  436. package/dist/schema/meta-loader.d.ts +2 -14
  437. package/dist/schema/meta-loader.js +15 -64
  438. package/dist/schema/resolver.d.ts +1 -4
  439. package/dist/schema/resolver.js +1 -6
  440. package/dist/schema/schema-store-types.d.ts +0 -12
  441. package/dist/schema/schema-store.d.ts +61 -138
  442. package/dist/schema/schema-store.js +85 -282
  443. package/dist/schema/types.d.ts +0 -4
  444. package/dist/server.d.ts +62 -93
  445. package/dist/server.js +63 -94
  446. package/dist/services.d.ts +23 -47
  447. package/dist/services.js +55 -98
  448. package/dist/settings-workspace.d.ts +17 -30
  449. package/dist/settings-workspace.js +51 -81
  450. package/dist/static/index.d.ts +26 -52
  451. package/dist/static/index.js +33 -67
  452. package/dist/{worker/task-queue.d.ts → task-queue/cms-task-queue.d.ts} +7 -9
  453. package/dist/task-queue/cms-task-queue.js +13 -0
  454. package/dist/task-queue/task-queue-config.d.ts +3 -0
  455. package/dist/{worker → task-queue}/task-queue-config.js +1 -6
  456. package/dist/task-queue/task-queue.d.ts +16 -22
  457. package/dist/task-queue/task-queue.js +20 -44
  458. package/dist/task-queue/types.d.ts +0 -1
  459. package/dist/task-queue/worker-status.d.ts +35 -0
  460. package/dist/task-queue/worker-status.js +40 -0
  461. package/dist/types.d.ts +40 -51
  462. package/dist/url-collision.d.ts +26 -40
  463. package/dist/url-collision.js +47 -63
  464. package/dist/url-exclusivity-fixtures.d.ts +15 -20
  465. package/dist/url-exclusivity-fixtures.js +14 -19
  466. package/dist/url-path-resolver.d.ts +8 -16
  467. package/dist/url-path-resolver.js +19 -29
  468. package/dist/user.d.ts +8 -21
  469. package/dist/user.js +10 -19
  470. package/dist/utils/async-mutex.js +4 -6
  471. package/dist/utils/atomic-write.d.ts +2 -11
  472. package/dist/utils/atomic-write.js +2 -11
  473. package/dist/utils/body-field.d.ts +8 -15
  474. package/dist/utils/body-field.js +8 -15
  475. package/dist/utils/content-serialize.d.ts +18 -24
  476. package/dist/utils/content-serialize.js +109 -160
  477. package/dist/utils/content-write-lock.d.ts +51 -106
  478. package/dist/utils/content-write-lock.js +66 -111
  479. package/dist/utils/debug.d.ts +7 -23
  480. package/dist/utils/debug.js +7 -23
  481. package/dist/utils/entry-url.d.ts +11 -23
  482. package/dist/utils/entry-url.js +11 -26
  483. package/dist/utils/error.d.ts +25 -90
  484. package/dist/utils/error.js +60 -147
  485. package/dist/utils/flatten-group-fields.d.ts +5 -7
  486. package/dist/utils/flatten-group-fields.js +5 -7
  487. package/dist/utils/format.d.ts +1 -5
  488. package/dist/utils/format.js +1 -5
  489. package/dist/utils/fs.d.ts +3 -4
  490. package/dist/utils/fs.js +3 -4
  491. package/dist/utils/git.d.ts +52 -83
  492. package/dist/utils/git.js +79 -125
  493. package/dist/utils/logger.d.ts +35 -50
  494. package/dist/utils/logger.js +35 -52
  495. package/dist/utils/provisioning-lock.d.ts +23 -35
  496. package/dist/utils/provisioning-lock.js +49 -69
  497. package/dist/utils/sanitize-href.d.ts +5 -10
  498. package/dist/utils/sanitize-href.js +8 -18
  499. package/dist/utils/title-field.d.ts +17 -20
  500. package/dist/utils/title-field.js +18 -27
  501. package/dist/utils/typed-filename.d.ts +20 -48
  502. package/dist/utils/typed-filename.js +25 -61
  503. package/dist/utils/url-prefix.d.ts +3 -3
  504. package/dist/utils/url-prefix.js +3 -3
  505. package/dist/validation/block-structural-keys.d.ts +16 -31
  506. package/dist/validation/block-structural-keys.js +19 -29
  507. package/dist/validation/deletion-checker.d.ts +0 -34
  508. package/dist/validation/deletion-checker.js +1 -43
  509. package/dist/validation/entry-link-validator.d.ts +6 -13
  510. package/dist/validation/entry-link-validator.js +4 -13
  511. package/dist/validation/entry-type-reference-validator.d.ts +13 -18
  512. package/dist/validation/entry-type-reference-validator.js +13 -18
  513. package/dist/validation/entry-validator.d.ts +13 -25
  514. package/dist/validation/entry-validator.js +15 -32
  515. package/dist/validation/field-traversal.d.ts +3 -30
  516. package/dist/validation/field-traversal.js +1 -32
  517. package/dist/validation/reference-validator.d.ts +5 -24
  518. package/dist/validation/reference-validator.js +5 -30
  519. package/dist/worker/cms-worker.d.ts +172 -232
  520. package/dist/worker/cms-worker.js +241 -333
  521. package/dist/worker/git-sync.d.ts +32 -133
  522. package/dist/worker/git-sync.js +129 -191
  523. package/dist/worker/github-auth.d.ts +13 -19
  524. package/dist/worker/github-auth.js +13 -19
  525. package/dist/worker/history-rewrite.d.ts +53 -66
  526. package/dist/worker/history-rewrite.js +54 -60
  527. package/dist/worker/log.d.ts +24 -41
  528. package/dist/worker/log.js +25 -42
  529. package/dist/worker/rebase.d.ts +20 -110
  530. package/dist/worker/rebase.js +279 -354
  531. package/dist/worker/task-runner.d.ts +32 -66
  532. package/dist/worker/task-runner.js +126 -162
  533. package/dist/worker/worker-context.d.ts +41 -81
  534. package/package.json +4 -4
  535. package/dist/cli/template-files/middleware-clerk.ts.template +0 -37
  536. package/dist/worker/task-queue-config.d.ts +0 -8
  537. package/dist/worker/task-queue.js +0 -19
  538. package/dist/worker/worker-status.d.ts +0 -47
  539. package/dist/worker/worker-status.js +0 -52
@@ -1,12 +1,5 @@
1
1
  import { type SimpleGitOptions, type StatusResult } from 'simple-git';
2
2
  import type { OperatingMode } from './operating-mode/index.js';
3
- /**
4
- * Exported for GitManager's own use (see `this.git.env(...)` above),
5
- * the worker's push-rejection-classified GitHub calls
6
- * (`pushBranchToGitHub` in worker/task-runner.ts, `syncGit`'s
7
- * fetch/`pushSettingsBranches` instance in worker/git-sync.ts),
8
- * and tests.
9
- */
10
3
  export declare function gitChildEnv(overrides: Record<string, string>): Record<string, string>;
11
4
  export declare function gitNetworkChildEnv(): Record<string, string>;
12
5
  /**
@@ -14,31 +7,18 @@ export declare function gitNetworkChildEnv(): Record<string, string>;
14
7
  * (`+refs/heads/*:${GITHUB_TRACKING_REF_PREFIX}*`), instead of writing
15
8
  * directly into `refs/heads/*`.
16
9
  *
17
- * `remote.git`'s `refs/heads/*` is NOT a throwaway mirror: it's the
18
- * deployment's local origin. `GitManager.push()` writes editor work into it
19
- * (`target:target`), branch-workspace clones are cloned FROM it, and the CMS
20
- * worker itself pushes it on to GitHub (`pushBranchToGitHub` in
21
- * worker/task-runner.ts, `pushSettingsBranches` in worker/git-sync.ts). A fetch that force-writes
22
- * GitHub's refs straight into `refs/heads/*` (the old
23
- * `+refs/heads/*:refs/heads/*` refspec) can therefore destroy work that
24
- * reached `remote.git` but not GitHub yet: with `--prune`, a branch pushed
25
- * into `remote.git` and not yet on GitHub gets deleted outright; without
26
- * needing `--prune`, a branch where `remote.git` is ahead of GitHub gets
27
- * force-rewound to GitHub's older tip, and the worker's next push then
28
- * no-ops ("Everything up-to-date") -- the editor's commit silently never
29
- * reaches GitHub even though the branch reports `synced`.
30
- *
31
- * Fetching into this remote-tracking namespace instead makes `--prune`/`+`
32
- * safe again -- they now only ever affect GitHub's-view-of-the-world refs,
33
- * never the local heads other code depends on. `reconcileTrackedBranches()`
34
- * (worker/git-sync.ts) is what subsequently, and non-destructively, brings
35
- * `refs/heads/*` toward what's tracked here.
36
- *
37
- * Lives here (not the worker, where this constant originated) so
38
- * `GitManager.bareRemoteHasBranch` -- which must recognize this namespace
39
- * too, since it's what a branch pushed by another CanopyCMS deployment (or
40
- * pushed directly to GitHub) shows up in before/without ever gaining a local
41
- * head -- doesn't need a worker/ -> git-manager.ts back-reference.
10
+ * `remote.git`'s `refs/heads/*` is NOT a throwaway mirror: it is the
11
+ * deployment's local origin. `GitManager.push()` writes editor work into it,
12
+ * branch-workspace clones are cloned FROM it, and the worker pushes it on to
13
+ * GitHub. A fetch that force-writes GitHub's refs straight into `refs/heads/*`
14
+ * therefore destroys work that reached `remote.git` but not GitHub yet: with
15
+ * `--prune` a not-yet-pushed branch is deleted outright, and a branch where
16
+ * `remote.git` is ahead is force-rewound to GitHub's older tip, so the worker's
17
+ * next push no-ops and the editor's commit never arrives while the branch still
18
+ * reports `synced`. Confining `+`/`--prune` to this namespace keeps them off
19
+ * those local heads; `reconcileTrackedBranches()` (worker/git-sync.ts) is what
20
+ * subsequently, and non-destructively, brings `refs/heads/*` toward what is
21
+ * tracked here.
42
22
  */
43
23
  export declare const GITHUB_TRACKING_REF_PREFIX = "refs/remotes/github/";
44
24
  /**
@@ -61,6 +41,7 @@ export interface GitManagerOptions {
61
41
  skipIndexMarker?: boolean;
62
42
  }
63
43
  export type GitStatus = Pick<StatusResult, 'files' | 'ahead' | 'behind' | 'current' | 'tracking'>;
44
+ /** @internal Exported for tests. */
64
45
  export declare class GitConflictError extends Error {
65
46
  readonly conflictedFiles: string[];
66
47
  constructor(conflictedFiles: string[]);
@@ -68,12 +49,10 @@ export declare class GitConflictError extends Error {
68
49
  /**
69
50
  * The branch has no ref on the remote yet, so there is nothing to pull.
70
51
  *
71
- * Distinguishing this from a real pull failure matters: it is the ONLY benign
72
- * outcome of `pullCurrentBranch`, and callers that want to shrug it off (a
73
- * settings branch's first-ever commit, see services.ts `commitToSettingsBranch`)
74
- * must not shrug off merge failures with it. Everything else — a merge that
75
- * cannot proceed, a corrupt workspace, an unreachable remote — is a genuine
76
- * error the caller has to surface.
52
+ * The ONLY benign outcome of `pullCurrentBranch`: callers that shrug it off (a
53
+ * settings branch's first-ever commit — services.ts `commitToSettingsBranch`)
54
+ * must not shrug off anything else with it. A merge that cannot proceed, a
55
+ * corrupt workspace and an unreachable remote are genuine errors to surface.
77
56
  */
78
57
  export declare class GitRemoteRefMissingError extends Error {
79
58
  readonly branch: string;
@@ -124,11 +103,9 @@ export interface InitializeWorkspaceOptions {
124
103
  /** Git author email for internal commits (e.g., orphan branch init). */
125
104
  gitBotAuthorEmail: string;
126
105
  /**
127
- * Pattern to add to `.git/info/exclude` so runtime metadata
128
- * (e.g., `.canopy-meta/`) never enters the workspace's git history.
129
- * Only applied to content branches; settings workspaces don't need it
130
- * (their payloads live at the workspace root and are committed by
131
- * explicit path).
106
+ * Pattern added to `.git/info/exclude` so runtime metadata (e.g.
107
+ * `.canopy-meta/`) never enters the workspace's git history. Content branches
108
+ * only; settings workspaces commit by explicit path and don't need it.
132
109
  */
133
110
  gitExcludePattern?: string;
134
111
  }
@@ -141,17 +118,11 @@ export declare class GitManager {
141
118
  constructor(options: GitManagerOptions, gitOptions?: Partial<SimpleGitOptions>);
142
119
  static cloneRepo(remoteUrl: string, targetPath: string, baseBranch?: string): Promise<void>;
143
120
  /**
144
- * Initializes a local bare git repository to simulate a remote for dev mode.
145
- *
146
- * This is idempotent - if the remote already exists, it will not be recreated.
147
- *
148
- * The remote is seeded with the current state of the baseBranch (e.g., 'main').
149
- * When the remote already exists but is missing the requested baseBranch
150
- * (dev-mode branch auto-detect makes this routine: any git branch created
151
- * after the remote was first seeded), that branch is pushed from the source
152
- * repo on demand. Branches that already exist in the remote are never
153
- * updated here — the CMS pushes editor state into this remote, and a
154
- * refresh from the source repo would clobber it.
121
+ * Initializes a local bare git repository to simulate a remote for dev mode,
122
+ * seeded with the current state of baseBranch. Idempotent: an existing remote
123
+ * is never recreated, and a branch already in it is never refreshed from the
124
+ * source repo — the CMS pushes editor state into this remote, so a refresh
125
+ * would clobber it. A baseBranch the remote lacks is pushed on demand.
155
126
  *
156
127
  * @throws Error if not a git repo, no commits, or baseBranch doesn't exist
157
128
  */
@@ -166,39 +137,28 @@ export declare class GitManager {
166
137
  * EITHER the local-heads namespace (`refs/heads/<branch>`) or the GitHub
167
138
  * tracking namespace (`GITHUB_TRACKING_REF_PREFIX<branch>`).
168
139
  *
169
- * Originally checked `refs/heads/*` only, for dev-mode's
170
- * `ensureLocalSimulatedRemote` (a simulated remote never gets a tracking
171
- * namespace, so that caller only ever needed the local-heads check).
172
- * Generalized/promoted to public for api/branch.ts's create-time collision
173
- * guard, which also needs the tracking namespace: `syncGit()` fetches
174
- * GitHub into `GITHUB_TRACKING_REF_PREFIX*` rather than `refs/heads/*`
175
- * directly (see that constant's doc comment above), and
176
- * `reconcileTrackedBranches()` (worker/git-sync.ts) only
177
- * non-destructively brings `refs/heads/*` toward what's tracked there — so
178
- * a branch that another CanopyCMS deployment sharing this repo (or a
179
- * direct push to GitHub) just created can sit in the tracking namespace
180
- * for a while before, or without ever, gaining a local head here. Checking
181
- * `refs/heads/*` alone would miss exactly the two-deployments-one-repo
182
- * collision that guard exists to catch.
140
+ * Both namespaces matter to api/branch.ts's create-time collision guard: a
141
+ * branch another CanopyCMS deployment sharing this repo (or a direct push to
142
+ * GitHub) just created sits in the tracking namespace before, or without
143
+ * ever, gaining a local head here (see GITHUB_TRACKING_REF_PREFIX above), so
144
+ * checking `refs/heads/*` alone would miss exactly the
145
+ * two-deployments-one-repo collision that guard exists to catch.
183
146
  *
184
147
  * Runs git with an explicit `--git-dir` instead of a cwd inside the repo:
185
148
  * environments with `safe.bareRepository=explicit` (sandboxed/CI git setups)
186
149
  * refuse cwd-based discovery of bare repos but expressly allow `--git-dir`.
187
- * A single `for-each-ref` call checks both candidate refs at once (no
188
- * exception-based control flow — `for-each-ref` exits 0 whether or not
189
- * either ref exists, same reason the old implementation used `branch
190
- * --list` instead of `rev-parse --verify --quiet`: simple-git only fails a
191
- * task on stderr output, and `--quiet` suppresses exactly that).
192
- * `--end-of-options` guards the ref-name positionals the same way
193
- * `push` below does, since `branch` here can be a sanitized but otherwise
194
- * caller-influenced string.
150
+ * A single `for-each-ref` call checks both candidate refs at once, without
151
+ * exception-based control flow — it exits 0 whether or not either ref
152
+ * exists, whereas `rev-parse --verify --quiet` suppresses the stderr output
153
+ * that is the only thing simple-git fails a task on. `--end-of-options`
154
+ * guards the ref-name positionals the same way `push` below does, since
155
+ * `branch` here is sanitized but otherwise caller-influenced.
195
156
  *
196
157
  * A failure here therefore means the remote itself is unreadable and is
197
158
  * surfaced, NOT treated as "branch absent" — that would route
198
159
  * `ensureLocalSimulatedRemote` to the push path against a repo it couldn't
199
160
  * even read, and would silently skip api/branch.ts's collision check
200
- * instead of letting that caller distinguish "unreadable" from "absent"
201
- * and decide what to do.
161
+ * instead of letting that caller distinguish "unreadable" from "absent".
202
162
  */
203
163
  static bareRemoteHasBranch(remotePath: string, branch: string, options?: {
204
164
  namespaces?: 'both' | 'tracking';
@@ -207,36 +167,30 @@ export declare class GitManager {
207
167
  * Delete `refs/heads/<branch>` from a bare local mirror, if present. A
208
168
  * no-op (not an error) when the ref doesn't exist.
209
169
  *
210
- * This is the "explicit path" for removing a deleted branch's local head
211
- * that the sync loop deliberately is not (see GITHUB_TRACKING_REF_PREFIX's
212
- * doc comment: reconcileTrackedBranches never deletes a head). Called by
213
- * api/branch.ts's deleteBranchHandler: without it, a deleted branch's head
214
- * lives in `remote.git` forever, and the ordinary create -> publish ->
215
- * squash-merge -> delete -> reuse-the-name cycle then has the REUSED
216
- * branch's first publish rejected non-fast-forward against the stale head
217
- * (`GitManager.push()` pushes `branch:branch`, and a squash-merged old tip
218
- * is not an ancestor of the new branch) -- a permanent, misleading 409.
219
- * Worse, a retried submit skips the local push (clean tree) and enqueues
220
- * the worker push of the STALE head, resurrecting the deleted branch's
221
- * content on GitHub as an apparent success.
170
+ * The explicit path for removing a deleted branch's local head, which the
171
+ * sync loop deliberately is not (reconcileTrackedBranches never deletes a
172
+ * head — see GITHUB_TRACKING_REF_PREFIX). Called by api/branch.ts's
173
+ * deleteBranchHandler: a head left in `remote.git` forever makes the
174
+ * create -> publish -> squash-merge -> delete -> reuse-the-name cycle reject
175
+ * the reused branch's first publish non-fast-forward against the stale head
176
+ * (`GitManager.push()` pushes `branch:branch`, and a squash-merged old tip is
177
+ * not an ancestor of the new branch), and a retried submit then skips the
178
+ * local push on a clean tree and enqueues the worker push of the STALE head,
179
+ * resurrecting the deleted branch's content on GitHub as an apparent success.
222
180
  *
223
- * Deliberately leaves the tracking ref (`GITHUB_TRACKING_REF_PREFIX<branch>`)
224
- * alone: that namespace mirrors GitHub's view, and if the branch still
225
- * exists on GitHub, the create-time collision check SHOULD keep reporting
226
- * it until the remote side is actually gone.
181
+ * Leaves the tracking ref (`GITHUB_TRACKING_REF_PREFIX<branch>`) alone: that
182
+ * namespace mirrors GitHub's view, so while the branch still exists there the
183
+ * create-time collision check SHOULD keep reporting it.
227
184
  *
228
- * Same `--git-dir` invocation style as bareRemoteHasBranch above (works
229
- * under `safe.bareRepository=explicit`). The existence pre-check makes
230
- * "absent" deterministic instead of parsing update-ref's locale-dependent
231
- * failure text, and its captured SHA is passed to `update-ref -d` as the
232
- * expected old value -- same pattern as reconcileTrackedBranches'
233
- * guarded updates (worker/git-sync.ts): a concurrent Lambda push
234
- * re-creating/moving this branch between the read and the delete makes
235
- * update-ref throw (surfaced as the caller's best-effort warning) instead
236
- * of silently deleting a commit that was just pushed. No
237
- * `--end-of-options` on update-ref (older gits don't accept it there);
238
- * the ref argument always begins with the literal `refs/heads/` prefix,
239
- * so it can never parse as an option.
185
+ * Same `--git-dir` invocation style as bareRemoteHasBranch above (works under
186
+ * `safe.bareRepository=explicit`). The existence pre-check makes "absent"
187
+ * deterministic instead of parsing update-ref's locale-dependent failure
188
+ * text, and its captured SHA is passed to `update-ref -d` as the expected old
189
+ * value, so a concurrent push re-creating or moving this branch between the
190
+ * read and the delete makes update-ref throw instead of silently deleting a
191
+ * just-pushed commit. No `--end-of-options` on update-ref (older gits reject
192
+ * it there); the ref argument always begins with the literal `refs/heads/`
193
+ * prefix, so it can never parse as an option.
240
194
  */
241
195
  static deleteBareRemoteHead(remotePath: string, branch: string): Promise<void>;
242
196
  /**
@@ -250,34 +204,23 @@ export declare class GitManager {
250
204
  */
251
205
  private static pushBranchToLocalRemote;
252
206
  /**
253
- * Find the git root directory
254
207
  * @returns Path to git root, or cwd if not in a git repo
255
208
  */
256
209
  static findGitRoot(): Promise<string>;
257
210
  /**
258
- * Validate that a git repository exists at the given path
259
- * @param repoPath - Path to check for .git directory
260
211
  * @throws Error if git repo doesn't exist
261
212
  */
262
213
  static validateGitRepoExists(repoPath: string): Promise<void>;
263
214
  /**
264
215
  * Guards prod mode against pointing git operations at a NETWORK remote
265
- * (http(s)://, ssh://, git://, or scp-like `user@host:path`).
216
+ * (http(s)://, ssh://, git://, or scp-like `user@host:path`): the prod CMS
217
+ * Lambda has no internet access and would hang until timeout trying to
218
+ * clone/fetch/push one. Fires only for `mode === 'prod'`, and only for the
219
+ * three resolvable sources (explicit param, config, env var) — `file://`
220
+ * URLs, plain filesystem paths and `resolveRemoteUrl`'s auto-detect step
221
+ * (local by construction) are always allowed.
266
222
  *
267
- * In the intended prod architecture the CMS Lambda has no internet access:
268
- * all git network I/O happens on the EC2 worker against the EFS-local bare
269
- * repo `{workspace}/remote.git`, which the Lambda reaches via auto-detect
270
- * (see `resolveRemoteUrl`'s auto-detect step, which always yields a local
271
- * path by construction — never checked here). A network URL supplied via
272
- * any of the three resolvable sources (explicit param, config, env var) is
273
- * almost always a misconfiguration: the internet-less Lambda would try to
274
- * clone/fetch/push it directly and hang until timeout.
275
- *
276
- * Dev mode is never restricted here — this only fires for `mode === 'prod'`.
277
- * `file://` URLs and plain filesystem paths are LOCAL and always allowed.
278
- *
279
- * @param source - Human-readable description of where `url` came from, used
280
- * only in the thrown error message (e.g. "config.defaultRemoteUrl").
223
+ * @param source - Where `url` came from, for the thrown error message only.
281
224
  */
282
225
  private static assertRemoteUrlAllowedInMode;
283
226
  /**
@@ -287,17 +230,12 @@ export declare class GitManager {
287
230
  * 3. Environment variable (mode-specific)
288
231
  * 4. Auto-initialized local remote (for dev mode)
289
232
  *
290
- * Uses strategy flags to determine behavior, GitManager executes the logic.
291
- *
292
- * In prod mode, a resolved network URL from any of the first three sources
293
- * is rejected unless `options.allowNetworkRemoteInProd` is set — see
294
- * `assertRemoteUrlAllowedInMode`. Auto-detect/auto-init (source 4) are never
295
- * checked: they always yield a local filesystem path by construction.
296
- *
297
- * @param options.sourceRoot - Optional source directory for monorepos. When provided,
298
- * this directory (relative to git root) is used as the source for the simulated remote.
299
- * Defaults to process.cwd().
233
+ * In prod mode a resolved network URL from any of the first three sources is
234
+ * rejected unless `options.allowNetworkRemoteInProd` is set — see
235
+ * `assertRemoteUrlAllowedInMode`.
300
236
  *
237
+ * @param options.sourceRoot - Source directory for monorepos, relative to the
238
+ * git root; the source for the simulated remote. Defaults to process.cwd().
301
239
  * @returns Remote URL or undefined if no remote is needed
302
240
  */
303
241
  static resolveRemoteUrl(options: ResolveRemoteUrlOptions): Promise<string | undefined>;
@@ -306,45 +244,34 @@ export declare class GitManager {
306
244
  *
307
245
  * Uses `rev-parse --git-dir` with `GIT_CEILING_DIRECTORIES` pinned to the
308
246
  * parent directory so a corrupt/missing `.git` can't make git silently
309
- * traverse upward and report a false positive from an ancestor repo (the
310
- * same protection `initializeWorkspace` relies on below).
247
+ * traverse upward and report a false positive from an ancestor repo.
311
248
  *
312
249
  * Shared by `initializeWorkspace` (clone-vs-reuse decision) and
313
250
  * `SettingsWorkspaceManager`'s rename guard (settings-workspace.ts), which
314
251
  * must know whether a settings workspace ALREADY exists before touching it —
315
- * touching an existing orphan settings branch under a different name wipes
316
- * permissions.json/groups.json (see that guard's doc comment).
252
+ * re-initializing one under a different name wipes permissions.json/groups.json.
317
253
  */
318
254
  static repoExistsAt(workspacePath: string): Promise<boolean>;
319
255
  /**
320
256
  * Ensures a git workspace is initialized and ready for use.
321
257
  * Handles cloning, remote configuration, and branch checkout/creation.
322
258
  *
323
- * This centralizes the common initialization sequence used by both BranchWorkspaceManager
324
- * and SettingsWorkspaceManager.
325
- *
326
259
  * Note: Does NOT configure git author - that should be done before commits, not during init.
327
- *
328
- * @returns Configured GitManager instance for the workspace
329
260
  */
330
261
  static initializeWorkspace(options: InitializeWorkspaceOptions): Promise<GitManager>;
331
262
  status(): Promise<GitStatus>;
332
263
  /**
333
264
  * Mark ContentStore ID indexes AND the resolved-schema cache rooted at (or
334
- * under) this repo as stale. Called after operations that mutate the
335
- * working tree (checkout/merge/rebase) so ID→path lookups don't keep
336
- * resolving to pre-mutation paths, and so a rebase/checkout that pulled in
337
- * upstream `.collection.json` changes doesn't leave the schema cache
338
- * pinned to the pre-mutation schema. Invoked in `finally` blocks because
339
- * even failed merges/rebases may have touched the tree before aborting;
340
- * over-invalidating is safe.
265
+ * under) this repo as stale, so ID→path lookups and `.collection.json`
266
+ * schemas don't stay pinned to the pre-mutation tree. Called in `finally`
267
+ * blocks around every working-tree mutation (checkout/merge/rebase) because
268
+ * even a failed merge may have touched the tree; over-invalidating is safe.
341
269
  *
342
- * Covers both scopes: in-process stores/caches via their registries, and
343
- * consumers in OTHER processes sharing the filesystem (worker vs Lambda on
344
- * EFS) via the on-disk generation markers — unless this manager targets a
345
- * settings workspace (skipIndexMarker), where only the free in-process
346
- * content-index invalidation runs and NEITHER marker is bumped (settings
347
- * workspaces have no schema cache of their own either).
270
+ * Covers in-process stores/caches via their registries and other processes
271
+ * sharing the filesystem (worker vs Lambda on EFS) via the on-disk generation
272
+ * markers — except on a settings workspace (skipIndexMarker), where only the
273
+ * free in-process content-index invalidation runs and NEITHER marker is
274
+ * bumped (such workspaces have no schema cache of their own either).
348
275
  */
349
276
  private invalidateContentIndexes;
350
277
  checkoutBranch(branch: string): Promise<void>;
@@ -359,27 +286,21 @@ export declare class GitManager {
359
286
  commit(message: string): Promise<void>;
360
287
  push(branch?: string): Promise<void>;
361
288
  /**
362
- * Check whether the local branch has commits the remote mirror doesn't
363
- * have -- i.e. whether push() would actually move the remote ref forward.
289
+ * Whether the local branch has commits the remote mirror doesn't -- i.e.
290
+ * whether push() would move the remote ref forward.
364
291
  *
365
- * Exists so callers (submitBranch) can gate pushing on "is there anything
366
- * new to send" rather than on "is the working tree dirty": committing
367
- * cleans the tree, so a dirty-tree gate around commit+push skips the push
368
- * entirely on a retry after a failed push, even though the just-created
369
- * commit never reached the remote (see services.ts submitBranch).
292
+ * Callers (services.ts submitBranch) gate pushing on this rather than on "is
293
+ * the working tree dirty": committing cleans the tree, so a dirty-tree gate
294
+ * around commit+push skips the push entirely when retried after a failed
295
+ * push, even though the commit never reached the remote.
370
296
  *
371
- * Workspaces are cloned `--single-branch`, so the remote-tracking ref for
372
- * any branch other than the one cloned never exists locally -- same
373
- * constraint pullBaseInner works around. This fetches the specific branch
374
- * directly (bypassing the configured single-branch refspec, exactly like
375
- * pullBaseInner) and pins the result to FETCH_HEAD's SHA immediately after
376
- * the fetch that populated it, rather than trusting `<remote>/<branch>`:
377
- * FETCH_HEAD is a shared mutable file that any other fetch in this clone
378
- * can repoint before it's read.
297
+ * Fetches the specific branch directly and pins FETCH_HEAD's SHA immediately
298
+ * after, rather than trusting `<remote>/<branch>` -- the pullBaseInner
299
+ * constraint: single-branch clones have no remote-tracking ref for any other
300
+ * branch, and FETCH_HEAD is shared mutable state.
379
301
  *
380
- * A branch that has never been pushed has no ref on the remote at all --
381
- * `git fetch` then fails ("couldn't find remote ref"), which this treats
382
- * as "ahead" (needs pushing) rather than an error.
302
+ * A branch never pushed has no ref on the remote, so `git fetch` fails
303
+ * ("couldn't find remote ref"); that counts as "ahead", not an error.
383
304
  */
384
305
  hasUnpushedCommits(branch?: string): Promise<boolean>;
385
306
  ensureAuthor(author: {
@@ -387,39 +308,19 @@ export declare class GitManager {
387
308
  email: string;
388
309
  }): Promise<void>;
389
310
  ensureRemote(remoteUrl: string): Promise<void>;
390
- /**
391
- * Check if working directory has uncommitted changes
392
- */
393
311
  hasUncommittedChanges(): Promise<boolean>;
394
- /**
395
- * Get list of uncommitted file paths
396
- */
397
312
  getUncommittedFiles(): Promise<string[]>;
398
- /**
399
- * Get remote URL for current repo
400
- */
401
313
  getRemoteUrl(): Promise<string | undefined>;
402
314
  /**
403
- * Add a pattern to .git/info/exclude to prevent it from being committed/pushed.
404
- * This is used to exclude .canopy-meta/ from content branch workspaces.
405
- *
406
- * .git/info/exclude is a per-repository gitignore that never gets committed.
407
- * Perfect for runtime metadata that should never leave the workspace.
408
- *
409
- * This is idempotent - if the pattern already exists, it won't be added again.
315
+ * Excludes `pattern` (e.g. `.canopy-meta/`) from this workspace's git, so it
316
+ * can never be committed or pushed. See {@link ensureGitExcludePattern}.
410
317
  */
411
318
  ensureGitExclude(pattern: string): Promise<void>;
412
319
  /**
413
- * Create an orphan branch for settings (permissions/groups).
414
- *
415
- * Orphan branches have no shared history with other branches - they start fresh.
416
- * This is perfect for deployment-specific settings that shouldn't pollute content history.
417
- *
418
- * The branch contains only settings files committed by explicit path
419
- * (e.g. permissions.json, groups.json at the workspace root).
420
- *
421
- * @param branchName - Name of the orphan branch (e.g., 'canopycms-settings-prod')
422
- * @param initialFiles - Files to commit to the new branch (e.g., { 'permissions.json': '{}', 'groups.json': '{}' })
320
+ * Create an orphan branch (no shared history) for settings, so
321
+ * deployment-specific settings never pollute content history. It holds only
322
+ * settings files committed by explicit path (permissions.json, groups.json at
323
+ * the workspace root).
423
324
  */
424
325
  createOrphanSettingsBranch(branchName: string, initialFiles: Record<string, string>): Promise<void>;
425
326
  private createOrphanSettingsBranchInner;