@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.
- package/CHANGELOG.md +43 -0
- package/README.md +57 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +17 -16
- package/dist/bootstrap.js.map +1 -1
- package/dist/docs/guidelines/admin-frontend/guidelines/core.md +6 -5
- package/dist/docs/guidelines/ui/guidelines/core.md +1 -1
- package/dist/docs/prompts/debug.md +6 -4
- package/dist/docs/prompts/screen.md +11 -17
- package/dist/docs/resources/overview.md +5 -3
- package/dist/docs/resources/patterns.md +157 -238
- package/dist/docs/resources/syncdb.md +44 -16
- package/dist/docs/templates/bootstrap/CLAUDE.template.md +2 -2
- package/dist/docs/templates/bootstrap/cursorrules.template.md +7 -5
- package/dist/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +8 -12
- package/dist/docs/templates/bootstrap/frontend/app/_layout.template.tsx +75 -52
- package/dist/docs/templates/bootstrap/frontend/app/login.template.tsx +46 -108
- package/dist/docs/templates/bootstrap/frontend/app/signup.template.tsx +53 -0
- package/dist/docs/templates/bootstrap/frontend/lib/betterAuth.template.md +18 -0
- package/dist/docs/templates/bootstrap/frontend/store/apiClient.template.md +33 -0
- package/dist/docs/templates/bootstrap/frontend/store/apiSdk.template.md +76 -0
- package/dist/docs/templates/bootstrap/frontend/store/syncdb.template.md +56 -0
- package/dist/docs/templates/bootstrap/frontend/utils/index.template.md +0 -4
- package/dist/docs/upgrades/58.0.0-beta.1.md +504 -0
- package/dist/docs/upgrades/58.0.0.md +495 -4
- package/dist/docs/versioned/next/README.md +2 -2
- package/dist/docs/versioned/next/approval-rubric.md +2 -2
- package/dist/docs/versioned/next/explanation/admin-interface.md +6 -5
- package/dist/docs/versioned/next/explanation/admin-plugin-frontend.md +1 -1
- package/dist/docs/versioned/next/explanation/ai-workflows.md +5 -3
- package/dist/docs/versioned/next/explanation/announcements/rtk-deprecation.md +16 -11
- package/dist/docs/versioned/next/explanation/authentication.md +62 -43
- package/dist/docs/versioned/next/explanation/dependency-management.md +1 -1
- package/dist/docs/versioned/next/explanation/deployment-baseline.md +1 -1
- package/dist/docs/versioned/next/explanation/example-coverage.md +2 -2
- package/dist/docs/versioned/next/explanation/explicit-any-policy.md +5 -6
- package/dist/docs/versioned/next/explanation/gcp-hosting-architecture.md +1 -1
- package/dist/docs/versioned/next/explanation/local-first-data.md +11 -9
- package/dist/docs/versioned/next/explanation/model-router-actions.md +1 -1
- package/dist/docs/versioned/next/explanation/modular-api-design.md +2 -2
- package/dist/docs/versioned/next/explanation/no-barrel-imports.md +5 -5
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +4 -3
- package/dist/docs/versioned/next/explanation/source-rules.md +2 -2
- package/dist/docs/versioned/next/explanation/typescript-configuration.md +2 -4
- package/dist/docs/versioned/next/explanation/versioning-policy.md +3 -3
- package/dist/docs/versioned/next/how-to/README.md +3 -2
- package/dist/docs/versioned/next/how-to/add-feature-flags.md +50 -25
- package/dist/docs/versioned/next/how-to/add-organizations.md +2 -1
- package/dist/docs/versioned/next/how-to/admin-custom-home.md +8 -2
- package/dist/docs/versioned/next/how-to/admin-custom-widget.md +0 -1
- package/dist/docs/versioned/next/how-to/agent-ui-asks.md +6 -6
- package/dist/docs/versioned/next/how-to/build-admin-screens.md +10 -8
- package/dist/docs/versioned/next/how-to/build-for-web.md +1 -1
- package/dist/docs/versioned/next/how-to/call-external-apis.md +2 -2
- package/dist/docs/versioned/next/how-to/circleci.md +12 -6
- package/dist/docs/versioned/next/how-to/configure-better-auth.md +114 -60
- package/dist/docs/versioned/next/how-to/connect-mcp-service-token.md +10 -4
- package/dist/docs/versioned/next/how-to/create-a-terreno-app.md +14 -2
- package/dist/docs/versioned/next/how-to/debug-with-mcp.md +8 -13
- package/dist/docs/versioned/next/how-to/expose-mcp-tools.md +15 -4
- package/dist/docs/versioned/next/how-to/generate-the-client-sdk.md +33 -0
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +2 -2
- package/dist/docs/versioned/next/how-to/in-app-notifications.md +1 -1
- package/dist/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +318 -447
- package/dist/docs/versioned/next/how-to/password-reset.md +1 -1
- package/dist/docs/versioned/next/how-to/product-announcements.md +6 -3
- package/dist/docs/versioned/next/how-to/rate-limiting.md +38 -16
- package/dist/docs/versioned/next/how-to/run-mongodb-migrations.md +19 -0
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +2 -3
- package/dist/docs/versioned/next/how-to/set-up-social-login.md +1 -1
- package/dist/docs/versioned/next/how-to/set-up-terreno-mcp.md +2 -2
- package/dist/docs/versioned/next/how-to/track-upstream-expo.md +1 -1
- package/dist/docs/versioned/next/how-to/upgrade-banner.md +5 -3
- package/dist/docs/versioned/next/how-to/upgrade-terreno.md +5 -5
- package/dist/docs/versioned/next/how-to/use-syncdb-correctly.md +1 -1
- package/dist/docs/versioned/next/how-to/websocket-integration.md +113 -402
- package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +5 -0
- package/dist/docs/versioned/next/implementationPlans/native-module-baseline.md +29 -5
- package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/remove-rtk.md +185 -0
- package/dist/docs/versioned/next/reference/README.md +1 -1
- package/dist/docs/versioned/next/reference/admin-frontend.md +85 -70
- package/dist/docs/versioned/next/reference/admin-spa.md +10 -4
- package/dist/docs/versioned/next/reference/ai.md +36 -4
- package/dist/docs/versioned/next/reference/announcements.md +3 -3
- package/dist/docs/versioned/next/reference/api.md +39 -24
- package/dist/docs/versioned/next/reference/cli.md +3 -4
- package/dist/docs/versioned/next/reference/environment-variables.md +16 -16
- package/dist/docs/versioned/next/reference/feature-flags.md +48 -7
- package/dist/docs/versioned/next/reference/jobs.md +2 -2
- package/dist/docs/versioned/next/reference/legacy/rtk.md +25 -600
- package/dist/docs/versioned/next/reference/mcp-server.md +441 -1158
- package/dist/docs/versioned/next/reference/syncdb.md +426 -16
- package/dist/docs/versioned/next/reference/test.md +28 -3
- package/dist/docs/versioned/next/reference/ui.md +132 -19
- package/dist/docs/versioned/next/tasks/native-module-baseline.md +8 -4
- package/dist/docs/versioned/next/tasks/rate-limiting.md +9 -2
- package/dist/docs/versioned/next/tasks/remove-legacy-realtime.md +5 -5
- package/dist/docs/versioned/next/tasks/remove-rtk.md +155 -0
- package/dist/local/localTools.d.ts.map +1 -1
- package/dist/local/localTools.js +3 -54
- package/dist/local/localTools.js.map +1 -1
- package/dist/local/tools/runtime.d.ts +0 -21
- package/dist/local/tools/runtime.d.ts.map +1 -1
- package/dist/local/tools/runtime.js +0 -176
- package/dist/local/tools/runtime.js.map +1 -1
- package/dist/local/tools/syncDb.d.ts +0 -11
- package/dist/local/tools/syncDb.d.ts.map +1 -1
- package/dist/local/tools/syncDb.js +1 -5
- package/dist/local/tools/syncDb.js.map +1 -1
- package/dist/packageGuidelines.d.ts +3 -2
- package/dist/packageGuidelines.d.ts.map +1 -1
- package/dist/packageGuidelines.js +4 -11
- package/dist/packageGuidelines.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +17 -18
- package/dist/prompts.js.map +1 -1
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +1 -8
- package/dist/resources.js.map +1 -1
- package/dist/search/chunker.d.ts +1 -1
- package/dist/search/chunker.d.ts.map +1 -1
- package/dist/search/inferPackages.d.ts +1 -1
- package/dist/search/inferPackages.js +5 -5
- package/dist/search/inferPackages.js.map +1 -1
- package/dist/tools.d.ts +6 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +126 -119
- package/dist/tools.js.map +1 -1
- package/package.json +6 -6
- package/src/docs/guidelines/admin-frontend/guidelines/core.md +6 -5
- package/src/docs/guidelines/ui/guidelines/core.md +1 -1
- package/src/docs/prompts/debug.md +6 -4
- package/src/docs/prompts/screen.md +11 -17
- package/src/docs/resources/overview.md +5 -3
- package/src/docs/resources/patterns.md +157 -238
- package/src/docs/resources/syncdb.md +44 -16
- package/src/docs/templates/bootstrap/CLAUDE.template.md +2 -2
- package/src/docs/templates/bootstrap/cursorrules.template.md +7 -5
- package/src/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +8 -12
- package/src/docs/templates/bootstrap/frontend/app/_layout.template.tsx +75 -52
- package/src/docs/templates/bootstrap/frontend/app/login.template.tsx +46 -108
- package/src/docs/templates/bootstrap/frontend/app/signup.template.tsx +53 -0
- package/src/docs/templates/bootstrap/frontend/lib/betterAuth.template.md +18 -0
- package/src/docs/templates/bootstrap/frontend/store/apiClient.template.md +33 -0
- package/src/docs/templates/bootstrap/frontend/store/apiSdk.template.md +76 -0
- package/src/docs/templates/bootstrap/frontend/store/syncdb.template.md +56 -0
- package/src/docs/templates/bootstrap/frontend/utils/index.template.md +0 -4
- package/src/docs/upgrades/58.0.0-beta.1.md +504 -0
- package/src/docs/upgrades/58.0.0.md +495 -4
- package/src/docs/versioned/next/README.md +2 -2
- package/src/docs/versioned/next/approval-rubric.md +2 -2
- package/src/docs/versioned/next/explanation/admin-interface.md +6 -5
- package/src/docs/versioned/next/explanation/admin-plugin-frontend.md +1 -1
- package/src/docs/versioned/next/explanation/ai-workflows.md +5 -3
- package/src/docs/versioned/next/explanation/announcements/rtk-deprecation.md +16 -11
- package/src/docs/versioned/next/explanation/authentication.md +62 -43
- package/src/docs/versioned/next/explanation/dependency-management.md +1 -1
- package/src/docs/versioned/next/explanation/deployment-baseline.md +1 -1
- package/src/docs/versioned/next/explanation/example-coverage.md +2 -2
- package/src/docs/versioned/next/explanation/explicit-any-policy.md +5 -6
- package/src/docs/versioned/next/explanation/gcp-hosting-architecture.md +1 -1
- package/src/docs/versioned/next/explanation/local-first-data.md +11 -9
- package/src/docs/versioned/next/explanation/model-router-actions.md +1 -1
- package/src/docs/versioned/next/explanation/modular-api-design.md +2 -2
- package/src/docs/versioned/next/explanation/no-barrel-imports.md +5 -5
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +4 -3
- package/src/docs/versioned/next/explanation/source-rules.md +2 -2
- package/src/docs/versioned/next/explanation/typescript-configuration.md +2 -4
- package/src/docs/versioned/next/explanation/versioning-policy.md +3 -3
- package/src/docs/versioned/next/how-to/README.md +3 -2
- package/src/docs/versioned/next/how-to/add-feature-flags.md +50 -25
- package/src/docs/versioned/next/how-to/add-organizations.md +2 -1
- package/src/docs/versioned/next/how-to/admin-custom-home.md +8 -2
- package/src/docs/versioned/next/how-to/admin-custom-widget.md +0 -1
- package/src/docs/versioned/next/how-to/agent-ui-asks.md +6 -6
- package/src/docs/versioned/next/how-to/build-admin-screens.md +10 -8
- package/src/docs/versioned/next/how-to/build-for-web.md +1 -1
- package/src/docs/versioned/next/how-to/call-external-apis.md +2 -2
- package/src/docs/versioned/next/how-to/circleci.md +12 -6
- package/src/docs/versioned/next/how-to/configure-better-auth.md +114 -60
- package/src/docs/versioned/next/how-to/connect-mcp-service-token.md +10 -4
- package/src/docs/versioned/next/how-to/create-a-terreno-app.md +14 -2
- package/src/docs/versioned/next/how-to/debug-with-mcp.md +8 -13
- package/src/docs/versioned/next/how-to/expose-mcp-tools.md +15 -4
- package/src/docs/versioned/next/how-to/generate-the-client-sdk.md +33 -0
- package/src/docs/versioned/next/how-to/github-actions-ci.md +2 -2
- package/src/docs/versioned/next/how-to/in-app-notifications.md +1 -1
- package/src/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +318 -447
- package/src/docs/versioned/next/how-to/password-reset.md +1 -1
- package/src/docs/versioned/next/how-to/product-announcements.md +6 -3
- package/src/docs/versioned/next/how-to/rate-limiting.md +38 -16
- package/src/docs/versioned/next/how-to/run-mongodb-migrations.md +19 -0
- package/src/docs/versioned/next/how-to/run-tests-locally.md +2 -3
- package/src/docs/versioned/next/how-to/set-up-social-login.md +1 -1
- package/src/docs/versioned/next/how-to/set-up-terreno-mcp.md +2 -2
- package/src/docs/versioned/next/how-to/track-upstream-expo.md +1 -1
- package/src/docs/versioned/next/how-to/upgrade-banner.md +5 -3
- package/src/docs/versioned/next/how-to/upgrade-terreno.md +5 -5
- package/src/docs/versioned/next/how-to/use-syncdb-correctly.md +1 -1
- package/src/docs/versioned/next/how-to/websocket-integration.md +113 -402
- package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +1 -1
- package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +5 -0
- package/src/docs/versioned/next/implementationPlans/native-module-baseline.md +29 -5
- package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -1
- package/src/docs/versioned/next/implementationPlans/remove-rtk.md +185 -0
- package/src/docs/versioned/next/reference/README.md +1 -1
- package/src/docs/versioned/next/reference/admin-frontend.md +85 -70
- package/src/docs/versioned/next/reference/admin-spa.md +10 -4
- package/src/docs/versioned/next/reference/ai.md +36 -4
- package/src/docs/versioned/next/reference/announcements.md +3 -3
- package/src/docs/versioned/next/reference/api.md +39 -24
- package/src/docs/versioned/next/reference/cli.md +3 -4
- package/src/docs/versioned/next/reference/environment-variables.md +16 -16
- package/src/docs/versioned/next/reference/feature-flags.md +48 -7
- package/src/docs/versioned/next/reference/jobs.md +2 -2
- package/src/docs/versioned/next/reference/legacy/rtk.md +25 -600
- package/src/docs/versioned/next/reference/mcp-server.md +441 -1158
- package/src/docs/versioned/next/reference/syncdb.md +426 -16
- package/src/docs/versioned/next/reference/test.md +28 -3
- package/src/docs/versioned/next/reference/ui.md +132 -19
- package/src/docs/versioned/next/tasks/native-module-baseline.md +8 -4
- package/src/docs/versioned/next/tasks/rate-limiting.md +9 -2
- package/src/docs/versioned/next/tasks/remove-legacy-realtime.md +5 -5
- package/src/docs/versioned/next/tasks/remove-rtk.md +155 -0
- package/dist/docs/guidelines/rtk/guidelines/core.md +0 -26
- package/dist/docs/resources/rtk.md +0 -181
- package/dist/docs/templates/bootstrap/frontend/openapi-config.template.md +0 -16
- package/dist/docs/templates/bootstrap/frontend/scripts/generate-sdk.template.md +0 -49
- package/dist/docs/templates/bootstrap/frontend/store/appState.template.md +0 -45
- package/dist/docs/templates/bootstrap/frontend/store/errors.template.md +0 -51
- package/dist/docs/templates/bootstrap/frontend/store/index.template.md +0 -86
- package/dist/docs/templates/bootstrap/frontend/store/openApiSdk.template.md +0 -49
- package/dist/docs/templates/bootstrap/frontend/store/sdk.template.md +0 -80
- package/src/docs/guidelines/rtk/guidelines/core.md +0 -26
- package/src/docs/resources/rtk.md +0 -181
- package/src/docs/templates/bootstrap/frontend/openapi-config.template.md +0 -16
- package/src/docs/templates/bootstrap/frontend/scripts/generate-sdk.template.md +0 -49
- package/src/docs/templates/bootstrap/frontend/store/appState.template.md +0 -45
- package/src/docs/templates/bootstrap/frontend/store/errors.template.md +0 -51
- package/src/docs/templates/bootstrap/frontend/store/index.template.md +0 -86
- package/src/docs/templates/bootstrap/frontend/store/openApiSdk.template.md +0 -49
- 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 (
|
|
40
|
-
`read_logs`, `last_error`, `
|
|
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
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -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;
|
|
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","
|
|
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
|
|
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
|
|
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
|
|
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 \`
|
|
121
|
-
-
|
|
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
|
|
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
|
|
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
|
|
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 \`
|
|
263
|
+
- Never modify \`apiSdk.ts\` manually - regenerate with \`bun run sdk\`
|
|
264
264
|
- Use Luxon for date operations
|
|
265
|
-
-
|
|
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,
|
|
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
|
|
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
|
|
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
|
-
-
|
|
442
|
-
-
|
|
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
|
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAE9B,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,wBAAwB,CAAC;AAQhC,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC;QACE,WAAW,EACT,gQAAgQ;QAClQ,WAAW,EAAE;YACX,UAAU,EAAE;gBACV,cAAc,EAAE;oBACd,WAAW,EAAE,mEAAmE;oBAChF,IAAI,EAAE,QAAQ;iBACf;gBACD,OAAO,EAAE;oBACP,WAAW,EACT,6FAA6F;oBAC/F,IAAI,EAAE,QAAQ;iBACf;gBACD,WAAW,EAAE;oBACX,WAAW,EAAE,2CAA2C;oBACxD,IAAI,EAAE,QAAQ;iBACf;gBACD,QAAQ,EAAE;oBACR,WAAW,EACT,
|
|
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`.
|
|
12
|
-
|
|
13
|
-
`
|
|
14
|
-
|
|
15
|
-
and
|
|
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 `
|
|
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. **
|
|
21
|
-
|
|
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`
|
|
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
|
|
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
|
|
23
|
-
4. Handle error states with
|
|
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 {
|
|
34
|
+
import {useQuery} from "@terreno/syncdb/react";
|
|
35
|
+
import {Box, Page, Text} from "@terreno/ui";
|
|
32
36
|
import type React from "react";
|
|
33
|
-
import {
|
|
37
|
+
import type {{{Model}}} from "@/types/{{model}}";
|
|
34
38
|
|
|
35
39
|
const {{Name}}Screen: React.FC = () => {
|
|
36
|
-
const
|
|
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 (
|
|
42
|
+
if (rows.length === 0) {
|
|
49
43
|
return (
|
|
50
44
|
<Page navigation={undefined} title="{{title}}">
|
|
51
45
|
<Box padding={4}>
|
|
52
|
-
<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
|
|
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
|
-
|
|
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
|
|