@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/dist/resources.js CHANGED
@@ -171,18 +171,11 @@ const buildResources = () => {
171
171
  },
172
172
  {
173
173
  content: loadMarkdown("syncdb.md"),
174
- description: "Local-first data layer (@terreno/syncdb) — primary path for collection CRUD",
174
+ description: "@terreno/syncdb — synced collections, request client + generated API hooks, auth session, config, flags",
175
175
  mimeType: "text/markdown",
176
176
  name: "@terreno/syncdb Documentation",
177
177
  uri: "terreno://docs/syncdb",
178
178
  },
179
- {
180
- content: loadMarkdown("rtk.md"),
181
- description: "Legacy @terreno/rtk docs — OpenAPI SDK, auth, feature flags (not data sync)",
182
- mimeType: "text/markdown",
183
- name: "@terreno/rtk Documentation (legacy)",
184
- uri: "terreno://docs/rtk",
185
- },
186
179
  {
187
180
  content: loadMarkdown("patterns.md"),
188
181
  description: "Common patterns and best practices for Terreno development",
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export interface MarkdownChunk {
9
9
  breadcrumb: string;
10
10
  /** Searchable body (heading line may repeat for BM25) */
11
11
  text: string;
12
- /** Short package ids for filtering (api, ui, rtk, docs, …) */
12
+ /** Short package ids for filtering (api, ui, syncdb, docs, …) */
13
13
  packageTags: string[];
14
14
  }
15
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/search/chunker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD;;;GAGG;AACH,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,EAClB,KAAK,MAAM,EACX,aAAa,MAAM,EAAE,KACpB,aAOD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,MAAM,EAClB,KAAK,MAAM,EACX,aAAa,MAAM,EAAE,KACpB,aAAa,EAqDf,CAAC"}
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/search/chunker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD;;;GAGG;AACH,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,EAClB,KAAK,MAAM,EACX,aAAa,MAAM,EAAE,KACpB,aAOD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,MAAM,EAClB,KAAK,MAAM,EACX,aAAa,MAAM,EAAE,KACpB,aAAa,EAqDf,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Map a docs-relative path to Terreno package tags used by `terreno_search_docs` filters.
3
- * Tags are lowercase short names: api, ui, rtk, admin-backend, admin-frontend, mcp-server, docs.
3
+ * Tags are lowercase short names: api, ui, syncdb, admin-backend, admin-frontend, mcp-server, docs.
4
4
  */
5
5
  export declare const inferPackageTags: (relativePath: string) => string[];
6
6
  export declare const normalizePackageFilter: (pkg: string) => string;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Map a docs-relative path to Terreno package tags used by `terreno_search_docs` filters.
3
- * Tags are lowercase short names: api, ui, rtk, admin-backend, admin-frontend, mcp-server, docs.
3
+ * Tags are lowercase short names: api, ui, syncdb, admin-backend, admin-frontend, mcp-server, docs.
4
4
  */
5
5
  export const inferPackageTags = (relativePath) => {
6
6
  const norm = relativePath.replace(/\\/g, "/").toLowerCase();
@@ -12,8 +12,8 @@ export const inferPackageTags = (relativePath) => {
12
12
  if (base === "ui.md" || norm.includes("/resources/ui.md")) {
13
13
  tags.add("ui");
14
14
  }
15
- if (base === "rtk.md" || norm.includes("/resources/rtk.md")) {
16
- tags.add("rtk");
15
+ if (base === "syncdb.md" || norm.includes("/resources/syncdb.md")) {
16
+ tags.add("syncdb");
17
17
  }
18
18
  if (norm.includes("admin-backend")) {
19
19
  tags.add("admin-backend");
@@ -36,8 +36,8 @@ export const inferPackageTags = (relativePath) => {
36
36
  if (norm.includes("/ui/") && !norm.includes("admin-frontend")) {
37
37
  tags.add("ui");
38
38
  }
39
- if (norm.includes("/rtk/")) {
40
- tags.add("rtk");
39
+ if (norm.includes("/syncdb/")) {
40
+ tags.add("syncdb");
41
41
  }
42
42
  if (norm.includes("ui-types") || norm.includes("component")) {
43
43
  tags.add("ui");
@@ -1 +1 @@
1
- {"version":3,"file":"inferPackages.js","sourceRoot":"","sources":["../../src/search/inferPackages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inferPackages.js","sourceRoot":"","sources":["../../src/search/inferPackages.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -27,11 +27,17 @@ export declare const generateRoute: (args: {
27
27
  ownerFiltered?: boolean;
28
28
  sort?: string;
29
29
  }) => string;
30
+ /**
31
+ * Default synced collection name for a model: kebab-case plural of the model name
32
+ * (`Product` → `products`, `TodoItem` → `todo-items`), matching a `modelRouter` path.
33
+ */
34
+ export declare const toCollectionName: (modelName: string) => string;
30
35
  export declare const generateScreen: (args: {
31
36
  name: string;
32
37
  type: "list" | "detail" | "form" | "empty";
33
38
  modelName?: string;
34
39
  fields?: string[];
40
+ collection?: string;
35
41
  }) => string;
36
42
  export declare const generateFormFields: (args: {
37
43
  fields: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAC;AA+JvD,eAAO,MAAM,KAAK,EAAE,IAAI,EAgPvB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,KAAG,MAuEH,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,KAAG,MAuEH,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,KAAG,MA0MH,CAAC;AAKF,eAAO,MAAM,kBAAkB,GAAI,MAAM;IACvC,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,KAAK,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC,CAAC;KACjD,CAAC,CAAC;CACJ,KAAG,MAmFH,CAAC;AAKF,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,GAAI,MAAM;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAC,KAAG,MAgB5D,CAAC;AAiBF,eAAO,MAAM,mBAAmB,GAAI,MAAM;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,KAAG,MAgE5D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM;IACzC,MAAM,EAAE,KAAK,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC,CAAC;CACJ,KAAG,MAsMH,CAAC;AAqBF,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAiJxD,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/tools.js CHANGED
@@ -5,7 +5,7 @@ import { getComponentDocsMarkdown, searchDocs } from "./search/docIndex.js";
5
5
  import { getUpgradeGuideMarkdown } from "./upgradeGuide.js";
6
6
  const docSearchTools = [
7
7
  {
8
- description: "Search Terreno documentation (Diátaxis docs, bundled package guides, and @terreno/ui component props) with BM25-style keyword search. **Call this before guessing** modelRouter, OpenAPI, RTK Query, or UI APIs — same workflow as Laravel Boost search-docs.",
8
+ description: "Search Terreno documentation (Diátaxis docs, bundled package guides, and @terreno/ui component props) with BM25-style keyword search. **Call this before guessing** modelRouter, OpenAPI, syncdb, or UI APIs — same workflow as Laravel Boost search-docs.",
9
9
  inputSchema: {
10
10
  properties: {
11
11
  packages: {
@@ -236,9 +236,13 @@ export const tools = [
236
236
  name: "terreno_generate_route",
237
237
  },
238
238
  {
239
- description: "Generate a React Native screen component using @terreno/ui components",
239
+ description: "Generate a React Native screen component using @terreno/ui components. List, detail, and form screens read and write a synced collection with @terreno/syncdb/react (useQuery, useEntity, useMutate).",
240
240
  inputSchema: {
241
241
  properties: {
242
+ collection: {
243
+ description: "Synced collection name (defaults to the kebab-case plural of modelName, e.g. 'todo-items')",
244
+ type: "string",
245
+ },
242
246
  fields: {
243
247
  description: "Fields to display or edit",
244
248
  items: { type: "string" },
@@ -515,6 +519,23 @@ export const add${modelName}Routes = (router: Router) => {
515
519
  };
516
520
  `;
517
521
  };
522
+ /**
523
+ * Default synced collection name for a model: kebab-case plural of the model name
524
+ * (`Product` → `products`, `TodoItem` → `todo-items`), matching a `modelRouter` path.
525
+ */
526
+ export const toCollectionName = (modelName) => {
527
+ const kebab = modelName
528
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
529
+ .replace(/[\s_]+/g, "-")
530
+ .toLowerCase();
531
+ if (kebab.endsWith("s")) {
532
+ return kebab;
533
+ }
534
+ if (/[^aeiou]y$/.test(kebab)) {
535
+ return `${kebab.slice(0, -1)}ies`;
536
+ }
537
+ return `${kebab}s`;
538
+ };
518
539
  export const generateScreen = (args) => {
519
540
  const { name, type, modelName, fields } = args;
520
541
  if (type === "empty") {
@@ -534,47 +555,39 @@ const ${name}Screen: React.FC = () => {
534
555
  export default ${name}Screen;
535
556
  `;
536
557
  }
558
+ // Generated screens read and write a synced collection through @terreno/syncdb (local-first).
559
+ // Non-synced models use the generated request hooks in `@/store/apiSdk` instead.
560
+ const collection = args.collection ?? (modelName ? toCollectionName(modelName) : "");
561
+ const typeName = modelName ? `${modelName}Row` : "";
562
+ const rowInterface = modelName
563
+ ? `interface ${typeName} {
564
+ id: string;
565
+ ${(fields ?? []).map((f) => ` ${f}?: unknown;`).join("\n")}
566
+ }
567
+ `
568
+ : "";
537
569
  if (type === "list" && modelName) {
538
- const pluralLower = `${modelName.toLowerCase()}s`;
539
- return `import React, { useCallback } from "react";
540
- import { Box, Page, Text, Button, ScrollView } from "@terreno/ui";
541
- import { useGet${modelName}sQuery } from "@/store/openApiSdk";
570
+ return `import React from "react";
571
+ import { useQuery, useSyncStatus } from "@terreno/syncdb/react";
572
+ import { Box, Page, Spinner, Text } from "@terreno/ui";
542
573
 
574
+ ${rowInterface}
543
575
  const ${name}Screen: React.FC = () => {
544
- const { data: ${pluralLower}, isLoading, error, refetch } = useGet${modelName}sQuery({});
545
-
546
- if (isLoading) {
547
- return (
548
- <Page navigation={undefined} title="${name}">
549
- <Box flex={1} alignItems="center" justifyContent="center">
550
- <Text>Loading...</Text>
551
- </Box>
552
- </Page>
553
- );
554
- }
555
-
556
- if (error) {
557
- return (
558
- <Page navigation={undefined} title="${name}">
559
- <Box flex={1} alignItems="center" justifyContent="center" gap={2}>
560
- <Text color="error500">Failed to load data</Text>
561
- <Button text="Retry" onClick={refetch} />
562
- </Box>
563
- </Page>
564
- );
565
- }
576
+ // Local-first: rows come from the on-device store and update as sync deltas arrive.
577
+ const items = useQuery<${typeName}>("${collection}");
578
+ const {isSyncing} = useSyncStatus();
566
579
 
567
580
  return (
568
- <Page navigation={undefined} title="${name}">
569
- <ScrollView>
570
- <Box padding={4} gap={2}>
571
- {${pluralLower}?.map((item) => (
572
- <Box key={item.id} padding={3} backgroundColor="neutral100" borderRadius="md">
573
- <Text>{item.${fields?.[0] ?? "id"}}</Text>
574
- </Box>
575
- ))}
576
- </Box>
577
- </ScrollView>
581
+ <Page navigation={undefined} scroll title="${name}">
582
+ <Box padding={4} gap={2}>
583
+ {isSyncing && items.length === 0 ? <Spinner /> : null}
584
+ {items.map((item) => (
585
+ <Box key={item.id} padding={3} color="base" rounding="md">
586
+ <Text>{String(item.${fields?.[0] ?? "id"} ?? "")}</Text>
587
+ </Box>
588
+ ))}
589
+ {!isSyncing && items.length === 0 ? <Text>No ${collection} yet</Text> : null}
590
+ </Box>
578
591
  </Page>
579
592
  );
580
593
  };
@@ -587,17 +600,17 @@ export default ${name}Screen;
587
600
  .map((f) => ` const [${f}, set${f.charAt(0).toUpperCase() + f.slice(1)}] = useState("");`)
588
601
  .join("\n");
589
602
  const fieldInputs = (fields ?? ["name"])
590
- .map((f) => ` <TextField
591
- label="${f.charAt(0).toUpperCase() + f.slice(1)}"
592
- value={${f}}
593
- onChangeText={set${f.charAt(0).toUpperCase() + f.slice(1)}}
594
- error={errors.${f}}
595
- />`)
603
+ .map((f) => ` <TextField
604
+ title="${f.charAt(0).toUpperCase() + f.slice(1)}"
605
+ value={${f}}
606
+ onChange={set${f.charAt(0).toUpperCase() + f.slice(1)}}
607
+ errorText={errors.${f}}
608
+ />`)
596
609
  .join("\n");
597
610
  const bodyFields = (fields ?? ["name"]).map((f) => `${f}`).join(", ");
598
611
  return `import React, { useCallback, useState } from "react";
612
+ import { useMutate } from "@terreno/syncdb/react";
599
613
  import { Box, Page, Button, TextField } from "@terreno/ui";
600
- import { useCreate${modelName}Mutation } from "@/store/openApiSdk";
601
614
 
602
615
  interface FormErrors {
603
616
  ${(fields ?? ["name"]).map((f) => `${f}?: string;`).join("\n ")}
@@ -606,38 +619,28 @@ interface FormErrors {
606
619
  const ${name}Screen: React.FC = () => {
607
620
  ${fieldStates}
608
621
  const [errors, setErrors] = useState<FormErrors>({});
609
- const [create${modelName}, { isLoading }] = useCreate${modelName}Mutation();
622
+ // Local-first write: applies optimistically and syncs through the durable outbox.
623
+ const {create} = useMutate("${collection}");
610
624
 
611
- const handleSubmit = useCallback(async () => {
625
+ const handleSubmit = useCallback((): void => {
612
626
  const newErrors: FormErrors = {};
613
- ${(fields ?? ["name"]).map((f) => `if (!${f}.trim()) newErrors.${f} = "${f.charAt(0).toUpperCase() + f.slice(1)} is required";`).join("\n ")}
627
+ ${(fields ?? ["name"]).map((f) => `if (!${f}.trim()) {\n newErrors.${f} = "${f.charAt(0).toUpperCase() + f.slice(1)} is required";\n }`).join("\n ")}
614
628
 
615
629
  if (Object.keys(newErrors).length > 0) {
616
630
  setErrors(newErrors);
617
631
  return;
618
632
  }
619
633
 
620
- try {
621
- await create${modelName}({ ${bodyFields} }).unwrap();
622
- // Success - navigate or show message
623
- } catch (err: unknown) {
624
- const apiError = err as {data?: {fields?: FormErrors}};
625
- if (apiError.data?.fields) {
626
- setErrors(apiError.data.fields);
627
- }
628
- }
629
- }, [${bodyFields}, create${modelName}]);
634
+ setErrors({});
635
+ create({data: { ${bodyFields} }});
636
+ // Success - navigate or show message. Server rejections surface through useConflicts().
637
+ }, [${bodyFields}, create]);
630
638
 
631
639
  return (
632
640
  <Page navigation={undefined} title="Create ${modelName}">
633
641
  <Box padding={4} gap={3}>
634
642
  ${fieldInputs}
635
- <Button
636
- text="Create"
637
- onClick={handleSubmit}
638
- loading={isLoading}
639
- fullWidth
640
- />
643
+ <Button text="Create" onClick={handleSubmit} fullWidth />
641
644
  </Box>
642
645
  </Page>
643
646
  );
@@ -648,42 +651,30 @@ export default ${name}Screen;
648
651
  }
649
652
  if (type === "detail" && modelName) {
650
653
  return `import React from "react";
651
- import { Box, Page, Text, Button, ScrollView } from "@terreno/ui";
652
- import { useGet${modelName}Query } from "@/store/openApiSdk";
654
+ import { useEntity } from "@terreno/syncdb/react";
655
+ import { Box, Page, Text } from "@terreno/ui";
653
656
  import { useLocalSearchParams } from "expo-router";
654
657
 
658
+ ${rowInterface}
655
659
  const ${name}Screen: React.FC = () => {
656
660
  const { id } = useLocalSearchParams<{ id: string }>();
657
- const { data: item, isLoading, error, refetch } = useGet${modelName}Query({ id: id! }, { skip: !id });
661
+ const { data: item, deleted } = useEntity<${typeName}>("${collection}", id ?? "");
658
662
 
659
- if (isLoading) {
663
+ if (!item || deleted) {
660
664
  return (
661
665
  <Page navigation={undefined} title="${name}">
662
- <Box flex={1} alignItems="center" justifyContent="center">
663
- <Text>Loading...</Text>
664
- </Box>
665
- </Page>
666
- );
667
- }
668
-
669
- if (error || !item) {
670
- return (
671
- <Page navigation={undefined} title="${name}">
672
- <Box flex={1} alignItems="center" justifyContent="center" gap={2}>
673
- <Text color="error500">Failed to load data</Text>
674
- <Button text="Retry" onClick={refetch} />
666
+ <Box padding={4} alignItems="center" justifyContent="center">
667
+ <Text>Not found</Text>
675
668
  </Box>
676
669
  </Page>
677
670
  );
678
671
  }
679
672
 
680
673
  return (
681
- <Page navigation={undefined} title="${name}">
682
- <ScrollView>
683
- <Box padding={4} gap={2}>
684
- ${(fields ?? ["id"]).map((f) => `<Text>{item.${f}}</Text>`).join("\n ")}
685
- </Box>
686
- </ScrollView>
674
+ <Page navigation={undefined} scroll title="${name}">
675
+ <Box padding={4} gap={2}>
676
+ ${(fields ?? ["id"]).map((f) => `<Text>{String(item.${f} ?? "")}</Text>`).join("\n ")}
677
+ </Box>
687
678
  </Page>
688
679
  );
689
680
  };
@@ -876,14 +867,47 @@ export const generateInstallAdmin = (args) => {
876
867
  .join("\n");
877
868
  const modelImports = models.map((m) => m.modelName).join(", ");
878
869
  const files = [
870
+ {
871
+ content: `import {AdminProvider} from "@terreno/admin-frontend";
872
+ import {baseUrl} from "@terreno/syncdb/config";
873
+ import {Stack} from "expo-router";
874
+ import type React from "react";
875
+ import {authProvider} from "@/store/syncdb";
876
+
877
+ // Every admin request (model CRUD and admin RPC) goes through AdminProvider's fetch client.
878
+ // authProvider is the same @terreno/syncdb AuthProvider the sync and request clients use
879
+ // (Better Auth session token, or the JWT from jwtAuthAdapter).
880
+ const getAdminAuthHeaders = async (): Promise<HeadersInit> => {
881
+ const token = await authProvider.getToken();
882
+ if (!token) {
883
+ return {};
884
+ }
885
+ return {Authorization: \`Bearer \${token}\`};
886
+ };
887
+
888
+ const AdminLayout: React.FC = () => {
889
+ return (
890
+ <AdminProvider
891
+ apiBase="/admin"
892
+ apiOrigin={baseUrl}
893
+ getAuthHeaders={getAdminAuthHeaders}
894
+ routeBase="/admin"
895
+ >
896
+ <Stack screenOptions={{headerShown: false}} />
897
+ </AdminProvider>
898
+ );
899
+ };
900
+
901
+ export default AdminLayout;
902
+ `,
903
+ path: "frontend/app/(tabs)/admin/_layout.tsx",
904
+ },
879
905
  {
880
906
  content: `import {AdminModelList} from "@terreno/admin-frontend";
881
907
  import type React from "react";
882
- import {terrenoApi} from "@/store/sdk";
883
- import {baseUrl} from "@terreno/rtk";
884
908
 
885
909
  const AdminIndexScreen: React.FC = () => {
886
- return <AdminModelList api={terrenoApi} baseUrl={\`\${baseUrl}/admin\`} />;
910
+ return <AdminModelList baseUrl="/admin" />;
887
911
  };
888
912
 
889
913
  export default AdminIndexScreen;
@@ -894,15 +918,11 @@ export default AdminIndexScreen;
894
918
  content: `import {AdminModelTable} from "@terreno/admin-frontend";
895
919
  import type React from "react";
896
920
  import {useLocalSearchParams} from "expo-router";
897
- import {terrenoApi} from "@/store/sdk";
898
- import {baseUrl} from "@terreno/rtk";
899
921
 
900
922
  const AdminModelScreen: React.FC = () => {
901
923
  const {model} = useLocalSearchParams<{model: string}>();
902
924
 
903
- return (
904
- <AdminModelTable api={terrenoApi} baseUrl={\`\${baseUrl}/admin\`} modelName={model!} />
905
- );
925
+ return <AdminModelTable baseUrl="/admin" modelName={model!} />;
906
926
  };
907
927
 
908
928
  export default AdminModelScreen;
@@ -913,20 +933,11 @@ export default AdminModelScreen;
913
933
  content: `import {AdminModelForm} from "@terreno/admin-frontend";
914
934
  import type React from "react";
915
935
  import {useLocalSearchParams} from "expo-router";
916
- import {terrenoApi} from "@/store/sdk";
917
- import {baseUrl} from "@terreno/rtk";
918
936
 
919
937
  const AdminCreateScreen: React.FC = () => {
920
938
  const {model} = useLocalSearchParams<{model: string}>();
921
939
 
922
- return (
923
- <AdminModelForm
924
- api={terrenoApi}
925
- baseUrl={\`\${baseUrl}/admin\`}
926
- mode="create"
927
- modelName={model!}
928
- />
929
- );
940
+ return <AdminModelForm baseUrl="/admin" mode="create" modelName={model!} />;
930
941
  };
931
942
 
932
943
  export default AdminCreateScreen;
@@ -937,21 +948,11 @@ export default AdminCreateScreen;
937
948
  content: `import {AdminModelForm} from "@terreno/admin-frontend";
938
949
  import type React from "react";
939
950
  import {useLocalSearchParams} from "expo-router";
940
- import {terrenoApi} from "@/store/sdk";
941
- import {baseUrl} from "@terreno/rtk";
942
951
 
943
952
  const AdminEditScreen: React.FC = () => {
944
953
  const {model, id} = useLocalSearchParams<{model: string; id: string}>();
945
954
 
946
- return (
947
- <AdminModelForm
948
- api={terrenoApi}
949
- baseUrl={\`\${baseUrl}/admin\`}
950
- itemId={id}
951
- mode="edit"
952
- modelName={model!}
953
- />
954
- );
955
+ return <AdminModelForm baseUrl="/admin" itemId={id} mode="edit" modelName={model!} />;
955
956
  };
956
957
 
957
958
  export default AdminEditScreen;
@@ -1015,9 +1016,13 @@ Add the dependency to \`frontend/package.json\`:
1015
1016
  cd frontend && bun add @terreno/admin-frontend
1016
1017
  \`\`\`
1017
1018
 
1018
- ### Step 4: Create the 4 screen files
1019
+ ### Step 4: Create the admin layout and 3 screen files
1019
1020
 
1020
- Create the files listed above. Each file's content is provided below.
1021
+ Create the files listed above. Each file's content is provided below. The \`_layout.tsx\`
1022
+ \`AdminProvider\` is required: it binds every admin request to your API origin and auth
1023
+ headers. It reads the token from the \`authProvider\` exported by \`frontend/store/syncdb.ts\`
1024
+ (the scaffold's shared \`@terreno/syncdb\` auth provider) and the API origin from
1025
+ \`@terreno/syncdb/config\`. Admin screens take no \`api\` prop.
1021
1026
 
1022
1027
  ### Step 5: Add Admin tab to \`frontend/app/(tabs)/_layout.tsx\`
1023
1028
 
@@ -1161,7 +1166,7 @@ export const handleToolCall = async (name, args) => {
1161
1166
  result = wrapWithFileInstructions(code, `backend/src/api/${modelName}.ts`, [
1162
1167
  `Export from \`backend/src/api/index.ts\`: \`export * from "./${modelName}";\``,
1163
1168
  `Register in server setup: \`add${routeArgs.modelName}Routes(router, options);\``,
1164
- `Regenerate frontend SDK: \`bun run sdk\` in the frontend directory`,
1169
+ `Regenerate frontend API hooks (store/apiSdk.ts): \`bun run sdk\` in the frontend directory`,
1165
1170
  ]);
1166
1171
  break;
1167
1172
  }
@@ -1170,6 +1175,8 @@ export const handleToolCall = async (name, args) => {
1170
1175
  const code = generateScreen(screenArgs);
1171
1176
  result = wrapWithFileInstructions(code, `frontend/src/screens/${screenArgs.name}Screen.tsx`, [
1172
1177
  "Add the screen to your navigation configuration",
1178
+ "List/detail/form screens need the model synced: syncPlugin + isDeletedPlugin, modelRouter `sync` config, and the collection in SYNC_COLLECTIONS (frontend/store/syncdb.ts)",
1179
+ "For a non-synced model, swap the syncdb hooks for the generated request hooks in `@/store/apiSdk` (run `bun run sdk` first)",
1173
1180
  ]);
1174
1181
  break;
1175
1182
  }