@superblocksteam/vite-plugin-file-sync 2.0.161 → 2.0.162-next.0

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 (78) hide show
  1. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +2 -0
  2. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  3. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +39 -27
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  5. package/dist/ai-service/agent/tools/rbac/effective-permissions.d.ts +13 -0
  6. package/dist/ai-service/agent/tools/rbac/effective-permissions.d.ts.map +1 -0
  7. package/dist/ai-service/agent/tools/rbac/effective-permissions.js +49 -0
  8. package/dist/ai-service/agent/tools/rbac/effective-permissions.js.map +1 -0
  9. package/dist/ai-service/agent/tools.d.ts +5 -5
  10. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  11. package/dist/ai-service/agent/tools.js +27 -9
  12. package/dist/ai-service/agent/tools.js.map +1 -1
  13. package/dist/ai-service/agent/tools2/access-control.d.ts +5 -0
  14. package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
  15. package/dist/ai-service/agent/tools2/access-control.js +16 -0
  16. package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
  17. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +2 -0
  18. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
  19. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +6 -2
  20. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  21. package/dist/ai-service/app-skills/helpers.d.ts +1 -1
  22. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
  23. package/dist/ai-service/app-skills/helpers.js +2 -1
  24. package/dist/ai-service/app-skills/helpers.js.map +1 -1
  25. package/dist/ai-service/chat/chat-session-store.d.ts +2 -0
  26. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  27. package/dist/ai-service/chat/chat-session-store.js +2 -2
  28. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  29. package/dist/ai-service/checkpoint-screenshot.d.ts +9 -0
  30. package/dist/ai-service/checkpoint-screenshot.d.ts.map +1 -0
  31. package/dist/ai-service/checkpoint-screenshot.js +40 -0
  32. package/dist/ai-service/checkpoint-screenshot.js.map +1 -0
  33. package/dist/ai-service/index.d.ts +15 -9
  34. package/dist/ai-service/index.d.ts.map +1 -1
  35. package/dist/ai-service/index.js +141 -58
  36. package/dist/ai-service/index.js.map +1 -1
  37. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  38. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  39. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +9 -7
  40. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  41. package/dist/ai-service/state-machine/clark-fsm.d.ts +18 -9
  42. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  43. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  44. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  45. package/dist/ai-service/state-machine/handlers/agent-planning.js +68 -53
  46. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  47. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  48. package/dist/ai-service/state-machine/handlers/llm-generating.js +15 -2
  49. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  50. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  51. package/dist/ai-service/state-machine/helpers/peer.js +21 -9
  52. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  53. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +20 -6
  54. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -1
  55. package/dist/ai-service/state-machine/helpers/stable-peer.js +124 -30
  56. package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -1
  57. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  58. package/dist/ai-service/state-machine/mocks.js +1 -0
  59. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  60. package/dist/ai-service/types.d.ts +4 -0
  61. package/dist/ai-service/types.d.ts.map +1 -1
  62. package/dist/file-sync-vite-plugin.d.ts +5 -1
  63. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  64. package/dist/file-sync-vite-plugin.js +27 -11
  65. package/dist/file-sync-vite-plugin.js.map +1 -1
  66. package/dist/inject-index-vite-plugin.d.ts +15 -0
  67. package/dist/inject-index-vite-plugin.d.ts.map +1 -1
  68. package/dist/inject-index-vite-plugin.js +31 -0
  69. package/dist/inject-index-vite-plugin.js.map +1 -1
  70. package/dist/lock-service/index.d.ts +1 -0
  71. package/dist/lock-service/index.d.ts.map +1 -1
  72. package/dist/lock-service/index.js +14 -7
  73. package/dist/lock-service/index.js.map +1 -1
  74. package/dist/socket-manager.d.ts +12 -4
  75. package/dist/socket-manager.d.ts.map +1 -1
  76. package/dist/socket-manager.js +195 -39
  77. package/dist/socket-manager.js.map +1 -1
  78. package/package.json +9 -9
@@ -1,2 +1,2 @@
1
- export declare const content = "---\nname: superblocks-frontend\ndescription: |\n Build frontend UI using React, Tailwind CSS, and Superblocks components. Essential for connecting Superblocks UIs with APIs.\n Use when creating pages, components, handling user interactions, or working with the design system.\nreadOnly: true\nmetadata:\n author: superblocks\n version: \"1.0\"\n---\n\n# Superblocks Frontend Development\n\nThis skill covers building frontend UI for Superblocks applications using React, Tailwind CSS v4, and the Superblocks component library.\n\n## Platform Overview\n\nThis is a React-based web application platform. Use standard React patterns:\n\n- `useState`, `useEffect`, `useCallback`, `useMemo`\n- Event handlers and controlled components\n- JSX with Tailwind CSS classes\n\n## Using APIs from Frontend\n\nThree primitives are available from `@superblocksteam/library`:\n\n- **`useApiData`** \u2014 declarative reads with SWR caching (preferred for data loading)\n- **`useApi`** \u2014 imperative mutations (for event-driven actions)\n- **`executeApi`** \u2014 plain Promise outside React (utility functions, event handlers without hooks)\n\n**Data loading** \u2014 auto-fetches on mount and when inputs change (preferred for reads):\n\n```typescript\nimport { useApiData } from \"@superblocksteam/library\";\n\n// Auto-fetches when email or name changes. No useEffect or HMR guards needed.\n// IMPORTANT: Always use `fetching` to show a loading indicator during refetches.\nconst { data, loading, fetching, isError, error } = useApiData(\"GetUsers\", {\n email,\n name,\n});\n```\n\n**Mutations** \u2014 call `run()` manually (for event-driven actions like form submissions):\n\n```typescript\nimport { useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder, loading } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n**Outside React** \u2014 call APIs as a plain Promise (utility functions, event handlers):\n\n```typescript\nimport { executeApi } from \"@superblocksteam/library\";\n\nconst result = await executeApi(\"GetUsers\", { email });\n```\n\n`useApiData` returns `{ data, loading, fetching, isError, isSuccess, isStale, error, status, fetchStatus, refetch, cancel }`. `data` persists across background refetches (stale-while-revalidate). `loading` is true on first fetch with no cached data. `fetching` is true during any fetch including background refetch. `status` is `\"pending\"` | `\"success\"` | `\"error\"`. `fetchStatus` is `\"idle\"` | `\"fetching\"`. `cancel()` is synchronous (returns `void`).\n\n`useApi` returns `{ run, cancel, reset, loading, data, error, status, variables }`. `data` persists across re-runs (shows previous result while loading). `error` holds the most recent failure, or `undefined` on success. `status` is `\"idle\"` | `\"pending\"` | `\"success\"` | `\"error\"`. `variables` holds the inputs from the most recent `run()`. `reset()` clears all state back to idle. HMR double-fetch prevention is built in \u2014 no `useRef` guard needed.\n\n### useApiData Options\n\n```typescript\nconst { data } = useApiData(\"GetUsers\", { email }, {\n enabled: true, // Skip fetching when false (conditional fetching)\n staleTime: 0, // Ms before cached data is considered stale (0 = always refetch)\n retry: 3, // Retry attempts on failure (false to disable)\n retryDelay: (n) => ..., // Custom delay strategy (default: exponential backoff, max 30s)\n refetchOnWindowFocus: false, // Refetch when tab regains focus\n refetchOnReconnect: true, // Refetch when network reconnects\n refetchInterval: false, // Polling interval in ms (false = disabled)\n structuralSharing: false, // Deep-compare to preserve object identity\n placeholderData: undefined, // Shown while the first fetch is in progress\n});\n```\n\n### Cache invalidation and optimistic updates\n\n**Same scope as the read**: After a mutation, prefer `refetch()` from the `useApiData` that loads the data (same component or wherever you can pass `refetch`).\n\n```typescript\nimport { useApi, useApiData } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { data: orders, refetch } = useApiData(\"GetOrders\", { status });\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await refetch();\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder, refetch]);\n```\n\n**Cross-scope or broad invalidation**: Use `queryClient.invalidateQueries` when you cannot call that `refetch` (mutation in a different place than the `useApiData`, or you need every cached variant of an API to refetch). For **`queryClient.invalidateQueries`, `buildCacheKey`, `setQueryData`, and any other `queryClient` usage, always import `queryClient` from `@superblocksteam/library`**.\n\n```typescript\nimport { queryClient, useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await queryClient.invalidateQueries(\"GetOrders\");\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n```typescript\n// Optimistic update: set cached data without refetching\nimport { queryClient } from \"@superblocksteam/library\";\n\nconst cacheKey = queryClient.buildCacheKey(\"GetOrders\", { status: \"active\" });\nqueryClient.setQueryData(cacheKey, (old) => ({\n ...old,\n orders: [...old.orders, newOrder],\n}));\n```\n\n### Critical API Rules\n\n1. **MUST call API by exact name**: Format is `<ApiName>` matching folder `apis/<ApiName>/api.yaml`\n2. **Use `useApiData` for data loading, `useApi` for mutations**: For data fetching, use `useApiData(\"GetUsers\", { email })`. Only use `useApi` for event-driven actions (button clicks, form submissions). Use `executeApi` for API calls outside React components.\n3. **Use the hook's state fields**: Do NOT create separate `useState` for loading or response data \u2014 the hooks manage this for you\n4. **ALWAYS check API interfaces**: NEVER guess the response structure\n5. **Include all parameters**: Even optional ones should be passed as `null`\n6. **ALWAYS use try/catch**: In imperative mode, APIs throw errors when they fail - wrap ALL `run()` calls in try/catch blocks. In declarative mode, check the `error` field for failure details.\n\n### File Handling\n\n**CRITICAL: Files must be wrapped in `{ files: [...] }` format:**\n\n```tsx\n// \u2705 CORRECT - Frontend: wrap files in { files: [...] }\nconst response = await runUploadApi({ userFile: { files: selectedFiles } });\n\n// \u274C WRONG - backend cannot process unwrapped files\nconst response = await runUploadApi({ userFile: selectedFiles });\n```\n\n## Platform Hooks and Functions\n\nAvailable hooks and functions from `@superblocksteam/library`:\n\n### User and Group Context\n\n```typescript\nimport {\n useSuperblocksUser,\n useSuperblocksGroups,\n} from \"@superblocksteam/library\";\n\n// Get current user info\nconst user = useSuperblocksUser();\n// user.name, user.email, user.id, user.groups, user.username, user.metadata\n\n// Get organization groups\nconst groups = useSuperblocksGroups();\n```\n\n### Environments and Data Tags\n\nConcepts & terminology:\n\n- `Data tags` are labels for different data segments, such as `Staging`, `Production`, or `us-east`.\n- `Profiles` is the legacy term for the same concept. If a user asks about profiles, treat that as data tags.\n- `Environments` are `Edit`, `Preview`, and `Production`, and each data tag is allowed in one or more of those environments.\n- Clark operates in `Edit` mode, so the data tags visible in app context represent the tags available in `Edit`; do not assume this is the same set that will be available in `Preview` or `Production`.\n- When implementing app code, prefer `useSuperblocksDataTags()`, `dataTags`, and `setDataTag()`.\n\nThe `DataTag` type has these fields (it is an alias for `Profile` from `@superblocksteam/shared`):\n\n```typescript\ntype DataTag = {\n id: string;\n key: string;\n displayName: string; // human-readable label \u2014 use this for display, NOT \"name\"\n description: string;\n type: \"RESERVED\" | \"CUSTOM\";\n};\n```\n\nRelevant hooks and functions:\n\n```typescript\nimport { useSuperblocksDataTags, getAppMode } from \"@superblocksteam/library\";\nimport type { DataTag, DataTags } from \"@superblocksteam/library\";\n\n// Manage data tags\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n// dataTags.available: DataTag[] \u2014 all tags in the current environment\n// dataTags.selected: DataTag | undefined \u2014 currently active tag (may be undefined)\n// dataTags.default: DataTag \u2014 the default tag\n// setDataTag(dataTag.key) \u2014 switch the active tag by key\n\n// Read the current app mode when reasoning about environment-specific behavior\nconst appMode = getAppMode();\n```\n\nExample \u2014 data tag switcher using a Select:\n\n```tsx\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n\n<Select value={dataTags?.selected?.key} onValueChange={setDataTag}>\n {dataTags?.available.map((tag) => (\n <SelectItem key={tag.key} value={tag.key}>\n {tag.displayName}\n </SelectItem>\n ))}\n</Select>;\n```\n\n### Embedded Applications\n\n**For embedded applications**, see the `references/embedding.md` file for `useEmbedProperties`, `useEmbedEvent`, and `useEmitEmbedEvent` hooks.\n\n## Logging Out of Integrations\n\nWhen building a \"Log out\" or \"Sign out\" button for apps that use OAuth-like integrations, use `logoutIntegrations` from the library to clear OAuth tokens:\n\n```typescript\nimport { logoutIntegrations } from \"@superblocksteam/library\";\n\nconst handleLogout = async () => {\n await logoutIntegrations();\n // Optionally redirect or show confirmation\n};\n```\n\n## Application Architecture\n\n### App.tsx Layout Structure\n\n**For single-page applications:**\n\n- Put all content in `pages/<pageName>/index.tsx`\n- Use components to compose and build the page\n- Keep `App.tsx` minimal with just `<AppProvider>` and `<Outlet />`\n\n**For multi-page applications:**\n\n- Put shared navigation/layout in `App.tsx` (sidebars, headers, footers)\n- Always include `<Outlet />` for page content\n- Always include `<AppProvider />` wrapper\n- Individual pages focus on content, not layout\n\n```tsx\n// \u2705 CORRECT - Multi-page App.tsx layout\n<AppProvider>\n <div className=\"flex flex-row size-screen\">\n {/* Sidebar - persistent across all pages */}\n <div className=\"flex bg-sidebar border-r w-[250px]\">\n <Navigation />\n </div>\n\n {/* Main content area */}\n <div className=\"flex flex-1 h-full flex-col\">\n {/* Header - persistent across all pages */}\n <div className=\"flex bg-header border-b h-[60px]\">\n <Header />\n </div>\n\n {/* Page content area */}\n <div className=\"flex p-4 flex-1 overflow-auto\">\n <Outlet />\n </div>\n </div>\n </div>\n</AppProvider>\n```\n\n**PROTECTED: NEVER remove `<AppProvider>` or `<Outlet />` from App.tsx!**\n\n### Page Structure\n\n```tsx\n// \u2705 CORRECT - Page focuses on content only\n<div className=\"flex flex-col gap-4 size-screen overflow-auto\">\n <h1 className=\"text-3xl font-bold\">Dashboard Content</h1>\n <Card>{/* Page-specific content */}</Card>\n</div>\n```\n\n**IMPORTANT**: The first div on the page must have `overflow-auto` so the user's page can scroll.\n\n## Routing\n\nUse `react-router@7` in data mode. Standard patterns apply:\n\n- `useNavigate()` for programmatic navigation\n- `useParams()` for route parameters\n- `useSearchParams()` for query strings\n\n**If you add new pages or rename files, you MUST update the router.**\n\nFile edits change the live app immediately, so keep every intermediate state valid:\n\n- Create a page before adding its router reference.\n- Remove router references before deleting a page.\n- To rename a page, create the new page, repoint the router, then delete the old page.\n- Wait for each dependent tool call to return without an error before starting the next step. Batch only independent tool calls.\n\nKeep route elements statically discoverable by the Superblocks editor:\n\n- Prefer direct JSX such as `element: <Page />`.\n- Keep code splitting with top-level `lazy(() => import(\"./pages/Page\"))`\n bindings.\n- Keep page routes as `children` of the `App` layout route, and put one\n `<Suspense>` boundary around `<Outlet />` inside `<AppProvider>` in `App.tsx`.\n- A single-argument wrapper such as `element: withSuspense(Page)` is also\n discoverable when `Page` is directly imported or bound by top-level\n `React.lazy`.\n- Do not unwrap working routes that use this shape.\n- Do not use nested or multi-argument calls such as\n `element: withSuspense(makePage(Home))` or\n `element: withSuspense(Home, opts)`.\n- Do not wrap page JSX in another element, such as\n `element: <PageErrorBoundary><Page /></PageErrorBoundary>`.\n\n```tsx\nimport { App as AppProvider } from \"@superblocksteam/library\";\nimport { Suspense, lazy } from \"react\";\nimport { Outlet, createBrowserRouter } from \"react-router\";\n\nconst Page = lazy(() => import(\"./pages/Page\"));\n\nconst router = createBrowserRouter([\n {\n Component: App,\n children: [{ path: \"/page\", element: <Page /> }],\n },\n]);\n\nfunction App() {\n return (\n <AppProvider className=\"h-full w-full\">\n <Suspense fallback={null}>\n <Outlet />\n </Suspense>\n </AppProvider>\n );\n}\n```\n\n### Page names\n\nA new app ships with one empty page at `pages/Home`, bound as the `/` index route:\n\n```tsx\n{ path: \"/\", index: true, lazy: () => import(\"./pages/Home/index.js\").then((mod) => ({ Component: mod.default })) }\n```\n\n- **Single-page app**: build the landing content in `pages/Home` and keep it named `Home` unless the user asks for something else\n- **Multi-page app**: every page you add beyond the starter gets a descriptive PascalCase name for what it shows (`Dashboard`, `Inventory`, `TopBuilders`), and the starter page keeps `Home` as the app's landing page \u2014 rename it too if the app's landing route is really something else (e.g. `Overview`), keeping it bound to the `/` index route\n- Page names are user-visible in the editor's page switcher, so name them the way you'd label a nav item\n- Never name a page `Page1`, `Page2`, ...\n\n## Design System (Tailwind CSS v4)\n\n**All design tokens are defined in `index.css`**. Apps come with a professional black-and-white theme by default.\n\n### Semantic Tokens Rule\n\n**ALWAYS use semantic tokens** \u2014 NEVER raw Tailwind utilities:\n\n```tsx\n// \u2705 CORRECT\n<Card className=\"bg-background text-foreground border border-border\" />\n\n// \u274C WRONG\n<Card className=\"bg-white text-black border-gray-200\" />\n```\n\n### When to Modify index.css\n\nOnly modify when:\n\n- User explicitly requests branding/theme changes\n- Replicating a specific brand look (e.g., Yelp, Instacart)\n- Migrating an attached third-party app \u2014 see `skills/system/third-party-migration/SKILL.md` (its theme-port rules override the Modification Rules below \u2014 copy source tokens as-is, do not convert to OKLCH or trim the palette)\n- Feature requests (lists, filters, CRUD) do NOT require changes\n\n**Modification Rules:**\n\n- All colors must be in OKLCH format\n- Use semantic names (`--color-warning`, `--shadow-elevated`)\n- Do not remove or rename existing tokens\n- Limit color palette to 5 colors max\n- Avoid gradients unless explicitly requested\n- Minimal font sizes (3 max: body, section heading, main heading)\n\n### Component Variants\n\nUse or create variants instead of one-off styles:\n\n```tsx\n// \u274C WRONG - Hacky inline overrides\n<Button className=\"text-white border-white hover:bg-white\" />\n\n// \u2705 CORRECT - Use a variant\n<Button variant=\"secondary\" />\n```\n\n## Icons\n\nUse icons from Lucide React library:\n\n```tsx\nimport { Icon } from \"@/components/ui/icon\";\n<Icon icon=\"heart\" />;\n\nimport { Button } from \"@/components/ui/button\";\n<Button>\n <Icon icon=\"plus\" /> Add Item\n</Button>;\n```\n\n**Always use icons rather than emojis unless explicitly requested.**\n\nUse current Lucide icon names, not stale aliases: use `house` instead of `home`, `life-buoy` instead of `help-circle` or `circle-help`, and `chart-column-big` instead of `bar-chart-3`.\n\nWhen storing icon names as data (arrays/objects), type them with `IconName`. **`IconName` is a TYPE-only export \u2014 you MUST import it with the `type` keyword.** A value import compiles but CRASHES the app at runtime (`does not provide an export named 'IconName'`) and leaves the preview blank, which blocks UI verification. If you hit that error, read `skills/system/common-import-issues/SKILL.md`.\n\n```tsx\n// \u2705 CORRECT \u2014 type-only import\nimport type { IconName } from \"lucide-react/dynamic\";\n\nconst navItems: { icon: IconName; label: string }[] = [\n { icon: \"house\", label: \"Home\" },\n { icon: \"settings\", label: \"Settings\" },\n];\n\n// \u274C WRONG \u2014 value import crashes the app at runtime and blanks the preview\nimport { IconName } from \"lucide-react/dynamic\";\n```\n\n## Custom Components\n\n**CRITICAL: Component composition is MANDATORY. DO NOT create monolithic pages.**\n\n### The Composition Rule\n\nWhen building ANY feature:\n\n1. **First**, identify reusable parts (list items, cards, forms, filters, headers)\n2. **Then**, create separate component files\n3. **Finally**, compose them together in the page\n\n### When to Create Components\n\n- **Rendering any list** - Extract to a component\n- **Building cards/complex UI** - Each card type is a component\n- **Creating forms** - Form sections are components\n- **Adding filters/headers** - These are components\n- **Page has >50 lines JSX** - Break it down\n\n### Component Boundary Rules\n\n**Inside a custom component:**\n\n- \u2705 Use React hooks (useState, useReducer, useEffect, etc.)\n- \u2705 Use local React state\n- \u2705 Use internal helper components\n- \u2705 Use other registered components\n- \u274C CANNOT call APIs - must pass data into the component\n\n### Example: Proper Component Structure\n\n```tsx\n// components/ProductCard/index.tsx - Extract to component\nimport { Card } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\n\ntype ProductCardProps = {\n product: {\n id: string;\n name: string;\n image: string;\n };\n};\n\nexport default function ProductCard(props: ProductCardProps) {\n return (\n <Card>\n <img src={props.product.image} />\n <h3 className=\"text-lg font-semibold\">{props.product.name}</h3>\n <Button>Add</Button>\n </Card>\n );\n}\n\n// pages/Products/index.tsx - Clean composition\nimport ProductCard from \"@/components/ProductCard\";\n\nconst ProductsPage = () => {\n const [products, setProducts] = useState([]);\n\n return (\n <div className=\"grid grid-cols-3 gap-4\">\n {products.map((p) => (\n <ProductCard key={p.id} product={p} />\n ))}\n </div>\n );\n};\n```\n\n## Visual Excellence\n\n**Prioritize visual excellence from the start:**\n\n1. **Design System Enhancement**: Start by enhancing `index.css` with app-specific colors that match the target aesthetic\n2. **Professional Layout Architecture**: Use sophisticated layouts with proper spacing, responsive design\n3. **Rich Interactive Components**: Leverage advanced components with proper variants and states\n4. **Visual Polish**: Add shadows, smooth transitions, skeleton loaders, hover effects, typography hierarchy\n5. **Real-World UI Patterns**: Create layouts that feel like professional applications\n\n**Make applications that look and feel like real, polished products - not basic wireframes.**\n\n### Loading States\n\nLoading behavior must differ based on whether data has already been fetched:\n\n**Initial load (no data yet):** Show skeleton shimmers that mirror the shape of the final content. Never show a blank screen or a generic spinner.\n\n**Refetch / background refresh (data already exists):** Keep showing the existing data. Use `fetching` from `useApiData` to apply a subtle visual indicator: light opacity (e.g. `opacity-70`) to signal a refresh is in progress, plus a non-blocking label such as a small inline spinner, a thin progress bar, or an \"Updating\u2026\" label. **Do not** use `pointer-events-none` or otherwise disable the content \u2014 it must remain fully interactive during refetch.\n\nUse `loading` and `fetching` from `useApiData` to distinguish these states:\n\n```tsx\nconst { data, loading, fetching, isError, error } = useApiData(\"GetOrders\", {\n status: statusFilter,\n search,\n});\n\n// Initial load \u2014 no data yet \u2192 show skeleton placeholder\nif (loading) {\n return <OrderTableSkeleton />;\n}\n\nif (isError) return <ErrorBanner error={error} />;\n\n// Refetch \u2014 data exists \u2192 subtle opacity + indicator, table stays interactive\nreturn (\n <div>\n {fetching && <div className=\"text-xs text-muted-foreground\">Updating\u2026</div>}\n <div className={fetching ? \"opacity-70\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n </div>\n);\n```\n\n```tsx\n// \u274C WRONG \u2014 pointer-events-none disables the table, making it feel broken\nreturn (\n <div className={fetching ? \"pointer-events-none\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n);\n\n// \u274C WRONG \u2014 no loading feedback when filters change\nif (loading) return <Skeleton />;\nreturn <OrderTable orders={data.orders} />;\n```\n\n#### Table Loading Rules\n\n- **Do not** use `pointer-events-none` on a table during loading \u2014 this disables interaction and makes the UI feel broken. During refetch, apply a subtle opacity (e.g. `opacity-70`) plus a non-blocking indicator (e.g., an \"Updating\u2026\" label or a thin progress bar). The table must remain clickable, sortable, and scrollable.\n- **Do not** replace a populated table with a full skeleton on refetch \u2014 this causes disorienting content flashes.\n- **Skeleton tables are only for initial load** (`loading` is true) when there is no data to display yet. Build them to match the real table's column structure (header + a few placeholder rows).\n\n### Efficient Loading Patterns\n\n1. **Always show loading indicators on refetch**: When inputs change (e.g. filters, search), show a non-blocking visual indicator while new data loads. Use `fetching` from `useApiData`.\n2. **Loading State Hierarchy**:\n - No data yet (`loading`) \u2192 Full skeleton placeholder\n - Has data, refetching (`fetching` && !`loading`) \u2192 Keep showing current data with a subtle visual indicator: light opacity (e.g. `opacity-70`) plus a non-blocking label (e.g. \"Updating\u2026\" text, thin progress bar, inline spinner). Do not use `pointer-events-none` \u2014 the content must remain fully interactive.\n - Error state (`isError`) \u2192 Show error with retry option, optionally keep stale data visible\n3. **Debounce Rapid Requests**: Prevent multiple API calls in short succession\n4. **Use useApiData for automatic refetching**: `useApiData` auto-refetches when inputs change and supports `staleTime`, `refetchOnWindowFocus`, `refetchOnReconnect`, `refetchInterval`, and `retry` options.\n\n## Performance Rules\n\n### 1. ALWAYS Paginate Tables and Lists\n\n**NEVER render more than 50 rows without pagination.** Always add client-side pagination:\n\n```tsx\nfunction PaginatedTable({ data }: { data: any[] }) {\n const PAGE_SIZE = 20;\n const [page, setPage] = useState(0);\n const totalPages = Math.ceil(data.length / PAGE_SIZE);\n const pageData = useMemo(\n () => data.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE),\n [data, page],\n );\n\n useEffect(() => {\n setPage(0);\n }, [data.length]);\n\n return (\n <>\n <Table>{/* render pageData rows */}</Table>\n <span>\n Page {page + 1} of {totalPages} ({data.length} total rows)\n </span>\n <Button\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n disabled={page === 0}\n >\n Previous\n </Button>\n <Button\n onClick={() => setPage((p) => Math.min(totalPages - 1, p + 1))}\n disabled={page >= totalPages - 1}\n >\n Next\n </Button>\n </>\n );\n}\n```\n\nFor 200+ rows, prefer **server-side pagination**; use cursor/keyset pagination for high offsets instead of `LIMIT`/`OFFSET`.\n\nFor 500+ item lists where pagination doesn't fit the UX (chat messages, infinite scroll feeds, large dropdowns), use **virtualization** (`react-virtuoso` or `@tanstack/react-virtual`) to render only the items visible in the viewport.\n\n### 2. ALWAYS Debounce Input-Driven API Calls\n\n**NEVER call an API directly from onChange.** Debounce search/filter inputs with a 300ms timer:\n\n```tsx\nfunction DebouncedSearch({ onSearch }: { onSearch: (query: string) => void }) {\n const [localValue, setLocalValue] = useState(\"\");\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => onSearch(e.target.value), 300);\n },\n [onSearch],\n );\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n return (\n <Input value={localValue} onChange={handleChange} placeholder=\"Search...\" />\n );\n}\n```\n\n### 3. Memoize Expensive Renders\n\nUse memoization (`memo()`, `useMemo`, `useCallback`) when it prevents measurable re-renders or expensive recomputation:\n\n```tsx\nconst OrderRow = memo(function OrderRow({\n order,\n onSelect,\n}: {\n order: Order;\n onSelect: (id: string) => void;\n}) {\n return (\n <TableRow onClick={() => onSelect(order.id)}>\n <TableCell>{order.id}</TableCell>...\n </TableRow>\n );\n});\n\nconst handleSelect = useCallback((id: string) => {\n setSelectedId(id);\n}, []);\n\nconst filtered = useMemo(\n () =>\n orders.filter((o) => o.status === status).sort((a, b) => b.total - a.total),\n [orders, status],\n);\n```\n\n### 4. ALWAYS Clean Up Side Effects\n\nClean up timers, event listeners, and subscriptions in `useEffect` return functions:\n\n```tsx\nuseEffect(() => {\n const handler = (e: KeyboardEvent) => {\n /* ... */\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n}, []);\n```\n\n### 5. Cancel In-Flight API Requests on Unmount\n\nFor search/filter patterns, prefer `useApiData` \u2014 it handles cancellation and cleanup automatically:\n\n```tsx\n// useApiData: auto-fetches and cancels on unmount/input change\nconst { data, fetching } = useApiData(\"SearchProducts\", { query });\n```\n\nFor imperative usage with manual cleanup, use the `cancel()` function:\n\n```tsx\nconst { run, cancel } = useApi(\"SearchProducts\");\n\nuseEffect(() => {\n if (!query) return;\n run({ query }).catch(console.error);\n return () => {\n cancel().catch(() => {});\n };\n}, [query, run, cancel]);\n```\n";
1
+ export declare const content = "---\nname: superblocks-frontend\ndescription: |\n Build frontend UI using React, Tailwind CSS, and Superblocks components. Essential for connecting Superblocks UIs with APIs.\n Use when creating pages, components, handling user interactions, or working with the design system.\nreadOnly: true\nmetadata:\n author: superblocks\n version: \"1.0\"\n---\n\n# Superblocks Frontend Development\n\nThis skill covers building frontend UI for Superblocks applications using React, Tailwind CSS v4, and the Superblocks component library.\n\n## Platform Overview\n\nThis is a React-based web application platform. Use standard React patterns:\n\n- `useState`, `useEffect`, `useCallback`, `useMemo`\n- Event handlers and controlled components\n- JSX with Tailwind CSS classes\n\n## Using APIs from Frontend\n\nThree primitives are available from `@superblocksteam/library`:\n\n- **`useApiData`** \u2014 declarative reads with SWR caching (preferred for data loading)\n- **`useApi`** \u2014 imperative mutations (for event-driven actions)\n- **`executeApi`** \u2014 plain Promise outside React (utility functions, event handlers without hooks)\n\n**Data loading** \u2014 auto-fetches on mount and when inputs change (preferred for reads):\n\n```typescript\nimport { useApiData } from \"@superblocksteam/library\";\n\n// Auto-fetches when email or name changes. No useEffect or HMR guards needed.\n// IMPORTANT: Always use `fetching` to show a loading indicator during refetches.\nconst { data, loading, fetching, isError, error } = useApiData(\"GetUsers\", {\n email,\n name,\n});\n```\n\n**Mutations** \u2014 call `run()` manually (for event-driven actions like form submissions):\n\n```typescript\nimport { useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder, loading } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n**Outside React** \u2014 call APIs as a plain Promise (utility functions, event handlers):\n\n```typescript\nimport { executeApi } from \"@superblocksteam/library\";\n\nconst result = await executeApi(\"GetUsers\", { email });\n```\n\n`useApiData` returns `{ data, loading, fetching, isError, isSuccess, isStale, error, status, fetchStatus, refetch, cancel }`. `data` persists across background refetches (stale-while-revalidate). `loading` is true on first fetch with no cached data. `fetching` is true during any fetch including background refetch. `status` is `\"pending\"` | `\"success\"` | `\"error\"`. `fetchStatus` is `\"idle\"` | `\"fetching\"`. `cancel()` is synchronous (returns `void`).\n\n`useApi` returns `{ run, cancel, reset, loading, data, error, status, variables }`. `data` persists across re-runs (shows previous result while loading). `error` holds the most recent failure, or `undefined` on success. `status` is `\"idle\"` | `\"pending\"` | `\"success\"` | `\"error\"`. `variables` holds the inputs from the most recent `run()`. `reset()` clears all state back to idle. HMR double-fetch prevention is built in \u2014 no `useRef` guard needed.\n\n### useApiData Options\n\n```typescript\nconst { data } = useApiData(\"GetUsers\", { email }, {\n enabled: true, // Skip fetching when false (conditional fetching)\n staleTime: 0, // Ms before cached data is considered stale (0 = always refetch)\n retry: 3, // Retry attempts on failure (false to disable)\n retryDelay: (n) => ..., // Custom delay strategy (default: exponential backoff, max 30s)\n refetchOnWindowFocus: false, // Refetch when tab regains focus\n refetchOnReconnect: true, // Refetch when network reconnects\n refetchInterval: false, // Polling interval in ms (false = disabled)\n structuralSharing: false, // Deep-compare to preserve object identity\n placeholderData: undefined, // Shown while the first fetch is in progress\n});\n```\n\n### Cache invalidation and optimistic updates\n\n**Same scope as the read**: After a mutation, prefer `refetch()` from the `useApiData` that loads the data (same component or wherever you can pass `refetch`).\n\n```typescript\nimport { useApi, useApiData } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { data: orders, refetch } = useApiData(\"GetOrders\", { status });\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await refetch();\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder, refetch]);\n```\n\n**Cross-scope or broad invalidation**: Use `queryClient.invalidateQueries` when you cannot call that `refetch` (mutation in a different place than the `useApiData`, or you need every cached variant of an API to refetch). For **`queryClient.invalidateQueries`, `buildCacheKey`, `setQueryData`, and any other `queryClient` usage, always import `queryClient` from `@superblocksteam/library`**.\n\n```typescript\nimport { queryClient, useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await queryClient.invalidateQueries(\"GetOrders\");\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n```typescript\n// Optimistic update: set cached data without refetching\nimport { queryClient } from \"@superblocksteam/library\";\n\nconst cacheKey = queryClient.buildCacheKey(\"GetOrders\", { status: \"active\" });\nqueryClient.setQueryData(cacheKey, (old) => ({\n ...old,\n orders: [...old.orders, newOrder],\n}));\n```\n\n### Critical API Rules\n\n1. **MUST call API by exact name**: Format is `<ApiName>` matching folder `apis/<ApiName>/api.yaml`\n2. **Use `useApiData` for data loading, `useApi` for mutations**: For data fetching, use `useApiData(\"GetUsers\", { email })`. Only use `useApi` for event-driven actions (button clicks, form submissions). Use `executeApi` for API calls outside React components.\n3. **Use the hook's state fields**: Do NOT create separate `useState` for loading or response data \u2014 the hooks manage this for you\n4. **ALWAYS check API interfaces**: NEVER guess the response structure\n5. **Include all parameters**: Even optional ones should be passed as `null`\n6. **ALWAYS use try/catch**: In imperative mode, APIs throw errors when they fail - wrap ALL `run()` calls in try/catch blocks. In declarative mode, check the `error` field for failure details.\n\n### File Handling\n\n**CRITICAL: Files must be wrapped in `{ files: [...] }` format:**\n\n```tsx\n// \u2705 CORRECT - Frontend: wrap files in { files: [...] }\nconst response = await runUploadApi({ userFile: { files: selectedFiles } });\n\n// \u274C WRONG - backend cannot process unwrapped files\nconst response = await runUploadApi({ userFile: selectedFiles });\n```\n\n## Platform Hooks and Functions\n\nAvailable hooks and functions from `@superblocksteam/library`:\n\n### User and Group Context\n\n```typescript\nimport {\n useSuperblocksUser,\n useSuperblocksGroups,\n} from \"@superblocksteam/library\";\n\n// Get current user info\nconst user = useSuperblocksUser();\n// user.name, user.email, user.id, user.groups, user.username, user.metadata\n\n// Get organization groups\nconst groups = useSuperblocksGroups();\n```\n\n### Environments and Data Tags\n\nConcepts & terminology:\n\n- `Data tags` are labels for different data segments, such as `Staging`, `Production`, or `us-east`.\n- `Profiles` is the legacy term for the same concept. If a user asks about profiles, treat that as data tags.\n- `Environments` are `Edit`, `Preview`, and `Production`, and each data tag is allowed in one or more of those environments.\n- Clark operates in `Edit` mode, so the data tags visible in app context represent the tags available in `Edit`; do not assume this is the same set that will be available in `Preview` or `Production`.\n- When implementing app code, prefer `useSuperblocksDataTags()`, `dataTags`, and `setDataTag()`.\n\nThe `DataTag` type has these fields (it is an alias for `Profile` from `@superblocksteam/shared`):\n\n```typescript\ntype DataTag = {\n id: string;\n key: string;\n displayName: string; // human-readable label \u2014 use this for display, NOT \"name\"\n description: string;\n type: \"RESERVED\" | \"CUSTOM\";\n};\n```\n\nRelevant hooks and functions:\n\n```typescript\nimport { useSuperblocksDataTags, getAppMode } from \"@superblocksteam/library\";\nimport type { DataTag, DataTags } from \"@superblocksteam/library\";\n\n// Manage data tags\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n// dataTags.available: DataTag[] \u2014 all tags in the current environment\n// dataTags.selected: DataTag | undefined \u2014 currently active tag (may be undefined)\n// dataTags.default: DataTag \u2014 the default tag\n// setDataTag(dataTag.key) \u2014 switch the active tag by key\n\n// Read the current app mode when reasoning about environment-specific behavior\nconst appMode = getAppMode();\n```\n\nExample \u2014 data tag switcher using a Select:\n\n```tsx\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n\n<Select value={dataTags?.selected?.key} onValueChange={setDataTag}>\n {dataTags?.available.map((tag) => (\n <SelectItem key={tag.key} value={tag.key}>\n {tag.displayName}\n </SelectItem>\n ))}\n</Select>;\n```\n\n### Embedded Applications\n\n**For embedded applications**, see the `references/embedding.md` file for `useEmbedProperties`, `useEmbedEvent`, and `useEmitEmbedEvent` hooks.\n\n## Logging Out of Integrations\n\nWhen building a \"Log out\" or \"Sign out\" button for apps that use OAuth-like integrations, use `logoutIntegrations` from the library to clear OAuth tokens:\n\n```typescript\nimport { logoutIntegrations } from \"@superblocksteam/library\";\n\nconst handleLogout = async () => {\n await logoutIntegrations();\n // Optionally redirect or show confirmation\n};\n```\n\n## Application Architecture\n\nLegacy apps keep frontend files at the repository root. SDK API apps keep frontend files under `client/`, including `client/components/` and `client/index.css`.\n\n### App.tsx Layout Structure\n\n**For single-page applications:**\n\n- Put all content in `pages/<pageName>/index.tsx`, or `client/pages/<pageName>/index.tsx` in SDK API apps\n- Use components to compose and build the page\n- Keep `App.tsx` minimal with just `<AppProvider>` and `<Outlet />`\n\n**For multi-page applications:**\n\n- Put shared navigation/layout in `App.tsx` (sidebars, headers, footers)\n- Always include `<Outlet />` for page content\n- Always include `<AppProvider />` wrapper\n- Individual pages focus on content, not layout\n\n```tsx\n// \u2705 CORRECT - Multi-page App.tsx layout\n<AppProvider>\n <div className=\"flex flex-row size-screen\">\n {/* Sidebar - persistent across all pages */}\n <div className=\"flex bg-sidebar border-r w-[250px]\">\n <Navigation />\n </div>\n\n {/* Main content area */}\n <div className=\"flex flex-1 h-full flex-col\">\n {/* Header - persistent across all pages */}\n <div className=\"flex bg-header border-b h-[60px]\">\n <Header />\n </div>\n\n {/* Page content area */}\n <div className=\"flex p-4 flex-1 overflow-auto\">\n <Outlet />\n </div>\n </div>\n </div>\n</AppProvider>\n```\n\n**PROTECTED: NEVER remove `<AppProvider>` or `<Outlet />` from App.tsx!**\n\n### Page Structure\n\n```tsx\n// \u2705 CORRECT - Page focuses on content only\n<div className=\"flex flex-col gap-4 size-screen overflow-auto\">\n <h1 className=\"text-3xl font-bold\">Dashboard Content</h1>\n <Card>{/* Page-specific content */}</Card>\n</div>\n```\n\n**IMPORTANT**: The first div on the page must have `overflow-auto` so the user's page can scroll.\n\n## Routing\n\nUse `react-router@7` in data mode. Standard patterns apply:\n\n- `useNavigate()` for programmatic navigation\n- `useParams()` for route parameters\n- `useSearchParams()` for query strings\n\n**If you add new pages or rename files, you MUST update the router.**\n\nFile edits change the live app immediately, so keep every intermediate state valid:\n\n- Create a page before adding its router reference.\n- Remove router references before deleting a page.\n- To rename a page, create the new page, repoint the router, then delete the old page.\n- Wait for each dependent tool call to return without an error before starting the next step. Batch only independent tool calls.\n\nKeep route elements statically discoverable by the Superblocks editor:\n\n- Prefer direct JSX such as `element: <Page />`.\n- Keep code splitting with top-level `lazy(() => import(\"./pages/Page\"))`\n bindings.\n- Keep page routes as `children` of the `App` layout route, and put one\n `<Suspense>` boundary around `<Outlet />` inside `<AppProvider>` in `App.tsx`.\n- A single-argument wrapper such as `element: withSuspense(Page)` is also\n discoverable when `Page` is directly imported or bound by top-level\n `React.lazy`.\n- Do not unwrap working routes that use this shape.\n- Do not use nested or multi-argument calls such as\n `element: withSuspense(makePage(Home))` or\n `element: withSuspense(Home, opts)`.\n- Do not wrap page JSX in another element, such as\n `element: <PageErrorBoundary><Page /></PageErrorBoundary>`.\n\n```tsx\nimport { App as AppProvider } from \"@superblocksteam/library\";\nimport { Suspense, lazy } from \"react\";\nimport { Outlet, createBrowserRouter } from \"react-router\";\n\nconst Page = lazy(() => import(\"./pages/Page\"));\n\nconst router = createBrowserRouter([\n {\n Component: App,\n children: [{ path: \"/page\", element: <Page /> }],\n },\n]);\n\nfunction App() {\n return (\n <AppProvider className=\"h-full w-full\">\n <Suspense fallback={null}>\n <Outlet />\n </Suspense>\n </AppProvider>\n );\n}\n```\n\n### Page names\n\nA new app ships with one empty Home page bound as the `/` index route. Use the app's existing frontend root: `pages/Home` with `router.tsx`, or `client/pages/Home` with `client/router.tsx` in SDK API apps:\n\n```tsx\n{ path: \"/\", index: true, lazy: () => import(\"./pages/Home/index.js\").then((mod) => ({ Component: mod.default })) }\n```\n\n- **Single-page app**: build the landing content in that Home page and keep it named `Home` unless the user asks for something else\n- **Multi-page app**: every page you add beyond the starter gets a descriptive PascalCase name for what it shows (`Dashboard`, `Inventory`, `TopBuilders`), and the starter page keeps `Home` as the app's landing page \u2014 rename it too if the app's landing route is really something else (e.g. `Overview`), keeping it bound to the `/` index route\n- Page names are user-visible in the editor's page switcher, so name them the way you'd label a nav item\n- Never name a page `Page1`, `Page2`, ...\n\n## Design System (Tailwind CSS v4)\n\n**All design tokens are defined in `index.css` (`client/index.css` in SDK API apps)**. Apps come with a professional black-and-white theme by default.\n\n### Semantic Tokens Rule\n\n**ALWAYS use semantic tokens** \u2014 NEVER raw Tailwind utilities:\n\n```tsx\n// \u2705 CORRECT\n<Card className=\"bg-background text-foreground border border-border\" />\n\n// \u274C WRONG\n<Card className=\"bg-white text-black border-gray-200\" />\n```\n\n### When to Modify index.css\n\nOnly modify when:\n\n- User explicitly requests branding/theme changes\n- Replicating a specific brand look (e.g., Yelp, Instacart)\n- Migrating an attached third-party app \u2014 see `skills/system/third-party-migration/SKILL.md` (its theme-port rules override the Modification Rules below \u2014 copy source tokens as-is, do not convert to OKLCH or trim the palette)\n- Feature requests (lists, filters, CRUD) do NOT require changes\n\n**Modification Rules:**\n\n- All colors must be in OKLCH format\n- Use semantic names (`--color-warning`, `--shadow-elevated`)\n- Do not remove or rename existing tokens\n- Limit color palette to 5 colors max\n- Avoid gradients unless explicitly requested\n- Minimal font sizes (3 max: body, section heading, main heading)\n\n### Component Variants\n\nUse or create variants instead of one-off styles:\n\n```tsx\n// \u274C WRONG - Hacky inline overrides\n<Button className=\"text-white border-white hover:bg-white\" />\n\n// \u2705 CORRECT - Use a variant\n<Button variant=\"secondary\" />\n```\n\n## Icons\n\nUse icons from Lucide React library:\n\n```tsx\nimport { Icon } from \"@/components/ui/icon\";\n<Icon icon=\"heart\" />;\n\nimport { Button } from \"@/components/ui/button\";\n<Button>\n <Icon icon=\"plus\" /> Add Item\n</Button>;\n```\n\n**Always use icons rather than emojis unless explicitly requested.**\n\nUse current Lucide icon names, not stale aliases: use `house` instead of `home`, `life-buoy` instead of `help-circle` or `circle-help`, and `chart-column-big` instead of `bar-chart-3`.\n\nWhen storing icon names as data (arrays/objects), type them with `IconName`. **`IconName` is a TYPE-only export \u2014 you MUST import it with the `type` keyword.** A value import compiles but CRASHES the app at runtime (`does not provide an export named 'IconName'`) and leaves the preview blank, which blocks UI verification. If you hit that error, read `skills/system/common-import-issues/SKILL.md`.\n\n```tsx\n// \u2705 CORRECT \u2014 type-only import\nimport type { IconName } from \"lucide-react/dynamic\";\n\nconst navItems: { icon: IconName; label: string }[] = [\n { icon: \"house\", label: \"Home\" },\n { icon: \"settings\", label: \"Settings\" },\n];\n\n// \u274C WRONG \u2014 value import crashes the app at runtime and blanks the preview\nimport { IconName } from \"lucide-react/dynamic\";\n```\n\n## Custom Components\n\n**CRITICAL: Component composition is MANDATORY. DO NOT create monolithic pages.**\n\n### The Composition Rule\n\nWhen building ANY feature:\n\n1. **First**, identify reusable parts (list items, cards, forms, filters, headers)\n2. **Then**, create separate component files\n3. **Finally**, compose them together in the page\n\n### When to Create Components\n\n- **Rendering any list** - Extract to a component\n- **Building cards/complex UI** - Each card type is a component\n- **Creating forms** - Form sections are components\n- **Adding filters/headers** - These are components\n- **Page has >50 lines JSX** - Break it down\n\n### Component Boundary Rules\n\n**Inside a custom component:**\n\n- \u2705 Use React hooks (useState, useReducer, useEffect, etc.)\n- \u2705 Use local React state\n- \u2705 Use internal helper components\n- \u2705 Use other registered components\n- \u274C CANNOT call APIs - must pass data into the component\n\n### Example: Proper Component Structure\n\n```tsx\n// components/ProductCard/index.tsx (client/components/... in SDK API apps)\nimport { Card } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\n\ntype ProductCardProps = {\n product: {\n id: string;\n name: string;\n image: string;\n };\n};\n\nexport default function ProductCard(props: ProductCardProps) {\n return (\n <Card>\n <img src={props.product.image} />\n <h3 className=\"text-lg font-semibold\">{props.product.name}</h3>\n <Button>Add</Button>\n </Card>\n );\n}\n\n// pages/Products/index.tsx (client/pages/... in SDK API apps) - Clean composition\nimport ProductCard from \"@/components/ProductCard\";\n\nconst ProductsPage = () => {\n const [products, setProducts] = useState([]);\n\n return (\n <div className=\"grid grid-cols-3 gap-4\">\n {products.map((p) => (\n <ProductCard key={p.id} product={p} />\n ))}\n </div>\n );\n};\n```\n\n## Visual Excellence\n\n**Prioritize visual excellence from the start:**\n\n1. **Design System Enhancement**: Start by enhancing the app's `index.css` with app-specific colors that match the target aesthetic\n2. **Professional Layout Architecture**: Use sophisticated layouts with proper spacing, responsive design\n3. **Rich Interactive Components**: Leverage advanced components with proper variants and states\n4. **Visual Polish**: Add shadows, smooth transitions, skeleton loaders, hover effects, typography hierarchy\n5. **Real-World UI Patterns**: Create layouts that feel like professional applications\n\n**Make applications that look and feel like real, polished products - not basic wireframes.**\n\n### Loading States\n\nLoading behavior must differ based on whether data has already been fetched:\n\n**Initial load (no data yet):** Show skeleton shimmers that mirror the shape of the final content. Never show a blank screen or a generic spinner.\n\n**Refetch / background refresh (data already exists):** Keep showing the existing data. Use `fetching` from `useApiData` to apply a subtle visual indicator: light opacity (e.g. `opacity-70`) to signal a refresh is in progress, plus a non-blocking label such as a small inline spinner, a thin progress bar, or an \"Updating\u2026\" label. **Do not** use `pointer-events-none` or otherwise disable the content \u2014 it must remain fully interactive during refetch.\n\nUse `loading` and `fetching` from `useApiData` to distinguish these states:\n\n```tsx\nconst { data, loading, fetching, isError, error } = useApiData(\"GetOrders\", {\n status: statusFilter,\n search,\n});\n\n// Initial load \u2014 no data yet \u2192 show skeleton placeholder\nif (loading) {\n return <OrderTableSkeleton />;\n}\n\nif (isError) return <ErrorBanner error={error} />;\n\n// Refetch \u2014 data exists \u2192 subtle opacity + indicator, table stays interactive\nreturn (\n <div>\n {fetching && <div className=\"text-xs text-muted-foreground\">Updating\u2026</div>}\n <div className={fetching ? \"opacity-70\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n </div>\n);\n```\n\n```tsx\n// \u274C WRONG \u2014 pointer-events-none disables the table, making it feel broken\nreturn (\n <div className={fetching ? \"pointer-events-none\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n);\n\n// \u274C WRONG \u2014 no loading feedback when filters change\nif (loading) return <Skeleton />;\nreturn <OrderTable orders={data.orders} />;\n```\n\n#### Table Loading Rules\n\n- **Do not** use `pointer-events-none` on a table during loading \u2014 this disables interaction and makes the UI feel broken. During refetch, apply a subtle opacity (e.g. `opacity-70`) plus a non-blocking indicator (e.g., an \"Updating\u2026\" label or a thin progress bar). The table must remain clickable, sortable, and scrollable.\n- **Do not** replace a populated table with a full skeleton on refetch \u2014 this causes disorienting content flashes.\n- **Skeleton tables are only for initial load** (`loading` is true) when there is no data to display yet. Build them to match the real table's column structure (header + a few placeholder rows).\n\n### Efficient Loading Patterns\n\n1. **Always show loading indicators on refetch**: When inputs change (e.g. filters, search), show a non-blocking visual indicator while new data loads. Use `fetching` from `useApiData`.\n2. **Loading State Hierarchy**:\n - No data yet (`loading`) \u2192 Full skeleton placeholder\n - Has data, refetching (`fetching` && !`loading`) \u2192 Keep showing current data with a subtle visual indicator: light opacity (e.g. `opacity-70`) plus a non-blocking label (e.g. \"Updating\u2026\" text, thin progress bar, inline spinner). Do not use `pointer-events-none` \u2014 the content must remain fully interactive.\n - Error state (`isError`) \u2192 Show error with retry option, optionally keep stale data visible\n3. **Debounce Rapid Requests**: Prevent multiple API calls in short succession\n4. **Use useApiData for automatic refetching**: `useApiData` auto-refetches when inputs change and supports `staleTime`, `refetchOnWindowFocus`, `refetchOnReconnect`, `refetchInterval`, and `retry` options.\n\n## Performance Rules\n\n### 1. ALWAYS Paginate Tables and Lists\n\n**NEVER render more than 50 rows without pagination.** Always add client-side pagination:\n\n```tsx\nfunction PaginatedTable({ data }: { data: any[] }) {\n const PAGE_SIZE = 20;\n const [page, setPage] = useState(0);\n const totalPages = Math.ceil(data.length / PAGE_SIZE);\n const pageData = useMemo(\n () => data.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE),\n [data, page],\n );\n\n useEffect(() => {\n setPage(0);\n }, [data.length]);\n\n return (\n <>\n <Table>{/* render pageData rows */}</Table>\n <span>\n Page {page + 1} of {totalPages} ({data.length} total rows)\n </span>\n <Button\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n disabled={page === 0}\n >\n Previous\n </Button>\n <Button\n onClick={() => setPage((p) => Math.min(totalPages - 1, p + 1))}\n disabled={page >= totalPages - 1}\n >\n Next\n </Button>\n </>\n );\n}\n```\n\nFor 200+ rows, prefer **server-side pagination**; use cursor/keyset pagination for high offsets instead of `LIMIT`/`OFFSET`.\n\nFor 500+ item lists where pagination doesn't fit the UX (chat messages, infinite scroll feeds, large dropdowns), use **virtualization** (`react-virtuoso` or `@tanstack/react-virtual`) to render only the items visible in the viewport.\n\n### 2. ALWAYS Debounce Input-Driven API Calls\n\n**NEVER call an API directly from onChange.** Debounce search/filter inputs with a 300ms timer:\n\n```tsx\nfunction DebouncedSearch({ onSearch }: { onSearch: (query: string) => void }) {\n const [localValue, setLocalValue] = useState(\"\");\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => onSearch(e.target.value), 300);\n },\n [onSearch],\n );\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n return (\n <Input value={localValue} onChange={handleChange} placeholder=\"Search...\" />\n );\n}\n```\n\n### 3. Memoize Expensive Renders\n\nUse memoization (`memo()`, `useMemo`, `useCallback`) when it prevents measurable re-renders or expensive recomputation:\n\n```tsx\nconst OrderRow = memo(function OrderRow({\n order,\n onSelect,\n}: {\n order: Order;\n onSelect: (id: string) => void;\n}) {\n return (\n <TableRow onClick={() => onSelect(order.id)}>\n <TableCell>{order.id}</TableCell>...\n </TableRow>\n );\n});\n\nconst handleSelect = useCallback((id: string) => {\n setSelectedId(id);\n}, []);\n\nconst filtered = useMemo(\n () =>\n orders.filter((o) => o.status === status).sort((a, b) => b.total - a.total),\n [orders, status],\n);\n```\n\n### 4. ALWAYS Clean Up Side Effects\n\nClean up timers, event listeners, and subscriptions in `useEffect` return functions:\n\n```tsx\nuseEffect(() => {\n const handler = (e: KeyboardEvent) => {\n /* ... */\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n}, []);\n```\n\n### 5. Cancel In-Flight API Requests on Unmount\n\nFor search/filter patterns, prefer `useApiData` \u2014 it handles cancellation and cleanup automatically:\n\n```tsx\n// useApiData: auto-fetches and cancels on unmount/input change\nconst { data, fetching } = useApiData(\"SearchProducts\", { query });\n```\n\nFor imperative usage with manual cleanup, use the `cancel()` function:\n\n```tsx\nconst { run, cancel } = useApi(\"SearchProducts\");\n\nuseEffect(() => {\n if (!query) return;\n run({ query }).catch(console.error);\n return () => {\n cancel().catch(() => {});\n };\n}, [query, run, cancel]);\n```\n";
2
2
  //# sourceMappingURL=skill.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.generated.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/skills/system/superblocks-frontend/skill.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,kl3BAgvBnB,CAAC"}
1
+ {"version":3,"file":"skill.generated.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/skills/system/superblocks-frontend/skill.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,8g4BAkvBnB,CAAC"}
@@ -264,11 +264,13 @@ const handleLogout = async () => {
264
264
 
265
265
  ## Application Architecture
266
266
 
267
+ Legacy apps keep frontend files at the repository root. SDK API apps keep frontend files under \`client/\`, including \`client/components/\` and \`client/index.css\`.
268
+
267
269
  ### App.tsx Layout Structure
268
270
 
269
271
  **For single-page applications:**
270
272
 
271
- - Put all content in \`pages/<pageName>/index.tsx\`
273
+ - Put all content in \`pages/<pageName>/index.tsx\`, or \`client/pages/<pageName>/index.tsx\` in SDK API apps
272
274
  - Use components to compose and build the page
273
275
  - Keep \`App.tsx\` minimal with just \`<AppProvider>\` and \`<Outlet />\`
274
276
 
@@ -379,20 +381,20 @@ function App() {
379
381
 
380
382
  ### Page names
381
383
 
382
- A new app ships with one empty page at \`pages/Home\`, bound as the \`/\` index route:
384
+ A new app ships with one empty Home page bound as the \`/\` index route. Use the app's existing frontend root: \`pages/Home\` with \`router.tsx\`, or \`client/pages/Home\` with \`client/router.tsx\` in SDK API apps:
383
385
 
384
386
  \`\`\`tsx
385
387
  { path: "/", index: true, lazy: () => import("./pages/Home/index.js").then((mod) => ({ Component: mod.default })) }
386
388
  \`\`\`
387
389
 
388
- - **Single-page app**: build the landing content in \`pages/Home\` and keep it named \`Home\` unless the user asks for something else
390
+ - **Single-page app**: build the landing content in that Home page and keep it named \`Home\` unless the user asks for something else
389
391
  - **Multi-page app**: every page you add beyond the starter gets a descriptive PascalCase name for what it shows (\`Dashboard\`, \`Inventory\`, \`TopBuilders\`), and the starter page keeps \`Home\` as the app's landing page — rename it too if the app's landing route is really something else (e.g. \`Overview\`), keeping it bound to the \`/\` index route
390
392
  - Page names are user-visible in the editor's page switcher, so name them the way you'd label a nav item
391
393
  - Never name a page \`Page1\`, \`Page2\`, ...
392
394
 
393
395
  ## Design System (Tailwind CSS v4)
394
396
 
395
- **All design tokens are defined in \`index.css\`**. Apps come with a professional black-and-white theme by default.
397
+ **All design tokens are defined in \`index.css\` (\`client/index.css\` in SDK API apps)**. Apps come with a professional black-and-white theme by default.
396
398
 
397
399
  ### Semantic Tokens Rule
398
400
 
@@ -502,7 +504,7 @@ When building ANY feature:
502
504
  ### Example: Proper Component Structure
503
505
 
504
506
  \`\`\`tsx
505
- // components/ProductCard/index.tsx - Extract to component
507
+ // components/ProductCard/index.tsx (client/components/... in SDK API apps)
506
508
  import { Card } from "@/components/ui/card";
507
509
  import { Button } from "@/components/ui/button";
508
510
 
@@ -524,7 +526,7 @@ export default function ProductCard(props: ProductCardProps) {
524
526
  );
525
527
  }
526
528
 
527
- // pages/Products/index.tsx - Clean composition
529
+ // pages/Products/index.tsx (client/pages/... in SDK API apps) - Clean composition
528
530
  import ProductCard from "@/components/ProductCard";
529
531
 
530
532
  const ProductsPage = () => {
@@ -544,7 +546,7 @@ const ProductsPage = () => {
544
546
 
545
547
  **Prioritize visual excellence from the start:**
546
548
 
547
- 1. **Design System Enhancement**: Start by enhancing \`index.css\` with app-specific colors that match the target aesthetic
549
+ 1. **Design System Enhancement**: Start by enhancing the app's \`index.css\` with app-specific colors that match the target aesthetic
548
550
  2. **Professional Layout Architecture**: Use sophisticated layouts with proper spacing, responsive design
549
551
  3. **Rich Interactive Components**: Leverage advanced components with proper variants and states
550
552
  4. **Visual Polish**: Add shadows, smooth transitions, skeleton loaders, hover effects, typography hierarchy
@@ -1 +1 @@
1
- {"version":3,"file":"skill.generated.js","sourceRoot":"","sources":["../../../../../src/ai-service/skills/system/superblocks-frontend/skill.generated.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,mDAAmD;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgvBtB,CAAC"}
1
+ {"version":3,"file":"skill.generated.js","sourceRoot":"","sources":["../../../../../src/ai-service/skills/system/superblocks-frontend/skill.generated.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,mDAAmD;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkvBtB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { LanguageModelV3 } from "@ai-sdk/provider";
2
2
  import type { FinishReason } from "ai";
3
3
  import type { ViteDevServer } from "vite";
4
- import type { AiGenerateRequest, LLMProviderConfig, PromptContextIntegration, PromptContext, PromptContextEntity, KnowledgePromotionCapabilities, RememberKnowledgeCandidate, RuntimeErrorData, AiMode, PlanContext, AiChatMessage, AiGenerationState, AiToolPermission, ClarkUserPreferences, BrowserContext, ConsoleLogEntry, ApiRunRecord, KnowledgeSaveOutcome } from "@superblocksteam/library-shared/types";
4
+ import type { AiGenerateRequest, LLMProviderConfig, PromptContextIntegration, PromptContext, PromptContextEntity, KnowledgePromotionCapabilities, RememberKnowledgeCandidate, RuntimeErrorData, AiMode, PlanContext, AiChatMessage, AiGenerationStateSnapshot, AiToolPermission, ClarkUserPreferences, BrowserContext, ConsoleLogEntry, ApiRunRecord, KnowledgeSaveOutcome } from "@superblocksteam/library-shared/types";
5
5
  import type { AiPromptCostUsageEntry, AiQuotaPaywallReason, TracedEventEmitter } from "@superblocksteam/shared";
6
6
  import type { GitService } from "../../git-service/index.js";
7
7
  import type { OperationQueue } from "../../util/operation-queue.js";
@@ -29,7 +29,7 @@ import type { PromptInterpretTask } from "../prompt-builder-service/classifiers/
29
29
  import type { RecordingManager } from "../recording/index.js";
30
30
  import type { TaskStore } from "../tasks/task-store.js";
31
31
  import type { TemplateRenderer } from "../template-renderer.js";
32
- import type { AiServiceConfig, AiServiceEvents, ChangeInfo, EditorClient, FileArtifact, UserChange } from "../types.js";
32
+ import type { AiServiceConfig, AiServiceEvents, AiInputSource, ChangeInfo, EditorClient, FileArtifact, UserChange } from "../types.js";
33
33
  import type { CallablePeer } from "../util/call-peer.js";
34
34
  import type { FSMOnTransitionParams, FSMTransitionHandlerFactory } from "./fsm.js";
35
35
  import type { PromptFailure } from "./helpers/prompt-failure.js";
@@ -78,6 +78,7 @@ export declare const V3_AGENT_FINISHED = "v3AgentFinished";
78
78
  export type ClarkEvent = {
79
79
  type: typeof USER_SENT_PROMPT;
80
80
  request: AiGenerateRequest;
81
+ inputSource?: AiInputSource;
81
82
  /**
82
83
  * When true, the turn runs through the FSM normally but does NOT
83
84
  * persist the user prompt to the chat session store or surface it
@@ -367,7 +368,11 @@ export type ClarkContext = {
367
368
  * reconnect controls (`connectionGeneration`/`whenConnectedAfter`/
368
369
  * `invalidateConnection`) that operation-level retry helpers depend on.
369
370
  */
370
- peer: CallablePeer & EditorClient & ReconnectablePeer;
371
+ peer: CallablePeer & EditorClient & ReconnectablePeer & {
372
+ pushMessageToObservers(message: AiChatMessage, inputSource: AiInputSource | undefined, options?: {
373
+ includeInputPeer?: boolean;
374
+ }): void;
375
+ };
371
376
  hasSuggestions?: boolean;
372
377
  /**
373
378
  * Set when the previous run terminated via the mid-prompt quota gate
@@ -518,12 +523,16 @@ export type ClarkContext = {
518
523
  minHeadroomTokens?: number;
519
524
  };
520
525
  planSize?: "small" | "medium" | "large" | "extra large";
521
- lastGenerationState?: {
522
- state: AiGenerationState;
523
- hasSuggestions?: boolean;
524
- hasError?: boolean;
525
- paywallReason?: AiQuotaPaywallReason;
526
- };
526
+ /**
527
+ * The last state pushed, replayed on reconnect by `handleUserConnected`.
528
+ *
529
+ * Held as the wire type itself so the replay cannot drift from what a live
530
+ * push carries. It used to be a hand-kept copy, and every field the wire
531
+ * gained had to be remembered here too — APPS-4080 was `hasError` and
532
+ * `paywallReason` going missing from the replay, which lost a credit
533
+ * paywall across a reconnect.
534
+ */
535
+ lastGenerationState?: AiGenerationStateSnapshot;
527
536
  activeInteractiveMessage?: {
528
537
  id: string;
529
538
  payload: AiChatMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"clark-fsm.d.ts","sourceRoot":"","sources":["../../../src/ai-service/state-machine/clark-fsm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clark-fsm.d.ts","sourceRoot":"","sources":["../../../src/ai-service/state-machine/clark-fsm.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"clark-fsm.js","sourceRoot":"","sources":["../../../src/ai-service/state-machine/clark-fsm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clark-fsm.js","sourceRoot":"","sources":["../../../src/ai-service/state-machine/clark-fsm.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-planning.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/handlers/agent-planning.ts"],"names":[],"mappings":"AA+BA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,KAAK,EAKV,KAAK,EACL,uBAAuB,EACvB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAwCzB;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA8GvE;AAED,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,EACZ,QAAQ,uBAAuB,MAqFjB,WAAW,eAAe,KAAG,OAAO,CAAC,IAAI,CA0tCxD,CAAC"}
1
+ {"version":3,"file":"agent-planning.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/handlers/agent-planning.ts"],"names":[],"mappings":"AAgCA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,KAAK,EAKV,KAAK,EACL,uBAAuB,EACvB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAwCzB;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA8GvE;AAED,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,EACZ,QAAQ,uBAAuB,MAqFjB,WAAW,eAAe,KAAG,OAAO,CAAC,IAAI,CAmvCxD,CAAC"}
@@ -203,7 +203,7 @@ Address the errors and return the fixed code.`;
203
203
  case USER_SENT_PROMPT: {
204
204
  // Clear error history for new generation
205
205
  debugCache.getErrorHistoryTracker().clear();
206
- const { request, internal: isInternalTurn, visibleInChatHistory, } = event;
206
+ const { request, inputSource, internal: isInternalTurn, visibleInChatHistory, } = event;
207
207
  if (isOrganicPromptDuringAwaitingUserHandoff({
208
208
  awaitingUserHandoffRecorded: clark.context.awaitingUserHandoffRecorded,
209
209
  internal: isInternalTurn,
@@ -315,12 +315,52 @@ Address the errors and return the fixed code.`;
315
315
  }
316
316
  }
317
317
  else {
318
+ const isTypedOverride = (request.responseMetadata.type === "multi_choice_response" &&
319
+ request.responseMetadata.selectedChoiceIndices.length === 0) ||
320
+ (request.responseMetadata.type === "plan_response" &&
321
+ !request.responseMetadata.approved);
322
+ const responseMessage = request.responseMetadata.type === "multi_choice_response" &&
323
+ request.responseMetadata.selectedChoiceIndices.length > 0
324
+ ? {
325
+ content: request.prompt,
326
+ id: crypto.randomUUID(),
327
+ responseToMessageId: request.responseMetadata.responseToMessageId,
328
+ role: "user",
329
+ selectedChoiceIndices: request.responseMetadata.selectedChoiceIndices,
330
+ selectedScopes: request.responseMetadata.selectedScopes,
331
+ timestamp: Date.now(),
332
+ type: "multi_choice_response",
333
+ }
334
+ : isTypedOverride
335
+ ? {
336
+ content: request.prompt,
337
+ id: crypto.randomUUID(),
338
+ role: "user",
339
+ timestamp: Date.now(),
340
+ type: "text",
341
+ }
342
+ : undefined;
343
+ if (responseMessage && inputSource?.kind === "editor") {
344
+ clark.context.peer.pushMessageToObservers(responseMessage, inputSource, { includeInputPeer: isTypedOverride });
345
+ }
346
+ else if (responseMessage && isTypedOverride && !inputSource) {
347
+ void clark.context.peer.call
348
+ .aiPushMessage(responseMessage)
349
+ .catch((err) => {
350
+ getLogger().warn("[agent-planning] Failed to echo user response to UI", {
351
+ promptId: clark.context.promptId,
352
+ responseType: request.responseMetadata?.type,
353
+ }, err);
354
+ });
355
+ }
318
356
  // If this is a response to an interactive message, clear it from context
319
357
  clark.updateContext({
320
358
  activeInteractiveMessage: undefined,
321
359
  });
322
360
  await flushDeferredInteractiveMessage(clark, params.chatSessionStore);
323
- const handledKnowledge = await handleAppKnowledgeApprovalResponse(clark, params, request);
361
+ const handledKnowledge = await handleAppKnowledgeApprovalResponse(clark, params, request, request.responseMetadata.type === "multi_choice_response"
362
+ ? responseMessage?.id
363
+ : undefined);
324
364
  if (handledKnowledge) {
325
365
  return;
326
366
  }
@@ -386,6 +426,9 @@ Address the errors and return the fixed code.`;
386
426
  }
387
427
  const metadata = request.responseMetadata.type === "multi_choice_response"
388
428
  ? {
429
+ ...(responseMessage?.id
430
+ ? { messageId: responseMessage.id }
431
+ : {}),
389
432
  responseToMessageId: request.responseMetadata.responseToMessageId,
390
433
  selectedChoiceIndices: request.responseMetadata.selectedChoiceIndices,
391
434
  selectedScopes: request.responseMetadata.selectedScopes,
@@ -411,6 +454,9 @@ Address the errors and return the fixed code.`;
411
454
  selectedLabel: request.responseMetadata.selectedLabel,
412
455
  }
413
456
  : {
457
+ ...(responseMessage?.id
458
+ ? { messageId: responseMessage.id }
459
+ : {}),
414
460
  responseToMessageId: request.responseMetadata.responseToMessageId,
415
461
  approved: request.responseMetadata.approved,
416
462
  enableTesting: request.responseMetadata.enableTesting,
@@ -422,43 +468,7 @@ Address the errors and return the fixed code.`;
422
468
  // interactions (confirm, dropdown, knowledge draft, and
423
469
  // multi-choice selections) are hidden response types that must
424
470
  // not appear as visible text bubbles.
425
- const isTypedOverride = (request.responseMetadata.type === "multi_choice_response" &&
426
- request.responseMetadata.selectedChoiceIndices.length === 0) ||
427
- (request.responseMetadata.type === "plan_response" &&
428
- !request.responseMetadata.approved);
429
471
  const responseMetadataType = request.responseMetadata.type;
430
- // Echo the typed free-text response to the UI *now*, before
431
- // generation streams, so it lands in the message list ahead of
432
- // Clark's reply. This echo previously fired in the record's
433
- // `onRecorded` callback — i.e. only after the chat-write server
434
- // round-trip (~250ms p99) resolved — but generation starts
435
- // immediately and non-blocking, so the reasoning/text-delta
436
- // messages streamed in first and stranded the user's message
437
- // below Clark's response (ENG-4545 / ENG-3896). The echo is a
438
- // live-only overlay replacement (the durable record is the
439
- // hidden multi_choice_response/plan_response persisted just
440
- // below), so a client-side id is sufficient and it must not wait
441
- // on the write. The client-side id intentionally differs from the
442
- // persisted record's chatmessageId: reconnect resync replaces the
443
- // message list wholesale via aiLoadMessages (it does not append),
444
- // and the durable record is a hidden response type, so a duplicate
445
- // visible bubble cannot arise from the id no longer matching.
446
- if (isTypedOverride) {
447
- void clark.context.peer.call
448
- .aiPushMessage({
449
- role: "user",
450
- type: "text",
451
- content: request.prompt,
452
- id: crypto.randomUUID(),
453
- timestamp: Date.now(),
454
- })
455
- .catch((err) => {
456
- getLogger().warn("[agent-planning] Failed to echo user response to UI", {
457
- promptId: clark.context.promptId,
458
- responseType: responseMetadataType,
459
- }, err);
460
- });
461
- }
462
472
  recordChatMessageInBackground({
463
473
  clark,
464
474
  record: () => params.chatSessionStore.recordUserResponse(request.prompt, responseMetadataType, metadata),
@@ -590,28 +600,33 @@ Address the errors and return the fixed code.`;
590
600
  }
591
601
  else {
592
602
  getLogger().info(`[agent-planning] Recording user message to chat session...`);
603
+ const userMessageId = crypto.randomUUID();
604
+ const userMessage = {
605
+ attachments: promptContextWithUploadedAttachments?.attachments,
606
+ content: promptForRecording,
607
+ id: userMessageId,
608
+ role: "user",
609
+ timestamp: Date.now(),
610
+ type: "text",
611
+ };
612
+ if (inputSource?.kind === "editor") {
613
+ clark.context.peer.pushMessageToObservers(userMessage, inputSource, { includeInputPeer: true });
614
+ }
615
+ else {
616
+ void clark.context.peer.call
617
+ .aiPushMessage(userMessage)
618
+ .catch((err) => {
619
+ getLogger().warn("[agent-planning] Failed to echo user message to UI", err);
620
+ });
621
+ }
593
622
  recordChatMessageInBackground({
594
623
  clark,
595
624
  record: () => params.chatSessionStore.recordUser(promptForRecording, {
596
625
  attachments: promptContextWithUploadedAttachments?.attachments,
626
+ messageId: userMessageId,
597
627
  }),
598
628
  onRecorded: (chatmessageId) => {
599
629
  getLogger().info(`[agent-planning] User message recorded: ${chatmessageId}`);
600
- // Echo the persisted user message to the UI so the optimistic
601
- // overlay is replaced by a server-confirmed entry at the
602
- // correct position in the message processing pipeline.
603
- void clark.context.peer.call
604
- .aiPushMessage({
605
- role: "user",
606
- type: "text",
607
- content: promptForRecording,
608
- id: chatmessageId,
609
- timestamp: Date.now(),
610
- attachments: promptContextWithUploadedAttachments?.attachments,
611
- })
612
- .catch((err) => {
613
- getLogger().warn("[agent-planning] Failed to echo user message to UI", err);
614
- });
615
630
  },
616
631
  });
617
632
  }