@riverbankcms/sdk 0.129.0 → 0.129.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +19 -256
  2. package/dist/{PreviewEditorSidebar-B43CJ0g_.mjs → PreviewEditorSidebar-DceRseRV.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-DHirVkeM.mjs → PreviewEditorUI-BNunq3kk.mjs} +2 -2
  4. package/dist/{SdkPreviewModeRuntime-BJumZy1B.mjs → SdkPreviewModeRuntime-Bt87-62u.mjs} +3 -3
  5. package/dist/{SiteChromeCustomizeContext-D9SlpwEj.mjs → SiteChromeCustomizeContext-BLl-OlL4.mjs} +460 -393
  6. package/dist/_dts/ai/src/contracts/commandExposure.d.ts +1 -1
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +4897 -4897
  8. package/dist/_dts/api/src/index.d.ts +2 -1
  9. package/dist/_dts/api/src/sdk-event-management.d.ts +53 -0
  10. package/dist/_dts/api/src/sdk-event-schedule.d.ts +3 -6
  11. package/dist/_dts/api/src/sdkContracts.d.ts +37 -50
  12. package/dist/_dts/api/src/sdkThemeWire.d.ts +2595 -0
  13. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +13 -29
  14. package/dist/_dts/media-core/src/index.d.ts +1 -0
  15. package/dist/_dts/sdk/src/config/types.d.ts +4 -4
  16. package/dist/_dts/sdk/src/version.d.ts +1 -1
  17. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  18. package/dist/_dts/theme-core/src/palette/index.d.ts +1 -0
  19. package/dist/_dts/theme-core/src/site-styles/headerLayoutStyleCatalog.d.ts +254 -0
  20. package/dist/_dts/theme-core/src/site-styles/headerLegacyLooks.d.ts +372 -0
  21. package/dist/_dts/theme-core/src/site-styles/headerLookBranding.d.ts +106 -0
  22. package/dist/_dts/theme-core/src/site-styles/headerLookSelection.d.ts +2 -0
  23. package/dist/_dts/theme-core/src/site-styles/headerLookTypes.d.ts +212 -0
  24. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +7 -841
  25. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +3 -0
  26. package/dist/_dts/theme-core/src/site-styles/headerStyleCompilerPrimitives.d.ts +23 -0
  27. package/dist/client/client.mjs +492 -426
  28. package/dist/client/hooks.mjs +59 -36
  29. package/dist/client/rendering/client.mjs +593 -547
  30. package/dist/client/rendering.mjs +491 -425
  31. package/dist/preview-next/client/runtime.mjs +3 -3
  32. package/dist/{sdk-runtime-CfZd5pAm.mjs → sdk-runtime-C20CVWbb.mjs} +1 -1
  33. package/dist/{separator-DkTe68HE.mjs → separator-BE3NCquy.mjs} +1 -1
  34. package/dist/server/components.mjs +72 -49
  35. package/dist/server/config-validation.mjs +59 -36
  36. package/dist/server/config.mjs +59 -36
  37. package/dist/server/data.mjs +59 -36
  38. package/dist/server/index.mjs +1 -1
  39. package/dist/server/manifest.mjs +4966 -0
  40. package/dist/server/next.mjs +73 -50
  41. package/dist/server/page-converter.mjs +40 -36
  42. package/dist/server/prebuild.mjs +1 -1
  43. package/dist/server/rendering/server.mjs +72 -49
  44. package/dist/server/rendering.mjs +72 -49
  45. package/dist/server/routing.mjs +472 -402
  46. package/dist/server/server.mjs +60 -37
  47. package/dist/server/theme-bridge.mjs +70 -66
  48. package/package.json +9 -12
  49. package/dist/_dts/api/src/event-presentation.d.ts +0 -14
  50. package/dist/_dts/blocks/src/definitions.d.ts +0 -14
  51. package/dist/_dts/sdk/src/cli/canonical-entry-policy.d.ts +0 -53
  52. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +0 -101
  53. package/dist/_dts/sdk/src/cli/commands/block.d.ts +0 -24
  54. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +0 -62
  55. package/dist/_dts/sdk/src/cli/commands/content-type.d.ts +0 -10
  56. package/dist/_dts/sdk/src/cli/commands/content.d.ts +0 -56
  57. package/dist/_dts/sdk/src/cli/commands/delete.d.ts +0 -14
  58. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +0 -43
  59. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +0 -18
  60. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +0 -55
  61. package/dist/_dts/sdk/src/cli/commands/env.d.ts +0 -31
  62. package/dist/_dts/sdk/src/cli/commands/event.d.ts +0 -23
  63. package/dist/_dts/sdk/src/cli/commands/eventOccurrenceSchedule.d.ts +0 -12
  64. package/dist/_dts/sdk/src/cli/commands/identifiers.d.ts +0 -10
  65. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +0 -13
  66. package/dist/_dts/sdk/src/cli/commands/manifest.d.ts +0 -10
  67. package/dist/_dts/sdk/src/cli/commands/media-validation.d.ts +0 -3
  68. package/dist/_dts/sdk/src/cli/commands/migrate.d.ts +0 -11
  69. package/dist/_dts/sdk/src/cli/commands/navigation.d.ts +0 -12
  70. package/dist/_dts/sdk/src/cli/commands/page.d.ts +0 -14
  71. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +0 -50
  72. package/dist/_dts/sdk/src/cli/commands/pull-dated-offering-scope.d.ts +0 -10
  73. package/dist/_dts/sdk/src/cli/commands/pull-dry-run.d.ts +0 -70
  74. package/dist/_dts/sdk/src/cli/commands/pull-scope-diff.d.ts +0 -8
  75. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +0 -43
  76. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +0 -3
  77. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +0 -19
  78. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +0 -42
  79. package/dist/_dts/sdk/src/cli/commands/push/execute/localMediaReporting.d.ts +0 -23
  80. package/dist/_dts/sdk/src/cli/commands/push/execute/media.d.ts +0 -22
  81. package/dist/_dts/sdk/src/cli/commands/push/execute/metadata.d.ts +0 -1
  82. package/dist/_dts/sdk/src/cli/commands/push/execute/reporting.d.ts +0 -7
  83. package/dist/_dts/sdk/src/cli/commands/push/execute/theme.d.ts +0 -63
  84. package/dist/_dts/sdk/src/cli/commands/push/filter.d.ts +0 -15
  85. package/dist/_dts/sdk/src/cli/commands/push/metadata.d.ts +0 -29
  86. package/dist/_dts/sdk/src/cli/commands/push/normalizeLocalContent.d.ts +0 -2
  87. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +0 -32
  88. package/dist/_dts/sdk/src/cli/commands/push/publishGuidance.d.ts +0 -15
  89. package/dist/_dts/sdk/src/cli/commands/push/pushAllExtras.d.ts +0 -25
  90. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +0 -83
  91. package/dist/_dts/sdk/src/cli/commands/push/scopes/eventCategories.d.ts +0 -4
  92. package/dist/_dts/sdk/src/cli/commands/push/scopes/events.d.ts +0 -4
  93. package/dist/_dts/sdk/src/cli/commands/push/scopes/mediaPrep.d.ts +0 -14
  94. package/dist/_dts/sdk/src/cli/commands/push/scopes/pushScopeGeneric.d.ts +0 -6
  95. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +0 -87
  96. package/dist/_dts/sdk/src/cli/commands/push/scopes/venues.d.ts +0 -4
  97. package/dist/_dts/sdk/src/cli/commands/push/stale-resolution.d.ts +0 -48
  98. package/dist/_dts/sdk/src/cli/commands/push/stale.d.ts +0 -17
  99. package/dist/_dts/sdk/src/cli/commands/push/verification.d.ts +0 -56
  100. package/dist/_dts/sdk/src/cli/commands/push/workflowPlan.d.ts +0 -34
  101. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +0 -54
  102. package/dist/_dts/sdk/src/cli/commands/push.d.ts +0 -40
  103. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +0 -3
  104. package/dist/_dts/sdk/src/cli/commands/style.d.ts +0 -60
  105. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +0 -11
  106. package/dist/_dts/sdk/src/cli/commands/webhooks.d.ts +0 -44
  107. package/dist/_dts/sdk/src/cli/config-loader.d.ts +0 -47
  108. package/dist/_dts/sdk/src/cli/content/collectionWriters.d.ts +0 -23
  109. package/dist/_dts/sdk/src/cli/content/edit/format.d.ts +0 -2
  110. package/dist/_dts/sdk/src/cli/content/edit/path.d.ts +0 -14
  111. package/dist/_dts/sdk/src/cli/content/edit/planner.d.ts +0 -46
  112. package/dist/_dts/sdk/src/cli/content/entryPaths.d.ts +0 -6
  113. package/dist/_dts/sdk/src/cli/content/footerFile.d.ts +0 -10
  114. package/dist/_dts/sdk/src/cli/content/fs-utils.d.ts +0 -39
  115. package/dist/_dts/sdk/src/cli/content/legacyEventScheduleShapeError.d.ts +0 -5
  116. package/dist/_dts/sdk/src/cli/content/localEventSchedule.d.ts +0 -17
  117. package/dist/_dts/sdk/src/cli/content/media-manifest.d.ts +0 -13
  118. package/dist/_dts/sdk/src/cli/content/metadataAfterPush.d.ts +0 -25
  119. package/dist/_dts/sdk/src/cli/content/metadataStore.d.ts +0 -29
  120. package/dist/_dts/sdk/src/cli/content/reader.d.ts +0 -488
  121. package/dist/_dts/sdk/src/cli/content/writer.d.ts +0 -142
  122. package/dist/_dts/sdk/src/cli/env-scope.d.ts +0 -2
  123. package/dist/_dts/sdk/src/cli/env.d.ts +0 -71
  124. package/dist/_dts/sdk/src/cli/errors.d.ts +0 -62
  125. package/dist/_dts/sdk/src/cli/helpers/ai-runtime.d.ts +0 -2
  126. package/dist/_dts/sdk/src/cli/helpers.d.ts +0 -399
  127. package/dist/_dts/sdk/src/cli/index.d.ts +0 -11
  128. package/dist/_dts/sdk/src/cli/init-docs/constants.d.ts +0 -16
  129. package/dist/_dts/sdk/src/cli/init-docs/index.d.ts +0 -12
  130. package/dist/_dts/sdk/src/cli/init-docs/templates.d.ts +0 -18
  131. package/dist/_dts/sdk/src/cli/init-docs/zod-to-markdown.d.ts +0 -28
  132. package/dist/_dts/sdk/src/cli/load-config.d.ts +0 -14
  133. package/dist/_dts/sdk/src/cli/media/identifiers.d.ts +0 -18
  134. package/dist/_dts/sdk/src/cli/media/local-media.d.ts +0 -14
  135. package/dist/_dts/sdk/src/cli/media/local-sync.d.ts +0 -91
  136. package/dist/_dts/sdk/src/cli/media/portable.d.ts +0 -11
  137. package/dist/_dts/sdk/src/cli/media/rich-text.d.ts +0 -12
  138. package/dist/_dts/sdk/src/cli/media/value-utils.d.ts +0 -15
  139. package/dist/_dts/sdk/src/cli/media/write-guard.d.ts +0 -52
  140. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +0 -3
  141. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +0 -78
  142. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePlan.d.ts +0 -45
  143. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +0 -24
  144. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +0 -18
  145. package/dist/_dts/sdk/src/cli/merge-remote/entryRemote.d.ts +0 -9
  146. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +0 -48
  147. package/dist/_dts/sdk/src/cli/merge-remote/mergeFieldChanges.d.ts +0 -22
  148. package/dist/_dts/sdk/src/cli/merge-remote/pageLocal.d.ts +0 -3
  149. package/dist/_dts/sdk/src/cli/merge-remote/pageMerge.d.ts +0 -78
  150. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePlan.d.ts +0 -36
  151. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePush.d.ts +0 -23
  152. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +0 -17
  153. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +0 -46
  154. package/dist/_dts/sdk/src/cli/merge-remote/sharedBaseSnapshots.d.ts +0 -32
  155. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergePlan.d.ts +0 -27
  156. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergeReport.d.ts +0 -63
  157. package/dist/_dts/sdk/src/cli/migrations/entries.d.ts +0 -28
  158. package/dist/_dts/sdk/src/cli/migrations/events.d.ts +0 -73
  159. package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +0 -11
  160. package/dist/_dts/sdk/src/cli/output.d.ts +0 -133
  161. package/dist/_dts/sdk/src/cli/program.d.ts +0 -29
  162. package/dist/_dts/sdk/src/cli/push-config.d.ts +0 -49
  163. package/dist/_dts/sdk/src/cli/setup/setupPlan.d.ts +0 -51
  164. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +0 -13
  165. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +0 -170
  166. package/dist/_dts/sdk/src/cli/site-commands/commandRuntimeCompat.d.ts +0 -21
  167. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +0 -32
  168. package/dist/_dts/sdk/src/cli/site-commands/datedOfferingCommands.d.ts +0 -53
  169. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +0 -65
  170. package/dist/_dts/sdk/src/cli/site-commands/eventScheduleCompiler.d.ts +0 -24
  171. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +0 -68
  172. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +0 -53
  173. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +0 -8
  174. package/dist/_dts/sdk/src/cli/site-commands/localBlockManifestResolver.d.ts +0 -31
  175. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +0 -57
  176. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +0 -82
  177. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +0 -84
  178. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +0 -39
  179. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionPlan.d.ts +0 -8
  180. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +0 -97
  181. package/dist/_dts/sdk/src/cli/site-commands/residualSettingsTrimming.d.ts +0 -15
  182. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +0 -222
  183. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +0 -84
  184. package/dist/_dts/sdk/src/cli/sync/field-diff.d.ts +0 -39
  185. package/dist/_dts/sdk/src/cli/sync/index.d.ts +0 -10
  186. package/dist/_dts/sdk/src/cli/sync/mapper.d.ts +0 -41
  187. package/dist/_dts/sdk/src/cli/sync/media-sync.d.ts +0 -15
  188. package/dist/_dts/sdk/src/cli/sync/media.d.ts +0 -158
  189. package/dist/_dts/sdk/src/cli/sync/syncResultAggregation.d.ts +0 -4
  190. package/dist/_dts/sdk/src/cli/sync/validation.d.ts +0 -68
  191. package/dist/_dts/sdk/src/cli/utils/checksum.d.ts +0 -1
  192. package/dist/_dts/sdk/src/client/management/blocks.d.ts +0 -19
  193. package/dist/_dts/sdk/src/client/management/catalog.d.ts +0 -10
  194. package/dist/_dts/sdk/src/client/management/entries.d.ts +0 -6
  195. package/dist/_dts/sdk/src/client/management/eventCategories.d.ts +0 -6
  196. package/dist/_dts/sdk/src/client/management/events.d.ts +0 -7
  197. package/dist/_dts/sdk/src/client/management/footer.d.ts +0 -9
  198. package/dist/_dts/sdk/src/client/management/forms.d.ts +0 -6
  199. package/dist/_dts/sdk/src/client/management/http.d.ts +0 -79
  200. package/dist/_dts/sdk/src/client/management/identifiers.d.ts +0 -11
  201. package/dist/_dts/sdk/src/client/management/index.d.ts +0 -41
  202. package/dist/_dts/sdk/src/client/management/media.d.ts +0 -72
  203. package/dist/_dts/sdk/src/client/management/navigation.d.ts +0 -6
  204. package/dist/_dts/sdk/src/client/management/pages.d.ts +0 -6
  205. package/dist/_dts/sdk/src/client/management/pull.d.ts +0 -6
  206. package/dist/_dts/sdk/src/client/management/settings-branding.d.ts +0 -32
  207. package/dist/_dts/sdk/src/client/management/settings.d.ts +0 -6
  208. package/dist/_dts/sdk/src/client/management/theme.d.ts +0 -8
  209. package/dist/_dts/sdk/src/client/management/types.d.ts +0 -1069
  210. package/dist/_dts/sdk/src/client/management/venues.d.ts +0 -6
  211. package/dist/_dts/sdk/src/client/management/webhooks.d.ts +0 -3
  212. package/dist/_dts/sdk/src/test/env.d.ts +0 -4
  213. package/dist/_dts/site-commands/src/adapter.d.ts +0 -23
  214. package/dist/_dts/site-commands/src/appointmentCommandSchemas.d.ts +0 -100
  215. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +0 -8
  216. package/dist/_dts/site-commands/src/commandContract.d.ts +0 -1277
  217. package/dist/_dts/site-commands/src/commandDomain.d.ts +0 -20
  218. package/dist/_dts/site-commands/src/commandIdentifiers.d.ts +0 -7
  219. package/dist/_dts/site-commands/src/commandValidation.d.ts +0 -10
  220. package/dist/_dts/site-commands/src/commands.d.ts +0 -1983
  221. package/dist/_dts/site-commands/src/domain.d.ts +0 -104
  222. package/dist/_dts/site-commands/src/eventCommandContent.d.ts +0 -11
  223. package/dist/_dts/site-commands/src/exposure.d.ts +0 -41
  224. package/dist/_dts/site-commands/src/guards.d.ts +0 -1
  225. package/dist/_dts/site-commands/src/index.d.ts +0 -18
  226. package/dist/_dts/site-commands/src/metadata.d.ts +0 -555
  227. package/dist/_dts/site-commands/src/pagePaths.d.ts +0 -6
  228. package/dist/_dts/site-commands/src/planner.d.ts +0 -58
  229. package/dist/_dts/site-commands/src/refContributions.d.ts +0 -11
  230. package/dist/_dts/site-commands/src/refs.d.ts +0 -90
  231. package/dist/_dts/site-commands/src/siteStyleCommandSchema.d.ts +0 -405
  232. package/dist/_dts/site-commands/src/siteStyleSelectionSchemaBuilder.d.ts +0 -46
  233. package/dist/_dts/site-commands/src/stableJson.d.ts +0 -5
  234. package/dist/_dts/site-commands/src/staticExecutionGaps.d.ts +0 -10
  235. package/dist/_dts/site-commands/src/venueCommandMapping.d.ts +0 -21
  236. package/dist/_dts/theme-core/src/data.d.ts +0 -12
  237. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +0 -4
  238. package/dist/cli/index.mjs +0 -162988
  239. package/dist/cli/init-docs/content/agents-section.md +0 -67
  240. package/dist/cli/init-docs/content/cli-reference.md +0 -1238
  241. package/dist/cli/init-docs/content/content-management.md +0 -792
  242. package/dist/cli/init-docs/content/context-brand.md +0 -125
  243. package/dist/cli/init-docs/content/context-brief.md +0 -77
  244. package/dist/cli/init-docs/content/context-knowledge.md +0 -111
  245. package/dist/cli/init-docs/content/getting-started.md +0 -171
  246. package/dist/cli/init-docs/content/site-workflows-readme.md +0 -96
  247. package/dist/cli/init-docs/content/workflow-add-block.md +0 -299
  248. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +0 -83
  249. package/dist/cli/init-docs/content/workflow-block-extensions.md +0 -370
  250. package/dist/cli/init-docs/content/workflow-cmsify-page.md +0 -357
  251. package/dist/cli/init-docs/content/workflow-content-types.md +0 -330
  252. package/dist/cli/init-docs/content/workflow-create-page.md +0 -212
  253. package/dist/cli/init-docs/content/workflow-custom-block.md +0 -470
  254. package/dist/cli/init-docs/content/workflow-editor-workflows.md +0 -130
  255. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +0 -158
  256. package/dist/cli/init-docs/content/workflow-preview-mode.md +0 -252
  257. package/dist/cli/init-docs/content/workflow-publish.md +0 -285
  258. package/dist/cli/init-docs/content/workflow-remote-setup.md +0 -51
  259. package/dist/cli/init-docs/content/workflow-templates.md +0 -381
  260. /package/dist/_dts/{sdk/src/cli/utils/mime.d.ts → media-core/src/mimeType.d.ts} +0 -0
@@ -1,1238 +0,0 @@
1
- # SDK CLI Reference
2
-
3
- The RiverbankCMS SDK CLI (`riverbankcms`) manages content synchronization between local files and the CMS.
4
-
5
- ## Global Options
6
-
7
- All commands support these options:
8
-
9
- | Option | Description |
10
- | ---------------- | ---------------------------------------------------------- |
11
- | `--json` | Output a single JSON envelope for machine parsing |
12
- | `--quiet` | Minimal output (suppress non-essential messages) |
13
- | `--env <target>` | Target environment: `local` (default), `remote`, or `both` |
14
- | `--remote` | **[Deprecated]** Use `--env=remote` instead |
15
-
16
- **The `--json` envelope (single-document contract):** under `--json`, *every* invocation emits **exactly one** JSON document on stdout:
17
-
18
- ```json
19
- { "ok": true, "command": "entry get", "result": { }, "warnings": [], "errors": [] }
20
- ```
21
-
22
- - `ok: false` always carries a non-empty `errors` array, and the process exits non-zero — failures never print a stack trace on stdout. `ok: true` always has empty `errors`.
23
- - Commander's own paths ride the same envelope: `--help`, `--version`, and even an unknown command emit one document (an unknown command is `ok: false` with a non-zero exit).
24
- - Prompts are written to stderr, so JSON mode requires `--yes` for anything that would otherwise ask for confirmation. Non-envelope diagnostics (deprecation notices, warnings) go to stderr and never pollute the stdout document.
25
-
26
- **Environment targeting:**
27
-
28
- - `--env=local` (default): Target local Supabase/development environment
29
- - `--env=remote`: Target production CMS
30
- - `--env=both`: Run against both environments sequentially
31
-
32
- **Safety behavior:**
33
-
34
- - Local operations execute immediately
35
- - Remote operations default to dry-run and require `--yes` to execute
36
- - When using `--env=both`, local runs first, then remote with the same safety rules
37
-
38
- Prefer the CLI `--env` flag over shell prefixes such as `RIVERBANK_ENV=remote riverbankcms ...`. Site `.env.local` files may define `RIVERBANK_ENV`, and command-specific `--env` is the reliable way to target local or remote CMS sync.
39
-
40
- ## Environment Variables
41
-
42
- ### Local Environment (default)
43
-
44
- ```bash
45
- # Required
46
- RIVERBANK_LOCAL_SITE_ID=your-site-id
47
- RIVERBANK_LOCAL_DASHBOARD_URL=http://localhost:4000
48
- RIVERBANK_LOCAL_MGMT_API_KEY=bld_mgmt_sk_...
49
-
50
- # Optional
51
- RIVERBANK_LOCAL_API_KEY=bld_live_sk_... # For prebuild/content fetching
52
- ```
53
-
54
- ### Remote Environment (--env=remote)
55
-
56
- ```bash
57
- # Required
58
- RIVERBANK_REMOTE_SITE_ID=your-site-id
59
- RIVERBANK_REMOTE_DASHBOARD_URL=https://your-dashboard.riverbankcms.com
60
- RIVERBANK_REMOTE_MGMT_API_KEY=bld_mgmt_sk_...
61
-
62
- # Optional
63
- RIVERBANK_REMOTE_API_KEY=bld_live_sk_... # Required for deploy command
64
- ```
65
-
66
- **Notes:**
67
-
68
- - Management API keys start with `bld_mgmt_sk_` (for write operations)
69
- - Content API keys start with `bld_live_sk_` (for read-only operations)
70
- - `RIVERBANK_*_SUPABASE_URL` is deprecated and ignored by media sync
71
-
72
- ---
73
-
74
- ## Setup Commands
75
-
76
- ### setup plan
77
-
78
- Show the safe site, key, user access, and env setup lifecycle for the selected environment.
79
-
80
- ```bash
81
- # Show local setup status and lifecycle
82
- riverbankcms setup plan
83
-
84
- # Show remote setup status and lifecycle
85
- riverbankcms setup plan --env=remote
86
-
87
- # Show both targets as JSON
88
- riverbankcms setup plan --env=both --json
89
- ```
90
-
91
- The setup planner is read-only. It does not create sites, issue API keys, or grant dashboard access. Those operations require a dashboard/admin actor or an approved CMS repo script with service-role/admin credentials. SDK management keys are site-scoped and are only used for verifying access and syncing content/config for an existing site.
92
-
93
- Use this command when a project has missing `RIVERBANK_*_SITE_ID`, `RIVERBANK_*_DASHBOARD_URL`, or `RIVERBANK_*_MGMT_API_KEY` values, or when onboarding an existing remote site into an SDK repo.
94
-
95
- ---
96
-
97
- ## Content Sync Commands
98
-
99
- ### pull
100
-
101
- Download content from the CMS to local files.
102
-
103
- ```bash
104
- # Pull all content
105
- riverbankcms pull
106
-
107
- # Pull from production
108
- riverbankcms pull --env=remote
109
-
110
- # Download identifier-based media to content/media
111
- riverbankcms pull --local-media
112
-
113
- # Pull specific content types
114
- riverbankcms pull entries # All entries
115
- riverbankcms pull entries blog-post # Specific content type
116
- riverbankcms pull entries blog-post welcome # Specific entry
117
- riverbankcms pull pages # All pages with blocks
118
- riverbankcms pull pages home # Specific page with blocks
119
- riverbankcms pull navigation # Navigation menus
120
- riverbankcms pull settings # Site settings
121
- riverbankcms pull forms # Forms
122
- riverbankcms pull theme # Theme to content/themes/current.json
123
- riverbankcms pull venues # Event venues
124
- riverbankcms pull event-categories # Event categories
125
- riverbankcms pull events # Event series
126
- riverbankcms pull events summer-fest # Specific event series
127
- riverbankcms pull --with-theme # Pull content and theme together
128
-
129
- # Custom output directory
130
- riverbankcms pull --output ./src/content
131
- ```
132
-
133
- **Options:**
134
-
135
- | Option | Description |
136
- | ------------------- | ------------------------------------------------------------------------------------ |
137
- | `--output <dir>` | Output directory (default: ./content) |
138
- | `--force` | Overwrite existing files without prompting |
139
- | `--yes` | Skip confirmation prompt |
140
- | `--local-media` | Download media referenced by identifiers to content/media |
141
- | `--sync-media` | Sync media files between environments |
142
- | `--overwrite-media` | When using `--sync-media`, overwrite target media on checksum mismatch |
143
- | `--with-theme` | Also pull theme when pulling all content |
144
- | `--name <name>` | Theme name for `pull theme` / `pull --with-theme` (default: current) |
145
- | `--no-meta` | Skip writing `.meta/` and media manifest files (content files still written) |
146
- | `--diff` | Show human-readable field-level diff with before/after values (requires `--dry-run`) |
147
-
148
- **Theme files:**
149
-
150
- - `riverbankcms pull theme` writes to `content/themes/current.json` (or `contentDir/themes/current.json` if configured).
151
- - `riverbankcms pull` does not pull theme by default. Use `riverbankcms pull theme` or `riverbankcms pull --with-theme`.
152
-
153
- ### push
154
-
155
- Push local content changes to the CMS.
156
-
157
- ```bash
158
- # Push all content
159
- riverbankcms push
160
-
161
- # Preview changes without applying
162
- riverbankcms push --dry-run
163
-
164
- # Push to production (requires --yes)
165
- riverbankcms push --env=remote --yes
166
-
167
- # Push specific content types
168
- riverbankcms push entries # All entries
169
- riverbankcms push entries blog-post # Specific content type
170
- riverbankcms push entries blog-post welcome # Specific entry
171
- riverbankcms push pages # All pages with blocks
172
- riverbankcms push pages home # Specific page with blocks
173
- riverbankcms push navigation # Navigation menus
174
- riverbankcms push settings # Site settings / branding
175
- riverbankcms push forms # Forms
176
- riverbankcms push theme # Push content/themes/{activeTheme|current}.json
177
- riverbankcms push venues # Event venues
178
- riverbankcms push event-categories # Event categories
179
- riverbankcms push events # Event series, page-surface routes, and surface-slot blocks
180
- riverbankcms push --with-theme # Also push theme when pushing all content
181
-
182
- # JSON diff verbosity for agents (folded into the --json envelope)
183
- riverbankcms push --dry-run --json --diff-detail=summary
184
- riverbankcms push --dry-run --json --diff-detail=full
185
- ```
186
-
187
- **Agent-safe scoped push example:**
188
-
189
- ```bash
190
- riverbankcms push pages privacy-policy --env=remote --dry-run
191
- riverbankcms push pages privacy-policy --env=remote --yes
192
- ```
193
-
194
- If unrelated local files would be included by a broad scope, stage a temporary content directory containing only the intended file(s) and use `--content-dir`; see `workflows/agent-safe-sync.md`.
195
-
196
- **Options:**
197
-
198
- | Option | Description |
199
- | ---------------------- | ------------------------------------------------------------------------------------ |
200
- | `--content-dir <dir>` | Content directory (overrides config) |
201
- | `--dry-run` | Show changes without applying |
202
- | `--yes` | Skip confirmation (required for `--env=remote` or `--env=both`) |
203
- | `--force` | Push even if remote is newer (skip stale check) |
204
- | `--force-update-asset` | Replace CMS media when identifiers conflict (local media sync only) |
205
- | `--allow-truncated` | Push even if remote content was truncated (may cause incomplete sync) |
206
- | `--diff-detail <mode>` | Diff verbosity carried in the `--json` envelope: `summary` (default) or `full` |
207
- | `--json-diff [mode]` | **[Deprecated]** Alias of `--diff-detail`; folded into the `--json` envelope (warns on stderr) |
208
- | `--with-config` | Push SDK schema/config before dependent file content |
209
- | `--with-theme` | Also push theme when pushing all content |
210
- | `--sync-media` | Sync media files from local to remote environment |
211
- | `--overwrite-media` | When using `--sync-media`, overwrite target media on checksum mismatch |
212
- | `--merge-remote` | Plan an entries/pages three-way merge for `--env=remote` that preserves remote edits |
213
- | `--delete-orphaned` | Delete CMS entries not present in local files |
214
- | `--auto-pull-stale` | Automatically pull stale content and retry push |
215
- | `--no-meta` | Skip writing `.meta/` and media manifest files (content files still written) |
216
- | `--diff` | Show human-readable field-level diff with before/after values (requires `--dry-run`) |
217
- | `--verify-noop` | After an applied push, re-fetch the target and fail if changes remain |
218
- | `--delete-missing` | **[Deprecated]** Use `--delete-orphaned` instead |
219
-
220
- **Theme files:**
221
-
222
- - `riverbankcms push theme` reads from `content/themes/{activeTheme}.json` (falls back to `current.json`).
223
- - `riverbankcms push` does not push theme by default (to avoid overwriting dashboard edits). Use `riverbankcms push theme` or `riverbankcms push --with-theme`.
224
-
225
- **Delete Missing Entries:**
226
-
227
- The `--delete-missing` flag deletes CMS entries that don't exist in your local content file, making local content the source of truth. This is useful for keeping environments exactly in sync.
228
-
229
- ```bash
230
- # Delete CMS entries not in local file
231
- riverbankcms push entries service-tile --delete-missing
232
-
233
- # Preview deletes (dry-run is default for --env=remote)
234
- riverbankcms push entries service-tile --env=remote --delete-orphaned
235
-
236
- # Execute deletes on production
237
- riverbankcms push entries service-tile --env=remote --yes --delete-orphaned
238
- ```
239
-
240
- **Warning:** This is a destructive operation. Always use `--dry-run` first to preview which entries will be deleted.
241
-
242
- **Remote-aware content merge:**
243
-
244
- Use `--merge-remote` when pushing entries or pages to production and you want to preserve remote dashboard edits instead of treating local files as the whole source of truth. The CLI compares the last pulled base snapshot, local files, and current remote content, then prints a merge plan. Remote runs still default to dry-run; add `--yes` only after reviewing the plan. Page block changes are treated conservatively as conflicts unless remote blocks are unchanged.
245
-
246
- ```bash
247
- # Preview a merge for one content type
248
- riverbankcms push entries blog-post --env=remote --merge-remote
249
-
250
- # Apply after reviewing the plan
251
- riverbankcms push entries blog-post --env=remote --merge-remote --yes
252
-
253
- # Target a single entry
254
- riverbankcms push entries blog-post welcome --env=remote --merge-remote --yes
255
-
256
- # Target a single page
257
- riverbankcms push pages home --env=remote --merge-remote
258
- ```
259
-
260
- In v1 this mode supports `entries` and `pages` with `--env=remote`. It rejects `--env=both`, unsupported scopes, `--force`, `--delete-orphaned`, and `--auto-pull-stale`.
261
-
262
- **Local content edit helpers:**
263
-
264
- Use `content edit` for local file-backed edits. These commands do not call the CMS. They preview by default and require `--write` to mutate local files.
265
-
266
- ```bash
267
- # Preview removing a block from content/pages/home.json
268
- riverbankcms content edit remove-page-block home old-hero
269
-
270
- # Move a page block and write the file
271
- riverbankcms content edit move-page-block home intro --after hero --write
272
-
273
- # Set a string field
274
- riverbankcms content edit set-page-field home title --value "New title" --write
275
-
276
- # Set a JSON value
277
- riverbankcms content edit set-page-field home blocks[0].data.count --json-value 3
278
- ```
279
-
280
- After editing, run `riverbankcms push --dry-run --diff`, then push with `--verify-noop` when ready.
281
-
282
- **Post-push no-op verification:**
283
-
284
- Use `--verify-noop` when automation should prove the target CMS compares cleanly after an applied push. Verification re-reads local files from disk, re-fetches the target environment, and fails the command if remaining changes are found.
285
-
286
- ```bash
287
- riverbankcms push --yes --verify-noop
288
- riverbankcms push --env=both --yes --verify-noop
289
- ```
290
-
291
- `--verify-noop` cannot be combined with `--dry-run`; dry-run already answers the pre-push question. For remote targets, pass `--yes` so the push actually applies before verification. In JSON mode the CLI emits a `verification` object with `clean`, `dirty`, `fetch_failed`, or `unsupported_scope` status. A dirty result usually means the push did not leave the target in sync, but it can also mean another user or process changed remote content between the push and verification fetch.
292
-
293
- **Stale Content Detection:**
294
-
295
- Push compares local metadata timestamps against the remote CMS. If the remote has newer changes than your last pull, push aborts by default to prevent overwriting someone else's edits.
296
-
297
- Metadata is stored separately per CLI target under `content/.meta/local/` and `content/.meta/remote/`, with a small target marker so local and remote pulls do not overwrite each other's stale-detection base. Older flat `content/.meta/*.json` files are still read as a fallback and are written forward to the scoped layout on the next pull or metadata update.
298
-
299
- Options for handling stale content:
300
-
301
- - **Interactive prompt** (default in TTY): Push asks whether to pull the stale items and retry.
302
- - `--auto-pull-stale`: Automatically pull only the stale items and continue the push. Non-stale local content is preserved.
303
- - `--force`: Skip stale detection entirely and push regardless.
304
- - `--dry-run`: Stale warnings are shown but the push continues (no changes are made).
305
-
306
- ```bash
307
- # Auto-resolve stale content without prompting
308
- riverbankcms push --auto-pull-stale
309
-
310
- # Useful in CI where there's no TTY for interactive prompts
311
- riverbankcms push --auto-pull-stale --yes --env=remote
312
- ```
313
-
314
- For theme and footer pushes, stale resolution updates only the metadata timestamp (since the local file IS the content being pushed). For entries, pages, navigation, and forms, stale resolution writes the remote version of only the stale items to disk and updates their metadata before continuing the push.
315
-
316
- **Local Media (Identifiers):**
317
-
318
- - Add `identifier` to media fields (slug only, no extension)
319
- - Place files at `content/media/<identifier>.<ext>`
320
- - Run `riverbankcms push` to upload referenced files (default-on)
321
- - Treat `content/media/*` as local cache/migration working data by default. Generated SDK sites gitignore it, while allowing intentional small fixtures under `content/media/fixtures/`.
322
-
323
- **Branding workflow (`content/settings.json`):**
324
-
325
- ```json
326
- {
327
- "homepageId": null,
328
- "seoDefaults": null,
329
- "logoIdentifier": "positive-play-primary-logo",
330
- "faviconIdentifier": "positive-play-primary-logo"
331
- }
332
- ```
333
-
334
- - Use `logoIdentifier` / `faviconIdentifier` to manage the site logo and favicon from the repo
335
- - The identifiers should match files in `content/media/`
336
- - `riverbankcms push settings` reuses the normal local-media upload flow before updating site settings, without pushing unrelated content
337
- - `riverbankcms pull settings` warns and omits a branding field if the current CMS asset cannot be represented by an identifier yet
338
- - Dashboard branding edits and CLI pushes are last-write-wins on the same settings row, so pull before pushing after dashboard-side changes
339
-
340
- **Media portability (important):**
341
-
342
- - Content JSON is portable across environments; media references must be **identifier-only**.
343
- - The CLI writes identifier-only media objects on pull. Do not add `assetId`, `storagePath`, `storageBucket`, or `src` to your content JSON.
344
- - `--sync-media` copies **bytes** between CMS environments (identifier + checksum verified). It does not “push entries/pages” by itself (content changes still require `push`).
345
-
346
- **Sync Behavior** (configured in `riverbank.config.ts`):
347
-
348
- ```typescript
349
- export default defineConfig({
350
- siteId: "...",
351
- sync: {
352
- existingEntries: "update", // 'skip' (default) or 'update'
353
- },
354
- });
355
- ```
356
-
357
- **Status Sync**: Push automatically syncs draft/published status based on the `status` field in your local content files. If local content is "published" but remote is "draft", push will publish it. If local is "draft" but remote is "published", push will unpublish it.
358
-
359
- ### push-config
360
-
361
- Push SDK configuration to the CMS dashboard.
362
-
363
- ```bash
364
- riverbankcms push-config
365
- riverbankcms push-config --dry-run
366
- riverbankcms push-config --env=remote
367
- riverbankcms push-config --config ./src/riverbank.config.ts
368
- ```
369
-
370
- Syncs SDK schema/config surfaces such as custom blocks, block field options/extensions, content type definitions/templates, SDK-managed site settings, and footer blocks. Pages, entries, and navigation menus are synced with explicit `riverbankcms push` scopes.
371
-
372
- Use `--dry-run` to validate config and preview the schema/config surfaces that would be considered without mutating the dashboard.
373
-
374
- If `push-config` returns template binding validation errors, treat them as schema feedback. For example, a content type `reference` field should bind to a custom block `reference` field with the same `referenceKind`, not to a plain `text` field.
375
-
376
- This syncs:
377
-
378
- - Custom blocks
379
- - Block field extensions
380
- - Block field options
381
- - Dashboard UI configuration (e.g. navigation visibility)
382
- - Content type definitions and templates
383
- - SDK-managed site settings and footer blocks
384
-
385
- **Options:**
386
-
387
- | Option | Description |
388
- | ------------------- | ------------------ |
389
- | `--api-key <key>` | Management API key |
390
- | `--dashboard <url>` | Dashboard URL |
391
- | `--config <path>` | Config file path |
392
-
393
- ---
394
-
395
- ## Entry Commands
396
-
397
- Manage content entries.
398
-
399
- ### entry upsert
400
-
401
- Create or update an entry.
402
-
403
- ```bash
404
- # With inline JSON data
405
- riverbankcms entry upsert <type> <identifier> --data '{"title": "Hello World"}'
406
-
407
- # With JSON file
408
- riverbankcms entry upsert <type> <identifier> --file ./data.json
409
-
410
- # With individual fields
411
- riverbankcms entry upsert blog-post my-post \
412
- --slug my-post \
413
- --title "My Blog Post"
414
- ```
415
-
416
- **Arguments:**
417
-
418
- - `<type>` - Content type key (e.g., `blog-post`, `product`)
419
- - `<identifier>` - Unique identifier for the entry
420
-
421
- **Options:**
422
-
423
- | Option | Description |
424
- | ----------------- | --------------------------------- |
425
- | `--data <json>` | Entry data as JSON string |
426
- | `--file <path>` | Path to JSON file with entry data |
427
- | `--slug <slug>` | Entry slug |
428
- | `--title <title>` | Entry title |
429
-
430
- ### entry publish
431
-
432
- Publish an entry.
433
-
434
- ```bash
435
- riverbankcms entry publish <type> <identifier>
436
- riverbankcms entry publish blog-post my-post
437
- ```
438
-
439
- ### entry unpublish
440
-
441
- Unpublish an entry (revert to draft).
442
-
443
- ```bash
444
- riverbankcms entry unpublish <type> <identifier>
445
- riverbankcms entry unpublish blog-post my-post
446
- ```
447
-
448
- ### entry get
449
-
450
- Retrieve a single entry.
451
-
452
- ```bash
453
- riverbankcms entry get <type> <identifier>
454
- riverbankcms entry get blog-post my-post
455
- riverbankcms entry get blog-post 00000000-0000-0000-0000-000000000000 --by-id
456
- riverbankcms entry get blog-post my-post --json
457
- ```
458
-
459
- **Options:**
460
-
461
- | Option | Description |
462
- | --------- | ---------------------------------------------------------------------------- |
463
- | `--by-id` | Interpret `<identifier>` as an entry UUID and search within the content type |
464
-
465
- ### entry list
466
-
467
- List entries for a content type.
468
-
469
- ```bash
470
- riverbankcms entry list <type>
471
- riverbankcms entry list blog-post
472
- riverbankcms entry list blog-post --limit 10 --page 2
473
- riverbankcms entry list blog-post --json
474
- riverbankcms entry list blog-post --columns id,identifier,slug,status
475
- riverbankcms entry list blog-post --columns id,identifier --status published
476
- ```
477
-
478
- **Options:**
479
-
480
- | Option | Description |
481
- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
482
- | `--limit <n>` | Number of entries per page |
483
- | `--page <n>` | Page number (1-indexed) |
484
- | `--columns <csv>` | Comma-separated columns (e.g. `id,identifier,slug,status`). Aliases: `unpublished`→`hasUnpublishedChanges`, `updated`→`updatedAt`, `created`→`createdAt`, `published`→`publishedAt`, `type`→`contentType` |
485
- | `--status <draft | published>` | Filter by status. **Applies only to the returned page (post-pagination)** — for a complete cross-type overview of unpublished content use `riverbankcms drafts`. Passing `--status draft` emits a warning pointing you there. |
486
-
487
- ---
488
-
489
- ### entry scaffold
490
-
491
- Emit a machine-readable placeholder template plus fill-in diagnostics for a content type, derived from its field schema (pulled from the discovery catalog).
492
-
493
- ```bash
494
- riverbankcms entry scaffold blog-post # Template + diagnostics
495
- riverbankcms entry scaffold blog-post --json # Rides the single JSON envelope
496
- riverbankcms entry scaffold blog-post > new-post.json # Pipe the template to a file
497
- ```
498
-
499
- Required fields are stubbed with placeholder sentinels (`"<REQUIRED: text>"`, `{"identifier":"<REQUIRED: media-identifier>"}`, …) and optional fields are omitted. The template is **not** upsert-valid unfilled: replace every placeholder with a valid value and `entry upsert` accepts it without changing the object shape. `entry upsert` runs the same validator as a pre-flight, so any unfilled sentinel is rejected before any HTTP request. `diagnostics` lists what to fill and flags fields that reference existing site resources (media, files, entry references).
500
-
501
- In human mode the template prints to stdout (so it pipes cleanly) and diagnostics go to stderr. An unknown content type fails with the list of available types.
502
-
503
- ---
504
-
505
- ## Page Commands
506
-
507
- Manage pages.
508
-
509
- ### page upsert
510
-
511
- Create or update a page.
512
-
513
- ```bash
514
- riverbankcms page upsert <identifier> --title "Page Title" --path /url-path
515
-
516
- # Full example
517
- riverbankcms page upsert about \
518
- --title "About Us" \
519
- --path /about \
520
- --seo-title "About Us | Company Name" \
521
- --seo-description "Learn more about our company"
522
- ```
523
-
524
- **Arguments:**
525
-
526
- - `<identifier>` - Unique identifier for the page
527
-
528
- **Options:**
529
-
530
- | Option | Description |
531
- | -------------------------- | ------------------------- |
532
- | `--title <title>` | Page title |
533
- | `--path <path>` | URL path (e.g., `/about`) |
534
- | `--seo-title <title>` | SEO title tag |
535
- | `--seo-description <desc>` | SEO meta description |
536
-
537
- ### page publish
538
-
539
- Publish a page.
540
-
541
- ```bash
542
- riverbankcms page publish <identifier>
543
- riverbankcms page publish about
544
- ```
545
-
546
- ### page unpublish
547
-
548
- Unpublish a page (revert to draft).
549
-
550
- ```bash
551
- riverbankcms page unpublish <identifier>
552
- riverbankcms page unpublish about
553
- ```
554
-
555
- ### page get
556
-
557
- Retrieve a single page with its blocks.
558
-
559
- ```bash
560
- riverbankcms page get <identifier>
561
- riverbankcms page get about
562
- riverbankcms page get about --json
563
- ```
564
-
565
- ### page list
566
-
567
- List all pages.
568
-
569
- ```bash
570
- riverbankcms page list
571
- riverbankcms page list --limit 10 --page 1
572
- riverbankcms page list --json
573
- ```
574
-
575
- ---
576
-
577
- ## Block Commands
578
-
579
- Manage blocks within pages.
580
-
581
- ### block upsert
582
-
583
- Create or update a block on a page.
584
-
585
- ```bash
586
- # Basic usage
587
- riverbankcms block upsert <page-id> <block-id> --kind <block-kind> --data '<json>'
588
-
589
- # Examples
590
- riverbankcms block upsert home hero-main \
591
- --kind block.hero \
592
- --data '{"heading": "Welcome", "subheading": "to our site"}'
593
-
594
- # With JSON file
595
- riverbankcms block upsert home hero-main \
596
- --kind block.hero \
597
- --file ./hero-content.json
598
-
599
- # With position
600
- riverbankcms block upsert home new-section \
601
- --kind block.body-text \
602
- --data '{"content": "<p>Hello</p>"}' \
603
- --position 0
604
- ```
605
-
606
- **Arguments:**
607
-
608
- - `<page-id>` - Page identifier
609
- - `<block-id>` - Block identifier (unique within the page)
610
-
611
- **Options:**
612
-
613
- | Option | Description |
614
- | ---------------- | -------------------------------------------------- |
615
- | `--kind <kind>` | Block type (e.g., `block.hero`, `block.body-text`) |
616
- | `--data <json>` | Block content as JSON string |
617
- | `--file <path>` | Path to JSON file with block content |
618
- | `--position <n>` | Position in the block list (0-indexed) |
619
-
620
- ### block reorder
621
-
622
- Reorder blocks on a page.
623
-
624
- ```bash
625
- riverbankcms block reorder <page-id> <block-id-1> <block-id-2> ...
626
-
627
- # Example: Put hero first, then intro, then features
628
- riverbankcms block reorder home hero-main intro-text features-grid
629
- ```
630
-
631
- ### block get
632
-
633
- Retrieve a specific block.
634
-
635
- ```bash
636
- riverbankcms block get <page-id> <block-id>
637
- riverbankcms block get home hero-main
638
- riverbankcms block get home hero-main --json
639
- ```
640
-
641
- ### block list
642
-
643
- List all blocks on a page.
644
-
645
- ```bash
646
- riverbankcms block list <page-id>
647
- riverbankcms block list home
648
- riverbankcms block list home --json
649
- ```
650
-
651
- ---
652
-
653
- ## Navigation Commands
654
-
655
- Manage navigation menus.
656
-
657
- ### navigation upsert
658
-
659
- Create or update a navigation menu.
660
-
661
- ```bash
662
- # With inline JSON
663
- riverbankcms navigation upsert <menu-name> --data '[{"label": "Home", "url": "/"}]'
664
-
665
- # With JSON file
666
- riverbankcms navigation upsert main --file ./main-nav.json
667
- ```
668
-
669
- **Example menu structure:**
670
-
671
- ```json
672
- [
673
- { "label": "Home", "url": "/" },
674
- { "label": "About", "url": "/about" },
675
- {
676
- "label": "Products",
677
- "url": "/products",
678
- "children": [
679
- { "label": "Category A", "url": "/products/a" },
680
- { "label": "Category B", "url": "/products/b" }
681
- ]
682
- }
683
- ]
684
- ```
685
-
686
- ### navigation get
687
-
688
- Retrieve a navigation menu.
689
-
690
- ```bash
691
- riverbankcms navigation get <menu-name>
692
- riverbankcms navigation get main
693
- riverbankcms navigation get main --json
694
- ```
695
-
696
- ### navigation list
697
-
698
- List all navigation menus.
699
-
700
- ```bash
701
- riverbankcms navigation list
702
- riverbankcms navigation list --json
703
- ```
704
-
705
- ---
706
-
707
- ## Delete Commands
708
-
709
- Delete content from the CMS.
710
-
711
- ### delete entry
712
-
713
- Delete an entry.
714
-
715
- ```bash
716
- riverbankcms delete entry <type> <identifier> --yes
717
- riverbankcms delete entry blog-post old-post --yes
718
- ```
719
-
720
- ### delete block
721
-
722
- Delete a block from a page.
723
-
724
- ```bash
725
- riverbankcms delete block <page-id> <block-id> --yes
726
- riverbankcms delete block home old-section --yes
727
- ```
728
-
729
- **Note:** The `--yes` flag is required to confirm deletion.
730
-
731
- ---
732
-
733
- ## Utility Commands
734
-
735
- ### preview
736
-
737
- Render a block preview.
738
-
739
- ```bash
740
- # Print HTML to terminal
741
- riverbankcms preview <kind> --data '<json>'
742
-
743
- # Open in browser
744
- riverbankcms preview block.hero --data '{"heading": "Test"}' --open
745
-
746
- # Capture screenshot
747
- riverbankcms preview block.hero --data '{"heading": "Test"}' --screenshot
748
-
749
- # With custom CSS
750
- riverbankcms preview block.hero --data '...' --css ./styles.css
751
-
752
- # From JSON file
753
- riverbankcms preview block.hero --file ./hero-data.json
754
- ```
755
-
756
- **Options:**
757
-
758
- | Option | Description |
759
- | ------------------------- | -------------------------------- |
760
- | `--data <json>` | Block content as JSON |
761
- | `--file <path>` | Path to JSON file |
762
- | `--terminal` | Print HTML to terminal (default) |
763
- | `--open` | Open in browser |
764
- | `--screenshot` | Capture screenshot |
765
- | `--output <path>` | Screenshot output path |
766
- | `--css <paths...>` | Additional CSS files |
767
- | `--validation <mode>` | `strict` or `lenient` |
768
- | `--preview-stage <stage>` | `published` or `preview` |
769
-
770
- ### identifiers backfill
771
-
772
- Generate identifiers for content created before the SDK.
773
-
774
- ```bash
775
- riverbankcms identifiers backfill
776
- riverbankcms identifiers backfill --env=remote
777
- ```
778
-
779
- Use this when migrating existing content to use SDK identifiers.
780
-
781
- ### init-docs
782
-
783
- Scaffold agent documentation for your project.
784
-
785
- ```bash
786
- riverbankcms init-docs
787
- riverbankcms init-docs --path ./custom-path
788
- riverbankcms init-docs --config ./riverbank.config.ts
789
- ```
790
-
791
- **Creates:**
792
-
793
- - `.riverbank/docs/` - Agent reference documentation
794
- - `.riverbank/docs/workflows/` - Core workflow guides (always updated):
795
- - `create-page.md` - Creating new pages via CLI
796
- - `add-block.md` - Adding blocks to pages
797
- - `publish-workflow.md` - Publishing content safely
798
- - `block-extensions.md` - Adding layout variants to system blocks
799
- - `custom-block.md` - Creating custom blocks
800
- - `content-types.md` - Content types and block.embed
801
- - `cmsify-page.md` - Converting hard-coded pages to CMS-driven
802
- - `editor-workflows.md` - Building manual editor workflows for entries and pages
803
- - `.riverbank/docs/site-workflows/` - Site-specific workflows (preserved on re-run)
804
- - `.riverbank/docs/block-types-site.md` - Site-relevant blocks with config applied (always updated)
805
- - `.riverbank/docs/theme-schema.md` - Theme schema reference auto-generated from Zod (always updated)
806
-
807
- **Theme schema documentation:**
808
-
809
- The `theme-schema.md` file is auto-generated from the actual Zod schema (`themeSchema` from `@riverbankcms/blocks`). This ensures documentation stays in sync with the schema and shows only current (non-deprecated) fields. Fields are organized by category (Core, Design Axes, Palette, Typography, etc.).
810
-
811
- **Note:** Core workflow files are always overwritten on `init-docs` to stay current. Site-specific workflows in `site-workflows/` are never overwritten.
812
-
813
- ---
814
-
815
- ## Validation Commands
816
-
817
- Commands for validating content integrity and comparing environments.
818
-
819
- ### audit
820
-
821
- Validate content integrity by checking for broken references and inconsistencies.
822
-
823
- ```bash
824
- # Audit against local CMS
825
- riverbankcms audit
826
-
827
- # Audit against remote CMS
828
- riverbankcms audit --env=remote
829
-
830
- # JSON output for CI/CD pipelines
831
- riverbankcms audit --json
832
- ```
833
-
834
- **Options:**
835
-
836
- | Option | Description |
837
- | ---------------------- | ----------------------------------------------------- |
838
- | `--content-dir <path>` | Content directory (default: from riverbank.config.ts) |
839
-
840
- **Checks performed:**
841
-
842
- - Embed blocks referencing missing entries
843
- - Navigation internal URL paths to missing pages
844
- - Duplicate page paths
845
- - Orphaned entries in CMS (warning only)
846
- - Invalid content type references
847
- - Event venue/category/form reference integrity
848
-
849
- **Prerequisites:**
850
-
851
- - Local content directory must exist (run `riverbankcms pull` first)
852
- - Environment variables configured for target environment
853
-
854
- **Exit codes:**
855
-
856
- - `0`: Audit passed (may have warnings)
857
- - `1`: Audit failed with errors
858
-
859
- ### compare
860
-
861
- Compare content between local files and CMS, or between environments.
862
-
863
- ```bash
864
- # Compare local files vs local CMS
865
- riverbankcms compare entries blog-post
866
-
867
- # Compare local files vs remote CMS
868
- riverbankcms compare entries blog-post --env=remote
869
-
870
- # Show detailed content diff
871
- riverbankcms compare entries blog-post --diff
872
-
873
- # Compare local CMS vs remote CMS
874
- riverbankcms compare entries blog-post --local-vs-remote
875
-
876
- # JSON output for scripts
877
- riverbankcms compare entries blog-post --json
878
-
879
- # Compare event scopes
880
- riverbankcms compare events
881
- ```
882
-
883
- **Arguments:**
884
-
885
- - `<scope>`: What to compare (`entries` or `events`)
886
- - `[content-type]`: Content type to compare (required for entries)
887
-
888
- **Options:**
889
-
890
- | Option | Description |
891
- | ---------------------- | --------------------------------------------------------------- |
892
- | `--content-dir <path>` | Content directory (default: from riverbank.config.ts) |
893
- | `--diff` | Show detailed diff for modified entries |
894
- | `--local-vs-remote` | Compare local CMS vs remote CMS (instead of local files vs CMS) |
895
- | `--summary` | Show only summary counts (default behavior) |
896
-
897
- **Comparison modes:**
898
-
899
- - Default: Compare local JSON files against CMS content
900
- - `--local-vs-remote`: Compare local CMS against remote CMS (requires both env configs)
901
-
902
- **Exit codes:**
903
-
904
- - `0`: Content is in sync
905
- - `1`: Differences found
906
-
907
- ### event
908
-
909
- Manage event series directly through the CLI.
910
-
911
- ```bash
912
- riverbankcms event list
913
- riverbankcms event get summer-fest
914
- riverbankcms event upsert summer-fest --file ./content/events/summer-fest.json
915
- riverbankcms event cancel summer-fest
916
- riverbankcms event delete summer-fest --yes
917
- riverbankcms event occurrence list summer-fest
918
- riverbankcms event occurrence add summer-fest \
919
- --starts-at 2026-08-01T10:00 \
920
- --duration-minutes 60
921
- riverbankcms event occurrence update summer-fest <occurrence-uuid> \
922
- --capacity 20
923
- riverbankcms event occurrence cancel summer-fest <occurrence-uuid>
924
- riverbankcms event occurrence delete summer-fest <occurrence-uuid> --yes
925
- ```
926
-
927
- `event upsert` and `push events` accept canonical event files with `path` and `blocks`. Events use native page authority: an `eventOffering` or `eventSeries` subject owns a page surface, and that surface owns its route, field content, publication state, and slots. `path` updates the page-surface route. `blocks` maps slot keys to surface-slot blocks, for example `blocks.main` for the built-in event template. Use stable block identifiers so repeat pushes update existing slot blocks safely. Unknown slot keys or block kinds fail validation; default slots accept enabled SDK `custom.*` blocks, while explicit template `allowedBlocks` lists remain authoritative. Ordinary editorial entries continue to use the separate `entry` commands and content-entry model described above.
928
-
929
- #### Individual event dates
930
-
931
- `event occurrence` manages bookable dates without replacing the parent event
932
- series. Mutation commands always use the occurrence UUID shown by `list`; a
933
- calendar date is never accepted as an identity.
934
-
935
- - `list <event-identifier>` shows all future dates, including cancelled dates.
936
- Add `--all` to include history or `--status scheduled|cancelled|completed` to
937
- filter. The CLI follows the API's bounded pages, while `--json` keeps the
938
- canonical UTC instants in its single result envelope.
939
- - `add` requires `--starts-at` plus exactly one of `--ends-at` or
940
- `--duration-minutes`. `update` accepts the same complete schedule replacement,
941
- `--capacity <positive-integer>`, or `--inherit-capacity`.
942
- - Local timestamps such as `2026-08-01T10:00` use the event's effective
943
- timezone: occurrence venue override, then series venue, then site default.
944
- Offset timestamps such as `2026-08-01T10:00+01:00` are absolute instants.
945
- Do not mix the two modes in one start/end pair.
946
- - Local times that do not exist during a spring clock change are rejected.
947
- Repeated autumn times are also rejected unless both start and end include
948
- explicit offsets. A duration is elapsed real time from the resolved start,
949
- even when clocks change during the date.
950
- - A manual date or recurring exception can be rescheduled. A generated
951
- recurring date cannot be moved or deleted because schedule reconciliation
952
- owns it; cancel the generated date and add a replacement exception instead.
953
- Cancellation preserves registrations and is idempotent. Deletion requires
954
- zero registrations and confirmation (`--yes` for remote or JSON use).
955
-
956
- `pull events` writes the complete non-cancelled occurrence schedule into each
957
- portable event file. `push events` creates those rows for a new series and
958
- accepts an exact replay for an existing series. It deliberately rejects
959
- existing-series additions, removals, or retiming; use the imperative occurrence
960
- commands for those operational changes. Cancelled occurrence tombstones remain
961
- in the CMS and are omitted from portable authored content.
962
-
963
- ### verify
964
-
965
- Compare local SDK config content types against target site.
966
-
967
- ```bash
968
- # Compare with local site
969
- riverbankcms verify
970
-
971
- # Compare with remote site
972
- riverbankcms verify --env=remote
973
-
974
- # Output as JSON
975
- riverbankcms verify --json
976
-
977
- # Custom config path
978
- riverbankcms verify --config ./src/riverbank.config.ts
979
- ```
980
-
981
- **Options:**
982
-
983
- | Option | Description |
984
- | ----------------- | ---------------------------------------------------- |
985
- | `--config <path>` | Path to config file (default: ./riverbank.config.ts) |
986
-
987
- **Output:**
988
-
989
- - **Matched**: Content types present in both local config and target site
990
- - **Missing on target**: Content types in local config but not on target site
991
- - **Extra on target**: Content types on target site but not in local config
992
-
993
- **Exit codes:**
994
-
995
- - `0`: All content types match
996
- - `1`: Mismatches found
997
-
998
- ---
999
-
1000
- ## Deployment Commands
1001
-
1002
- Commands for deploying SDK sites.
1003
-
1004
- ### deploy
1005
-
1006
- Automates the full deploy workflow for SDK sites.
1007
-
1008
- ```bash
1009
- # Full deploy with cache generation
1010
- riverbankcms deploy
1011
-
1012
- # Preview deploy (skip cache generation)
1013
- riverbankcms deploy --preview
1014
- ```
1015
-
1016
- **Options:**
1017
-
1018
- | Option | Description |
1019
- | ----------- | ----------------------------------------------- |
1020
- | `--preview` | Preview deploy - skip prebuild cache generation |
1021
-
1022
- **Workflow:**
1023
-
1024
- 1. Run verifyCommand (if configured in riverbank.config.ts)
1025
- 2. Check working directory is clean (git status)
1026
- 3. Generate prebuild cache (unless `--preview`)
1027
- 4. Commit cache changes (squashes consecutive unpushed commits)
1028
- 5. Push to remote
1029
-
1030
- **Prerequisites:**
1031
-
1032
- - Must be in a git repository with remote configured
1033
- - `RIVERBANK_REMOTE_API_KEY` required for prebuild cache generation
1034
- - Clean working directory (excluding prebuild output)
1035
-
1036
- **Configuration (riverbank.config.ts):**
1037
-
1038
- ```typescript
1039
- export default defineConfig({
1040
- siteId: "...",
1041
- deploy: {
1042
- verifyCommand: "pnpm verify", // Command to run before deploy
1043
- prebuildOutput: ".riverbank-cache", // Prebuild output directory
1044
- },
1045
- });
1046
- ```
1047
-
1048
- **Notes:**
1049
-
1050
- - CMS failure during prebuild continues with existing cache
1051
- - Uses remote environment variables for API access
1052
- - Verification failure stops the deploy
1053
-
1054
- ---
1055
-
1056
- ## Bulk Operations
1057
-
1058
- Commands for bulk content operations.
1059
-
1060
- ### publish-all
1061
-
1062
- Publish all entries of a specific content type.
1063
-
1064
- ```bash
1065
- # Publish all blog posts (local)
1066
- riverbankcms publish-all blog-post
1067
-
1068
- # Publish to remote (requires --yes)
1069
- riverbankcms publish-all blog-post --env=remote --yes
1070
-
1071
- # Publish to both environments
1072
- riverbankcms publish-all blog-post --env=both --yes
1073
-
1074
- # Preview changes
1075
- riverbankcms publish-all blog-post --dry-run
1076
-
1077
- # JSON output for scripts
1078
- riverbankcms publish-all blog-post --json
1079
- ```
1080
-
1081
- **Arguments:**
1082
-
1083
- - `<content-type>`: Content type to publish (e.g., `blog-post`, `product`)
1084
-
1085
- **Options:**
1086
-
1087
- | Option | Description |
1088
- | ----------- | --------------------------------------------------------------- |
1089
- | `--yes` | Confirm publishing (required for remote environments) |
1090
- | `--dry-run` | Preview which entries would be published without making changes |
1091
-
1092
- **Behavior:**
1093
-
1094
- - Publishes entries that are in draft status or have unpublished changes
1095
- - Skips entries that are already published with no pending changes
1096
- - Continues on failure and reports all results at the end
1097
- - Requires `--yes` flag for remote environments (safety measure)
1098
-
1099
- **Exit codes:**
1100
-
1101
- - `0`: All entries published successfully
1102
- - `1`: Some entries failed to publish
1103
-
1104
- ---
1105
-
1106
- ## Drafts
1107
-
1108
- ### drafts
1109
-
1110
- Cross-type overview of every page and entry with pending (unpublished) changes.
1111
-
1112
- ```bash
1113
- riverbankcms drafts # Table of everything with pending changes
1114
- riverbankcms drafts --json # One JSON envelope for agents
1115
- riverbankcms drafts --env=remote # Drafts on the remote site
1116
- ```
1117
-
1118
- This is the correct, server-filtered replacement for `entry list --status draft` (which filters only the returned page after pagination). The overview is enumerated fully server-side — a page or entry appears here if and only if it is a draft or carries unpublished changes — and the JSON `result` includes a `summary` with `pageCount` and `entryCount`.
1119
-
1120
- ---
1121
-
1122
- ## Content Type Commands
1123
-
1124
- Commands for inspecting content types.
1125
-
1126
- ### content-type list
1127
-
1128
- List content types on target site.
1129
-
1130
- ```bash
1131
- # List content types on local site
1132
- riverbankcms content-type list
1133
-
1134
- # List content types on remote site
1135
- riverbankcms content-type list --env=remote
1136
-
1137
- # Output as JSON
1138
- riverbankcms content-type list --json
1139
- ```
1140
-
1141
- **Output columns:**
1142
-
1143
- - **Key**: Content type key (e.g., `blog-post`)
1144
- - **Name**: Display name
1145
- - **Has Pages**: Whether entries have associated pages
1146
- - **Singleton**: Whether it's a singleton content type
1147
- - **Route Pattern**: URL pattern for entry pages
1148
-
1149
- ---
1150
-
1151
- ## Common Patterns
1152
-
1153
- ### Creating New Content
1154
-
1155
- ```bash
1156
- # 1. Pull latest
1157
- riverbankcms pull
1158
-
1159
- # 2. Create entry
1160
- riverbankcms entry upsert blog-post new-post --data '{"title": "New Post"}'
1161
-
1162
- # 3. Create page
1163
- riverbankcms page upsert new-page --title "New Page" --path /new-page
1164
-
1165
- # 4. Add blocks
1166
- riverbankcms block upsert new-page hero --kind block.hero --data '{"heading": "Welcome"}'
1167
- riverbankcms block upsert new-page body --kind block.body-text --data '{"content": "<p>...</p>"}'
1168
-
1169
- # 5. Preview
1170
- riverbankcms preview block.hero --data '{"heading": "Welcome"}' --open
1171
-
1172
- # 6. Publish
1173
- riverbankcms page publish new-page
1174
- ```
1175
-
1176
- ### Updating Existing Content
1177
-
1178
- ```bash
1179
- # 1. Pull latest
1180
- riverbankcms pull
1181
-
1182
- # 2. Edit local JSON files in ./content/
1183
- # ... make changes ...
1184
-
1185
- # 3. Preview changes
1186
- riverbankcms push --dry-run
1187
-
1188
- # 4. Push changes
1189
- riverbankcms push
1190
- ```
1191
-
1192
- ### Human-Readable Diff
1193
-
1194
- ```bash
1195
- # Preview push changes with field-level before/after values
1196
- riverbankcms push --dry-run --diff
1197
-
1198
- # Preview pull changes with field values
1199
- riverbankcms pull --dry-run --diff
1200
-
1201
- # Push without updating .meta/ files (useful for focused content edits)
1202
- riverbankcms push --no-meta
1203
-
1204
- # Pull content only, skip metadata (stale detection will be unreliable)
1205
- riverbankcms pull --no-meta
1206
- ```
1207
-
1208
- ### Agent-Friendly JSON Output
1209
-
1210
- ```bash
1211
- # Get entry list as JSON
1212
- riverbankcms entry list blog-post --json
1213
-
1214
- # Preview push diff as JSON
1215
- riverbankcms push --dry-run --json --diff-detail=summary
1216
-
1217
- # Get page with blocks as JSON
1218
- riverbankcms page get home --json
1219
- ```
1220
-
1221
- ### Working with Production
1222
-
1223
- ```bash
1224
- # Pull from production
1225
- riverbankcms pull --env=remote
1226
-
1227
- # Preview production push (dry-run is default for remote)
1228
- riverbankcms push --env=remote
1229
-
1230
- # Push to production (requires --yes)
1231
- riverbankcms push --env=remote --yes
1232
-
1233
- # Push to both local and remote
1234
- riverbankcms push --env=both --yes
1235
-
1236
- # Push to both and verify both targets are clean afterwards
1237
- riverbankcms push --env=both --yes --verify-noop
1238
- ```