@terreno/mcp 57.21.0 → 58.0.0-beta.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 (244) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +57 -3
  3. package/dist/bootstrap.d.ts.map +1 -1
  4. package/dist/bootstrap.js +17 -16
  5. package/dist/bootstrap.js.map +1 -1
  6. package/dist/docs/guidelines/admin-frontend/guidelines/core.md +6 -5
  7. package/dist/docs/guidelines/ui/guidelines/core.md +1 -1
  8. package/dist/docs/prompts/debug.md +6 -4
  9. package/dist/docs/prompts/screen.md +11 -17
  10. package/dist/docs/resources/overview.md +5 -3
  11. package/dist/docs/resources/patterns.md +157 -238
  12. package/dist/docs/resources/syncdb.md +44 -16
  13. package/dist/docs/templates/bootstrap/CLAUDE.template.md +2 -2
  14. package/dist/docs/templates/bootstrap/cursorrules.template.md +7 -5
  15. package/dist/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +8 -12
  16. package/dist/docs/templates/bootstrap/frontend/app/_layout.template.tsx +75 -52
  17. package/dist/docs/templates/bootstrap/frontend/app/login.template.tsx +46 -108
  18. package/dist/docs/templates/bootstrap/frontend/app/signup.template.tsx +53 -0
  19. package/dist/docs/templates/bootstrap/frontend/lib/betterAuth.template.md +18 -0
  20. package/dist/docs/templates/bootstrap/frontend/store/apiClient.template.md +33 -0
  21. package/dist/docs/templates/bootstrap/frontend/store/apiSdk.template.md +76 -0
  22. package/dist/docs/templates/bootstrap/frontend/store/syncdb.template.md +56 -0
  23. package/dist/docs/templates/bootstrap/frontend/utils/index.template.md +0 -4
  24. package/dist/docs/upgrades/58.0.0-beta.1.md +504 -0
  25. package/dist/docs/upgrades/58.0.0.md +495 -4
  26. package/dist/docs/versioned/next/README.md +2 -2
  27. package/dist/docs/versioned/next/approval-rubric.md +2 -2
  28. package/dist/docs/versioned/next/explanation/admin-interface.md +6 -5
  29. package/dist/docs/versioned/next/explanation/admin-plugin-frontend.md +1 -1
  30. package/dist/docs/versioned/next/explanation/ai-workflows.md +5 -3
  31. package/dist/docs/versioned/next/explanation/announcements/rtk-deprecation.md +16 -11
  32. package/dist/docs/versioned/next/explanation/authentication.md +62 -43
  33. package/dist/docs/versioned/next/explanation/dependency-management.md +1 -1
  34. package/dist/docs/versioned/next/explanation/deployment-baseline.md +1 -1
  35. package/dist/docs/versioned/next/explanation/example-coverage.md +2 -2
  36. package/dist/docs/versioned/next/explanation/explicit-any-policy.md +5 -6
  37. package/dist/docs/versioned/next/explanation/gcp-hosting-architecture.md +1 -1
  38. package/dist/docs/versioned/next/explanation/local-first-data.md +11 -9
  39. package/dist/docs/versioned/next/explanation/model-router-actions.md +1 -1
  40. package/dist/docs/versioned/next/explanation/modular-api-design.md +2 -2
  41. package/dist/docs/versioned/next/explanation/no-barrel-imports.md +5 -5
  42. package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +4 -3
  43. package/dist/docs/versioned/next/explanation/source-rules.md +2 -2
  44. package/dist/docs/versioned/next/explanation/typescript-configuration.md +2 -4
  45. package/dist/docs/versioned/next/explanation/versioning-policy.md +3 -3
  46. package/dist/docs/versioned/next/how-to/README.md +3 -2
  47. package/dist/docs/versioned/next/how-to/add-feature-flags.md +50 -25
  48. package/dist/docs/versioned/next/how-to/add-organizations.md +2 -1
  49. package/dist/docs/versioned/next/how-to/admin-custom-home.md +8 -2
  50. package/dist/docs/versioned/next/how-to/admin-custom-widget.md +0 -1
  51. package/dist/docs/versioned/next/how-to/agent-ui-asks.md +6 -6
  52. package/dist/docs/versioned/next/how-to/build-admin-screens.md +10 -8
  53. package/dist/docs/versioned/next/how-to/build-for-web.md +1 -1
  54. package/dist/docs/versioned/next/how-to/call-external-apis.md +2 -2
  55. package/dist/docs/versioned/next/how-to/circleci.md +12 -6
  56. package/dist/docs/versioned/next/how-to/configure-better-auth.md +114 -60
  57. package/dist/docs/versioned/next/how-to/connect-mcp-service-token.md +10 -4
  58. package/dist/docs/versioned/next/how-to/create-a-terreno-app.md +14 -2
  59. package/dist/docs/versioned/next/how-to/debug-with-mcp.md +8 -13
  60. package/dist/docs/versioned/next/how-to/expose-mcp-tools.md +15 -4
  61. package/dist/docs/versioned/next/how-to/generate-the-client-sdk.md +33 -0
  62. package/dist/docs/versioned/next/how-to/github-actions-ci.md +2 -2
  63. package/dist/docs/versioned/next/how-to/in-app-notifications.md +1 -1
  64. package/dist/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +318 -447
  65. package/dist/docs/versioned/next/how-to/password-reset.md +1 -1
  66. package/dist/docs/versioned/next/how-to/product-announcements.md +6 -3
  67. package/dist/docs/versioned/next/how-to/rate-limiting.md +38 -16
  68. package/dist/docs/versioned/next/how-to/run-mongodb-migrations.md +19 -0
  69. package/dist/docs/versioned/next/how-to/run-tests-locally.md +2 -3
  70. package/dist/docs/versioned/next/how-to/set-up-social-login.md +1 -1
  71. package/dist/docs/versioned/next/how-to/set-up-terreno-mcp.md +2 -2
  72. package/dist/docs/versioned/next/how-to/track-upstream-expo.md +1 -1
  73. package/dist/docs/versioned/next/how-to/upgrade-banner.md +5 -3
  74. package/dist/docs/versioned/next/how-to/upgrade-terreno.md +5 -5
  75. package/dist/docs/versioned/next/how-to/use-syncdb-correctly.md +1 -1
  76. package/dist/docs/versioned/next/how-to/websocket-integration.md +113 -402
  77. package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +1 -1
  78. package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +5 -0
  79. package/dist/docs/versioned/next/implementationPlans/native-module-baseline.md +29 -5
  80. package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -1
  81. package/dist/docs/versioned/next/implementationPlans/remove-rtk.md +185 -0
  82. package/dist/docs/versioned/next/reference/README.md +1 -1
  83. package/dist/docs/versioned/next/reference/admin-frontend.md +85 -70
  84. package/dist/docs/versioned/next/reference/admin-spa.md +10 -4
  85. package/dist/docs/versioned/next/reference/ai.md +36 -4
  86. package/dist/docs/versioned/next/reference/announcements.md +3 -3
  87. package/dist/docs/versioned/next/reference/api.md +39 -24
  88. package/dist/docs/versioned/next/reference/cli.md +3 -4
  89. package/dist/docs/versioned/next/reference/environment-variables.md +16 -16
  90. package/dist/docs/versioned/next/reference/feature-flags.md +48 -7
  91. package/dist/docs/versioned/next/reference/jobs.md +2 -2
  92. package/dist/docs/versioned/next/reference/legacy/rtk.md +25 -600
  93. package/dist/docs/versioned/next/reference/mcp-server.md +441 -1158
  94. package/dist/docs/versioned/next/reference/syncdb.md +426 -16
  95. package/dist/docs/versioned/next/reference/test.md +28 -3
  96. package/dist/docs/versioned/next/reference/ui.md +132 -19
  97. package/dist/docs/versioned/next/tasks/native-module-baseline.md +8 -4
  98. package/dist/docs/versioned/next/tasks/rate-limiting.md +9 -2
  99. package/dist/docs/versioned/next/tasks/remove-legacy-realtime.md +5 -5
  100. package/dist/docs/versioned/next/tasks/remove-rtk.md +155 -0
  101. package/dist/local/localTools.d.ts.map +1 -1
  102. package/dist/local/localTools.js +3 -54
  103. package/dist/local/localTools.js.map +1 -1
  104. package/dist/local/tools/runtime.d.ts +0 -21
  105. package/dist/local/tools/runtime.d.ts.map +1 -1
  106. package/dist/local/tools/runtime.js +0 -176
  107. package/dist/local/tools/runtime.js.map +1 -1
  108. package/dist/local/tools/syncDb.d.ts +0 -11
  109. package/dist/local/tools/syncDb.d.ts.map +1 -1
  110. package/dist/local/tools/syncDb.js +1 -5
  111. package/dist/local/tools/syncDb.js.map +1 -1
  112. package/dist/packageGuidelines.d.ts +3 -2
  113. package/dist/packageGuidelines.d.ts.map +1 -1
  114. package/dist/packageGuidelines.js +4 -11
  115. package/dist/packageGuidelines.js.map +1 -1
  116. package/dist/prompts.d.ts.map +1 -1
  117. package/dist/prompts.js +17 -18
  118. package/dist/prompts.js.map +1 -1
  119. package/dist/resources.d.ts.map +1 -1
  120. package/dist/resources.js +1 -8
  121. package/dist/resources.js.map +1 -1
  122. package/dist/search/chunker.d.ts +1 -1
  123. package/dist/search/chunker.d.ts.map +1 -1
  124. package/dist/search/inferPackages.d.ts +1 -1
  125. package/dist/search/inferPackages.js +5 -5
  126. package/dist/search/inferPackages.js.map +1 -1
  127. package/dist/tools.d.ts +6 -0
  128. package/dist/tools.d.ts.map +1 -1
  129. package/dist/tools.js +126 -119
  130. package/dist/tools.js.map +1 -1
  131. package/package.json +6 -6
  132. package/src/docs/guidelines/admin-frontend/guidelines/core.md +6 -5
  133. package/src/docs/guidelines/ui/guidelines/core.md +1 -1
  134. package/src/docs/prompts/debug.md +6 -4
  135. package/src/docs/prompts/screen.md +11 -17
  136. package/src/docs/resources/overview.md +5 -3
  137. package/src/docs/resources/patterns.md +157 -238
  138. package/src/docs/resources/syncdb.md +44 -16
  139. package/src/docs/templates/bootstrap/CLAUDE.template.md +2 -2
  140. package/src/docs/templates/bootstrap/cursorrules.template.md +7 -5
  141. package/src/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +8 -12
  142. package/src/docs/templates/bootstrap/frontend/app/_layout.template.tsx +75 -52
  143. package/src/docs/templates/bootstrap/frontend/app/login.template.tsx +46 -108
  144. package/src/docs/templates/bootstrap/frontend/app/signup.template.tsx +53 -0
  145. package/src/docs/templates/bootstrap/frontend/lib/betterAuth.template.md +18 -0
  146. package/src/docs/templates/bootstrap/frontend/store/apiClient.template.md +33 -0
  147. package/src/docs/templates/bootstrap/frontend/store/apiSdk.template.md +76 -0
  148. package/src/docs/templates/bootstrap/frontend/store/syncdb.template.md +56 -0
  149. package/src/docs/templates/bootstrap/frontend/utils/index.template.md +0 -4
  150. package/src/docs/upgrades/58.0.0-beta.1.md +504 -0
  151. package/src/docs/upgrades/58.0.0.md +495 -4
  152. package/src/docs/versioned/next/README.md +2 -2
  153. package/src/docs/versioned/next/approval-rubric.md +2 -2
  154. package/src/docs/versioned/next/explanation/admin-interface.md +6 -5
  155. package/src/docs/versioned/next/explanation/admin-plugin-frontend.md +1 -1
  156. package/src/docs/versioned/next/explanation/ai-workflows.md +5 -3
  157. package/src/docs/versioned/next/explanation/announcements/rtk-deprecation.md +16 -11
  158. package/src/docs/versioned/next/explanation/authentication.md +62 -43
  159. package/src/docs/versioned/next/explanation/dependency-management.md +1 -1
  160. package/src/docs/versioned/next/explanation/deployment-baseline.md +1 -1
  161. package/src/docs/versioned/next/explanation/example-coverage.md +2 -2
  162. package/src/docs/versioned/next/explanation/explicit-any-policy.md +5 -6
  163. package/src/docs/versioned/next/explanation/gcp-hosting-architecture.md +1 -1
  164. package/src/docs/versioned/next/explanation/local-first-data.md +11 -9
  165. package/src/docs/versioned/next/explanation/model-router-actions.md +1 -1
  166. package/src/docs/versioned/next/explanation/modular-api-design.md +2 -2
  167. package/src/docs/versioned/next/explanation/no-barrel-imports.md +5 -5
  168. package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +4 -3
  169. package/src/docs/versioned/next/explanation/source-rules.md +2 -2
  170. package/src/docs/versioned/next/explanation/typescript-configuration.md +2 -4
  171. package/src/docs/versioned/next/explanation/versioning-policy.md +3 -3
  172. package/src/docs/versioned/next/how-to/README.md +3 -2
  173. package/src/docs/versioned/next/how-to/add-feature-flags.md +50 -25
  174. package/src/docs/versioned/next/how-to/add-organizations.md +2 -1
  175. package/src/docs/versioned/next/how-to/admin-custom-home.md +8 -2
  176. package/src/docs/versioned/next/how-to/admin-custom-widget.md +0 -1
  177. package/src/docs/versioned/next/how-to/agent-ui-asks.md +6 -6
  178. package/src/docs/versioned/next/how-to/build-admin-screens.md +10 -8
  179. package/src/docs/versioned/next/how-to/build-for-web.md +1 -1
  180. package/src/docs/versioned/next/how-to/call-external-apis.md +2 -2
  181. package/src/docs/versioned/next/how-to/circleci.md +12 -6
  182. package/src/docs/versioned/next/how-to/configure-better-auth.md +114 -60
  183. package/src/docs/versioned/next/how-to/connect-mcp-service-token.md +10 -4
  184. package/src/docs/versioned/next/how-to/create-a-terreno-app.md +14 -2
  185. package/src/docs/versioned/next/how-to/debug-with-mcp.md +8 -13
  186. package/src/docs/versioned/next/how-to/expose-mcp-tools.md +15 -4
  187. package/src/docs/versioned/next/how-to/generate-the-client-sdk.md +33 -0
  188. package/src/docs/versioned/next/how-to/github-actions-ci.md +2 -2
  189. package/src/docs/versioned/next/how-to/in-app-notifications.md +1 -1
  190. package/src/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +318 -447
  191. package/src/docs/versioned/next/how-to/password-reset.md +1 -1
  192. package/src/docs/versioned/next/how-to/product-announcements.md +6 -3
  193. package/src/docs/versioned/next/how-to/rate-limiting.md +38 -16
  194. package/src/docs/versioned/next/how-to/run-mongodb-migrations.md +19 -0
  195. package/src/docs/versioned/next/how-to/run-tests-locally.md +2 -3
  196. package/src/docs/versioned/next/how-to/set-up-social-login.md +1 -1
  197. package/src/docs/versioned/next/how-to/set-up-terreno-mcp.md +2 -2
  198. package/src/docs/versioned/next/how-to/track-upstream-expo.md +1 -1
  199. package/src/docs/versioned/next/how-to/upgrade-banner.md +5 -3
  200. package/src/docs/versioned/next/how-to/upgrade-terreno.md +5 -5
  201. package/src/docs/versioned/next/how-to/use-syncdb-correctly.md +1 -1
  202. package/src/docs/versioned/next/how-to/websocket-integration.md +113 -402
  203. package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +1 -1
  204. package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +5 -0
  205. package/src/docs/versioned/next/implementationPlans/native-module-baseline.md +29 -5
  206. package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -1
  207. package/src/docs/versioned/next/implementationPlans/remove-rtk.md +185 -0
  208. package/src/docs/versioned/next/reference/README.md +1 -1
  209. package/src/docs/versioned/next/reference/admin-frontend.md +85 -70
  210. package/src/docs/versioned/next/reference/admin-spa.md +10 -4
  211. package/src/docs/versioned/next/reference/ai.md +36 -4
  212. package/src/docs/versioned/next/reference/announcements.md +3 -3
  213. package/src/docs/versioned/next/reference/api.md +39 -24
  214. package/src/docs/versioned/next/reference/cli.md +3 -4
  215. package/src/docs/versioned/next/reference/environment-variables.md +16 -16
  216. package/src/docs/versioned/next/reference/feature-flags.md +48 -7
  217. package/src/docs/versioned/next/reference/jobs.md +2 -2
  218. package/src/docs/versioned/next/reference/legacy/rtk.md +25 -600
  219. package/src/docs/versioned/next/reference/mcp-server.md +441 -1158
  220. package/src/docs/versioned/next/reference/syncdb.md +426 -16
  221. package/src/docs/versioned/next/reference/test.md +28 -3
  222. package/src/docs/versioned/next/reference/ui.md +132 -19
  223. package/src/docs/versioned/next/tasks/native-module-baseline.md +8 -4
  224. package/src/docs/versioned/next/tasks/rate-limiting.md +9 -2
  225. package/src/docs/versioned/next/tasks/remove-legacy-realtime.md +5 -5
  226. package/src/docs/versioned/next/tasks/remove-rtk.md +155 -0
  227. package/dist/docs/guidelines/rtk/guidelines/core.md +0 -26
  228. package/dist/docs/resources/rtk.md +0 -181
  229. package/dist/docs/templates/bootstrap/frontend/openapi-config.template.md +0 -16
  230. package/dist/docs/templates/bootstrap/frontend/scripts/generate-sdk.template.md +0 -49
  231. package/dist/docs/templates/bootstrap/frontend/store/appState.template.md +0 -45
  232. package/dist/docs/templates/bootstrap/frontend/store/errors.template.md +0 -51
  233. package/dist/docs/templates/bootstrap/frontend/store/index.template.md +0 -86
  234. package/dist/docs/templates/bootstrap/frontend/store/openApiSdk.template.md +0 -49
  235. package/dist/docs/templates/bootstrap/frontend/store/sdk.template.md +0 -80
  236. package/src/docs/guidelines/rtk/guidelines/core.md +0 -26
  237. package/src/docs/resources/rtk.md +0 -181
  238. package/src/docs/templates/bootstrap/frontend/openapi-config.template.md +0 -16
  239. package/src/docs/templates/bootstrap/frontend/scripts/generate-sdk.template.md +0 -49
  240. package/src/docs/templates/bootstrap/frontend/store/appState.template.md +0 -45
  241. package/src/docs/templates/bootstrap/frontend/store/errors.template.md +0 -51
  242. package/src/docs/templates/bootstrap/frontend/store/index.template.md +0 -86
  243. package/src/docs/templates/bootstrap/frontend/store/openApiSdk.template.md +0 -49
  244. package/src/docs/templates/bootstrap/frontend/store/sdk.template.md +0 -80
package/CHANGELOG.md CHANGED
@@ -20,6 +20,49 @@ Upgrade notes for consumer action live in [`mcp-server/src/docs/upgrades/`](mcp-
20
20
 
21
21
  Unreleased changes live in [`changelog/unreleased/`](changelog/unreleased/). Add one Markdown file per feature (see that directory's README) instead of editing this section.
22
22
 
23
+ ## [58.0.0-beta.1] - 2026-11-02
24
+
25
+ Upgrade note: [`mcp-server/src/docs/upgrades/58.0.0-beta.1.md`](mcp-server/src/docs/upgrades/58.0.0-beta.1.md).
26
+
27
+ ### Breaking
28
+
29
+ - Terreno 58 targets Expo SDK 58 (`~58.0.14`), React Native `0.88.0`, and React `19.3.0`. `@terreno/ui` peers `react-native` `0.88.0`. Native catalog moves with the SDK: `react-native-gesture-handler` `~3.3.0`, `react-native-reanimated` `4.7.1` + `react-native-worklets` `0.13.0`, `react-native-screens` `~4.30.0`, `react-native-webview` `14.0.1`, `@sentry/react-native` `~8.28.0`, `@shopify/flash-list` `2.3.2`, `@shopify/react-native-skia` `2.14.0`. Rebuild dev clients and store binaries.
30
+ - Expo Router 58: set `export const unstable_settings = {initialRouteName}` on the layout instead of passing `initialRouteName` to `<Slot>` / navigators. `SidebarNavigation` ignores the prop.
31
+ - Expo Router 58 static rendering: a custom `app/+html.tsx` must render `headNodes` and `bodyNodes` from `useServerDocumentContext()` (`expo-router/html`), or exported pages ship without their JavaScript. `example-frontend` is updated.
32
+ - React Native 0.88 generated types: type refs as `ViewInstance`, `TextInstance`, `ScrollViewInstance`, and `TextInputInstance` (`Box.scrollRef`, `TextField.inputRef`, `Text` `ref`).
33
+ - `create-terreno-app` scaffolds Expo `~58.0.14`, React Native `0.88.0`, and React `19.3.0`.
34
+ - The Terreno 58 native module baseline lands in `example-frontend` and `demo`: `@stripe/stripe-react-native` 0.81.0, `react-native-purchases` and `react-native-purchases-ui` 10.12.2, `expo-device`, `expo-crypto`, `expo-local-authentication`, `expo-system-ui`, and `expo-build-properties` (Android Kotlin 2.2.21 and `compileSdkVersion` 37 pins). Rebuild every dev client and store binary. `react-native-otp-verify` is left out because it does not support the New Architecture. The demo has a hidden **Native Modules** page that shows each module's version and whether the running binary links it. See the 58.0.0 upgrade note.
35
+ - `TerrenoApp` turns HTTP rate limiting on by default. Omitting `rateLimit` now mounts the limiter with the memory store (auth 20 / 15 min, api 600 / 15 min). Pass `rateLimit: false` to turn it off. On Cloud Run pass `rateLimit: {trustProxy: 1}` so unauthenticated traffic keys by client IP. See the 58.0.0 upgrade note.
36
+ - `@terreno/admin-frontend` no longer takes an RTK `api`. The `api` prop is removed from every admin component (`AdminProvider`, `AdminShellLayout`, `AdminHome`, `AdminModelList`, `AdminModelTable`, `AdminModelForm`, `AdminScreenRouter`, `ConfigurationScreen`, `DocumentStorageBrowser`, `ConsentHistory`, comms, jobs, org, consent, and announcement screens, and widget props), and admin hooks drop their `api` argument (`useAdminConfig(apiBase)`, `useAdminScripts(apiBase)`, `useAdminRoles(apiBase)`, `useConfigurationApi({basePath})`, `useDocumentStorageApi(basePath)`, `useConsentHistory(baseUrl)`, `useOrganizationsApi(basePath)`, `useCommsDashboardApi()`, `useJobsDashboardApi()`, and the `useAiObservability*Api()` hooks).
37
+ - `useAdminApi(api, routePath, modelName)` is removed. Use `useAdminModelApi(routePath, modelName)`, which keeps the same hook names and calls the same `/admin/{routePath}` URLs through the admin fetch client. `AdminApi`, `EndpointBuilder`, and admin `injectEndpoints` are gone; `@reduxjs/toolkit` and `react-redux` are no longer peers of admin-frontend.
38
+ - `AdminProvider` is now the required auth binding for every admin request, including ObjectId and API-only model CRUD. Cookie SPAs pass `credentials="same-origin"`; embedded apps pass `apiOrigin` and `getAuthHeaders`. Product screens that reuse admin components wrap them in `AdminProvider`. See the 58.0.0 upgrade guide.
39
+ - Removed the legacy RTK realtime path. Use `sync` on `modelRouter` with `@terreno/syncdb` for live collection updates. `RealtimeApp`, `SyncApp`, socket auth, `sync:delta`, and admin `admin:model.changed` events are unchanged. See the 58.0.0 upgrade note.
40
+ - `@terreno/api`: `modelRouter` no longer accepts `realtime` (now a TypeScript error), and the change stream no longer emits the `sync` websocket event. Removed `RealtimeConfig`, `RealtimeEvent`, `DocumentSubscription`, `QuerySubscription`, `registerRealtime`, `getRealtimeRegistry`, `findRegistryEntryByCollection`, `findRegistryEntryByRoutePath`, `updateRealtimeRegistryOptions`, `clearRealtimeRegistry`, `RealtimeRegistryEntry`, the query-subscription store (`addQuerySubscription`, `removeQuerySubscription`, `removeAllSocketQueries`, `getQuerySubscriptionsForCollection`, `computeQueryId`, `clearQueryStore`), and `MAX_MODEL_SUBSCRIPTIONS` / `MAX_DOCUMENT_SUBSCRIPTIONS` / `MAX_QUERY_SUBSCRIPTIONS`. Sockets no longer handle `subscribe:model`, `subscribe:document`, or `subscribe:query`.
41
+ - `@terreno/rtk`: removed `realtimeList`, `realtimeDocument`, `setRealtimeSocket`, `getRealtimeSocket`, `useSyncConnection`, and the `RealtimeEvent` type. The rest of `@terreno/rtk` (including `useSocketConnection` and `useRealtimeDebug`) is removed in the same release; see `remove-rtk.md`.
42
+ - Removed `@terreno/rtk` and every Redux dependency (`@reduxjs/toolkit`, `react-redux`, `redux-persist`, `@rtk-query/codegen-openapi`). `@terreno/rtk` is not published for 58. `@terreno/syncdb` is the only frontend data, request, and session layer. Follow `docs/how-to/migrate-rtk-to-syncdb.md`, which maps every removed export to its replacement, and the 58.0.0 upgrade note.
43
+ - `@terreno/syncdb` adds `@terreno/syncdb/api` (`createApiClient`, `ApiError`), request hooks in `@terreno/syncdb/react` (`ApiClientProvider`, `useApiQuery`, `useLazyApiQuery`, `useApiMutation`, `useSocketEvent`), `@terreno/syncdb/config` (`baseUrl`, `baseWebsocketsUrl`, `appHeaders`), `@terreno/syncdb/auth` (`createBetterAuthClient`, `SessionProvider`, `useSession`, `jwtAuthAdapter`, `useJwtAuth`, token-expiry helpers), `@terreno/syncdb/flags` (`useFeatureFlags`, `useTerrenoFeatureFlags` on the sync socket), `@terreno/syncdb/app` (`useUpgradeCheck`, `hasPermission`, `canOpenAdminPage`, `installDevConsoleLogger`, `useMCPTools`), and `@terreno/syncdb/buildNumber`.
44
+ - `terreno-syncdb-codegen --api-out` generates typed hooks for every non-synced OpenAPI operation (same names as the RTK codegen), replacing `@rtk-query/codegen-openapi`. `bun run sdk` writes `store/apiSdk.ts`.
45
+ - `@terreno/ui` `ConsentNavigator`, `AnnouncementNavigator`, `useConsentForms`, `useSubmitConsent`, `useAnnouncements`, and `useAcknowledgeAnnouncement` take a request `client` instead of an RTK `api`.
46
+ - `GptHistory` (`gpt/histories`) and `McpServiceToken` (`mcp/service-tokens`, read-only) are synced collections with String ids. Run the `gptHistoryStringIdsMigration` (`@terreno/ai`) and `mcpServiceTokenStringIdsMigration` (`@terreno/api`) before deploying 58 frontends.
47
+ - `create-terreno-app`, the `terreno_bootstrap` prompt, and the `terreno_generate_screen` tool scaffold apps without Redux or `@terreno/rtk`. The terreno-mcp-local `get_rtk_state` tool, the MCP resource `terreno://docs/rtk`, and `terreno state --slice rtk` are removed; use `get_syncdb_state` and `terreno state`.
48
+
49
+ ### Added
50
+
51
+ - `DataTable` columns size themselves when `width` is omitted. Each auto column starts at the wider of its header and its content (sampled from at most 50 rows, measured with a canvas on web and estimated on native), clamped to 80–360px, and auto columns grow to fill the table's container. Columns that set `width` keep it. `DataTableColumn.width` is now optional.
52
+
53
+ ### Changed
54
+
55
+ - The repository's agent rules now generate with rulesync 17 (up from 9). The root rule `.rulesync/rules/00-root.md` now generates `AGENTS.md`, which Devin and other AGENTS.md readers load, in place of `.devin/rules/00-root.md`. Never edit `AGENTS.md` by hand: edit the root rule and run `bun run rules`. The examples that existed only in the old hand-edited `AGENTS.md` (syncdb and RTK SDK usage) moved into the root rule, so `CLAUDE.md`, the Cursor root rule, and Copilot instructions get them too. Links in the root rule now resolve from the repository root. Generated Copilot hooks use the portable `command` field. Generated Copilot subagents no longer list `agent/runSubagent` as their only tool, so they get every default tool. Generated skills carry their `license`, `disable-model-invocation`, and Devin `triggers` frontmatter.
56
+ - `@terreno/syncdb/auth` `SessionProvider`: `logout()` no longer clears the session before the server answers. The session stays in the state until `authClient.signOut()` finishes (`signOutTimeoutMs`, default 10 seconds), and then it is cleared. Meanwhile the new `isSigningOut` state (`useSession().isSigningOut`) is true; `isLoading` is left alone, so a navigator gated on it keeps its screen. Before, a login screen that opened at once could find the still-live session and sign the user straight back in. A sign-out that fails or times out checks the session first. A session that is still live, or a cookie or native session the server cannot be asked about, stays signed in, and `error` is set to `SIGN_OUT_FAILED_MESSAGE` ("Couldn't sign out. Check your connection and try again."). A web bearer client, which drops its token before the request leaves, ends signed out. The global `auth/logout` action (a refused session) now ends signed out even when the sign-out request fails. With `apisToReset` (57.17.0), `logout()` purges the cache when the session clears, not when it is dispatched: a purge at dispatch refetched every mounted screen mid-sign-out, and a refetch that could not reach the server answered 401 and signed the user out even though the sign-out failed. A failed sign-out keeps both the session and the cache. The global `auth/logout` action still purges at once (only the first of several in flight) and again when the session clears. A sign-in for another user that lands while a sign-out is in flight is kept; a sign-out that started signed out asks `getSession` first, so a restore of the session it revoked is cleared. Show `selectBetterAuthIsSigningOut` on the sign-out control and `selectBetterAuthError` after a failed sign-out.
57
+
58
+ ### Removed
59
+
60
+ - `@terreno/ui` no longer exports the `Filter` and `FilterProps` aliases deprecated in 57.7.0. Import `DropdownPanel` and `DropdownPanelProps` instead. `FilterSelectMenu`, `FilterBoolean`, `FilterAccordion`, and `FilterChangesBadge` keep their names.
61
+
62
+ ### Fixed
63
+
64
+ - `@terreno/syncdb`: logging out while `syncDb.start()` is still running no longer loses local writes or logs errors. `start()` now resolves the web encryption key from `GET /sync/key` before it loads the store, so the flush in `stop()` never needs the network after the session has ended. A `stop()` or `signOut()` call now cancels a `start()` that is running or queued ahead of it, so the transport never connects without a session. A failed key fetch is now retried on the next save instead of failing every save for the rest of the session.
65
+
23
66
  ## [57.21.0] - 2026-11-01
24
67
 
25
68
  Upgrade note: [`mcp-server/src/docs/upgrades/57.21.0.md`](mcp-server/src/docs/upgrades/57.21.0.md).
package/README.md CHANGED
@@ -3,6 +3,61 @@
3
3
  MCP servers that give coding agents Terreno docs, code generators, and live app diagnostics — part of
4
4
  Terreno, the batteries-included TypeScript framework for universal apps.
5
5
 
6
+ ## Features
7
+
8
+ ### Resources
9
+
10
+ Documentation resources accessible via MCP:
11
+
12
+ - `terreno://docs/overview` - Overview of the Terreno monorepo
13
+ - `terreno://docs/api` - @terreno/api documentation
14
+ - `terreno://docs/ui` - @terreno/ui documentation
15
+ - `terreno://docs/syncdb` - @terreno/syncdb documentation
16
+ - `terreno://docs/patterns` - Common patterns and best practices
17
+
18
+ ### Tools
19
+
20
+ Code generation tools:
21
+
22
+ - `terreno_search_docs` - Search bundled Terreno documentation (call before guessing APIs). Optional `version` selects a retained docs snapshot; omit for current `next` docs.
23
+ - `terreno_get_component_docs` - Full `@terreno/ui` props table for one component
24
+ - `terreno_get_upgrade_guide` - Lockstep upgrade notes between two `@terreno/*` versions
25
+ - `terreno_search_update_notes` - Search bundled upgrade markdown and optional backend announcement help API
26
+ - `terreno_get_update_note` - Fetch one full update note by id (`upgrade:<semver>` or `announcement:<mongoId>`)
27
+ - `terreno_ask_update_help` - Ask a natural-language question; returns ranked matches with full update bodies
28
+ - `terreno_bootstrap_ai_rules` - Scaffold AI assistant rules files for Cursor, Claude Code, etc.
29
+ - `terreno_generate_model` - Generate a Mongoose model with proper Terreno conventions
30
+ - `terreno_generate_route` - Generate a modelRouter route configuration
31
+ - `terreno_generate_screen` - Generate a React Native screen component
32
+ - `terreno_generate_form_fields` - Generate form field components
33
+ - `terreno_validate_model_schema` - Validate a Mongoose schema follows conventions
34
+ - `terreno_install_admin` - Generate admin panel integration files and instructions
35
+
36
+ Local runtime tools (`terreno-mcp-local`):
37
+
38
+ - `get_syncdb_state` - Inspect live SyncDB entities, outbox, conflicts, cursors,
39
+ streams, repair markers, status, and debugger events
40
+ - `syncdb_snapshot` - Capture, list, read, compare, and delete SyncDB snapshots
41
+ - `syncdb_action` - Mutate/edit local state, flush, reconcile/resync,
42
+ resolve/retry, toggle offline mode, clear events, and merge snapshots
43
+
44
+ Create the SyncDB client with `debug: true`. State changes require
45
+ `TERRENO_MCP_EVAL=1`; reads and snapshots do not.
46
+
47
+ ### Prompts
48
+
49
+ Code generation prompts:
50
+
51
+ - `terreno_bootstrap` - Prompt workflow for scaffolding a new Terreno application
52
+ - `terreno_create_crud_feature` - Generate complete CRUD feature (model, routes, screens)
53
+ - `terreno_create_api_endpoint` - Generate custom API endpoint with OpenAPI docs
54
+ - `terreno_create_ui_component` - Generate reusable UI component
55
+ - `terreno_create_form_screen` - Generate form screen with validation
56
+ - `terreno_add_authentication` - Generate authentication setup
57
+ - `terreno_migrate_to_terreno_app` - Migrate from setupServer to TerrenoApp pattern
58
+ - `terreno_style_guide` - Get the Terreno code style guide
59
+ - `terreno_upgrade` - Lockstep Terreno upgrade workflow
60
+
6
61
  ## Install
7
62
 
8
63
  The hosted server needs no install: point your editor at `https://mcp.terreno.app/mcp` (MCP
@@ -36,9 +91,8 @@ Restart the editor, then ask the agent to call `terreno_search_docs` or `applica
36
91
  `terreno_get_update_note`, `terreno_ask_update_help`, `terreno_generate_model`,
37
92
  `terreno_generate_route`, `terreno_generate_screen`, `terreno_generate_form_fields`,
38
93
  `terreno_validate_model_schema`, `terreno_validate_ui_blocks`, `terreno_install_admin`
39
- - Local `terreno-mcp-local` tools (13): `application_info`, `database_schema`, `database_query`,
40
- `read_logs`, `last_error`, `get_client_state`, `get_rtk_state` (deprecated alias of
41
- `get_client_state`), `get_syncdb_state`, `syncdb_snapshot`, `syncdb_action`, `evaluate`,
94
+ - Local `terreno-mcp-local` tools (11): `application_info`, `database_schema`, `database_query`,
95
+ `read_logs`, `last_error`, `get_syncdb_state`, `syncdb_snapshot`, `syncdb_action`, `evaluate`,
42
96
  `navigate`, `browser`
43
97
  - Nine workflow prompts (`terreno_bootstrap`, `terreno_create_crud_feature`, `terreno_upgrade`, and
44
98
  more) and `terreno://docs/*` documentation resources on the hosted server
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAC;AAUvD,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,EAAE,IAAI,EA+BhC,CAAC;AAEF,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AACD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,0DAA2D,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,8bACsZ,CAAC;AAE9b,mGAAmG;AACnG,eAAO,MAAM,yBAAyB,6BAA6B,CAAC;AAkRpE,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,oBAAoB,KAAG,WAAW,EAyB5E,CAAC;AAsFF,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B;IAAC,OAAO,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAQ/C,CAAC;AAGF,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAkB7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC,CAAA;CA8DzE,CAAC"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAC;AAUvD,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,EAAE,IAAI,EA+BhC,CAAC;AAEF,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AACD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,0DAA2D,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,8bACsZ,CAAC;AAE9b,mGAAmG;AACnG,eAAO,MAAM,yBAAyB,6BAA6B,CAAC;AAmRpE,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,oBAAoB,KAAG,WAAW,EAyB5E,CAAC;AAsFF,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B;IAAC,OAAO,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAQ/C,CAAC;AAGF,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAkB7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC,CAAA;CA8DzE,CAAC"}
package/dist/bootstrap.js CHANGED
@@ -17,7 +17,7 @@ export const bootstrapTools = [
17
17
  type: "string",
18
18
  },
19
19
  packages: {
20
- description: 'Optional list of Terreno packages to include in merged guidelines (e.g. ["api","ui","rtk","syncdb"]). Use names like `api`, `ui`, `rtk`, `syncdb`, `admin-backend`, `admin-frontend`, or `@terreno/api`. Omit admin packages if the app does not use the admin panel.',
20
+ description: 'Optional list of Terreno packages to include in merged guidelines (e.g. ["api","ui","syncdb"]). Use names like `api`, `ui`, `syncdb`, `admin-backend`, `admin-frontend`, or `@terreno/api`. Omit admin packages if the app does not use the admin panel.',
21
21
  items: { type: "string" },
22
22
  type: "array",
23
23
  },
@@ -77,7 +77,7 @@ ${appDescription}
77
77
 
78
78
  ## Project Structure
79
79
 
80
- - **frontend/** - Expo/React Native frontend using @terreno/ui, @terreno/syncdb, and @terreno/rtk (SDK + Better Auth)
80
+ - **frontend/** - Expo/React Native frontend using @terreno/ui and @terreno/syncdb (data, request client, generated API hooks, Better Auth session)
81
81
  - **backend/** - Express/Mongoose backend using @terreno/api
82
82
 
83
83
  ## Development
@@ -94,7 +94,7 @@ cd backend && bun run dev # Start backend on port 4000
94
94
 
95
95
  # Frontend
96
96
  cd frontend && bun run web # Start web frontend on port 8082
97
- cd frontend && bun run sdk # Regenerate SDK after backend changes
97
+ cd frontend && bun run sdk # Regenerate store/apiSdk.ts after backend changes
98
98
  \`\`\`
99
99
 
100
100
  ## Adding Features
@@ -115,10 +115,10 @@ cd frontend && bun run sdk # Regenerate SDK after backend changes
115
115
  ## Frontend Conventions
116
116
 
117
117
  - Use \`@terreno/syncdb/react\` hooks (\`useQuery\`, \`useMutate\`) for synced collection CRUD
118
- - Use generated SDK hooks from \`@/store/openApiSdk\` for non-synced routes only
118
+ - Use generated hooks from \`@/store/apiSdk\` (\`useGetAuthMeQuery\`, \`usePatchAuthMeMutation\`, ...) for non-synced routes only
119
119
  - Use @terreno/ui components (Box, Page, Button, TextField, etc.)
120
- - Never modify \`openApiSdk.ts\` manually - regenerate with \`bun run sdk\`
121
- - Use Redux Toolkit for state management (Better Auth session and the RTK Query SDK)
120
+ - Never modify \`apiSdk.ts\` manually - regenerate with \`bun run sdk\`
121
+ - Session: \`SessionProvider\` / \`useSession()\` from \`@terreno/syncdb/auth\` (no Redux)
122
122
 
123
123
  ## AI Assistance
124
124
 
@@ -245,24 +245,25 @@ globs: ["**/*"]
245
245
 
246
246
  # ${appDisplayName} Frontend
247
247
 
248
- Expo/React Native frontend using @terreno/ui, @terreno/syncdb, and @terreno/rtk.
248
+ Expo/React Native frontend using @terreno/ui and @terreno/syncdb.
249
249
 
250
250
  ## Development
251
251
 
252
252
  \`\`\`bash
253
253
  bun run web # Start web frontend on port 8082
254
- bun run sdk # Regenerate SDK from backend OpenAPI spec
254
+ bun run sdk # Regenerate store/apiSdk.ts from the backend OpenAPI spec
255
255
  bun run lint # Lint code
256
256
  \`\`\`
257
257
 
258
258
  ## Frontend Conventions
259
259
 
260
260
  - Use \`@terreno/syncdb/react\` hooks (\`useQuery\`, \`useMutate\`) for synced collection CRUD
261
- - Use generated SDK hooks from \`@/store/openApiSdk\` for non-synced routes only
261
+ - Use generated hooks from \`@/store/apiSdk\` (\`useGetAuthMeQuery\`, \`usePatchAuthMeMutation\`, ...) for non-synced routes only
262
262
  - Use @terreno/ui components (Box, Page, Button, TextField, etc.)
263
- - Never modify \`openApiSdk.ts\` manually - regenerate with \`bun run sdk\`
263
+ - Never modify \`apiSdk.ts\` manually - regenerate with \`bun run sdk\`
264
264
  - Use Luxon for date operations
265
- - Better Auth session: \`generateBetterAuthSlice\` + \`lib/betterAuth.ts\`
265
+ - Session: \`SessionProvider\` / \`useSession()\` from \`@terreno/syncdb/auth\` + \`lib/betterAuth.ts\` (no Redux)
266
+ - Request client: \`store/apiClient.ts\` (\`createApiClient\` from \`@terreno/syncdb/api\`, \`baseUrl\` from \`@terreno/syncdb/config\`)
266
267
  ${admin}## Expo SDK upgrades
267
268
 
268
269
  - For Expo/React Native dependency upgrades, install and use the official \`upgrading-expo\` skill from \`expo/skills\` (\`bunx skills add expo/skills\` when using the Skills CLI). It covers \`expo install\`, doctor, caches, and SDK breaking changes.
@@ -271,16 +272,16 @@ ${admin}## Expo SDK upgrades
271
272
  ## MCP servers (dev)
272
273
 
273
274
  - **terreno** (HTTP): codegen, docs search, bootstrap tools.
274
- - **terreno-local** (stdio): Mongo introspection, dev logs, RTK state (via \`registerTerrenoDevStore\`).
275
+ - **terreno-local** (stdio): Mongo introspection, dev logs, and runtime syncdb state for a client created with \`debug: true\`.
275
276
  - **expo** (HTTP): Expo docs + local simulator automation when \`EXPO_UNSTABLE_MCP_SERVER=1\` dev server is running.
276
277
  - **playwright**: web UI automation for \`expo start --web\`.
277
278
 
278
279
  ## Adding a New Screen
279
280
 
280
- 1. Regenerate SDK if backend changed: \`bun run sdk\`
281
+ 1. Regenerate API hooks if backend changed: \`bun run sdk\`
281
282
  2. Create screen in \`app/\` directory
282
283
  3. Use @terreno/ui components for layout
283
- 4. Use SDK hooks for non-synced routes; use syncdb hooks for synced collections
284
+ 4. Use \`@/store/apiSdk\` hooks for non-synced routes; use syncdb hooks for synced collections
284
285
  `;
285
286
  };
286
287
  export const generateAiRulesFiles = (args) => {
@@ -438,8 +439,8 @@ The application should include:
438
439
  - Better Auth login (email/password via \`@terreno/ui\` LoginScreen)
439
440
  - Tab-based navigation with Home and Profile screens
440
441
  - \`@terreno/syncdb\` client wired in the root layout (empty \`SYNC_COLLECTIONS\` until you add synced models)
441
- - Redux with Better Auth session + RTK Query SDK for non-synced routes
442
- - OpenAPI SDK generation from backend spec
442
+ - Better Auth session via \`SessionProvider\` / \`useSession()\` from \`@terreno/syncdb/auth\` (no Redux)
443
+ - Request client (\`store/apiClient.ts\`) plus generated hooks in \`store/apiSdk.ts\` for non-synced routes (\`bun run sdk\` runs \`terreno-syncdb-codegen --api-out\`)
443
444
  - Cursor rules for AI assistance
444
445
  - MCP integration for development assistance
445
446
 
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,11 @@ Read the architecture first:
8
8
  Use `AdminProvider` + `AdminShellLayout`. Home is `AdminHome`. Generic models use
9
9
  `AdminScreenRouter` on `[model]/index` (create is `[model]/create`, not `new`).
10
10
  Custom screens need the same `name` on `AdminApp.customScreens` and
11
- `widgets.screens`. String-`_id` model CRUD uses windowed syncdb when
12
- `adminBroadcast` is enabled. Framework admin RPC uses host-bound
13
- `adminRequest`; ObjectId/API-only compatibility CRUD keeps `useAdminApi` in
14
- Terreno 57. Do not add new admin `injectEndpoints`; Terreno 58 removes that path
15
- and the required `api` prop.
11
+ `widgets.screens`. `AdminProvider` is the only auth binding: every admin request
12
+ (model CRUD and RPC) goes through its host-bound `adminRequest` fetch client
13
+ (`credentials` for cookie SPAs, `apiOrigin` + `getAuthHeaders` for embedded apps).
14
+ String-`_id` model CRUD uses windowed syncdb when `adminBroadcast` is enabled;
15
+ ObjectId and API-only models use `useAdminModelApi`. Admin components take no
16
+ `api` prop.
16
17
 
17
18
  Agent workflow: skill `building-admin-interfaces`.
@@ -64,5 +64,5 @@ Forms:
64
64
  - Don't use raw `View`/`Text` when `Box`/@terreno/ui `Text` are available
65
65
  - Don't forget loading and error states
66
66
  - Don't use `style` prop when equivalent props exist (`padding`, `margin`)
67
- - Never modify `openApiSdk.ts` manually
67
+ - Never modify generated SDK files (`apiSdk.ts`, `syncDbSdk.ts` from `@terreno/syncdb` codegen) manually
68
68
  - **No barrel imports** inside `@terreno/ui` — import from concrete files (e.g. `./fieldElements/FieldTitle`), not `./fieldElements` or the package `index`. See `docs/explanation/no-barrel-imports.md`.
@@ -17,8 +17,10 @@ Help debug an issue in a Terreno application.
17
17
  ### Frontend Issues
18
18
  1. **Check console**: Look for errors in browser/React Native console
19
19
  2. **Network requests**: Verify API calls in Network tab
20
- 3. **Redux state**: Check Redux DevTools for state changes
21
- 4. **SDK regeneration**: Run `bun run sdk` after backend changes
20
+ 3. **Local data state**: Inspect synced collections, the outbox, and conflicts with the
21
+ `get_syncdb_state` local MCP tool (or `terreno state`); the client needs `debug: true`
22
+ 4. **SDK regeneration**: Run `bun run api-sdk` (request hooks in `store/apiSdk.ts`) after backend
23
+ changes
22
24
  5. **Component props**: Verify required props are passed
23
25
 
24
26
  ### Common Issues
@@ -40,7 +42,7 @@ Help debug an issue in a Terreno application.
40
42
 
41
43
  #### "Network request failed"
42
44
  - Check backend is running
43
- - Verify `baseUrl` in RTK config
45
+ - Verify `baseUrl` from `@terreno/syncdb/config` (`EXPO_PUBLIC_API_URL`, `extra.BASE_URL`)
44
46
  - Check CORS settings
45
47
 
46
48
  #### Form validation errors
@@ -50,7 +52,7 @@ Help debug an issue in a Terreno application.
50
52
 
51
53
  ### Debugging Tools
52
54
  - **Backend**: Use `logger.debug()` for detailed logging
53
- - **Frontend**: Use React DevTools and Redux DevTools
55
+ - **Frontend**: Use React DevTools, `get_syncdb_state` / `syncdb_snapshot`, and `read_logs`
54
56
  - **API**: Use Postman or curl to test endpoints directly
55
57
  - **Database**: Use MongoDB Compass to inspect data
56
58
 
@@ -19,37 +19,31 @@ Create a new screen with the following specifications:
19
19
  ### Required Elements
20
20
  1. Use `Page` component as wrapper
21
21
  2. Include proper navigation title
22
- 3. Handle loading states with `Spinner`
23
- 4. Handle error states with appropriate messaging
22
+ 3. Handle empty states (synced collection reads are local and have no loading state)
23
+ 4. Handle loading and error states for request hooks from `store/apiSdk.ts` with `Spinner` and an error message
24
24
  5. Use @terreno/ui components throughout
25
25
 
26
26
  ### Data Fetching
27
27
  {{dataSection}}
28
28
 
29
+ Synced collections read with `useQuery` / `useEntity` and write with `useMutate` from
30
+ `@terreno/syncdb/react`. Every other route uses the generated hooks in `store/apiSdk.ts`.
31
+
29
32
  ### Example Structure
30
33
  ```tsx
31
- import {Box, Page, Text, Spinner} from "@terreno/ui";
34
+ import {useQuery} from "@terreno/syncdb/react";
35
+ import {Box, Page, Text} from "@terreno/ui";
32
36
  import type React from "react";
33
- import {useGet{{Model}}Query} from "@/store/sdk";
37
+ import type {{{Model}}} from "@/types/{{model}}";
34
38
 
35
39
  const {{Name}}Screen: React.FC = () => {
36
- const {data, isLoading, error} = useGet{{Model}}Query();
37
-
38
- if (isLoading) {
39
- return (
40
- <Page navigation={undefined} title="{{title}}">
41
- <Box padding={4} alignItems="center">
42
- <Spinner />
43
- </Box>
44
- </Page>
45
- );
46
- }
40
+ const rows = useQuery<{{Model}}>("{{collection}}", {sort: "-created"});
47
41
 
48
- if (error) {
42
+ if (rows.length === 0) {
49
43
  return (
50
44
  <Page navigation={undefined} title="{{title}}">
51
45
  <Box padding={4}>
52
- <Text color="error">Failed to load data</Text>
46
+ <Text>Nothing here yet</Text>
53
47
  </Box>
54
48
  </Page>
55
49
  );
@@ -30,12 +30,14 @@ request to a mergeable pull request.
30
30
 
31
31
  - **@terreno/api** — REST API framework for Express/Mongoose (modelRouter, auth, OpenAPI)
32
32
  - **@terreno/ui** — React Native UI component library for iOS, Android, and web
33
- - **@terreno/syncdb** — Local-first data layer (primary path for collection CRUD)
34
- - **@terreno/rtk** — OpenAPI SDK, Better Auth Redux, feature flags (legacy for data sync)
33
+ - **@terreno/syncdb** — Local-first data layer, request client + generated API hooks, auth session, config, and feature flags
35
34
  - **@terreno/ai** — Provider-agnostic AI service
36
35
  - **@terreno/admin-backend** / **@terreno/admin-frontend** / **@terreno/admin-spa** — Admin panel stack
37
36
 
38
- New apps: **syncdb + Better Auth** for data and auth; **rtk** for generated SDK hooks on non-synced routes only.
37
+ Frontends use **@terreno/syncdb** for everything data-related: synced collections (`useQuery` /
38
+ `useMutate`), generated request hooks for non-synced routes (`store/apiSdk.ts`), and the session
39
+ (`SessionProvider` / `useSession` from `@terreno/syncdb/auth`). `@terreno/rtk` and Redux were removed
40
+ in Terreno 58.
39
41
 
40
42
  ## MCP development tools
41
43