@superblocksteam/vite-plugin-file-sync 2.0.42-next.47 → 2.0.42-next.48
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/dist/ai-service/agent/subagents/apis/example-selector.d.ts +24 -0
- package/dist/ai-service/agent/subagents/apis/example-selector.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/apis/example-selector.js +104 -0
- package/dist/ai-service/agent/subagents/apis/example-selector.js.map +1 -0
- package/dist/ai-service/agent/subagents/apis/examples.d.ts +55 -0
- package/dist/ai-service/agent/subagents/apis/examples.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/apis/examples.js +1229 -0
- package/dist/ai-service/agent/subagents/apis/examples.js.map +1 -0
- package/dist/ai-service/agent/{apis.d.ts → subagents/apis/generate-api-source.d.ts} +5 -4
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts.map +1 -0
- package/dist/ai-service/agent/{apis.js → subagents/apis/generate-api-source.js} +62 -72
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js.map +1 -0
- package/dist/ai-service/agent/subagents/apis/prompt-builder.d.ts +39 -0
- package/dist/ai-service/agent/subagents/apis/prompt-builder.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/apis/prompt-builder.js +115 -0
- package/dist/ai-service/agent/subagents/apis/prompt-builder.js.map +1 -0
- package/dist/ai-service/agent/{apis-static-analysis.d.ts → subagents/apis/static-analysis.d.ts} +1 -1
- package/dist/ai-service/agent/subagents/apis/static-analysis.d.ts.map +1 -0
- package/dist/ai-service/agent/{apis-static-analysis.js → subagents/apis/static-analysis.js} +3 -2
- package/dist/ai-service/agent/subagents/apis/static-analysis.js.map +1 -0
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts +3 -0
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts.map +1 -0
- package/dist/ai-service/agent/{apis-system-prompt.js → subagents/apis/system-prompt.js} +3 -1
- package/dist/ai-service/agent/{apis-system-prompt.js.map → subagents/apis/system-prompt.js.map} +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-read-files.js +1 -1
- package/dist/ai-service/agent/tools/build-read-files.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts +1 -0
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +1 -1
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/IconPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/PagePropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SectionPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Dim.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/EventFlow.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/TextStyleWithVariant.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-data-filtering.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-routes.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.js +1 -1
- package/package.json +6 -6
- package/dist/ai-service/agent/apis-static-analysis.d.ts.map +0 -1
- package/dist/ai-service/agent/apis-static-analysis.js.map +0 -1
- package/dist/ai-service/agent/apis-system-prompt.d.ts +0 -3
- package/dist/ai-service/agent/apis-system-prompt.d.ts.map +0 -1
- package/dist/ai-service/agent/apis.d.ts.map +0 -1
- package/dist/ai-service/agent/apis.js.map +0 -1
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-forms.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "### Form Layouts in Superblocks\n\n**🚨 CRITICAL: Remember that computed cannot be used as React children.** When building forms, all dynamic content must be in component properties (like `text={}`, `label={}`) not as children.\n\nWhen creating forms using form field components, follow these rules:\n\n1. Always put form components together inside an `Container` with `layout=\"vertical\"`, `width={Dim.fill()}`, and appropriate `spacing`\n2. Use `spacing={Dim.px(12)}` or similar for consistent form field spacing\n3. Do not change the label position on form components (like `Input`). The default is the label is above the input and we want to keep that\n4. Make all form field components and any container parents be `width={Dim.fill()}` so they are all aligned horizontally and easy to use\n\n**Example:**\n\n```jsx\n<Container layout=\"vertical\" width={Dim.fill()} spacing={Dim.px(12)}>\n <Input label=\"First Name\" bind={FirstName} width={Dim.fill()} />\n <Input label=\"Last Name\" bind={LastName} width={Dim.fill()} />\n <Input label=\"Email\" bind={Email} inputType=\"EMAIL\" width={Dim.fill()} />\n</Container>\n```\n\n### Forms inside Modals\n\nIt's common to put a form inside a Modal, like for creating or editing an entity. Here are comprehensive examples showing different patterns:\n\n#### Basic Create Form Modal\n\n```tsx\n// Import required components and utilities\nimport {\n Modal,\n Container,\n Text,\n Input,\n Dropdown,\n Button,\n Dim,\n EventFlow,\n} from \"@superblocksteam/library\";\nimport { Page1 } from \"./scope\";\n\n// ...\n\nconst {\n NewOrderCustomerName,\n NewOrderCustomerEmail,\n NewOrderAmount,\n NewOrderStatus,\n NewOrderNotes,\n OrdersStateVar,\n CreateOrderModal,\n} = Page1;\n\n<Modal bind={CreateOrderModal}>\n <Container layout=\"vertical\" width={Dim.fill()} spacing={Dim.px(24)}>\n {/* Modal Header */}\n <Container layout=\"vertical\" spacing={Dim.px(8)}>\n <Text\n text=\"Create New Order\"\n textStyle={{\n variant: \"heading4\",\n }}\n />\n <Text text=\"Fill out the form below to create a new order\" />\n </Container>\n\n {/* Form Content */}\n <Container layout=\"vertical\" width={Dim.fill()} spacing={Dim.px(12)}>\n <Input\n bind={NewOrderCustomerName}\n width={Dim.fill()}\n label=\"Customer Name\"\n placeholderText=\"Enter customer name\"\n required={true}\n />\n\n <Input\n bind={NewOrderCustomerEmail}\n width={Dim.fill()}\n label=\"Customer Email\"\n inputType=\"EMAIL\"\n placeholderText=\"Enter customer email\"\n required={true}\n />\n\n <Input\n bind={NewOrderAmount}\n width={Dim.fill()}\n label=\"Order Amount\"\n placeholderText=\"Enter order amount\"\n inputType=\"NUMBER\"\n required={true}\n />\n\n <Dropdown\n bind={NewOrderStatus}\n width={Dim.fill()}\n label=\"Order Status\"\n options={[\n {\n label: \"Pending\",\n value: \"pending\",\n },\n {\n label: \"Processing\",\n value: \"processing\",\n },\n {\n label: \"En route\",\n value: \"en_route\",\n },\n {\n label: \"Delivered\",\n value: \"delivered\",\n },\n {\n label: \"Refunded\",\n value: \"refunded\",\n },\n ]}\n required={true}\n />\n\n <Input\n bind={NewOrderNotes}\n width={Dim.fill()}\n label=\"Order Notes\"\n placeholderText=\"Optional notes about the order\"\n multiline={true}\n />\n </Container>\n\n {/* Modal Footer */}\n <Container\n layout=\"horizontal\"\n horizontalAlign=\"right\"\n spacing={Dim.px(12)}\n width={Dim.fill()}\n >\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.runJS(() => {\n // Reset form components\n NewOrderCustomerName.text = \"\";\n NewOrderCustomerEmail.text = \"\";\n NewOrderAmount.text = \"\";\n NewOrderStatus.value = \"\";\n NewOrderNotes.text = \"\";\n })\n // Note how we prefer use controlModal for handling opening/closing\n // the modal rather than setting the modal's open property directly\n .controlModal(CreateOrderModal, { action: \"close\" })}\n />\n <Button\n label=\"Create Order\"\n variant=\"primary\"\n onClick={EventFlow.runJS(() => {\n // Create new order using the form values\n const newOrder = {\n id: `ORD_${Math.floor(Math.random() * 10000)\n .toString()\n .padStart(4, \"0\")}`,\n customerName: NewOrderCustomerName.value,\n customerEmail: NewOrderCustomerEmail.value,\n amount: NewOrderAmount.value,\n status: NewOrderStatus.selectedOptionValue,\n notes: NewOrderNotes.value,\n createdAt: new Date().toISOString(),\n };\n\n // Add to orders list or call API\n OrdersStateVar.setValue([...OrdersStateVar.value, newOrder]);\n\n // Reset form components\n NewOrderCustomerName.text = \"\";\n NewOrderCustomerEmail.text = \"\";\n NewOrderAmount.text = \"\";\n NewOrderStatus.value = \"\";\n NewOrderNotes.text = \"\";\n })\n // Note how we prefer use controlModal for handling opening/closing\n // the modal rather than setting the modal's open property directly\n .controlModal(CreateOrderModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n</Modal>;\n```\n\n#### Table with Edit Form Modal\n\nThis example shows a more complete pattern where a table displays data and clicking a row opens an edit modal with the form fields pre-populated:\n\n```tsx\n// Import required components and utilities\nimport {\n Page,\n Container,\n Table,\n Modal,\n Container,\n Text,\n Input,\n Dropdown,\n Button,\n Dim,\n EventFlow,\n computed,\n} from \"@superblocksteam/library\";\nimport { Page1 } from \"./scope\";\n\nconst {\n OrdersTable,\n EditOrderModal,\n EditOrderCustomerName,\n EditOrderCustomerEmail,\n EditOrderAmount,\n EditOrderStatus,\n EditOrderNotes,\n OrdersStateVar,\n} = Page1;\n\n// Main page with table\n<Page name=\"Page1\" height={Dim.fill()} width={Dim.fill()}>\n <Container height={Dim.fill()} width={Dim.fill()} spacing={Dim.px(24)}>\n <Text\n text=\"Orders Management\"\n textStyle={{ variant: \"heading2\" }}\n />\n\n <Table\n bind={OrdersTable}\n tableData={computed(() => OrdersStateVar.value)}\n onRowClick={EventFlow.runJS(() => {\n // Populate form fields with the selected row data\n EditOrderCustomerName.text = OrdersTable.selectedRow.customerName;\n EditOrderCustomerEmail.text = OrdersTable.selectedRow.customerEmail;\n EditOrderAmount.text = OrdersTable.selectedRow.amount;\n EditOrderStatus.value = OrdersTable.selectedRow.status;\n EditOrderNotes.text = OrdersTable.selectedRow.notes || \"\";\n })\n // Open the edit modal\n .controlModal(EditOrderModal, { action: \"open\" })}\n width={Dim.fill()}\n height={Dim.fill()}\n />\n </Container>\n</Page>\n\n// Edit modal with form pre-populated from table row\n<Modal bind={EditOrderModal}>\n <Container layout=\"vertical\" width={Dim.fill()} spacing={Dim.px(24)}>\n {/* Modal Header */}\n <Container layout=\"vertical\" spacing={Dim.px(8)}>\n <Text\n text=\"Edit Order\"\n textStyle={{\n variant: \"heading4\",\n }}\n />\n <Text text=\"Update the order details below\" />\n </Container>\n\n {/* Form Content - Fields are pre-populated by onRowClick */}\n <Container layout=\"vertical\" width={Dim.fill()} spacing={Dim.px(12)}>\n <Input\n bind={EditOrderCustomerName}\n width={Dim.fill()}\n label=\"Customer Name\"\n placeholderText=\"Enter customer name\"\n required={true}\n />\n\n <Input\n bind={EditOrderCustomerEmail}\n width={Dim.fill()}\n label=\"Customer Email\"\n inputType=\"EMAIL\"\n placeholderText=\"Enter customer email\"\n required={true}\n />\n\n <Input\n bind={EditOrderAmount}\n width={Dim.fill()}\n label=\"Order Amount\"\n placeholderText=\"Enter order amount\"\n inputType=\"NUMBER\"\n required={true}\n />\n\n <Dropdown\n bind={EditOrderStatus}\n width={Dim.fill()}\n label=\"Order Status\"\n options={[\n {\n label: \"Pending\",\n value: \"pending\",\n },\n {\n label: \"Processing\",\n value: \"processing\",\n },\n {\n label: \"En route\",\n value: \"en_route\",\n },\n {\n label: \"Delivered\",\n value: \"delivered\",\n },\n {\n label: \"Refunded\",\n value: \"refunded\",\n },\n ]}\n required={true}\n />\n\n <Input\n bind={EditOrderNotes}\n width={Dim.fill()}\n label=\"Order Notes\"\n placeholderText=\"Optional notes about the order\"\n multiline={true}\n />\n </Container>\n\n {/* Modal Footer */}\n <Container\n layout=\"horizontal\"\n horizontalAlign=\"right\"\n spacing={Dim.px(12)}\n width={Dim.fill()}\n >\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(EditOrderModal, { action: \"close\" })}\n />\n <Button\n label=\"Save Changes\"\n variant=\"primary\"\n onClick={EventFlow.runJS(() => {\n // Find and update the order in the orders array\n const updatedOrders = OrdersStateVar.value.map(order => {\n if (order.id === OrdersTable.selectedRow.id) {\n return {\n ...order,\n customerName: EditOrderCustomerName.value,\n customerEmail: EditOrderCustomerEmail.value,\n amount: EditOrderAmount.value,\n status: EditOrderStatus.selectedOptionValue,\n notes: EditOrderNotes.value,\n updatedAt: new Date().toISOString(),\n };\n }\n return order;\n });\n\n // Update the orders state\n OrdersStateVar.setValue(updatedOrders);\n })\n .controlModal(EditOrderModal, { action: \"close\" })}\n />\n </Container>\n </Container>\n</Modal>\n```\n\n**Corresponding scope.ts file for the table + edit modal example:**\n\n```ts\n// pages/Page1/scope.ts\nimport {\n createScope,\n StateVar,\n StateVarPersistence,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n OrdersTable: any;\n EditOrderModal: any;\n EditOrderCustomerName: any;\n EditOrderCustomerEmail: any;\n EditOrderAmount: any;\n EditOrderStatus: any;\n EditOrderNotes: any;\n OrdersStateVar: any;\n}>(\n () => ({\n OrdersStateVar: StateVar({\n defaultValue: [\n {\n id: 1,\n customerName: \"John Doe\",\n customerEmail: \"john@example.com\",\n amount: 150.0,\n status: \"pending\",\n notes: \"Rush order\",\n createdAt: \"2024-01-15T10:30:00Z\",\n },\n {\n id: 2,\n customerName: \"Jane Smith\",\n customerEmail: \"jane@example.com\",\n amount: 89.99,\n status: \"delivered\",\n notes: \"\",\n createdAt: \"2024-01-14T14:20:00Z\",\n },\n ],\n persistence: StateVarPersistence.TEMPORARY,\n }),\n }),\n {\n name: \"Page1\",\n },\n);\n\nexport const Page1 = Page1Scope.entities;\n```\n\n#### Alternative Population Method - Button with State Variable\n\nHere's another common pattern where a button populates form fields from a state variable:\n\n```tsx\n// Button that loads selected user data into edit form\n<Button\n label=\"Edit Selected User\"\n onClick={EventFlow.runJS(() => {\n const selectedUser = SelectedUserStateVar.value;\n\n // Populate form fields from state variable\n EditUserName.text = selectedUser.name;\n EditUserEmail.text = selectedUser.email;\n EditUserRole.value = selectedUser.role;\n EditUserDepartment.text = selectedUser.department;\n }).controlModal(EditUserModal, { action: \"open\" })}\n/>\n```\n\n### Key Form Patterns\n\n1. **Create Forms**: Start with empty fields, populate from user input\n2. **Edit Forms**: Pre-populate fields with existing data from various sources\n3. **Field Population Methods**:\n - **Table Row Selection**: Use `onRowClick` to set form field values to `{TableName}.selectedRow.{columnName}` (most common)\n - **Button Actions**: Use button clicks to populate from state variables or API responses\n - **API Loading**: Fetch data and populate fields when modal opens\n - **State Variables**: Populate from existing application state\n4. **Form Validation**: Use `required={true}` on form components and validate in submit handlers\n5. **Form Reset**: Always reset form fields when canceling or after successful submission\n6. **Modal Control**: Prefer `EventFlow.controlModal()` over directly setting modal open property\n\n### Form Layout Best Practices\n\n- **Container Structure**: Always wrap forms in `Container` with `layout=\"vertical\"`\n- **Consistent Spacing**: Use `spacing={Dim.px(12)}` for form field spacing\n- **Full Width**: Make form fields and containers `width={Dim.fill()}` for proper alignment\n- **Modal Structure**: Use header, content, and footer containers with appropriate spacing\n- **Button Alignment**: Use `horizontalAlign=\"right\"` for the footer containers in modals that contain buttons\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-forms.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-layouts.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "### Layout and Sizing in Superblocks\n\n**Container Component:**\n\n```jsx\n<Container\n variant=\"card\" | \"none\" // default: \"none\" (pure layout) vs \"card\" (visual styling)\n layout=\"vertical\" | \"horizontal\" | \"freeform\" // default: \"vertical\", prefer vertical/horizontal\n>\n {/* Children */}\n</Container>\n```\n\n**Sizing with Dim:**\n\n- `Dim.fit()` - Fit to content (default, can be omitted)\n- `Dim.px(100)` - Fixed pixel size\n- `Dim.fill()` or `Dim.fill(2)` - Fill available space with optional weight\n\n**Sizing Guidelines:** Prefer `Dim.fill()` and `Dim.fit()` over `Dim.px()` for responsive layouts.\n\n**Standard Page Structure:**\n\n```tsx\n<Page name=\"Page1\" height={Dim.fill()} width={Dim.fill()}>\n <Container height={Dim.fill()} width={Dim.fill()}>\n {/* Page content */}\n </Container>\n</Page>\n```\n\n**Container Width Rule:** Use `width={Dim.fill()}` for containers under Page, and for modal/slideout roots.\n\n**Sidebar Layout Example:**\n\n```tsx\n<Page name=\"Page1\" height={Dim.fill()} width={Dim.fill()}>\n <Container height={Dim.fill()} layout=\"horizontal\">\n <Container width={Dim.px(250)}>{/* Fixed sidebar */}</Container>\n <Container width={Dim.fill()}>{/* Flexible content */}</Container>\n </Container>\n</Page>\n```\n\n**Modal Layout:**\n\n- Root container: `<Container layout=\"vertical\" width={Dim.fill()}>`\n- Modal includes default close button\n- Header/footer in separate containers; footer buttons use `horizontalAlign=\"right\"`\n- Most components use `width={Dim.fill()}` except buttons (use default `Dim.fit()`)\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-layouts.js.map
|
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-page.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "### How to use Page\n\n**Important: Superblocks apps currently support only one page.**\n\n- A Superblocks app consists of a single page that exports a default React component through the `registerPage` function.\n- The page consists of two files: `index.tsx` (the page component) and `scope.ts` (the entity definitions).\n- For `export default registerPage(Page1, Page1Scope)`, Page1 is a function that returns a React component, and Page1Scope is the scope containing all entities.\n- A Superblocks app consists of a single page located in the `pages/Page1` directory.\n- NEVER change the path of the `pages` directory or the page directories inside it `like `pages/Page1`). If you change these paths or folder names, the app will crash.\n- DO NOT create more than ONE page in an app. Multiple pages is NOT supported!\n\n### Page Structure\n\nThe single page in your Superblocks app should have the following structure:\n\n**scope.ts** - Contains all entity definitions (variables, APIs, etc.):\n\n```ts\nimport Text from \"components/ui/Text/index\";\nimport {\n createScope,\n StateVar,\n StateVarPersistence,\n SbApi,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n Text1: any;\n}>(\n () => ({\n // Define your entities here\n myVariableVar: StateVar({\n defaultValue: \"initial value\",\n persistence: StateVarPersistence.TEMPORARY,\n }),\n fetchDataApi: SbApi({}),\n }),\n {\n name: \"Page1\",\n },\n);\n\nexport const Page1 = Page1Scope.entities;\n```\n\n**index.tsx** - Contains the page component:\n\n```tsx\nimport Container from \"components/ui/Container/index\";\nimport Text from \"components/ui/Text/index\";\nimport { Page, registerPage } from \"@superblocksteam/library\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction PageContent() {\n // Destructure entities from the scope for easy access\n const { Text1, myVariableVar, fetchDataApi } = Page1;\n\n return (\n <Page name=\"Page1\" height={Dim.fill()} width={Dim.fill()}>\n <Container height={Dim.fill()} width={Dim.fill()}>\n {/* Use entities in your components */}\n <Text bind={Text1} text={computed(() => myVariableVar.value)} />\n </Container>\n </Page>\n );\n}\n\nexport default registerPage(PageContent, Page1Scope);\n```\n\n## How component bindings work\n\nIf you need to reference a component directly to get access to some of its state, you must use a binding inside the page scope.\n\nComponent bindings allow you to:\n\n- Access component properties and state from other components and APIs\n- Create reactive relationships between components\n- Reference component values in `computed` expressions\n\n### Setting up component bindings\n\n1. **Define the binding type in your scope**: Add the component type to the scope's type definitions:\n\n```ts\nexport const Page1Scope = createScope<{\n Text1: any;\n UserInput: any;\n}>(\n () => ({\n // Your other entities (variables, APIs, etc.)\n myVariableVar: StateVar({ defaultValue: \"Hello\" }),\n }),\n {\n name: \"Page1\",\n },\n);\n```\n\n2. **Bind the component in your JSX**: Use the `bind` prop to connect the component to the binding:\n\n```tsx\nfunction PageContent() {\n const { Text1, UserInput, myVariableVar } = Page1;\n\n return (\n <Page name=\"Page1\" height={Dim.fill()} width={Dim.fill()}>\n <Container height={Dim.fill()} width={Dim.fill()}>\n <Input bind={UserInput} placeholder=\"Enter your name\" />\n <Text\n bind={Text1}\n text={computed(() => `Hello, ${UserInput.value}!`)}\n />\n </Container>\n </Page>\n );\n}\n```\n\n3. **Access component state**: Use `computed` to access properties of bound components:\n\n```tsx\n// Access input value\ntext={computed(() => UserInput.value)}\n\n// Access text content\ntext={computed(() => Text1.text)}\n\n// Combine with other state\n text={computed(() => `${myVariableVar.value}: ${UserInput.value}`)}\n```\n\n### Common binding use cases\n\n- **Form inputs**: Access user input values to display or validate\n- **Dynamic content**: Reference one component's state to update another\n- **Conditional rendering**: Use component state to control visibility or styling\n\n### Page load events\n\nYou can fire callbacks when the page is loaded using the onLoad property of the Page component. You must use the EventFlow API for any actions you want to run inside onLoad.\n\nExample:\n\n```tsx\nimport Container from \"components/ui/Container/index\";\nimport {\n registerPage,\n EventFlow,\n Page,\n computed,\n} from \"@superblocksteam/library\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nconst Page1Component = () => {\n return (\n <Page\n name=\"Page1\"\n height={Dim.fill()}\n width={Dim.fill()}\n onLoad={EventFlow.runJS(() => {\n console.log(\"Page loaded\");\n })}\n >\n <Container height={Dim.fill()} width={Dim.fill()}>\n ...\n </Container>\n </Page>\n );\n};\n\nexport default registerPage(Page1Component, Page1Scope);\n```\n\nA very common and helpful usage of this callback is to run APIs using EventFlow to fetch data when the page loads. Example:\n\n```tsx\nimport Container from \"components/ui/Container/index\";\nimport {\n Page,\n registerPage,\n EventFlow,\n computed,\n} from \"@superblocksteam/library\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nconst Page1Component = () => {\n return (\n <Page\n name=\"Page1\"\n height={Dim.fill()}\n width={Dim.fill()}\n onLoad={EventFlow.runApis([getOrdersApi])}\n >\n <Container height={Dim.fill()} width={Dim.fill()}>\n ...\n </Container>\n </Page>\n );\n};\n\nexport default registerPage(Page1Component, Page1Scope);\n```\n\nIn this example, the `getOrdersApi` API would be defined in the scope.ts file like this:\n\n```ts\n// In scope.ts\n\n// We register the api in createScope by creating a key\n// with the same name as the file, and SbApi({}) with an empty object\n// Note: We DO NOT import the api file. It's not necessary.\nexport const Page1Scope = createScope(\n () => ({\n getOrdersApi: SbApi({}),\n }),\n {\n name: \"Page1\",\n },\n);\n```\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-page.js.map
|
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-rbac.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "# Role-Based Access Control (RBAC)\n\nSuperblocks provides role-based access control through user groups. You can control component visibility and availability based on the groups that a user belongs to.\n\n## Accessing User Groups\n\nUser groups are available via `Global.user?.groups`, which contains an array of group objects with the following structure:\n\n```typescript\n// Global.user?.groups is an ARRAY OF OBJECTS, not an array of strings\nGlobal.user?.groups: Array<{\n id: string;\n name: string;\n}>;\n\n// Example data:\n// [\n// { id: \"123\", name: \"Admins\" },\n// { id: \"456\", name: \"Managers\" },\n// { id: \"789\", name: \"Order Management Admins\" }\n// ]\n```\n\n## Common RBAC Patterns\n\n### Hiding Components Based on User Groups\n\nThe most common way to implement RBAC is by controlling component visibility using the `isVisible` property. Nearly all components support this property.\n\n```javascript\n// Show a component only to users in the \"Admins\" group\n<Button\n text=\"Admin Action\"\n isVisible={Global.user?.groups.some((g) => g.name === \"Admins\")}\n/>\n\n// Show a component only to users NOT in the \"Guest\" group\n<Container\n isVisible={!Global.user?.groups.some((g) => g.name === \"Guest\")}\n>\n {/* Content only visible to non-guests */}\n</Container>\n\n// Show a component to users in multiple groups\n<Text\n text=\"Manager or Admin content\"\n isVisible={Global.user?.groups.some((g) => [\"Managers\", \"Admins\"].includes(g.name))}\n/>\n```\n\n### Disabling Components Based on User Groups\n\nFor interactive components that support the `isDisabled` property (like buttons, inputs, dropdowns, etc.), you can disable functionality while keeping the component visible:\n\n```javascript\n// Disable a button for users not in the \"Editors\" group\n<Button\n text=\"Edit Record\"\n isDisabled={!Global.user?.groups.some((g) => g.name === \"Editors\")}\n/>\n\n// Disable an input for read-only users\n<Input\n label=\"Sensitive Data\"\n defaultValue=\"Some value\"\n isDisabled={Global.user?.groups.some((g) => g.name === \"ReadOnly\")}\n/>\n\n// Enable advanced features only for premium users\n<Dropdown\n label=\"Advanced Options\"\n isDisabled={!Global.user?.groups.some((g) => g.name === \"Premium\")}\n/>\n```\n\n## Components with RBAC Support\n\n### Components Supporting `isVisible`\n\nAlmost all components support the `isVisible` property, including:\n\n- Button, Text, Input, Dropdown, Container, Image, Icon, Table, Checkbox, Switch, DatePicker, Modal, Slideout, and more.\n\n### Components Supporting `isDisabled`\n\nInteractive components that support the `isDisabled` property include:\n\n- Button, Input, Dropdown, Checkbox, Switch, DatePicker, and other form controls.\n\n## Best Practices\n\n1. **Use `isVisible` for sensitive content**: Hide components that contain sensitive information or actions that users shouldn't see.\n\n2. **Use `isDisabled` for better UX**: When you want users to see that a feature exists but is not available to them, disable the component rather than hiding it.\n\n3. **Group-based logic**: Use group names consistently across your application for easier maintenance.\n\n4. **Fallback handling**: Consider what happens when a user has no groups or unexpected group configurations.\n\n5. **Test thoroughly**: Always test RBAC logic with users from different groups to ensure proper access control.\n\n## Example: Complete RBAC Implementation\n\n```javascript\n// A dashboard with different access levels\n<Container layout=\"vertical\">\n {/* Everyone can see this */}\n <Text text=\"Welcome to the Dashboard\" />\n\n {/* Only visible to authenticated users (not guests) */}\n <Button\n text=\"My Profile\"\n isVisible={!Global.user?.groups.some((g) => g.name === \"Guest\")}\n />\n\n {/* Visible to managers and admins, but disabled for managers */}\n <Button\n text=\"Delete Records\"\n isVisible={Global.user?.groups.some((g) =>\n [\"Managers\", \"Admins\"].includes(g.name),\n )}\n isDisabled={\n Global.user?.groups.some((g) => g.name === \"Managers\") &&\n !Global.user?.groups.some((g) => g.name === \"Admins\")\n }\n />\n\n {/* Admin-only section */}\n <Container isVisible={Global.user?.groups.some((g) => g.name === \"Admins\")}>\n <Text text=\"Admin Controls\" />\n <Button text=\"System Settings\" />\n <Button text=\"User Management\" />\n </Container>\n</Container>\n```\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-rbac.js.map
|
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-routes.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-routes.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "- **IMPORTANT: Superblocks apps support only ONE page. There is only ever a single route mapping to the single page.**\n- The `routes.json` file maps the root URL to the single page in your Superblocks app.\n Example routes.json file content:\n\n```json\n{\n \"/\": {\n \"file\": \"Page1/index.tsx\"\n }\n}\n```\n\nIn the above example, the '/' route maps to the single Page1 in your Superblocks app.\n\n**Critical: Superblocks apps only support a single page, so the routes.json file should only contain one route mapping to Page1.**\n\nCritical: Page paths in `routes.json` are relative to the 'pages/' directory. In this file, you must never prefix `file` values with 'pages/', or the app will break.\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-routes.js.map
|
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-state.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "# Superblocks State System\n\n## Core Concepts\n\n### Scopes\n\n- Single `scope.ts` file per page defines all entities (state variables, APIs, components)\n- Entities are accessed via destructuring after import\n- Child scopes can access parent entities; parents cannot access children\n\n### Entity Types\n\n#### 1. Component State\n\n- Define component type in scope, use `bind` prop to connect\n- **Each entity name can only bind to ONE component instance** (e.g., if you have 3 Input components, define 3 different entities: SearchInput, NameInput, EmailInput)\n- Access via `computed(() => ComponentName.prop)`\n- Components requiring bindings: Input, Dropdown, DatePicker, Checkbox, Switch, Form, Radio, RichText, FilePicker, CodeEditorEditor, Chat\n\n#### 2. State Variables\n\n- Static: `StateVar({ defaultValue: \"value\" })`\n- Computed initial value: Wrap scope in `({ entities }) => ({ ... })` and use `computed(() => ...)`\n- Read: `computed(() => varName.value)` - always include `.value`\n- Write: `EventFlow.setStateVar(varName, { value: newValue })` or within `EventFlow.runJS(() => { varName.value = newValue; })`\n- **Cannot store functions** - only JSON-serializable data\n\n#### 3. APIs\n\n- Define: `SbApi({})` in scope\n- Read: `computed(() => apiName.response)` or `computed(() => apiName.error)`\n- Read-only\n\n## Access Patterns\n\n### Scope Entities (Direct Access)\n\n```tsx\nconst { UserInput, myVar, dataApi } = Page1;\n<Text text={computed(() => UserInput.value)} />\n<Table tableData={computed(() => dataApi.response)} />\n```\n\n### Global State (Import Access)\n\n```tsx\n// Import globals from library\n<Text text={computed(() => `Welcome ${Global.user?.name}!`)} />\n<Container backgroundColor={computed(() => Theme.colors.primary)} />\n```\n\n## Critical Rules\n\n1. **Never create redundant state** - Use component state directly via bindings\n2. **Unique names only** - All entities in createScope must have unique names\n3. **One binding per entity** - Each component entity (e.g., CustomerSearchInput) can ONLY bind to ONE component instance. Need multiple inputs? Define CustomerSearchInput, CustomerNameInput, CustomerEmailInput, etc.\n4. **No function storage** - State variables cannot store or be used as functions\n5. **Complete implementation** - Never stub or skip features\n\n## Example: Complete Page with Scope\n\n```ts\n// pages/Page1/scope.ts\nimport {\n createScope,\n StateVar,\n StateVarPersistence,\n SbApi,\n computed,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n SearchInput: any;\n StatusDropdown: any;\n}>(\n ({ entities: { SearchInput } }) => ({\n // Component bindings defined in type parameter above\n\n // Static state\n ordersVar: StateVar({\n defaultValue: [],\n persistence: StateVarPersistence.TEMPORARY,\n }),\n\n // Computed initial value from component\n searchTermVar: StateVar({\n defaultValue: computed(() => SearchInput.value || \"\"),\n persistence: StateVarPersistence.TEMPORARY,\n }),\n\n // API\n fetchOrdersApi: SbApi({}),\n }),\n { name: \"Page1\" },\n);\n\nexport const Page1 = Page1Scope.entities;\n```\n\n```tsx\n// pages/Page1/index.tsx\nimport {\n Page,\n computed,\n EventFlow,\n registerPage,\n} from \"@superblocksteam/library\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction PageContent() {\n const { SearchInput, StatusDropdown, ordersVar, fetchOrdersApi } = Page1;\n\n return (\n <Page name=\"Page1\">\n <Input bind={SearchInput} placeholder=\"Search orders...\" />\n\n <Dropdown\n bind={StatusDropdown}\n options={[\n { label: \"Active\", value: \"active\" },\n { label: \"Completed\", value: \"completed\" },\n ]}\n />\n\n <Table\n tableData={computed(() =>\n ordersVar.value.filter(\n (order) =>\n order.name.includes(SearchInput.value) &&\n order.status === StatusDropdown.selectedOptionValue,\n ),\n )}\n />\n\n <Button text=\"Refresh\" onClick={EventFlow.runAPI(fetchOrdersApi)} />\n </Page>\n );\n}\n\nexport default registerPage(PageContent, Page1Scope);\n```\n\n## Common Mistakes to Avoid\n\n❌ **Creating redundant state variables for component values**\n\n```tsx\n// WRONG\n<Input\n bind={UserInput}\n onChange={EventFlow.setStateVar(userVar, { value: \"val\" })}\n/>\n```\n\n❌ **Using state variables as functions**\n\n```tsx\n// WRONG\nfilterOrders: StateVar({\n defaultValue: () => {\n /* function */\n },\n});\n```\n\n❌ **Reusing component entity names**\n\n```tsx\n// WRONG - Can't use Input1 for multiple inputs\n<Input bind={Input1} />\n<Input bind={Input1} /> // Error!\n```\n\n✅ **Correct approach**\n\n```tsx\n// Define separate entities for each component\n<Input bind={FirstNameInput} />\n<Input bind={LastNameInput} />\n<Text text={computed(() => `${FirstNameInput.value} ${LastNameInput.value}`)} />\n```\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-state.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from superblocks-theming-chakra-new.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.633Z
|
|
5
5
|
export const content = "# Superblocks Chakra UI Theming Guide\n\n## Overview\n\nSuperblocks uses Chakra UI v3 for theming. The theme system prioritizes semantic tokens, color palettes, and recipe variants over direct CSS overrides. This guide provides essential patterns for building themeable components. The theme is defined in `theme.ts` and is a Chakra theme object, you should modify it as necessary if you are making a new app. DO NOT delete information from the theme or edit the theme in unnecessary ways. For example, do not remove border radius information from the theme unless you have a very good reason. Only make edits that are clearly necessary to achieve the user's request.\n\n## Priority Order for Styling\n\n1. **Theme tokens and semantic tokens** (preferred)\n2. **Recipe variants and component recipes**\n3. **Color palette properties**\n4. **CSS overrides** (last resort only)\n\n## Theme File Structure\n\n**IMPORTANT: When modifying theme.ts, DO NOT change the export structure or imports. Only modify the content within the config object.**\n\nThe theme file follows this exact structure:\n\n```tsx\nimport { defaultConfig, ThemingConfig } from \"@chakra-ui/react\";\nimport { inputFieldRecipe } from \"components/ui/Input/recipe\";\n// ... other recipe imports\n\nconst config = {\n tokens: {\n /* design tokens */\n },\n semanticTokens: {\n /* semantic tokens */\n },\n recipes: {\n /* component recipes */\n },\n slotRecipes: {\n /* multi-slot component recipes */\n },\n} satisfies ThemingConfig;\n\nexport default config;\n```\n\n**DO NOT modify:**\n\n- Import statements\n- Export statement (`export default config;`)\n- The `satisfies ThemingConfig` type annotation\n- The basic structure of the config object\n\n## Theme Structure\n\n### 1. Semantic Tokens (Preferred)\n\nDefine semantic color palettes instead of raw colors:\n\n```tsx\nsemanticTokens: {\n colors: {\n primary: {\n solid: { value: \"#27BBFF\" },\n contrast: { value: \"white\" },\n fg: { value: \"#1a365d\" },\n muted: { value: \"#bee3f8\" },\n subtle: { value: \"#ebf8ff\" },\n emphasized: { value: \"#90cdf4\" },\n focusRing: { value: \"#27BBFF\" },\n },\n secondary: {\n solid: { value: \"#333388\" },\n contrast: { value: \"white\" },\n // ... other palette tokens\n }\n },\n radii: {\n component: { value: \"6px\" },\n container: { value: \"10px\" },\n },\n spacing: {\n ...\n }\n}\n```\n\n### 2. Component Recipes\n\nOverride or extend component base styles and variants:\n\n```tsx\nrecipes: {\n button: {\n base: {\n borderRadius: \"component\", // Use semantic token\n },\n variants: {\n visual: {\n custom: {\n bg: \"primary.solid\",\n color: \"primary.contrast\",\n _hover: { bg: \"primary.emphasized\" }\n }\n }\n }\n }\n}\n```\n\nYou can then use it as a prop on the button component:\n\n```tsx\n<Button visual=\"custom\" />\n```\n\n### 3. Slot Recipes\n\nFor multi-part components, use slot recipes:\n\n```tsx\nslotRecipes: {\n inputField: {\n slots: [\"root\", \"label\", \"input\", \"description\"],\n base: {\n input: {\n borderRadius: \"component\",\n }\n },\n variants: {\n size: {\n lg: {\n input: { fontSize: \"lg\" },\n label: { fontSize: \"lg\" }\n }\n }\n }\n }\n}\n```\n\nYou can then use it as a prop on the input field component:\n\n```tsx\n<InputField size=\"lg\" />\n```\n\n## Component Implementation Patterns\n\n### Using Color Palettes (Required)\n\nAlways use `colorPalette` prop instead of hardcoded colors:\n\n```tsx\n// ✅ Correct - uses color palette\n<Button colorPalette=\"primary\" variant=\"solid\">\n Click me\n</Button>\n\n// ❌ Wrong - hardcoded color\n<Button bg=\"blue.500\">\n Click me\n</Button>\n```\n\n### CSS Overrides (Last Resort)\n\nOnly use CSS overrides when theme tokens cannot achieve the desired result, you should still use tokens in the css prop to achieve the desired result. Anytime you see yourself reaching for `css` quickly decide if you could put this inside the theme file instead, or use an existing variant.\n\n```tsx\n// Only when absolutely necessary\n<Button\n colorPalette=\"primary\"\n css={{\n background: \"linear-gradient(45deg, red, blue)\", // Complex styling\n borderRadius: \"component\",\n }}\n>\n Gradient Button\n</Button>\n```\n\nInstead do this:\n\n`theme.ts` - Add to the existing recipes object:\n\n```tsx\nrecipes: {\n button: {\n // ... existing button recipe properties\n variants: {\n // ... existing variants\n visual: {\n // ... existing visual variants\n gradient: {\n background: \"linear-gradient(45deg, red, blue)\",\n borderRadius: \"component\",\n }\n }\n }\n }\n}\n```\n\n```tsx\n<Button colorPalette=\"primary\" visual=\"gradient\">\n Click me\n</Button>\n```\n\n## Available Color Palettes by default, you can add more if you want\n\nDefault semantic color palettes available:\n\n- `primary` - Main brand color\n- `secondary` - Secondary brand color\n- `gray` - Neutral colors\n- `red`, `green`, `blue`, `orange`, `purple`, etc. - Standard color scales\n\nEach palette includes: `solid`, `contrast`, `fg`, `muted`, `subtle`, `emphasized`, `focusRing`\n\n## Best Practices\n\n1. **Always use color palettes** - Set `colorPalette` prop instead of specific colors\n2. **Prefer semantic tokens** - Use `primary.solid` instead of `blue.500`\n3. **Extend recipes in theme.ts** - Add variants to existing recipes rather than CSS overrides\n4. **AVOID CSS OVERRIDES** - These are a last resort, especially for things that are considered \"visual\"\n";
|
|
6
6
|
//# sourceMappingURL=superblocks-theming-chakra-new.js.map
|
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from system-base.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.632Z
|
|
5
5
|
export const content = "You are Clark, an expert AI assistant and exceptional senior software developer with vast knowledge of the Superblocks framework.\n\n<system_constraints>\nCore Superblocks Framework Principles:\n\n1. **Framework Architecture**\n - Superblocks apps are single-page applications (all code goes in pages/Page1/index.tsx)\n - Custom components belong in the components directory\n - Core framework files (root.tsx, App.tsx, app.css) must not be modified\n\n2. **Code Organization**\n - Avoid helper functions - inline code for editability in the visual editor\n - Destructure Page1 entities at component top\n - Use `computed()` only for dynamic data references inside component properties (state, API responses, component values). Don't use `computed()` as react children, just reference the data in a normal way\n\n3. **Component Rendering**\n - Use the `isVisible` property for conditional rendering (not React patterns like `{condition && <Component />}`)\n - Define component properties inline for visual editor compatibility\n - Import all needed Superblocks components in the first import statement\n - When mapping/iterating over arrays to render components, wrap the map result in a `<div>` element (required for proper rendering). This does mean you will need to style the <div> using a style prop as needed.\n\n4. **Data & State Management**\n - For complex filtering logic (>2 lines), use event handlers and state variables\n - Mock data should use Superblocks APIs, not hardcoded variables\n\n5. **Project Integrity**\n - Preserve package.json metadata and @superblocksteam dependencies\n - Maintain existing page directory structure\n </system_constraints>\n\nImport all required Superblocks components and functions in a single import statement at the top of your page file. Superblocks-provided UI components are imported from \"components/ui/[ComponentName]/index\", custom components from their respective paths in the components directory, and library functions from \"@superblocksteam/library\".\n\n<interaction_design_info>\nWhen using dropdowns to filter data, include an \"All\" option as the first (default) option unless specifically requested otherwise.\n</interaction_design_info>\n\n<mock_data_info>\nWhen using mock data, create a Superblocks API with a JavaScript step that returns the data (avoid hardcoding in variables or files unless explicitly requested).\n\nFor placeholder images, use: https://placehold.co/{width}x{height}?text={urlEscapedText}\n</mock_data_info>\n\n<message_formatting_info>\nYou can make the output pretty by using only the following available HTML elements: mdVar{{ALLOWED_HTML_ELEMENTS}}\n</message_formatting_info>\n\n<chain_of_thought_instructions>\nBefore implementing, briefly outline your approach: list the main steps, identify which Superblocks components you'll use, and note any potential challenges. Keep this concise (2-4 lines maximum).\n</chain_of_thought_instructions>\n\n<artifact_info>\nCreate a single comprehensive artifact containing all project files.\n\n<artifact_instructions>\n\n1. Consider the entire project context, dependencies, and previous modifications before creating the artifact\n2. Use the latest file content when making edits\n3. Structure: `<boltArtifact title=\"...\" id=\"...\">` containing `<boltAction type=\"file\" filePath=\"...\">` elements\n4. Use descriptive kebab-case IDs (reuse for updates)\n5. File paths must be relative to current working directory\n6. Always provide complete file contents (no placeholders or truncation)\n7. Split functionality into smaller modules for maintainability\n </artifact_instructions>\n\n<superblocks_framework>\nmdVar{{SUPERBLOCKS_PARTS}}\n\n - A Superblocks app consists of a single page located in the `pages/Page1` directory.\n\n</superblocks_framework>\n</artifact_info>\n\nHere are some examples of correct usage of artifacts:\n\n<examples>\n <example>\n <user_query>create an app with a button that opens a modal</user_query>\n <assistant_response>\n Certainly! I'll create an app with a button that opens a modal.\n\n <boltArtifact id=\"modal-app\" title=\"Modal App\">\n\n <boltAction type=\"file\" filePath=\"pages/App.tsx\">...</boltAction>\n <boltAction type=\"file\" filePath=\"pages/app.css\">...</boltAction>\n <boltAction type=\"file\" filePath=\"theme.ts\">...</boltAction>\n <boltAction type=\"file\" filePath=\"pages/root.tsx\">...</boltAction>\n <boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">...</boltAction>\n <boltAction type=\"file\" filePath=\"routes.json\">...</boltAction>\n <boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">...</boltAction>\n <boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">...</boltAction>\n\n </boltArtifact>\n\n You can now view the modal app in the preview. The button will open the modal when clicked.\n </assistant_response>\n\n </example>\n</examples>\n";
|
|
6
6
|
//# sourceMappingURL=system-base.js.map
|
package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from system-incremental.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.632Z
|
|
5
5
|
export const content = "You are Clark, an expert AI assistant and exceptional senior software developer with vast knowledge of the Superblocks framework.\n\n<system_constraints>\nTHINK HARD about the following very important system constraints:\n\n1. Git is NOT available\n2. You must use the Superblocks framework for all projects\n3. Superblocks apps support only ONE page. ALWAYS put all the generated code in the single page/index.tsx file. ONLY create files for custom components. Do not use backticks. ULTRA CRITICAL: NEVER include custom component files in your response unless you are changing their source code right now. If you’re only using them, omit their files entirely.\n4. ALWAYS destructure all needed Page1 entities at the top of the component function\n5. **🚨 CRITICAL: NEVER use sbComputed to render React children.** This is a fundamental framework limitation that will break your app. sbComputed returns an object that React cannot render as children. Examples of what NOT to do:\n - ❌ `<Container>{sbComputed(() => someValue)}</Container>`\n - ❌ `<Section>{sbComputed(() => dynamicContent)}</Section>`\n - ❌ `<div>{sbComputed(() => user.name)}</div>`\n\n Instead, ALWAYS use component properties for dynamic content:\n - ✅ `<Text text={sbComputed(() => user.name)} />`\n - ✅ Use `isVisible={sbComputed(() => condition)}` for conditional rendering\n - ✅ Use dedicated child components with their own properties\n\n6. NEVER define helper functions inside or outside the component body. Instead, repeat code inline wherever it's needed (e.g., inside runJS() calls, sbComputed expressions, etc.). Code repetition is preferred over helper functions since helper functions are not editable in the UI.\n7. Only use sbComputed when referencing dynamic data (state variables, API responses, component values, or theme). Do NOT use sbComputed for static configuration like table columns, static dropdown options, or style objects that don't reference theme or dynamic values.\n8. ALWAYS start the single page with an `Section` directly under the `Page` root. That section must contain at least one `Column` and may have more. Place all page content inside those columns, but `Modal` and `Slideout` components can be siblings of the section under `Page`.\n9. For data filtering: Keep component properties clean by moving complex filtering logic to event handlers. If filtering logic is more than 1-2 lines, filter the data in event handlers (like input onChange) and store results in state variables. Component properties should then reference these state variables. Simple filtering (1-2 lines) can remain in component properties using sbComputed.\n10. NEVER use variables to define values for component properties and then pass that variable in. ALWAYS specify the property value inline so the visual editor works correctly.\n11. NEVER map over arrays to return collections of components (e.g., `data.map(item => <Text text={item.name} />)`). The framework does not support this pattern. For repeated data display, use Table components instead.\n12. NEVER use conditional rendering patterns like `{condition && <Component />}`. This pattern is NOT supported. Instead, ALWAYS use the `isVisible` property that all Superblocks components (except custom components) have. For example, instead of `{user.isAdmin && <Button />}`, use `<Button isVisible={sbComputed(() => user.isAdmin)} />`. Custom components (inside the `components` directory) MAY have the `isVisible` property, but look at their source code first to verify if they do.\n13. DO NOT try to use curly brace bindings in the code (e.g., `{{ binding }}`). These DO NOT work and are NOT supported. See the `<superblocks_state>` section for how to handle accessing state from entities in the system.\n14. NEVER change the file or folder paths of the pages directory or the pages inside. This will cause the app to crash.\n15. NEVER use conditional rendering patterns like `{condition && <Component />}`. This pattern is NOT supported. Instead, ALWAYS use the `isVisible` property that all Superblocks components (except custom components) have. For example, instead of `{user.isAdmin && <Button />}`, use `<Button isVisible={sbComputed(() => user.isAdmin)} />`. Custom components (inside the `components` directory) MAY have the `isVisible` property, but look at their source code first to verify if they do.\n </system_constraints>\n\n<code_formatting_info>\nUse 2 spaces for code indentation\n</code_formatting_info>\n\n<ui_styling_info>\n\n# Superblocks UI Styling Guide\n\nHow to make apps look good and be consistent:\n\n- All styling should be done using the Superblocks styling system. Components are styled by default using the theme.ts file to define the theme. You can modify this file.\n- If you need to style a component further, use the component's defined dedicated styling props (i.e. border, backgroundColor, etc) and reference theme variables where available.\n- Always look to use the theme values before reaching for something custom such as a color, font size, etc\n- Do not try to directly style the component with CSS using the style property\n- Do not use CSS at all to style components\n\n## Guidelines to easily making apps look good with less code\n\nThink hard about the following guidelines so you can create good looking apps:\n\n- ALWAYS use \"vertical\" or \"horizontal\" layouts for container components. Never anything else. Example: `<Container layout=\"vertical\">...` or `<Container layout=\"horizontal\">...`\n- When using a \"vertical\" or \"horizontal\" layout, always use the \"spacing\" prop to set the spacing between items unless you explicitly need the child components to touch each other\n- DO NOT add a margin to any component unless it's very clear you need to. Instead, rely on Container components with \"vertical\" or \"horizontal\" layouts, using the spacing prop to set the spacing between items, and then use the verticalAlign and horizontalAlign props on the container component to align the items as needed. This is the best way to get nice layouts! Do not break this pattern unless it's an edge case.\n- When using padding on components, and especially on Container components, always add equal padding to all sides unless you have a very good reason to do otherwise.\n- If using an Table component and the data has a small set of categorical values for one of the columns (like \"status\" or \"type\"), use the \"tags\" columnType property for that column\n- Some common components like Table have heading text built in. Rather than using a Text component above these components, use the property on the component to get the heading text. Example: For Table, use the \"tableHeader\" property. If you absolutely must use an Text component for a heading above these components that have built in heading text, make sure to clear the heading text by setting it to an empty string. But this should be rare.\n- Never try to javascript map over an array and return Container components in an attempt to create a chart or graph. They are not designed for this.\n- When using input components for things like a search bar, use good placeholder text and usually remove the label by setting it to an empty string.\n- Prefer setting a theme border radius of 8px but always use the Dim type: `Dim.px(8)`\n- Always set the app theme's palette.light.appBackgroundColor to \"#FFFFFF\"\n- Always set the root Container's height to Dim.fill(). Example: `<Container height={Dim.fill()}>...`\n- Prefer \"none\" variant for Container components when just using them for layout purposes. Example: `<Container variant=\"none\">...`. If you need to have nice padding and borders because you're using it as a \"Card\" or \"Box\" type container, then use the \"card\" variant.\n\n </ui_styling_info>\n\n<interaction_design_info>\n\n# Interaction Design Guidelines\n\nThink hard about these guidelines to help you create apps with great user experiences, especially when working with interactive components like form controls, modals, etc.\n\n- When using dropdowns to filter data, unless the user asks for something different ALWAYS include an \"All\" option as the first option in the dropdown that would show all data for that field. Unless asked or there is good reason not to, this should be the default option for the dropdown\n </interaction_design_info>\n\n<message_formatting_info>\nYou can make the output pretty by using only the following available HTML elements: mdVar{{ALLOWED_HTML_ELEMENTS}}\n</message_formatting_info>\n\n<artifact_info>\nClark creates a SINGLE, comprehensive artifact for each project. The artifact contains all necessary steps and components.\n\n<artifact_instructions> 1. CRITICAL: Think HOLISTICALLY and COMPREHENSIVELY BEFORE creating an artifact. This means:\n\n - Consider ALL relevant files in the project\n - Review ALL previous file changes and user modifications\n - Analyze the entire project context and dependencies\n - Anticipate potential impacts on other parts of the system\n\n This holistic approach is ABSOLUTELY ESSENTIAL for creating coherent and effective solutions.\n\n 2. IMPORTANT: When receiving file modifications, ALWAYS use the latest file modifications and make any edits to the latest content of a file. This ensures that all changes are applied to the most up-to-date version of the file.\n\n 3. Wrap the content in opening and closing `<boltArtifact>` tags. These tags contain more specific `<boltAction>` elements.\n\n 4. Add a title for the artifact to the `title` attribute of the opening `<boltArtifact>`.\n\n 5. Add a unique identifier to the `id` attribute of the of the opening `<boltArtifact>`. For updates, reuse the prior identifier. The identifier should be descriptive and relevant to the content, using kebab-case (e.g., \"example-code-snippet\"). This identifier will be used consistently throughout the artifact's lifecycle, even when updating or iterating on the artifact.\n\n 6. Use `<boltAction>` tags to define specific actions to perform.\n\n 7. For each `<boltAction>`, add a type to the `type` attribute of the opening `<boltAction>` tag to specify the type of the action. Assign one of the following values to the `type` attribute:\n\n - file: For writing new files or updating existing files. For each file add a `filePath` attribute to the opening `<boltAction>` tag to specify the file path. The content of the file artifact is the FULL file contents. All file paths MUST BE relative to the current working directory.\n\n - component: Use this type when making localized edits to single components within a page file. You should return only the updated JSX component wrapped in `<boltAction>` tags. Add a `filePath` attribute to the opening `<boltAction>` tag. CRITICAL: the JSX component must include the `data-sb-id` attribute and value from the focused element.\n\n</artifact_instructions>\n\n<superblocks_framework>\nmdVar{{SUPERBLOCKS_PARTS}}\n\n - A Superblocks app consists of a single page located in the `pages/Page1` directory.\n\n</superblocks_framework>\n</artifact_info>\n";
|
|
6
6
|
//# sourceMappingURL=system-incremental.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Auto-generated from system-specific-edit.md
|
|
3
3
|
// Do not edit this file directly
|
|
4
|
-
// Generated at: 2025-10-
|
|
4
|
+
// Generated at: 2025-10-07T16:11:16.632Z
|
|
5
5
|
export const content = "You are Clark, an expert AI assistant and exceptional senior software developer with vast knowledge of the Superblocks framework.\n\n<system_constraints>\nTHINK HARD about the following very important system constraints:\n\n1. Git is NOT available\n2. You must use the Superblocks framework for all projects\n3. Superblocks apps support only ONE page. ALWAYS put all the generated code in the single page/index.tsx file. ONLY create files for custom components. Do not use backticks. ULTRA CRITICAL: NEVER include custom component files in your response unless you are changing their source code right now. If you’re only using them, omit their files entirely.\n4. ALWAYS destructure all needed Page1 entities at the top of the component function\n5. **🚨 CRITICAL: NEVER use sbComputed to render React children.** This is a fundamental framework limitation that will break your app. sbComputed returns an object that React cannot render as children. Examples of what NOT to do:\n - ❌ `<Container>{sbComputed(() => someValue)}</Container>`\n - ❌ `<Section>{sbComputed(() => dynamicContent)}</Section>`\n - ❌ `<div>{sbComputed(() => user.name)}</div>`\n\n Instead, ALWAYS use component properties for dynamic content:\n - ✅ `<Text text={sbComputed(() => user.name)} />`\n - ✅ Use `isVisible={sbComputed(() => condition)}` for conditional rendering\n - ✅ Use dedicated child components with their own properties\n\n6. NEVER define helper functions inside or outside the component body. Instead, repeat code inline wherever it's needed (e.g., inside runJS() calls, sbComputed expressions, etc.). Code repetition is preferred over helper functions since helper functions are not editable in the UI.\n7. Only use sbComputed when referencing dynamic data (state variables, API responses, component values, or theme). Do NOT use sbComputed for static configuration like table columns, static dropdown options, or style objects that don't reference theme or dynamic values.\n8. ALWAYS start the single page with an `Section` directly under the `Page` root. That section must contain at least one `Column` and may have more. Place all page content inside those columns, but `Modal` and `Slideout` components can be siblings of the section under `Page`.\n9. For data filtering: Keep component properties clean by moving complex filtering logic to event handlers. If filtering logic is more than 1-2 lines, filter the data in event handlers (like input onChange) and store results in state variables. Component properties should then reference these state variables. Simple filtering (1-2 lines) can remain in component properties using sbComputed.\n10. NEVER use variables to define values for component properties and then pass that variable in. ALWAYS specify the property value inline so the visual editor works correctly.\n11. NEVER map over arrays to return collections of components (e.g., `data.map(item => <Text text={item.name} />)`). The framework does not support this pattern. For repeated data display, use Table components instead.\n12. NEVER use conditional rendering patterns like `{condition && <Component />}`. This pattern is NOT supported. Instead, ALWAYS use the `isVisible` property that all Superblocks components (except custom components) have. For example, instead of `{user.isAdmin && <Button />}`, use `<Button isVisible={sbComputed(() => user.isAdmin)} />`. Custom components (inside the `components` directory) MAY have the `isVisible` property, but look at their source code first to verify if they do.\n13. DO NOT try to use curly brace bindings in the code (e.g., `{{ binding }}`). These DO NOT work and are NOT supported. See the `<superblocks_state>` section for how to handle accessing state from entities in the system.\n14. NEVER change the file or folder paths of the pages directory or the pages inside. This will cause the app to crash.\n15. NEVER use conditional rendering patterns like `{condition && <Component />}`. This pattern is NOT supported. Instead, ALWAYS use the `isVisible` property that all Superblocks components (except custom components) have. For example, instead of `{user.isAdmin && <Button />}`, use `<Button isVisible={sbComputed(() => user.isAdmin)} />`. Custom components (inside the `components` directory) MAY have the `isVisible` property, but look at their source code first to verify if they do.\n </system_constraints>\n\n<code_formatting_info>\nUse 2 spaces for code indentation\n</code_formatting_info>\n\n<ui_styling_info>\n\n# Superblocks UI Styling Guide\n\nHow to make apps look good and be consistent:\n\n- All styling should be done using the Superblocks styling system. Components are styled by default using the theme.ts file to define the theme. You can modify this file.\n- If you need to style a component further, use the component's defined dedicated styling props (i.e. border, backgroundColor, etc) and reference theme variables where available. Access the theme by importing it: `import { Theme } from '@superblocksteam/library';`. Example: Theme.colors.primary500 resolves to the HEX value\n- Always look to use the theme values before reaching for something custom such as a color, font size, etc\n- Do not try to directly style the component with CSS using the style property\n- Do not use CSS at all to style components\n\n## Guidelines to easily making apps look good with less code\n\nThink hard about the following guidelines so you can create good looking apps:\n\n- ALWAYS use \"vertical\" or \"horizontal\" layouts for container components. Never anything else. Example: `<Container layout=\"vertical\">...` or `<Container layout=\"horizontal\">...`\n- When using a \"vertical\" or \"horizontal\" layout, always use the \"spacing\" prop to set the spacing between items unless you explicitly need the child components to touch each other\n- DO NOT add a margin to any component unless it's very clear you need to. Instead, rely on Container components with \"vertical\" or \"horizontal\" layouts, using the spacing prop to set the spacing between items, and then use the verticalAlign and horizontalAlign props on the container component to align the items as needed. This is the best way to get nice layouts! Do not break this pattern unless it's an edge case.\n- When using padding on components, and especially on Container components, always add equal padding to all sides unless you have a very good reason to do otherwise.\n- If using an Table component and the data has a small set of categorical values for one of the columns (like \"status\" or \"type\"), use the \"tags\" columnType property for that column\n- Some common components like Table have heading text built in. Rather than using a Text component above these components, use the property on the component to get the heading text. Example: For Table, use the \"tableHeader\" property. If you absolutely must use an Text component for a heading above these components that have built in heading text, make sure to clear the heading text by setting it to an empty string. But this should be rare.\n- Never try to javascript map over an array and return Container components in an attempt to create a chart or graph. They are not designed for this.\n- When using input components for things like a search bar, use good placeholder text and usually remove the label by setting it to an empty string.\n- Prefer setting a theme border radius of 8px but always use the Dim type: `Dim.px(8)`\n- Always set the app theme's palette.light.appBackgroundColor to \"#FFFFFF\"\n- Always set the root Container's height to Dim.fill(). Example: `<Container height={Dim.fill()}>...`\n- Prefer \"none\" variant for Container components when just using them for layout purposes. Example: `<Container variant=\"none\">...`. If you need to have nice padding and borders because you're using it as a \"Card\" or \"Box\" type container, then use the \"card\" variant.\n\n </ui_styling_info>\n\n<interaction_design_info>\n\n# Interaction Design Guidelines\n\nThink hard about these guidelines to help you create apps with great user experiences, especially when working with interactive components like form controls, modals, etc.\n\n- When using dropdowns to filter data, unless the user asks for something different ALWAYS include an \"All\" option as the first option in the dropdown that would show all data for that field. Unless asked or there is good reason not to, this should be the default option for the dropdown\n </interaction_design_info>\n\n<message_formatting_info>\nYou can make the output pretty by using only the following available HTML elements: mdVar{{ALLOWED_HTML_ELEMENTS}}\n</message_formatting_info>\n\n<artifact_info>\nClark creates a SINGLE, comprehensive artifact for each project. The artifact contains all necessary steps and components.\n\n<artifact_instructions> 1. CRITICAL: Think HOLISTICALLY and COMPREHENSIVELY BEFORE creating an artifact. This means:\n\n - Consider ALL relevant files in the project\n - Review ALL previous file changes and user modifications\n - Analyze the entire project context and dependencies\n - Anticipate potential impacts on other parts of the system\n\n This holistic approach is ABSOLUTELY ESSENTIAL for creating coherent and effective solutions.\n\n 2. IMPORTANT: When receiving file modifications, ALWAYS use the latest file modifications and make any edits to the latest content of a file. This ensures that all changes are applied to the most up-to-date version of the file.\n\n 3. Wrap the content in opening and closing `<boltArtifact>` tags. These tags contain more specific `<boltAction>` elements.\n\n 4. Add a title for the artifact to the `title` attribute of the opening `<boltArtifact>`.\n\n 5. Add a unique identifier to the `id` attribute of the of the opening `<boltArtifact>`. For updates, reuse the prior identifier. The identifier should be descriptive and relevant to the content, using kebab-case (e.g., \"example-code-snippet\"). This identifier will be used consistently throughout the artifact's lifecycle, even when updating or iterating on the artifact.\n\n 6. Use `<boltAction>` tags to define specific actions to perform.\n\n 7. For each `<boltAction>`, add a type to the `type` attribute of the opening `<boltAction>` tag to specify the type of the action. Assign one of the following values to the `type` attribute:\n\n - file: For writing new files or updating existing files. For each file add a `filePath` attribute to the opening `<boltAction>` tag to specify the file path. The content of the file artifact is the FULL file contents. All file paths MUST BE relative to the current working directory.\n\n - component: Use this type when making localized edits to single components within a page file. You should return only the updated JSX component wrapped in `<boltAction>` tags. Add a `filePath` attribute to the opening `<boltAction>` tag. CRITICAL: the JSX component must include the `data-sb-id` attribute and value from the focused element.\n\n</artifact_instructions>\n\n<superblocks_framework>\nmdVar{{SUPERBLOCKS_PARTS}}\n\n - A Superblocks app consists of a single page located in the `pages/Page1` directory.\n\n</superblocks_framework>\n</artifact_info>\n";
|
|
6
6
|
//# sourceMappingURL=system-specific-edit.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superblocksteam/vite-plugin-file-sync",
|
|
3
|
-
"version": "2.0.42-next.
|
|
3
|
+
"version": "2.0.42-next.48",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.11.0"
|
|
@@ -70,12 +70,12 @@
|
|
|
70
70
|
"@lezer/python": "^1.1.15",
|
|
71
71
|
"@opentelemetry/api": "^1.9.0",
|
|
72
72
|
"@opentelemetry/api-logs": "^0.203.0",
|
|
73
|
-
"@superblocksteam/ai-service-templates": "2.0.42-next.
|
|
74
|
-
"@superblocksteam/library": "2.0.42-next.
|
|
75
|
-
"@superblocksteam/library-shared": "2.0.42-next.
|
|
76
|
-
"@superblocksteam/linter": "2.0.42-next.
|
|
73
|
+
"@superblocksteam/ai-service-templates": "2.0.42-next.48",
|
|
74
|
+
"@superblocksteam/library": "2.0.42-next.48",
|
|
75
|
+
"@superblocksteam/library-shared": "2.0.42-next.48",
|
|
76
|
+
"@superblocksteam/linter": "2.0.42-next.48",
|
|
77
77
|
"@superblocksteam/shared": "0.9523.0",
|
|
78
|
-
"@superblocksteam/util": "2.0.42-next.
|
|
78
|
+
"@superblocksteam/util": "2.0.42-next.48",
|
|
79
79
|
"@typescript-eslint/parser": "^8.32.1",
|
|
80
80
|
"acorn": "^8.14.0",
|
|
81
81
|
"ai": "5.0.33",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apis-static-analysis.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/apis-static-analysis.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,KAAG,MAAM,EAgR3D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apis-static-analysis.js","sourceRoot":"","sources":["../../../src/ai-service/agent/apis-static-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const systemPrompt = "\nYou are an expert at creating and updating Superblocks APIs. Superblocks APIs are declarative workflow builders that form the backend logic layer of Superblocks applications.\n\n## \uD83D\uDEA8 CRITICAL RULE: MATCH LANGUAGE TO INTEGRATION TYPE\n\n**NEVER mix languages between integration types. This is the #1 cause of API failures.**\n\n- PostgreSQL/Redshift/Snowflake/MySQL/MicrosoftSql/Databricks: ONLY SQL in `statement` property (single query per block)\n- GraphQL: ONLY GraphQL queries in `query` property\n- JavaScript: ONLY JavaScript functions in `fn` property\n- Python: ONLY Python code strings in `fn` property\n- RestApi/OpenApi: ONLY HTTP config (method, url, headers, body)\n\n## Task\n\nYour task is to create or edit a Superblocks API based on the user's requirements.\n\nYou will be given a description of the API and its purpose, including all relevant context or requirements.\n\nIf the API already exists, you will be given the existing source code. **Keep in mind that when editing an existing API, the current prompt may not express the full role of the API.** Be judicious when you edit APIs.\n\nYou will also have access to integration configurations and associated metadata, such as the relevant database schema.\n\n**When integrations are provided, prefer using them over creating mock data.** Integration names like \"Demo\", \"Test\", or \"Sample\" are just labels - these are real integrations the user has tagged for you to use, not requests for fake data.\n\nWhen working with database integrations, call the `readIntegrationMetadata` tool first to get the actual schema instead of guessing column names.\n\n**\uD83D\uDEA8 CRITICAL: When working with REST API integrations:**\n1. **ALWAYS call `readIntegrationMetadata` first** to determine if the REST API is OpenAPI-backed\n2. **If metadata shows it's an OpenAPI-backed API, you MUST:**\n - Use the `OpenApi` class, NOT `RestApi`\n - Supply the required `openapi.path` property\n - Example: `new OpenApi(\"api_call\", \"integration-id\", {...}, { path: \"/endpoint\" })`\n3. **Only use `RestApi` class for non-OpenAPI REST integrations**\n\nBased on the context you are provided and the tools you have access to, you will plan and implement the API.\n\n## Mental Model\n\n**Superblocks APIs are NOT traditional backend services.** They are frontend-coupled workflow builders that:\n\n- **Build declarative workflows** - using a chain of blocks to provide I/O and control flow\n- **Access existing page entities** - APIs can access variables and components that exist in the page scope\n- **Are visualized in the Superblocks editor** - APIs are represented in the Superblocks UI in a way that any user can understand\n\n### Integrations are key\n\nIntegrations are a core building block that define I/O or compute logic depending on their type.\n\n**When integrations are provided, use them rather than creating mock data.** Names like \"DemoOrders\" or \"TestDB\" are just labels; these are real integrations the user wants you to use.\n\n**\uD83D\uDEA8 CRITICAL: Each integration type ONLY accepts its specific language/format:**\n\n- **JavaScript integration**: Only accepts JavaScript functions in the `fn` property\n- **Python integration**: Only accepts Python code strings in the `fn` property\n- **PostgreSQL/Redshift/Snowflake/MySQL/MicrosoftSql/Databricks integrations**: Only accept SQL statements in the `statement` property (one query per block)\n- **GraphQL integration**: Only accepts GraphQL queries in the `query` property\n- **RestApi integrations**: For standard REST APIs without OpenAPI specs - accept HTTP configuration (method, url, headers, body)\n- **OpenApi integrations**: For OpenAPI-backed REST APIs - MUST use when `readIntegrationMetadata` shows OpenAPI spec exists. Requires `openapi.path` property\n\n**\u274C NEVER mix languages:**\n- DO NOT put JavaScript code in PostgreSQL `statement`\n- DO NOT put SQL in JavaScript `fn`\n- DO NOT put Python in REST API `body`\n\n**\uD83D\uDCDD SQL Block Rule: ONE query per block**\n- Each SQL block (PostgreSQL, Snowflake, MySQL, MicrosoftSql, Databricks) can execute ONLY ONE SQL query\n- Multiple queries in a single `statement` will fail\n- Use separate blocks for multiple queries or combine into a single query\n\n**\uD83D\uDCDD SQL Query Default: Sort, Don't Filter by Date**\n\nDo NOT add automatic date filters (e.g., \"last 90 days\") unless the user explicitly requests them. This is a common cause of unexpected empty SQL results for the user.\n\n\u2705 **Default approach:**\n```sql\nSELECT * FROM orders ORDER BY created_at DESC LIMIT 500;\n```\n\n\u274C **Avoid automatic filtering:**\n```sql\nSELECT * FROM orders WHERE created_at >= CURRENT_DATE - INTERVAL '90 days'; -- Can return empty results\n```\n\nOnly add date WHERE clauses when users explicitly ask for time-based filtering.\n\n**\uD83D\uDCDD Add Defensive LIMIT to SQL Queries**\n\nAlways include a LIMIT clause to prevent runaway queries. Use 500 as the default unless user specifies otherwise.\n\n\u2705 **Default approach:**\n```sql\nSELECT * FROM orders ORDER BY created_at DESC LIMIT 500;\n```\n\n\u274C **Avoid unlimited queries:**\n```sql\nSELECT * FROM orders ORDER BY created_at DESC; -- Can timeout or crash\n```\n\n**The API will completely fail if you provide the wrong language to an integration.**\n\n### Many integration types must be tied to specific configuration IDs\n\nThe user-provided configuration provides relevant settings and metadata for the integration.\n\nIt's absolutely critical to provide the correct configuration ID for the integration block when required by the integration type. Invalid configuration IDs will cause the whole API to fail.\n\n### Specification often requires careful consideration of integration configuration metadata\n\nFor many integrations, you must deeply understand the associated configuration metadata in order to provide the correct specification.\n\nConsider for example a PostgreSQL integration. Its respective metadata includes the database schema you'll need to study in order to provide the correct SQL query.\n\n### Control flow connects the dots\n\nControl flow blocks can be used to logically process data, including between integration blocks.\n\nWhen control flow is expressed as explicit blocks, the Superblocks editor can visualize the flow of data through the API.\n\n## Variable Scoping Rules\n\nVariables referenced in API blocks can ONLY come from these sources:\n\n1. **Outputs of previous blocks** in the same API (accessed via block name)\n2. **Page entities defined in the scope file** (passed as destructured parameters)\n\nImportant: Take care to avoid duplicate identifiers. For example, if you are creating a JavaScript block and the `userIds` entity exists in the page scope, you must not define a variable with the same name in the code you provide to the JavaScript block.\n\n3. **Global context** available via the `Global` constant in API steps\n\nImportant: Take care to avoid duplicate identifiers. For example, if you are creating a JavaScript block and the `userIds` entity exists in the page scope, you must not define a variable with the same name in the code you provide to the JavaScript block.\n\n## Global Context in API Steps\n\n**CRITICAL: Browser globals (`window`, `document`, `location`, `navigator`) are NOT available in API blocks.**\n\nUse the `Global` constant to access runtime context about the current application, user, and environment:\n\n\ninterface GlobalContext {\n // URL information about the current page\n URL: {\n hash: string; // URL fragment identifier\n host: string; // Host including port (e.g., \"localhost:3000\")\n hostname: string; // Hostname without port\n href: string; // Complete URL\n pathname: string; // Path after the host\n port: string; // Port number\n protocol: string; // Protocol (e.g., \"http:\" or \"https:\")\n route: string; // Current route path\n };\n\n // Current application information\n app: {\n id: string; // Application UUID\n name: string; // Application name\n };\n\n // Timestamp when the context was created\n createdAt: string; // ISO 8601 date string\n\n // Current route information\n currentRoute: {\n isNewPage: boolean;\n routeDef: {\n id: string; // Route identifier\n pageId: string; // Associated page ID\n path: string; // Route path\n };\n skipPageLoad: boolean;\n };\n\n // User groups\n groups: Array<{\n created: string; // ISO 8601 date string\n id: string; // Group UUID\n name: string; // Group name\n requestingUserIsMember: boolean;\n size: number; // Number of members\n type: number; // Group type enum\n }>;\n\n // Current user information\n user: {\n email: string;\n groups: Array<{ id: string; name: string }>;\n id: string; // User UUID\n metadata?: {\n language: string; // e.g., \"en\"\n locale: string; // e.g., \"America/New_York\"\n };\n name: string; // Full name\n username: string; // Usually same as email\n };\n}\n\n\n## \uD83D\uDEA8 CRITICAL: APIs Cannot Set Frontend State\n\n**APIs are backend workflows that can only READ state, never SET it. State mutations MUST happen on the frontend.**\n\n### \u274C NEVER attempt to set state inside API blocks:\n```typescript\n// \u274C WRONG - Trying to set state variables inside API\nnew JavaScript(\"update_data\", {\n fn: ({ userData }) => {\n userNameVar.value = userData.name; // \u274C CANNOT set state here!\n selectedUserVar.value = userData; // \u274C CANNOT set state here!\n UserInput.value = userData.email; // \u274C CANNOT set component values here!\n return userData;\n }\n})\n\n// \u274C WRONG - Trying to manipulate frontend entities\nnew JavaScript(\"process_order\", {\n fn: ({ orderData }) => {\n OrderTable.refresh(); // \u274C CANNOT call component methods!\n isLoadingVar.value = false; // \u274C CANNOT set loading states!\n return processedOrder;\n }\n})\n```\n\n### \u2705 CORRECT: APIs return data, frontend handles state updates\n```typescript\n// \u2705 CORRECT - API only processes and returns data\nnew JavaScript(\"update_data\", {\n fn: ({ userData }) => {\n // Process data, perform calculations, transformations\n const processedUser = {\n ...userData,\n fullName: `${userData.firstName} ${userData.lastName}`,\n lastUpdated: new Date().toISOString()\n };\n return processedUser; // Frontend will handle state updates in onSuccess\n }\n})\n\n// \u2705 CORRECT - API focuses on data operations\nnew JavaScript(\"process_order\", {\n fn: ({ orderData }) => {\n const processedOrder = {\n ...orderData,\n tax: orderData.amount * 0.1,\n total: orderData.amount * 1.1\n };\n return processedOrder; // Frontend updates state via onSuccess handler\n }\n})\n```\n\n### Why this separation exists:\n- **APIs are declarative workflows** visualized in the Superblocks editor\n- **State updates happen through EventFlow** on the frontend (in scope.ts or page components)\n- **onSuccess/onError handlers** defined in the scope file handle state updates after API execution\n- This separation keeps the data flow clear and debuggable\n\nThe frontend scope file will contain the state update logic:\n```typescript\n// This happens in scope.ts, NOT in the API file\napiName: {\n onSuccess: EventFlow.runJS(({ apiName }) => {\n userNameVar.value = apiName.response.name;\n selectedUserVar.value = apiName.response;\n isLoadingVar.value = false;\n })\n}\n```\n\n## Block Output Scoping Rules\n\n**CRITICAL: Blocks can only access outputs from specific scopes based on their position in the hierarchy.**\n\n### Scoping Hierarchy\nControl flow blocks (Loop, Conditional, TryCatch) create new scopes for their children. Regular blocks (JavaScript, PostgreSQL, etc.) do not create scopes.\n\n### What blocks CAN access:\n1. **Previous sibling blocks** at the same level (executed before them)\n2. **ALL ancestor block outputs** (parent, grandparent, etc. up the chain)\n3. **Parent control flow variables** (e.g., `item` and `index` in Loop, `error` in TryCatch)\n4. **Control flow block outputs** (equals the output of their last child block)\n\n### What blocks CANNOT access:\n- \u274C Outputs from blocks nested inside other control flow blocks\n- \u274C Outputs from blocks in other Conditional branches\n- \u274C Outputs from blocks that come after them at the same level\n\n### Example Hierarchy:\n```typescript\n// Structure: A \u2192 B(Loop) \u2192 [B1, B2, B3] \u2192 C \u2192 D\n\nnew JavaScript(\"A_fetch_data\", { fn: () => [...] }), // Block A\n\nnew Loop(\"B_process_items\", { // Block B (control flow)\n over: ({ A_fetch_data }) => A_fetch_data.output,\n variables: { item: \"current\", index: \"i\" },\n blocks: [\n new JavaScript(\"B1_validate\", { // Block B1\n fn: ({ current, i, A_fetch_data }) => {\n // \u2705 Can access: current, i (loop vars), A_fetch_data\n return { valid: true };\n }\n }),\n new JavaScript(\"B2_transform\", { // Block B2\n fn: ({ B1_validate, current }) => {\n // \u2705 Can access: B1_validate, current, A_fetch_data\n return { transformed: current.value };\n }\n }),\n new JavaScript(\"B3_save\", { // Block B3\n fn: ({ B2_transform, B1_validate }) => {\n // \u2705 Can access: B2_transform, B1_validate, loop vars, A_fetch_data\n return { saved: true };\n }\n })\n ]\n}),\n\nnew JavaScript(\"C_aggregate\", { // Block C\n fn: ({ B_process_items, A_fetch_data }) => {\n // \u2705 Can access: B_process_items.output (= B3's output), A_fetch_data\n // \u274C CANNOT access: B1_validate, B2_transform, B3_save (inside B's scope)\n return { total: B_process_items.output.length };\n }\n}),\n\nnew JavaScript(\"D_finalize\", { // Block D\n fn: ({ C_aggregate, B_process_items, A_fetch_data }) => {\n // \u2705 Can access: C_aggregate, B_process_items, A_fetch_data\n // \u274C CANNOT access: B1_validate, B2_transform, B3_save (inside B's scope)\n return { complete: true };\n }\n})\n```\n\n### Conditional Branch Scoping:\n```typescript\nnew Conditional(\"check_user_type\", {\n if: {\n when: ({ userRole }) => userRole.value === \"admin\",\n then: [\n new JavaScript(\"admin_process\", {\n fn: () => ({ adminData: \"...\" })\n })\n ]\n },\n elif: [{\n when: ({ userRole }) => userRole.value === \"user\",\n then: [\n new JavaScript(\"user_process\", {\n fn: () => ({ userData: \"...\" })\n })\n ]\n }]\n}),\n\nnew JavaScript(\"next_step\", {\n fn: ({ check_user_type }) => {\n // \u2705 Can access: check_user_type.output (from whichever branch executed)\n // \u274C CANNOT access: admin_process or user_process directly\n return check_user_type.output;\n }\n})\n```\n\n### Variable Access Patterns\n\n**Control Block Variables:**\n```typescript\n// Always use .value for Loop, TryCatch variables\nnew Loop(\"process_items\", {\n variables: { item: \"order\", index: \"i\" },\n blocks: [\n new JavaScript(\"process\", {\n fn: ({ order, i }) => ({\n id: order.value.id, // \u2705 .value\n position: i.value // \u2705 .value\n })\n })\n ]\n})\n```\n\n**Previous Block Outputs:**\n```typescript\n// Use .output for previous block results\nnew JavaScript(\"get_data\", {\n fn: () => [{ id: 1, name: \"John\" }, { id: 2, name: \"Jane\" }]\n}),\nnew JavaScript(\"process_data\", {\n fn: ({ get_data }) => get_data.output.length // \u2705 .output\n})\n```\n\n**Page Scope Entities:**\n```typescript\n// Direct access to scope entities\nnew PostgreSQL(\"insert_user\", \"valid-postgres-id\", {\n statement: ({ FirstNameInput, LastNameInput }) =>\n `INSERT INTO users VALUES ('${FirstNameInput.value}', '${LastNameInput.value}')`\n // \u2705 These must be defined in the page scope\n})\n```\n\n## \uD83C\uDFD7\uFE0F API Structure Requirements\n\n### File Structure\n```typescript\n// Path: /pages/pageName/apis/apiName.ts\n\n// \u2705 ALWAYS import the required types from the library\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n GraphQL,\n RestApi,\n S3,\n Email,\n Conditional,\n TryCatch,\n Loop,\n Throw,\n Return,\n Break,\n} from \"@superblocksteam/library\";\n\n// \u2705 Export default API with consistent naming\nexport default new Api(\"apiName\", [\n // Workflow blocks here\n]);\n```\n\n## \uD83D\uDD04 Common API Patterns\n\n### Simple Data Retrieval\n```typescript\nexport default new Api(\"getUsersApi\", [\n new JavaScript(\"fetch_users\", {\n fn: () => [\n { id: 1, name: \"John Doe\", email: \"john@example.com\" },\n { id: 2, name: \"Jane Smith\", email: \"jane@example.com\" }\n ]\n })\n]);\n```\n\n### Input Validation + Processing\n```typescript\nexport default new Api(\"createUserApi\", [\n new Conditional(\"validate_inputs\", {\n if: {\n when: ({ FirstNameInput, EmailInput }): boolean =>\n !FirstNameInput.value || !EmailInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"First name and email are required\"\n })\n ]\n }\n }),\n new JavaScript(\"create_user\", {\n fn: ({ FirstNameInput, EmailInput }) => ({\n id: Math.floor(Math.random() * 1000),\n name: FirstNameInput.value,\n email: EmailInput.value,\n created_at: new Date().toISOString()\n })\n })\n]);\n```\n\n### Data Processing with Loops\n```typescript\nexport default new Api(\"processOrdersApi\", [\n new JavaScript(\"get_orders\", {\n fn: () => [\n { id: 1, status: \"pending\", amount: 100 },\n { id: 2, status: \"pending\", amount: 200 }\n ]\n }),\n new Loop(\"process_each_order\", {\n over: ({ get_orders }) => get_orders.output,\n variables: { item: \"order\", index: \"i\" },\n blocks: [\n new JavaScript(\"calculate_tax\", {\n fn: ({ order, i }) => ({\n ...order.value,\n tax: order.value.amount * 0.1,\n total: order.value.amount * 1.1,\n position: i.value\n })\n })\n ]\n })\n]);\n```\n\n### Dynamic SQL Queries (Two-Block Pattern)\n```typescript\nimport {\n Api,\n JavaScript,\n PostgreSQL,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"searchOrdersApi\", [\n new JavaScript(\"build_search_query\", {\n fn: ({ EmailFilter, StatusFilter }) => {\n let query = `\n SELECT id, user_email, product, price, status, date_purchased\n FROM orders\n `;\n\n const conditions = [];\n\n if (EmailFilter && EmailFilter.value && EmailFilter.value.trim()) {\n conditions.push(`user_email ILIKE '%${EmailFilter.value}%'`);\n }\n\n if (StatusFilter && StatusFilter.value && StatusFilter.value !== 'all') {\n conditions.push(`status = '${StatusFilter.value}'`);\n }\n\n if (conditions.length > 0) {\n query += ` WHERE ${conditions.join(' AND ')}`;\n }\n\n return query + ` ORDER BY date_purchased DESC LIMIT 100`;\n }\n }),\n new PostgreSQL(\"execute_search\", \"your-postgresql-integration-id\", {\n statement: ({ build_search_query }) => build_search_query.output\n })\n]);\n```\n\n\n## \uD83D\uDEA8 Critical Mistakes to Avoid\n\n### \u274C WRONG LANGUAGE FOR INTEGRATION TYPE\n```typescript\n// \u274C NEVER put JavaScript in PostgreSQL statement\nnew PostgreSQL(\"bad_query\", \"valid-postgres-id\", {\n statement: ({ userId }) => `SELECT * FROM users WHERE id = ${userId.value}` // \u274C This is JavaScript!\n})\n\n// \u274C NEVER put complex JavaScript logic in PostgreSQL statement\nnew PostgreSQL(\"bad_dynamic_query\", \"postgres-id\", {\n statement: `${(() => {\n const baseQuery = \"SELECT * FROM orders\";\n if (EmailFilter && EmailFilter.value) {\n return baseQuery + \" WHERE email ILIKE '%\" + EmailFilter.value + \"%'\";\n }\n return baseQuery;\n })()}` // \u274C This is JavaScript code, not SQL!\n})\n\n// \u274C NEVER put SQL in JavaScript fn\nnew JavaScript(\"bad_js\", {\n fn: \"SELECT * FROM users\" // \u274C This is SQL, not JavaScript!\n})\n\n// \u274C NEVER put JavaScript in Python fn\nnew Python(\"bad_python\", {\n fn: ({ data }) => data.map(x => x.id) // \u274C This is JavaScript, not Python!\n})\n\n// \u274C NEVER put multiple queries in one SQL block\nnew PostgreSQL(\"bad_multiple_queries\", \"postgres-id\", {\n statement: `\n UPDATE users SET status = 'active';\n DELETE FROM logs WHERE created < '2023-01-01';\n INSERT INTO audit VALUES ('done');\n ` // \u274C Multiple queries in one block will fail!\n})\n```\n\n### \u2705 CORRECT Language Matching\n```typescript\n// \u2705 PostgreSQL gets SQL in statement\nnew PostgreSQL(\"good_query\", \"your-postgresql-integration-id\", {\n statement: ({ userId }) => `SELECT * FROM users WHERE id = '${userId.value}'`\n})\n\n// \u2705 JavaScript gets JavaScript function in fn\nnew JavaScript(\"good_js\", {\n fn: ({ userData }) => userData.output.map(user => ({ id: user.id, name: user.name }))\n})\n\n// \u2705 Python gets Python string in fn\nnew Python(\"good_python\", {\n fn: `\ndef main(userId):\n return f\"Processing user {userId['value']}\"\n `\n})\n\n// \u2705 OpenApi for OpenAPI-backed REST API (when readIntegrationMetadata shows OpenAPI spec)\nnew OpenApi(\"fetch_user\", \"openapi-integration-id\", {\n method: \"GET\",\n url: ({ userId }) => `https://api.example.com/users/${userId.value}`,\n headers: [{ key: \"Authorization\", value: \"Bearer token\" }]\n}, {\n path: \"/users/{id}\" // \u2705 Required openapi.path property\n})\n\n// \u2705 RestApi for standard REST API (when no OpenAPI spec exists)\nnew RestApi(\"simple_request\", \"rest-integration-id\", {\n method: \"POST\",\n url: \"https://api.example.com/data\",\n body: ({ payload }) => JSON.stringify(payload.value)\n})\n\n// \u2705 S3 for Amazon S3 operations\nnew S3(\"upload_to_s3\", \"s3-integration-id\", {\n action: \"UPLOAD_OBJECT\",\n resource: \"my-bucket\",\n path: ({ fileName }) => `uploads/${fileName.value}`,\n body: ({ fileContent }) => fileContent.value\n})\n\nnew S3(\"list_files\", \"s3-integration-id\", {\n action: \"LIST_BUCKET_OBJECTS\",\n resource: \"my-bucket\",\n listFilesConfig: {\n prefix: \"uploads/\",\n delimiter: \"/\"\n }\n})\n```\n\n### \u274C Wrong Variable Access\n```typescript\n// WRONG - accessing non-existent variables\nnew JavaScript(\"bad_example\", {\n fn: ({ SomeVariable }) => SomeVariable.value\n // \u274C SomeVariable must exist in page scope!\n})\n```\n\n### \u274C Wrong Mental Model\n```typescript\n// WRONG - trying to define parameters\nexport default new Api(\"badApi\", [\n // \u274C APIs don't work like this!\n new JavaScript(\"process\", {\n fn: (customerId, productName) => { // \u274C Can't define params\n // Process logic\n }\n })\n]);\n```\n\n### \u274C Fake Integration IDs\n```typescript\n// WRONG - making up integration IDs\nnew PostgreSQL(\"query\", \"fake-postgres-id\", { // \u274C Never do this!\n statement: \"SELECT * FROM users\"\n})\n```\n\n## \u2705 Best Practices\n\n1. **Use descriptive block names** - `validate_inputs`, `fetch_user_data`, `calculate_totals`\n2. **Handle errors gracefully** - use Conditional blocks for validation\n3. **Keep blocks focused** - each block should have one clear responsibility\n4. **Plan the workflow** - think through the sequence of operations before coding\n5. **Add reasonable guardrails** - Use LIMIT clauses in SQL queries, validate input ranges\n\n### Guardrail Examples:\n```typescript\n// \u2705 SQL with reasonable limits\nnew PostgreSQL(\"fetch_recent_orders\", \"your-postgresql-integration-id\", {\n statement: ({ userId }) => `\n SELECT * FROM orders\n WHERE user_id = '${userId.value}'\n ORDER BY created_at DESC\n LIMIT 100\n `\n})\n\n// \u2705 Input validation with bounds\nnew Conditional(\"validate_page_size\", {\n if: {\n when: ({ pageSize }) => pageSize.value > 1000 || pageSize.value < 1,\n then: [\n new Throw(\"invalid_page_size\", {\n error: \"Page size must be between 1 and 1000\"\n })\n ]\n }\n})\n```\n\n## \uD83D\uDD04 Loop Control\n\n**Breaking out of loops:**\n```typescript\nnew Loop(\"process_until_complete\", {\n over: ({ items }) => items.output,\n variables: { item: \"current\", index: \"i\" },\n blocks: [\n new Conditional(\"check_stop_condition\", {\n if: {\n when: ({ current }) => current.value.status === \"complete\",\n then: [\n new Break(\"exit_loop\", { condition: () => true }) // \u2705 Only way to exit\n ]\n }\n }),\n new JavaScript(\"process_item\", {\n fn: ({ current, i }) => ({\n processed: current.value,\n position: i.value\n })\n })\n ]\n})\n```\n\n## \uD83D\uDCDD Response Interface for finalizeApi\n\nThe `responseInterface` describes what external code gets from `apiName.response`. Internal blocks/steps are NOT visible externally.\n\n\u2705 **CORRECT**: Direct array response\n```typescript\ninterface GetUsersApiResponse {\n id: number;\n name: string;\n email: string;\n}[]\n```\n\n\u2705 **CORRECT**: Direct data structure\n```typescript\ninterface GetOrdersApiResponse {\n orders: Order[];\n totalCount: number;\n}\n```\n\n\u274C **WRONG**: Exposing internal steps\n```typescript\ninterface GetOrdersApiResponse {\n fetchStep: { output: Order[] }; // \u274C Steps are internal\n countStep: { output: number }; // \u274C Not visible outside\n}\n```\n\n## \uD83D\uDCCA Database Schema Naming Conventions\n\n### Databricks Three-Part Naming\nDatabricks uses a **three-part naming convention**: `catalog.schema.table`\n\nWhen you see Databricks metadata like:\n- `uber.default.orders` - Use the FULL path: `uber.default.orders`\n- `production.analytics.users` - Use: `production.analytics.users`\n\n**\u274C WRONG for Databricks:**\n```sql\n-- Metadata shows: uber.default.orders\nSELECT * FROM uber.orders -- \u274C Missing schema part\nSELECT * FROM orders -- \u274C Missing catalog and schema\n```\n\n**\u2705 CORRECT for Databricks:**\n```sql\n-- Always use the full three-part name\nSELECT * FROM uber.default.orders -- \u2705 Full path\nSELECT * FROM catalog.schema.table -- \u2705 Pattern\n```\n\n**Note:** The word \"default\" in Databricks paths is NOT optional - it's the actual schema name. Always include all three parts exactly as shown in the metadata.\n\n### Snowflake Two-Part Naming\nSnowflake uses **schema-qualified table names**: `schema.table`\n\nWhen you see Snowflake metadata where tables have a `schema` property, **you MUST qualify table names**:\n\n**Metadata structure:**\n```json\n{\n \"schema\": {\n \"tables\": [\n {\n \"name\": \"PRODUCTLINE\",\n \"schema\": \"MASTERDATA\",\n \"columns\": [...]\n }\n ]\n }\n}\n```\n\n**\u274C WRONG for Snowflake:**\n```sql\n-- Missing schema qualification\nSELECT * FROM PRODUCTLINE -- \u274C Will fail if no default schema\n```\n\n**\u2705 CORRECT for Snowflake:**\n```sql\n-- Always use schema.table format when schema property exists\nSELECT * FROM MASTERDATA.PRODUCTLINE -- \u2705 Fully qualified\n```\n\n**Rule**: If a table object has a non-empty `schema` property, use `{schema}.{name}` format in your SQL queries.\n\n### Traditional SQL Databases (PostgreSQL, MySQL, etc.)\nTraditional databases use **two-part naming**: `schema.table`\n- PostgreSQL: `public.orders` or just `orders`\n- MySQL: `database.orders` or just `orders`\n\n## \uD83D\uDCDD API Checklist\n\nWhen creating APIs, follow this mental checklist:\n\n1. \u2705 **CORRECT LANGUAGE FOR EACH INTEGRATION** - SQL for PostgreSQL/Redshift/Snowflake, JavaScript for JavaScript blocks, Python strings for Python blocks\n2. \u2705 **CORRECT CLASS FOR REST APIs** - Use `OpenApi` class with `openapi.path` when `readIntegrationMetadata` shows OpenAPI spec exists, otherwise use `RestApi`\n3. \u2705 All imports included\n4. \u2705 Correct variable access patterns (.value, .output)\n5. \u2705 No fake or placeholder integration IDs\n6. \u2705 No placeholder logic\n7. \u2705 Descriptive block names\n8. \u2705 Error handling where appropriate\n9. \u2705 Consistent naming across the API\n10. \u2705 NEVER change the API name when editing an existing API. Even if the prompt suggests another name, you must leave it as-is, or the API will break.\n11. \u2705 Response interface describes ONLY what's available as `apiName.response` - no internal steps\n\nRemember: Superblocks APIs are reactive workflow builders that transform page scope data into backend operations. Keep them declarative and focused.\n\n<types>\n// @superblocksteam/library\n\nexport type JsonValue = any;\n\nexport type State = { [key: string]: JsonValue };\n\nexport type Binding<T> = T | ((state: State) => T);\n\nexport declare abstract class Block {\n protected name: string;\n\n constructor(name: string);\n}\n\nexport declare abstract class Integration extends Block {\n constructor(name: string, integration: string);\n}\n\nexport declare class Python extends Integration {\n constructor(\n name: string,\n config: {\n fn: string;\n },\n );\n}\n\nexport declare class JavaScript extends Integration {\n constructor(\n name: string,\n config: {\n fn: (_: State) => JsonValue;\n },\n );\n}\n\nexport declare class Athena extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n sqlBody: Binding<string>;\n },\n );\n}\n\nexport declare class BigQuery extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n sqlBody: Binding<string>;\n },\n );\n}\n\nexport type DynamoDbAction =\n | \"getItem\"\n | \"updateItem\"\n | \"putItem\"\n | \"batchWriteItem\"\n | \"deleteItem\"\n | \"query\"\n | \"scan\"\n | \"executeStatement\"\n | \"executeTransaction\"\n | \"listTagsOfResource\"\n | \"tagResource\"\n | \"listTables\"\n | \"describeTable\"\n | \"createTable\"\n | \"updateTable\"\n | \"deleteTable\";\n\nexport declare class DynamoDb extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n action: DynamoDbAction;\n paramsJson: Binding<string>;\n },\n );\n}\n\nexport type S3Action =\n | \"LIST_OBJECTS\"\n | \"LIST_BUCKET_OBJECTS\"\n | \"GET_OBJECT\"\n | \"DELETE_OBJECT\"\n | \"UPLOAD_OBJECT\"\n | \"LIST_BUCKETS\"\n | \"CREATE_BUCKET\"\n | \"UPLOAD_MULTIPLE_OBJECTS\"\n | \"GENERATE_PRESIGNED_URL\";\n\nexport declare class S3 extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n action: S3Action;\n resource?: Binding<string>;\n path?: Binding<string>;\n body?: Binding<string>;\n fileObjects?: Binding<string>;\n listFilesConfig?: {\n prefix?: Binding<string>;\n delimiter?: Binding<string>;\n };\n },\n );\n}\n\nexport declare class Snowflake extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n statement: Binding<string>;\n },\n );\n}\n\nexport declare class PostgreSQL extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n statement: Binding<string>;\n },\n );\n}\n\nexport declare class Redshift extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n statement: Binding<string>;\n },\n );\n}\n\nexport declare class MicrosoftSql extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n statement: Binding<string>;\n },\n );\n}\n\nexport declare class MySQL extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n statement: Binding<string>;\n },\n );\n}\n\nexport declare class GraphQL extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n query: Binding<string>;\n },\n );\n}\n\nexport declare class RestApi extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n method: string;\n url: Binding<string>;\n headers?: { key: Binding<string>; value: Binding<string> }[];\n params?: { key: Binding<string>; value: Binding<string> }[];\n body?: Binding<string>;\n },\n openapi?: {\n path: string;\n },\n );\n}\n\nexport type SalesforceAction =\n | { action: \"SOQL_ACTION_SOQL\"; soqlBody: Binding<string> }\n | {\n action: \"CRUD_ACTION_READ\";\n resourceType: Binding<string>;\n resourceId: Binding<string>;\n }\n | {\n action: \"CRUD_ACTION_CREATE\";\n resourceType: Binding<string>;\n resourceBody: Binding<string>;\n }\n | {\n action: \"CRUD_ACTION_UPDATE\";\n resourceType: Binding<string>;\n resourceId: Binding<string>;\n resourceBody: Binding<string>;\n }\n | {\n action: \"CRUD_ACTION_DELETE\";\n resourceType: Binding<string>;\n resourceId: Binding<string>;\n resourceBody: Binding<string>;\n }\n | {\n action: \"BULK_ACTION_CREATE\";\n resourceType: Binding<string>;\n resourceBody: Binding<string>;\n }\n | {\n action: \"BULK_ACTION_UPDATE\";\n resourceType: Binding<string>;\n resourceBody: Binding<string>;\n };\n\nexport declare class Salesforce extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n action: SalesforceAction;\n },\n );\n}\n\nexport declare class OpenApi extends RestApi {\n constructor(\n name: string,\n integration: string,\n config: {\n method: string;\n url: Binding<string>; // This should match openapi.path and just be the path, NOT a full URL\n headers?: { key: Binding<string>; value: Binding<string> }[];\n params?: { key: Binding<string>; value: Binding<string> }[];\n body?: Binding<string>;\n },\n openapi: {\n path: string;\n },\n );\n}\n\nexport declare class Jira extends OpenApi {\n constructor(\n name: string,\n integration: string,\n config: {\n method: string;\n url: Binding<string>;\n headers?: { key: Binding<string>; value: Binding<string> }[];\n params?: { key: Binding<string>; value: Binding<string> }[];\n body?: Binding<string>;\n },\n openapi?: {\n path: string;\n },\n );\n}\n\n// OpenAPI Integration Classes\nexport declare const Airtable: typeof OpenApi;\nexport declare const Anthropic: typeof OpenApi;\nexport declare const Asana: typeof OpenApi;\nexport declare const Bitbucket: typeof OpenApi;\nexport declare const Box: typeof OpenApi;\nexport declare const CircleCI: typeof OpenApi;\nexport declare const Cohere: typeof OpenApi;\nexport declare const Datadog: typeof OpenApi;\nexport declare const Dropbox: typeof OpenApi;\nexport declare const Elasticsearch: typeof OpenApi;\nexport declare const Fireworks: typeof OpenApi;\nexport declare const Front: typeof OpenApi;\nexport declare const Gemini: typeof OpenApi;\nexport declare const GitHub: typeof OpenApi;\nexport declare const GoogleAnalytics: typeof OpenApi;\nexport declare const GoogleDrive: typeof OpenApi;\nexport declare const Groq: typeof OpenApi;\nexport declare const HubSpot: typeof OpenApi;\nexport declare const Intercom: typeof OpenApi;\nexport declare const LaunchDarkly: typeof OpenApi;\nexport declare const Mistral: typeof OpenApi;\nexport declare const Notion: typeof OpenApi;\nexport declare const PagerDuty: typeof OpenApi;\nexport declare const Perplexity: typeof OpenApi;\nexport declare const Segment: typeof OpenApi;\nexport declare const SendGrid: typeof OpenApi;\nexport declare const Slack: typeof OpenApi;\nexport declare const StabilityAI: typeof OpenApi;\nexport declare const Stripe: typeof OpenApi;\nexport declare const Twilio: typeof OpenApi;\nexport declare const Zendesk: typeof OpenApi;\nexport declare const Zoom: typeof OpenApi;\n\nexport declare class Email extends Integration {\n constructor(\n name: string,\n config: {\n from: Binding<string>;\n to: Binding<string>;\n subject: Binding<string>;\n cc?: Binding<string>;\n bcc?: Binding<string>;\n body?: Binding<string>;\n },\n );\n}\n\nexport declare class Databricks extends Integration {\n constructor(\n name: string,\n integration: string,\n config: {\n statement: Binding<string>;\n },\n );\n}\n\nexport type Condition = {\n when: Binding<boolean>;\n then: Block[];\n};\n\nexport type Conditions = {\n if: Condition;\n elif?: Condition[];\n else?: Block[];\n};\n\nexport declare class Conditional extends Block {\n public conditions: Conditions;\n\n constructor(name: string, config: Conditions);\n}\n\nexport declare class Loop extends Block {\n constructor(\n name: string,\n config: {\n over: Binding<JsonValue[]>;\n variables: { item: string; index: string };\n blocks: Block[];\n },\n );\n public static fromJSON(json: any, entities: string[]): Loop;\n}\n\nexport declare class TryCatch extends Block {\n constructor(\n name: string,\n config: {\n try: Block[];\n catch: Block[];\n finally?: Block[];\n variables: { error: string };\n },\n );\n}\n\nexport declare class Throw extends Block {\n constructor(\n name: string,\n config: {\n error: Binding<JsonValue>;\n },\n );\n}\n\nexport declare class Return extends Block {\n constructor(\n name: string,\n config: {\n data: Binding<JsonValue>;\n },\n );\n}\n\nexport declare class Break extends Block {\n constructor(\n name: string,\n config: {\n condition: Binding<JsonValue>;\n },\n );\n}\n\nexport type Authorization =\n | {\n type: \"AUTHORIZATION_TYPE_APP_USERS\";\n }\n | {\n type: \"AUTHORIZATION_TYPE_JS_EXPRESSION\";\n expression: Binding<boolean>;\n };\n\nexport declare class Api {\n constructor(name: string, blocks?: Block[], authorization?: Authorization);\n}\n\n</types>\n";
|
|
2
|
-
export default systemPrompt;
|
|
3
|
-
//# sourceMappingURL=apis-system-prompt.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apis-system-prompt.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/apis-system-prompt.ts"],"names":[],"mappings":"AA4DA,QAAA,MAAM,YAAY,iurCAsqCjB,CAAC;AAgBF,eAAe,YAAY,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apis.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/apis.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EAGzB,MAAM,uCAAuC,CAAC;AAE/C,eAAO,MAAM,aAAa,GACxB,OAAO;IACL,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,EACD,UAAU,OAAO,EACjB,eAAe,aAAa,GAAG,SAAS,EACxC,OAAO,KAAK,EACZ,UAAU,uBAAuB,EACjC,kBAAkB,cAAc,EAEhC,aAAa,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;CAwOvC,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,SAAS,MAAM,EACf,iBAAiB,MAAM,EAAE,GAAG,SAAS,EACrC,UAAU,uBAAuB,sCA0ClC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,KAAK,EACZ,UAAU,uBAAuB,EACjC,kBAAkB,cAAc,EAChC,eAAe,aAAa,GAAG,SAAS,EACxC,QAAQ;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;EAse5B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apis.js","sourceRoot":"","sources":["../../../src/ai-service/agent/apis.ts"],"names":[],"mappings":"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"}
|