@superblocksteam/vite-plugin-file-sync 2.0.54 → 2.0.56-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +394 -2303
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/examples.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/examples.js +34 -35
- package/dist/ai-service/agent/subagents/apis/examples.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts +2 -8
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js +17 -46
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/prompt-builder.d.ts +0 -1
- package/dist/ai-service/agent/subagents/apis/prompt-builder.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/prompt-builder.js +4 -25
- package/dist/ai-service/agent/subagents/apis/prompt-builder.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/state.js +1 -1
- package/dist/ai-service/agent/subagents/apis/state.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts +1 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.js +134 -173
- package/dist/ai-service/agent/subagents/apis/system-prompt.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/types.d.ts +1 -4
- package/dist/ai-service/agent/subagents/apis/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +14 -31
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.d.ts +1 -6
- package/dist/ai-service/agent/tools/apis/build-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.js +12 -21
- package/dist/ai-service/agent/tools/apis/build-api.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/finalize-api.d.ts +2 -6
- package/dist/ai-service/agent/tools/apis/finalize-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/finalize-api.js +29 -20
- package/dist/ai-service/agent/tools/apis/finalize-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.js +4 -9
- package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-install-packages.d.ts +7 -1
- package/dist/ai-service/agent/tools/build-install-packages.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-install-packages.js +43 -8
- package/dist/ai-service/agent/tools/build-install-packages.js.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.js +7 -9
- package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-read-files.d.ts +2 -0
- package/dist/ai-service/agent/tools/build-read-files.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-read-files.js +18 -18
- package/dist/ai-service/agent/tools/build-read-files.js.map +1 -1
- package/dist/ai-service/agent/tools/build-rename-file.d.ts +11 -0
- package/dist/ai-service/agent/tools/build-rename-file.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-rename-file.js +103 -0
- package/dist/ai-service/agent/tools/build-rename-file.js.map +1 -0
- package/dist/ai-service/agent/tools/build-validate-icons.d.ts +0 -1
- package/dist/ai-service/agent/tools/build-validate-icons.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-validate-icons.js +0 -6
- package/dist/ai-service/agent/tools/build-validate-icons.js.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.js +5 -6
- package/dist/ai-service/agent/tools/build-write-file.js.map +1 -1
- package/dist/ai-service/agent/tools/index.d.ts +0 -10
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/index.js +0 -10
- package/dist/ai-service/agent/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools/shared-helpers.d.ts +1 -7
- package/dist/ai-service/agent/tools/shared-helpers.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/shared-helpers.js +9 -29
- package/dist/ai-service/agent/tools/shared-helpers.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +5 -11
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +1 -2
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +89 -67
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.d.ts +4 -0
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.js +19 -0
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/glob.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/glob.js +15 -6
- package/dist/ai-service/agent/tools2/tools/glob.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +13 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js +21 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.d.ts +1 -0
- package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.js +1 -0
- package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ls.d.ts +10 -0
- package/dist/ai-service/agent/tools2/tools/ls.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/ls.js +71 -0
- package/dist/ai-service/agent/tools2/tools/ls.js.map +1 -0
- package/dist/ai-service/agent/utils.d.ts +0 -35
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +0 -132
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/file-system-interface.d.ts +1 -1
- package/dist/ai-service/app-interface/file-system-interface.d.ts.map +1 -1
- package/dist/ai-service/app-interface/file-system-interface.js +2 -2
- package/dist/ai-service/app-interface/file-system-interface.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts +5 -0
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +60 -0
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +8 -1
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-chat-settings.d.ts +2 -1
- package/dist/ai-service/clark-provider/clark-chat-settings.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-chat-settings.js +1 -0
- package/dist/ai-service/clark-provider/clark-chat-settings.js.map +1 -1
- package/dist/ai-service/const.d.ts +3 -7
- package/dist/ai-service/const.d.ts.map +1 -1
- package/dist/ai-service/const.js +2 -6
- package/dist/ai-service/const.js.map +1 -1
- package/dist/ai-service/context/app-context.d.ts +2 -1
- package/dist/ai-service/context/app-context.d.ts.map +1 -1
- package/dist/ai-service/context/app-context.js +9 -15
- package/dist/ai-service/context/app-context.js.map +1 -1
- package/dist/ai-service/index.d.ts +4 -4
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +168 -16
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/llm/impl/anthropic.d.ts.map +1 -1
- package/dist/ai-service/llm/impl/anthropic.js +1 -0
- package/dist/ai-service/llm/impl/anthropic.js.map +1 -1
- package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
- package/dist/ai-service/llm/impl/clark.js +1 -0
- package/dist/ai-service/llm/impl/clark.js.map +1 -1
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +1 -0
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/types.d.ts +1 -1
- package/dist/ai-service/llm/types.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/types.d.ts +0 -2
- package/dist/ai-service/prompt-builder-service/types.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/types.js.map +1 -1
- package/dist/ai-service/prompts/explain-code.d.ts +7 -0
- package/dist/ai-service/prompts/explain-code.d.ts.map +1 -0
- package/dist/ai-service/prompts/explain-code.js +23 -0
- package/dist/ai-service/prompts/explain-code.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts +0 -2
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +16 -16
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +39 -4
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +1 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js +0 -7
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js +0 -8
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +0 -15
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +0 -13
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -1
- package/dist/ai-service/types.d.ts +2 -2
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/util/json-stream-parser.d.ts +20 -0
- package/dist/ai-service/util/json-stream-parser.d.ts.map +1 -0
- package/dist/ai-service/util/json-stream-parser.js +139 -0
- package/dist/ai-service/util/json-stream-parser.js.map +1 -0
- package/dist/binding-extraction/extract-identifiers.d.ts +1 -5
- package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -1
- package/dist/binding-extraction/extract-identifiers.js +78 -15
- package/dist/binding-extraction/extract-identifiers.js.map +1 -1
- package/dist/binding-extraction/index.d.ts +1 -1
- package/dist/binding-extraction/index.d.ts.map +1 -1
- package/dist/binding-extraction/index.js +1 -1
- package/dist/binding-extraction/index.js.map +1 -1
- package/dist/binding-extraction/{extract-js-identifiers.d.ts → js-identifiers.d.ts} +2 -1
- package/dist/binding-extraction/js-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/{extract-js-identifiers.js → js-identifiers.js} +81 -1
- package/dist/binding-extraction/js-identifiers.js.map +1 -0
- package/dist/binding-extraction/python-identifiers.d.ts +13 -0
- package/dist/binding-extraction/python-identifiers.d.ts.map +1 -0
- package/dist/binding-extraction/{extract-py-identifiers.js → python-identifiers.js} +155 -1
- package/dist/binding-extraction/python-identifiers.js.map +1 -0
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +9 -15
- package/dist/codegen.js.map +1 -1
- package/dist/components-manager.d.ts +12 -13
- package/dist/components-manager.d.ts.map +1 -1
- package/dist/components-manager.js +78 -139
- package/dist/components-manager.js.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +164 -326
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts +2 -2
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +6 -4
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/file-system-manager.d.ts +7 -33
- package/dist/file-system-manager.d.ts.map +1 -1
- package/dist/file-system-manager.js +185 -594
- package/dist/file-system-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/inject-no-select.d.ts +15 -0
- package/dist/inject-no-select.d.ts.map +1 -0
- package/dist/inject-no-select.js +173 -0
- package/dist/inject-no-select.js.map +1 -0
- package/dist/injected-index.d.ts +0 -1
- package/dist/injected-index.d.ts.map +1 -1
- package/dist/injected-index.js +0 -1
- package/dist/injected-index.js.map +1 -1
- package/dist/lock-service/activity-tracker.d.ts.map +1 -1
- package/dist/lock-service/activity-tracker.js +4 -1
- package/dist/lock-service/activity-tracker.js.map +1 -1
- package/dist/parsing/entity/to-code-entity.d.ts.map +1 -1
- package/dist/parsing/entity/to-code-entity.js +3 -4
- package/dist/parsing/entity/to-code-entity.js.map +1 -1
- package/dist/parsing/entity/to-value-entity.d.ts.map +1 -1
- package/dist/parsing/entity/to-value-entity.js +19 -13
- package/dist/parsing/entity/to-value-entity.js.map +1 -1
- package/dist/parsing/ids.d.ts +0 -1
- package/dist/parsing/ids.d.ts.map +1 -1
- package/dist/parsing/ids.js +3 -4
- package/dist/parsing/ids.js.map +1 -1
- package/dist/parsing/imports.d.ts.map +1 -1
- package/dist/parsing/imports.js +0 -10
- package/dist/parsing/imports.js.map +1 -1
- package/dist/parsing/index.d.ts +0 -1
- package/dist/parsing/index.d.ts.map +1 -1
- package/dist/parsing/index.js +0 -1
- package/dist/parsing/index.js.map +1 -1
- package/dist/parsing/jsx.d.ts.map +1 -1
- package/dist/parsing/jsx.js +50 -22
- package/dist/parsing/jsx.js.map +1 -1
- package/dist/parsing/page.d.ts +0 -1
- package/dist/parsing/page.d.ts.map +1 -1
- package/dist/parsing/page.js +55 -32
- package/dist/parsing/page.js.map +1 -1
- package/dist/parsing/properties.d.ts.map +1 -1
- package/dist/parsing/properties.js +45 -15
- package/dist/parsing/properties.js.map +1 -1
- package/dist/parsing/template/index.js +1 -1
- package/dist/parsing/template/index.js.map +1 -1
- package/dist/parsing/template/to-code-template.d.ts +1 -2
- package/dist/parsing/template/to-code-template.d.ts.map +1 -1
- package/dist/parsing/template/to-code-template.js +2 -3
- package/dist/parsing/template/to-code-template.js.map +1 -1
- package/dist/parsing/type-parsing-registry.d.ts +0 -1
- package/dist/parsing/type-parsing-registry.d.ts.map +1 -1
- package/dist/parsing/type-parsing-registry.js +0 -2
- package/dist/parsing/type-parsing-registry.js.map +1 -1
- package/dist/parsing/util.d.ts.map +1 -1
- package/dist/parsing/util.js +22 -5
- package/dist/parsing/util.js.map +1 -1
- package/dist/plugin-options.d.ts +8 -1
- package/dist/plugin-options.d.ts.map +1 -1
- package/dist/plugin-options.js.map +1 -1
- package/dist/refactor/javascript.js +1 -1
- package/dist/refactor/javascript.js.map +1 -1
- package/dist/rename-manager.d.ts.map +1 -1
- package/dist/rename-manager.js +1 -2
- package/dist/rename-manager.js.map +1 -1
- package/dist/router-parser.d.ts +35 -0
- package/dist/router-parser.d.ts.map +1 -0
- package/dist/router-parser.js +490 -0
- package/dist/router-parser.js.map +1 -0
- package/dist/socket-manager.d.ts +3 -3
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +14 -15
- package/dist/socket-manager.js.map +1 -1
- package/dist/source-tracker.d.ts +9 -77
- package/dist/source-tracker.d.ts.map +1 -1
- package/dist/source-tracker.js +83 -374
- package/dist/source-tracker.js.map +1 -1
- package/dist/util/operation-queue.d.ts +3 -0
- package/dist/util/operation-queue.d.ts.map +1 -1
- package/dist/util/operation-queue.js +5 -0
- package/dist/util/operation-queue.js.map +1 -1
- package/dist/util.d.ts +13 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +49 -28
- package/dist/util.js.map +1 -1
- package/dist/vite-plugin-yaml-types.d.ts +9 -0
- package/dist/vite-plugin-yaml-types.d.ts.map +1 -0
- package/dist/vite-plugin-yaml-types.js +114 -0
- package/dist/vite-plugin-yaml-types.js.map +1 -0
- package/package.json +8 -7
- package/dist/ai-service/agent/tools/build-add-event.d.ts +0 -14
- package/dist/ai-service/agent/tools/build-add-event.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-add-event.js +0 -44
- package/dist/ai-service/agent/tools/build-add-event.js.map +0 -1
- package/dist/ai-service/agent/tools/build-add-state-var.d.ts +0 -16
- package/dist/ai-service/agent/tools/build-add-state-var.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-add-state-var.js +0 -62
- package/dist/ai-service/agent/tools/build-add-state-var.js.map +0 -1
- package/dist/ai-service/agent/tools/build-add-timer.d.ts +0 -16
- package/dist/ai-service/agent/tools/build-add-timer.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-add-timer.js +0 -46
- package/dist/ai-service/agent/tools/build-add-timer.js.map +0 -1
- package/dist/ai-service/agent/tools/build-create-page.d.ts +0 -10
- package/dist/ai-service/agent/tools/build-create-page.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-create-page.js +0 -57
- package/dist/ai-service/agent/tools/build-create-page.js.map +0 -1
- package/dist/ai-service/agent/tools/build-list-available-components.d.ts +0 -9
- package/dist/ai-service/agent/tools/build-list-available-components.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-list-available-components.js +0 -55
- package/dist/ai-service/agent/tools/build-list-available-components.js.map +0 -1
- package/dist/ai-service/agent/tools/build-register-component-name.d.ts +0 -9
- package/dist/ai-service/agent/tools/build-register-component-name.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-register-component-name.js +0 -53
- package/dist/ai-service/agent/tools/build-register-component-name.js.map +0 -1
- package/dist/ai-service/agent/tools/build-rename-page.d.ts +0 -9
- package/dist/ai-service/agent/tools/build-rename-page.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-rename-page.js +0 -50
- package/dist/ai-service/agent/tools/build-rename-page.js.map +0 -1
- package/dist/ai-service/agent/tools/build-set-api-triggers.d.ts +0 -25
- package/dist/ai-service/agent/tools/build-set-api-triggers.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-set-api-triggers.js +0 -266
- package/dist/ai-service/agent/tools/build-set-api-triggers.js.map +0 -1
- package/dist/ai-service/agent/tools/build-update-state-var.d.ts +0 -16
- package/dist/ai-service/agent/tools/build-update-state-var.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-update-state-var.js +0 -67
- package/dist/ai-service/agent/tools/build-update-state-var.js.map +0 -1
- package/dist/ai-service/agent/tools/study-current-app-state.d.ts +0 -20
- package/dist/ai-service/agent/tools/study-current-app-state.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/study-current-app-state.js +0 -20
- package/dist/ai-service/agent/tools/study-current-app-state.js.map +0 -1
- package/dist/binding-extraction/extract-js-identifiers.d.ts.map +0 -1
- package/dist/binding-extraction/extract-js-identifiers.js.map +0 -1
- package/dist/binding-extraction/extract-py-identifiers.d.ts +0 -4
- package/dist/binding-extraction/extract-py-identifiers.d.ts.map +0 -1
- package/dist/binding-extraction/extract-py-identifiers.js.map +0 -1
- package/dist/component-docs-service/index.d.ts +0 -37
- package/dist/component-docs-service/index.d.ts.map +0 -1
- package/dist/component-docs-service/index.js +0 -118
- package/dist/component-docs-service/index.js.map +0 -1
- package/dist/parsing/events/index.d.ts +0 -5
- package/dist/parsing/events/index.d.ts.map +0 -1
- package/dist/parsing/events/index.js +0 -7
- package/dist/parsing/events/index.js.map +0 -1
- package/dist/parsing/events/to-code-events.d.ts +0 -3
- package/dist/parsing/events/to-code-events.d.ts.map +0 -1
- package/dist/parsing/events/to-code-events.js +0 -147
- package/dist/parsing/events/to-code-events.js.map +0 -1
- package/dist/parsing/events/to-value-events.d.ts +0 -10
- package/dist/parsing/events/to-value-events.d.ts.map +0 -1
- package/dist/parsing/events/to-value-events.js +0 -473
- package/dist/parsing/events/to-value-events.js.map +0 -1
- package/dist/parsing/scope.d.ts +0 -103
- package/dist/parsing/scope.d.ts.map +0 -1
- package/dist/parsing/scope.js +0 -902
- package/dist/parsing/scope.js.map +0 -1
- package/dist/routing.d.ts +0 -6
- package/dist/routing.d.ts.map +0 -1
- package/dist/routing.js +0 -169
- package/dist/routing.js.map +0 -1
- package/dist/sb-scope-manager.d.ts +0 -121
- package/dist/sb-scope-manager.d.ts.map +0 -1
- package/dist/sb-scope-manager.js +0 -678
- package/dist/sb-scope-manager.js.map +0 -1
|
@@ -1,64 +1,3 @@
|
|
|
1
|
-
// Schema for the Global context available in API steps
|
|
2
|
-
const globalContextSchema = `
|
|
3
|
-
interface GlobalContext {
|
|
4
|
-
// URL information about the current page
|
|
5
|
-
URL: {
|
|
6
|
-
hash: string; // URL fragment identifier
|
|
7
|
-
host: string; // Host including port (e.g., "localhost:3000")
|
|
8
|
-
hostname: string; // Hostname without port
|
|
9
|
-
href: string; // Complete URL
|
|
10
|
-
pathname: string; // Path after the host
|
|
11
|
-
port: string; // Port number
|
|
12
|
-
protocol: string; // Protocol (e.g., "http:" or "https:")
|
|
13
|
-
route: string; // Current route path
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
// Current application information
|
|
17
|
-
app: {
|
|
18
|
-
id: string; // Application UUID
|
|
19
|
-
name: string; // Application name
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
// Timestamp when the context was created
|
|
23
|
-
createdAt: string; // ISO 8601 date string
|
|
24
|
-
|
|
25
|
-
// Current route information
|
|
26
|
-
currentRoute: {
|
|
27
|
-
isNewPage: boolean;
|
|
28
|
-
routeDef: {
|
|
29
|
-
id: string; // Route identifier
|
|
30
|
-
pageId: string; // Associated page ID
|
|
31
|
-
path: string; // Route path
|
|
32
|
-
};
|
|
33
|
-
skipPageLoad: boolean;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
// User groups
|
|
37
|
-
groups: Array<{
|
|
38
|
-
created: string; // ISO 8601 date string
|
|
39
|
-
id: string; // Group UUID
|
|
40
|
-
name: string; // Group name
|
|
41
|
-
requestingUserIsMember: boolean;
|
|
42
|
-
size: number; // Number of members
|
|
43
|
-
type: number; // Group type enum
|
|
44
|
-
}>;
|
|
45
|
-
|
|
46
|
-
// Current user information
|
|
47
|
-
user: {
|
|
48
|
-
email: string;
|
|
49
|
-
groups: Array<{ id: string; name: string }>;
|
|
50
|
-
id: string; // User UUID
|
|
51
|
-
metadata?: {
|
|
52
|
-
language: string; // e.g., "en"
|
|
53
|
-
locale: string; // e.g., "America/New_York"
|
|
54
|
-
};
|
|
55
|
-
name: string; // Full name
|
|
56
|
-
username: string; // Usually same as email
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
declare const Global: GlobalContext;
|
|
61
|
-
`;
|
|
62
1
|
const systemPrompt = `
|
|
63
2
|
You are an expert at creating and updating Superblocks APIs. Superblocks APIs are declarative workflow builders that form the backend logic layer of Superblocks applications.
|
|
64
3
|
|
|
@@ -108,7 +47,7 @@ When exploring integrations and data sources:
|
|
|
108
47
|
|
|
109
48
|
**📊 PROGRESSIVE EXPLORATION for LARGE INTEGRATIONS (100+ tables/endpoints):**
|
|
110
49
|
|
|
111
|
-
**⚠️ Use this workflow ONLY for exploratory prompts** ("tell me about @databricks", "what data is available").
|
|
50
|
+
**⚠️ Use this workflow ONLY for exploratory prompts** ("tell me about @databricks", "what data is available").
|
|
112
51
|
**When user mentions specific topics** ("weather app", "user orders"), search for those or similar keywords directly instead.
|
|
113
52
|
|
|
114
53
|
When exploring large integrations without any keywords, use a 3-step discovery workflow:
|
|
@@ -122,7 +61,7 @@ When exploring large integrations without any keywords, use a 3-step discovery w
|
|
|
122
61
|
|
|
123
62
|
**Step 2: Explore Specific Area (User-Directed)**
|
|
124
63
|
- **Goal**: Get tables/endpoints within chosen area
|
|
125
|
-
- **Database Pattern**:
|
|
64
|
+
- **Database Pattern**:
|
|
126
65
|
- \`"\\\\.tables\\\\[\\\\d+\\\\]\\\\.name = \\".*\\""\` (get all table names)
|
|
127
66
|
- \`"\\\\.tables\\\\[\\\\d+\\\\]\\\\.name"\` (shorter - just find table name fields)
|
|
128
67
|
- **⚠️ NOT** \`"\\\\.schema\\\\.tables"\` - the field is \`dbSchema\` not \`schema\`!
|
|
@@ -228,23 +167,23 @@ When exploring large integrations without any keywords, use a 3-step discovery w
|
|
|
228
167
|
- **Understanding \`truncated: true\`**:
|
|
229
168
|
- Truncation is **NORMAL and EXPECTED** for large schemas
|
|
230
169
|
- It means: "Here's what I found so far" - you may need more data or can refine the search
|
|
231
|
-
|
|
170
|
+
|
|
232
171
|
**When to paginate:**
|
|
233
172
|
1. **User explicitly wants ALL results**: "Give me ALL tables", "List EVERY endpoint", "Complete list"
|
|
234
173
|
2. **Specific search truncated AND you need more**: User asks "What user tables exist?" → 30 truncated results → Need more
|
|
235
174
|
3. **User requests continuation**: "Show me more", "Continue", "What else?"
|
|
236
|
-
|
|
175
|
+
|
|
237
176
|
**When NOT to paginate:**
|
|
238
177
|
1. **Sample is sufficient**: "What's in this database?" → 7 tables is a good representative sample
|
|
239
178
|
2. **You have enough data**: Don't fetch more just because hasMore: true
|
|
240
179
|
3. **Can refine instead**: Search by topic, schema, or name to get specific results
|
|
241
|
-
|
|
180
|
+
|
|
242
181
|
**REMEMBER**: Pagination is a tool, not a last resort. Use it whenever you need more data to answer the question.
|
|
243
|
-
|
|
182
|
+
|
|
244
183
|
**Two approaches:**
|
|
245
184
|
- **EXPLORATORY**: Return sample, inform user they can see more if needed
|
|
246
185
|
- **EXHAUSTIVE**: Paginate until hasMore: false to get complete data
|
|
247
|
-
|
|
186
|
+
|
|
248
187
|
- ❌ **NEVER**: Panic, give up, or assume data isn't available
|
|
249
188
|
- ❌ **NEVER**: Try to infer from external knowledge - all data is in the metadata
|
|
250
189
|
- **Pagination with \`startIndex\`**:
|
|
@@ -277,6 +216,7 @@ Based on the context you are provided and the tools you have access to, you will
|
|
|
277
216
|
- For REST/OpenAPI/GraphQL responses, treat non-required fields as optional in interfaces. If unsure, mark as optional and document assumptions in finalize summary.
|
|
278
217
|
- Avoid catching and suppressing unexpected errors with TryCatch unless explicitly asked; surface meaningful errors. Use validation (Conditional + Throw) for expected preconditions.
|
|
279
218
|
- When transforming arrays or objects from external sources, default to empty arrays/objects when inputs are absent.
|
|
219
|
+
- Do not shadow user input variables with local variables in your code. User input variables from the frontend are GLOBAL for all API blocks.
|
|
280
220
|
|
|
281
221
|
Examples:
|
|
282
222
|
\`\`\`typescript
|
|
@@ -294,7 +234,7 @@ new JavaScript("normalize_users", {
|
|
|
294
234
|
// Guarded access
|
|
295
235
|
new Conditional("validate_email", {
|
|
296
236
|
if: {
|
|
297
|
-
when: ({ EmailInput }) => !EmailInput
|
|
237
|
+
when: ({ EmailInput }) => !EmailInput,
|
|
298
238
|
then: [new Throw("missing_email", { error: "Email is required" })]
|
|
299
239
|
}
|
|
300
240
|
})
|
|
@@ -305,7 +245,7 @@ new Conditional("validate_email", {
|
|
|
305
245
|
**Superblocks APIs are NOT traditional backend services.** They are frontend-coupled workflow builders that:
|
|
306
246
|
|
|
307
247
|
- **Build declarative workflows** - using a chain of blocks to provide I/O and control flow
|
|
308
|
-
- **
|
|
248
|
+
- **Accessing frontend state** - APIs can access inputs the user provides when they call the API from the frontend
|
|
309
249
|
- **Are visualized in the Superblocks editor** - APIs are represented in the Superblocks UI in a way that any user can understand
|
|
310
250
|
|
|
311
251
|
### Integrations are key
|
|
@@ -390,46 +330,15 @@ When control flow is expressed as explicit blocks, the Superblocks editor can vi
|
|
|
390
330
|
Variables referenced in API blocks can ONLY come from these sources:
|
|
391
331
|
|
|
392
332
|
1. **Outputs of previous blocks** in the same API (accessed via block name)
|
|
393
|
-
2. **
|
|
394
|
-
|
|
395
|
-
Important: 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.
|
|
396
|
-
|
|
397
|
-
3. **Global context** available via the \`Global\` constant in API steps
|
|
398
|
-
|
|
399
|
-
Important: 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.
|
|
333
|
+
2. **Inputs from the user calling the API in their app** (passed as destructured parameters)
|
|
400
334
|
|
|
401
335
|
## Global Context in API Steps
|
|
402
336
|
|
|
403
337
|
**CRITICAL: Browser globals (\`window\`, \`document\`, \`location\`, \`navigator\`) are NOT available in API blocks.**
|
|
404
338
|
|
|
405
|
-
Use the \`Global\` constant to access runtime context about the current application, user, and environment:
|
|
406
|
-
|
|
407
|
-
${globalContextSchema}
|
|
408
|
-
|
|
409
339
|
## 🚨 CRITICAL: APIs Cannot Set Frontend State
|
|
410
340
|
|
|
411
341
|
**APIs are backend workflows that can only READ state, never SET it. State mutations MUST happen on the frontend.**
|
|
412
|
-
|
|
413
|
-
### ❌ NEVER attempt to set state inside API blocks:
|
|
414
|
-
\`\`\`typescript
|
|
415
|
-
// ❌ WRONG - Trying to set state variables inside API
|
|
416
|
-
new JavaScript("update_data", {
|
|
417
|
-
fn: ({ userData }) => {
|
|
418
|
-
userNameVar.value = userData.name; // ❌ CANNOT set state here!
|
|
419
|
-
selectedUserVar.value = userData; // ❌ CANNOT set state here!
|
|
420
|
-
UserInput.value = userData.email; // ❌ CANNOT set component values here!
|
|
421
|
-
return userData;
|
|
422
|
-
}
|
|
423
|
-
})
|
|
424
|
-
|
|
425
|
-
// ❌ WRONG - Trying to manipulate frontend entities
|
|
426
|
-
new JavaScript("process_order", {
|
|
427
|
-
fn: ({ orderData }) => {
|
|
428
|
-
OrderTable.refresh(); // ❌ CANNOT call component methods!
|
|
429
|
-
isLoadingVar.value = false; // ❌ CANNOT set loading states!
|
|
430
|
-
return processedOrder;
|
|
431
|
-
}
|
|
432
|
-
})
|
|
433
342
|
\`\`\`
|
|
434
343
|
|
|
435
344
|
### ✅ CORRECT: APIs return data, frontend handles state updates
|
|
@@ -443,7 +352,7 @@ new JavaScript("update_data", {
|
|
|
443
352
|
fullName: \`\${userData.firstName} \${userData.lastName}\`,
|
|
444
353
|
lastUpdated: new Date().toISOString()
|
|
445
354
|
};
|
|
446
|
-
return processedUser; // Frontend will handle state updates
|
|
355
|
+
return processedUser; // Frontend will handle state updates
|
|
447
356
|
}
|
|
448
357
|
})
|
|
449
358
|
|
|
@@ -455,29 +364,15 @@ new JavaScript("process_order", {
|
|
|
455
364
|
tax: orderData.amount * 0.1,
|
|
456
365
|
total: orderData.amount * 1.1
|
|
457
366
|
};
|
|
458
|
-
return processedOrder; // Frontend updates state
|
|
367
|
+
return processedOrder; // Frontend updates state
|
|
459
368
|
}
|
|
460
369
|
})
|
|
461
370
|
\`\`\`
|
|
462
371
|
|
|
463
372
|
### Why this separation exists:
|
|
464
373
|
- **APIs are declarative workflows** visualized in the Superblocks editor
|
|
465
|
-
- **State updates happen through EventFlow** on the frontend (in scope.ts or page components)
|
|
466
|
-
- **onSuccess/onError handlers** defined in the scope file handle state updates after API execution
|
|
467
374
|
- This separation keeps the data flow clear and debuggable
|
|
468
375
|
|
|
469
|
-
The frontend scope file will contain the state update logic:
|
|
470
|
-
\`\`\`typescript
|
|
471
|
-
// This happens in scope.ts, NOT in the API file
|
|
472
|
-
apiName: {
|
|
473
|
-
onSuccess: EventFlow.runJS(({ apiName }) => {
|
|
474
|
-
userNameVar.value = apiName.response.name;
|
|
475
|
-
selectedUserVar.value = apiName.response;
|
|
476
|
-
isLoadingVar.value = false;
|
|
477
|
-
})
|
|
478
|
-
}
|
|
479
|
-
\`\`\`
|
|
480
|
-
|
|
481
376
|
## Block Output Scoping Rules
|
|
482
377
|
|
|
483
378
|
**CRITICAL: Blocks can only access outputs from specific scopes based on their position in the hierarchy.**
|
|
@@ -548,7 +443,7 @@ new JavaScript("D_finalize", { // Block D
|
|
|
548
443
|
\`\`\`typescript
|
|
549
444
|
new Conditional("check_user_type", {
|
|
550
445
|
if: {
|
|
551
|
-
when: ({ userRole }) => userRole
|
|
446
|
+
when: ({ userRole }) => userRole === "admin",
|
|
552
447
|
then: [
|
|
553
448
|
new JavaScript("admin_process", {
|
|
554
449
|
fn: () => ({ adminData: "..." })
|
|
@@ -556,7 +451,7 @@ new Conditional("check_user_type", {
|
|
|
556
451
|
]
|
|
557
452
|
},
|
|
558
453
|
elif: [{
|
|
559
|
-
when: ({ userRole }) => userRole
|
|
454
|
+
when: ({ userRole }) => userRole === "user",
|
|
560
455
|
then: [
|
|
561
456
|
new JavaScript("user_process", {
|
|
562
457
|
fn: () => ({ userData: "..." })
|
|
@@ -603,13 +498,13 @@ new JavaScript("process_data", {
|
|
|
603
498
|
})
|
|
604
499
|
\`\`\`
|
|
605
500
|
|
|
606
|
-
**
|
|
501
|
+
**Inputs:**
|
|
607
502
|
\`\`\`typescript
|
|
608
|
-
// Direct access
|
|
503
|
+
// Direct access inputs
|
|
609
504
|
new PostgreSQL("insert_user", "valid-postgres-id", {
|
|
610
|
-
statement: ({
|
|
611
|
-
\`INSERT INTO users VALUES ('\${
|
|
612
|
-
// ✅ These
|
|
505
|
+
statement: ({ FirstName, LastName }) =>
|
|
506
|
+
\`INSERT INTO users VALUES ('\${FirstName}', '\${LastName}')\`
|
|
507
|
+
// ✅ These will be provided by the user calling the API in their app
|
|
613
508
|
})
|
|
614
509
|
\`\`\`
|
|
615
510
|
|
|
@@ -617,7 +512,7 @@ new PostgreSQL("insert_user", "valid-postgres-id", {
|
|
|
617
512
|
|
|
618
513
|
### File Structure
|
|
619
514
|
\`\`\`typescript
|
|
620
|
-
// Path: /
|
|
515
|
+
// Path: /apis/apiName.ts
|
|
621
516
|
|
|
622
517
|
// ✅ ALWAYS import the required types from the library
|
|
623
518
|
import {
|
|
@@ -665,7 +560,7 @@ export default new Api("createUserApi", [
|
|
|
665
560
|
new Conditional("validate_inputs", {
|
|
666
561
|
if: {
|
|
667
562
|
when: ({ FirstNameInput, EmailInput }): boolean =>
|
|
668
|
-
!FirstNameInput
|
|
563
|
+
!FirstNameInput || !EmailInput,
|
|
669
564
|
then: [
|
|
670
565
|
new Throw("validation_error", {
|
|
671
566
|
error: "First name and email are required"
|
|
@@ -676,8 +571,8 @@ export default new Api("createUserApi", [
|
|
|
676
571
|
new JavaScript("create_user", {
|
|
677
572
|
fn: ({ FirstNameInput, EmailInput }) => ({
|
|
678
573
|
id: Math.floor(Math.random() * 1000),
|
|
679
|
-
name: FirstNameInput
|
|
680
|
-
email: EmailInput
|
|
574
|
+
name: FirstNameInput,
|
|
575
|
+
email: EmailInput,
|
|
681
576
|
created_at: new Date().toISOString()
|
|
682
577
|
})
|
|
683
578
|
})
|
|
@@ -699,9 +594,9 @@ export default new Api("processOrdersApi", [
|
|
|
699
594
|
blocks: [
|
|
700
595
|
new JavaScript("calculate_tax", {
|
|
701
596
|
fn: ({ order, i }) => ({
|
|
702
|
-
...order
|
|
703
|
-
tax: order.
|
|
704
|
-
total: order.
|
|
597
|
+
...order,
|
|
598
|
+
tax: order.amount * 0.1,
|
|
599
|
+
total: order.amount * 1.1,
|
|
705
600
|
position: i.value
|
|
706
601
|
})
|
|
707
602
|
})
|
|
@@ -710,6 +605,32 @@ export default new Api("processOrdersApi", [
|
|
|
710
605
|
]);
|
|
711
606
|
\`\`\`
|
|
712
607
|
|
|
608
|
+
### File Handling
|
|
609
|
+
**CRITICAL: You must always treat file inputs as an object with a key \`files\` that will be an array of files.**
|
|
610
|
+
|
|
611
|
+
\`\`\`typescript
|
|
612
|
+
export default new Api("processFilesApi", [
|
|
613
|
+
new JavaScript("read_files", {
|
|
614
|
+
fn: async ({ fileInput }) => {
|
|
615
|
+
const fileData = await fileInput.files[0].readContentsAsync()
|
|
616
|
+
return fileData
|
|
617
|
+
}
|
|
618
|
+
})
|
|
619
|
+
]);
|
|
620
|
+
|
|
621
|
+
export default new Api("processFilesApi", [
|
|
622
|
+
new Python("read_files", {
|
|
623
|
+
fn: \`
|
|
624
|
+
def main(fileInput):
|
|
625
|
+
fileData = fileInput.files[0].readContents()
|
|
626
|
+
return fileData
|
|
627
|
+
\`
|
|
628
|
+
})
|
|
629
|
+
]);
|
|
630
|
+
\`\`\`
|
|
631
|
+
|
|
632
|
+
IMPORTANT: In JavaScript, you use readContentsAsync(mode?: "text" | "binary") to read the contents of a file. In Python, you use readContents(mode?: "text" | "binary") to read the contents of a file.
|
|
633
|
+
|
|
713
634
|
### Dynamic SQL Queries (Two-Block Pattern)
|
|
714
635
|
\`\`\`typescript
|
|
715
636
|
import {
|
|
@@ -728,12 +649,12 @@ export default new Api("searchOrdersApi", [
|
|
|
728
649
|
|
|
729
650
|
const conditions = [];
|
|
730
651
|
|
|
731
|
-
if (EmailFilter && EmailFilter.
|
|
732
|
-
conditions.push(\`user_email ILIKE '%\${EmailFilter
|
|
652
|
+
if (EmailFilter && EmailFilter.trim()) {
|
|
653
|
+
conditions.push(\`user_email ILIKE '%\${EmailFilter}%'\`);
|
|
733
654
|
}
|
|
734
655
|
|
|
735
|
-
if (StatusFilter && StatusFilter
|
|
736
|
-
conditions.push(\`status = '\${StatusFilter
|
|
656
|
+
if (StatusFilter && StatusFilter !== 'all') {
|
|
657
|
+
conditions.push(\`status = '\${StatusFilter}'\`);
|
|
737
658
|
}
|
|
738
659
|
|
|
739
660
|
if (conditions.length > 0) {
|
|
@@ -763,7 +684,7 @@ new TryCatch("wrapped_query", {
|
|
|
763
684
|
],
|
|
764
685
|
catch: [
|
|
765
686
|
new JavaScript("handle_error", {
|
|
766
|
-
fn: ({ err }) => ({ error: err
|
|
687
|
+
fn: ({ err }) => ({ error: err })
|
|
767
688
|
})
|
|
768
689
|
],
|
|
769
690
|
variables: { error: "err" }
|
|
@@ -780,15 +701,15 @@ new PostgreSQL("fetch_data", "postgres-id", {
|
|
|
780
701
|
\`\`\`typescript
|
|
781
702
|
// ❌ NEVER put JavaScript in PostgreSQL statement
|
|
782
703
|
new PostgreSQL("bad_query", "valid-postgres-id", {
|
|
783
|
-
statement: ({ userId }) => \`SELECT * FROM users WHERE id = \${userId
|
|
704
|
+
statement: ({ userId }) => \`SELECT * FROM users WHERE id = \${userId}\` // ❌ This is JavaScript!
|
|
784
705
|
})
|
|
785
706
|
|
|
786
707
|
// ❌ NEVER put complex JavaScript logic in PostgreSQL statement
|
|
787
708
|
new PostgreSQL("bad_dynamic_query", "postgres-id", {
|
|
788
709
|
statement: \`\${(() => {
|
|
789
710
|
const baseQuery = "SELECT * FROM orders";
|
|
790
|
-
if (EmailFilter
|
|
791
|
-
return baseQuery + " WHERE email ILIKE '%" + EmailFilter
|
|
711
|
+
if (EmailFilter) {
|
|
712
|
+
return baseQuery + " WHERE email ILIKE '%" + EmailFilter + "%'";
|
|
792
713
|
}
|
|
793
714
|
return baseQuery;
|
|
794
715
|
})()}\` // ❌ This is JavaScript code, not SQL!
|
|
@@ -818,26 +739,26 @@ new PostgreSQL("bad_multiple_queries", "postgres-id", {
|
|
|
818
739
|
\`\`\`typescript
|
|
819
740
|
// ✅ PostgreSQL gets SQL in statement
|
|
820
741
|
new PostgreSQL("good_query", "your-postgresql-integration-id", {
|
|
821
|
-
statement: ({ userId }) => \`SELECT * FROM users WHERE id = '\${userId
|
|
742
|
+
statement: ({ userId }) => \`SELECT * FROM users WHERE id = '\${userId}'\`
|
|
822
743
|
})
|
|
823
744
|
|
|
824
745
|
// ✅ JavaScript gets JavaScript function in fn
|
|
825
746
|
new JavaScript("good_js", {
|
|
826
|
-
fn: ({ userData }) => userData.
|
|
747
|
+
fn: ({ userData }) => userData.map(user => ({ id: user.id, name: user.name }))
|
|
827
748
|
})
|
|
828
749
|
|
|
829
750
|
// ✅ Python gets Python string in fn
|
|
830
751
|
new Python("good_python", {
|
|
831
752
|
fn: \`
|
|
832
753
|
def main(userId):
|
|
833
|
-
return f"Processing user {userId
|
|
754
|
+
return f"Processing user {userId}"
|
|
834
755
|
\`
|
|
835
756
|
})
|
|
836
757
|
|
|
837
758
|
// ✅ OpenApi for OpenAPI-backed REST API (when grepMetadata shows OpenAPI spec)
|
|
838
759
|
new OpenApi("fetch_user", "openapi-integration-id", {
|
|
839
760
|
method: "GET",
|
|
840
|
-
url: ({ userId }) => \`https://api.example.com/users/\${userId
|
|
761
|
+
url: ({ userId }) => \`https://api.example.com/users/\${userId}\`,
|
|
841
762
|
headers: [{ key: "Authorization", value: "Bearer token" }]
|
|
842
763
|
}, {
|
|
843
764
|
path: "/users/{id}" // ✅ Required openapi.path property
|
|
@@ -847,15 +768,15 @@ new OpenApi("fetch_user", "openapi-integration-id", {
|
|
|
847
768
|
new RestApi("simple_request", "rest-integration-id", {
|
|
848
769
|
method: "POST",
|
|
849
770
|
url: "https://api.example.com/data",
|
|
850
|
-
body: ({ payload }) => JSON.stringify(payload
|
|
771
|
+
body: ({ payload }) => JSON.stringify(payload)
|
|
851
772
|
})
|
|
852
773
|
|
|
853
774
|
// ✅ S3 for Amazon S3 operations
|
|
854
775
|
new S3("upload_to_s3", "s3-integration-id", {
|
|
855
776
|
action: "UPLOAD_OBJECT",
|
|
856
777
|
resource: "my-bucket",
|
|
857
|
-
path: ({ fileName }) => \`uploads/\${fileName
|
|
858
|
-
body: ({ fileContent }) => fileContent
|
|
778
|
+
path: ({ fileName }) => \`uploads/\${fileName}\`,
|
|
779
|
+
body: ({ fileContent }) => fileContent
|
|
859
780
|
})
|
|
860
781
|
|
|
861
782
|
new S3("list_files", "s3-integration-id", {
|
|
@@ -868,15 +789,6 @@ new S3("list_files", "s3-integration-id", {
|
|
|
868
789
|
})
|
|
869
790
|
\`\`\`
|
|
870
791
|
|
|
871
|
-
### ❌ Wrong Variable Access
|
|
872
|
-
\`\`\`typescript
|
|
873
|
-
// WRONG - accessing non-existent variables
|
|
874
|
-
new JavaScript("bad_example", {
|
|
875
|
-
fn: ({ SomeVariable }) => SomeVariable.value
|
|
876
|
-
// ❌ SomeVariable must exist in page scope!
|
|
877
|
-
})
|
|
878
|
-
\`\`\`
|
|
879
|
-
|
|
880
792
|
### ❌ Wrong Mental Model
|
|
881
793
|
\`\`\`typescript
|
|
882
794
|
// WRONG - trying to define parameters
|
|
@@ -912,7 +824,7 @@ new PostgreSQL("query", "fake-postgres-id", { // ❌ Never do this!
|
|
|
912
824
|
new PostgreSQL("fetch_recent_orders", "your-postgresql-integration-id", {
|
|
913
825
|
statement: ({ userId }) => \`
|
|
914
826
|
SELECT * FROM orders
|
|
915
|
-
WHERE user_id = '\${userId
|
|
827
|
+
WHERE user_id = '\${userId}'
|
|
916
828
|
ORDER BY created_at DESC
|
|
917
829
|
LIMIT 100
|
|
918
830
|
\`
|
|
@@ -921,7 +833,7 @@ new PostgreSQL("fetch_recent_orders", "your-postgresql-integration-id", {
|
|
|
921
833
|
// ✅ Input validation with bounds
|
|
922
834
|
new Conditional("validate_page_size", {
|
|
923
835
|
if: {
|
|
924
|
-
when: ({ pageSize }) => pageSize
|
|
836
|
+
when: ({ pageSize }) => pageSize > 1000 || pageSize < 1,
|
|
925
837
|
then: [
|
|
926
838
|
new Throw("invalid_page_size", {
|
|
927
839
|
error: "Page size must be between 1 and 1000"
|
|
@@ -1044,7 +956,7 @@ new TryCatch("attempt_notification", {
|
|
|
1044
956
|
try: [
|
|
1045
957
|
new Email("send_notification", {
|
|
1046
958
|
from: "noreply@example.com",
|
|
1047
|
-
to: ({ userEmail }) => userEmail
|
|
959
|
+
to: ({ userEmail }) => userEmail,
|
|
1048
960
|
subject: "Order Confirmed",
|
|
1049
961
|
body: "Your order has been confirmed"
|
|
1050
962
|
})
|
|
@@ -1153,27 +1065,38 @@ If you've attempted to fix an issue more than 3 times without success:
|
|
|
1153
1065
|
|
|
1154
1066
|
\`\`\`typescript
|
|
1155
1067
|
finalizeApi({
|
|
1156
|
-
|
|
1068
|
+
apiName: "fetchUsers",
|
|
1157
1069
|
givingUpDueToFatalError: true,
|
|
1158
1070
|
summary: "Unable to create the API due to integration access issues. The database integration appears to be misconfigured or lacks necessary permissions.",
|
|
1159
|
-
responseInterface: "
|
|
1160
|
-
inputInterface: "{}"
|
|
1071
|
+
responseInterface: "interface FetchUsersResponse { users: User[] }",
|
|
1072
|
+
inputInterface: "interface FetchUsersInput { email: string | undefined, name: string | undefined }"
|
|
1161
1073
|
})
|
|
1162
1074
|
\`\`\`
|
|
1163
1075
|
|
|
1076
|
+
Do not use a canned summary for giving up, always provide a detailed explanation of what you tried and why it failed.
|
|
1077
|
+
|
|
1164
1078
|
## 📝 Response Interface for finalizeApi
|
|
1165
1079
|
|
|
1166
1080
|
The \`responseInterface\` describes what external code gets from \`apiName.response\`. Internal blocks/steps are NOT visible externally.
|
|
1167
1081
|
|
|
1168
|
-
✅ **CORRECT**: Direct array response
|
|
1082
|
+
✅ **CORRECT**: Direct array response must use type
|
|
1169
1083
|
\`\`\`typescript
|
|
1170
|
-
|
|
1084
|
+
type GetUsersApiResponse = {
|
|
1171
1085
|
id: number;
|
|
1172
1086
|
name: string;
|
|
1173
1087
|
email: string;
|
|
1174
1088
|
}[]
|
|
1175
1089
|
\`\`\`
|
|
1176
1090
|
|
|
1091
|
+
✅ **CORRECT**: Object response types must use interfaces
|
|
1092
|
+
\`\`\`typescript
|
|
1093
|
+
interface GetUsersApiResponse {
|
|
1094
|
+
id: number;
|
|
1095
|
+
name: string;
|
|
1096
|
+
email: string;
|
|
1097
|
+
}
|
|
1098
|
+
\`\`\`
|
|
1099
|
+
|
|
1177
1100
|
✅ **CORRECT**: Direct data structure
|
|
1178
1101
|
\`\`\`typescript
|
|
1179
1102
|
interface GetOrdersApiResponse {
|
|
@@ -1237,25 +1160,63 @@ This prevents downstream runtime errors when frontend code accesses these fields
|
|
|
1237
1160
|
### Databricks Three-Part Naming
|
|
1238
1161
|
Databricks uses a **three-part naming convention**: \`catalog.schema.table\`
|
|
1239
1162
|
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1163
|
+
**🚨 CRITICAL: Databricks Metadata Structure**
|
|
1164
|
+
Databricks metadata stores catalog and schema information differently than other databases:
|
|
1165
|
+
|
|
1166
|
+
**Metadata structure:**
|
|
1167
|
+
\`\`\`json
|
|
1168
|
+
{
|
|
1169
|
+
"dbSchema": {
|
|
1170
|
+
"tables": [
|
|
1171
|
+
{
|
|
1172
|
+
"name": "orders",
|
|
1173
|
+
"schema": "uber.default", // ⚠️ This is "catalog.schema" format!
|
|
1174
|
+
"columns": [...]
|
|
1175
|
+
}
|
|
1176
|
+
],
|
|
1177
|
+
"schemas": [
|
|
1178
|
+
{
|
|
1179
|
+
"name": "uber" // ⚠️ This contains CATALOG names, not schema names!
|
|
1180
|
+
}
|
|
1181
|
+
]
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
\`\`\`
|
|
1185
|
+
|
|
1186
|
+
**Key Points:**
|
|
1187
|
+
1. **\`table.schema\` field**: Contains **"catalog.schema"** format (e.g., \`"uber.default"\`)
|
|
1188
|
+
- First part = catalog (e.g., \`"uber"\`)
|
|
1189
|
+
- Second part = schema (e.g., \`"default"\`)
|
|
1190
|
+
2. **\`schemas[]\` array**: Contains **catalog names**, NOT schema names!
|
|
1191
|
+
- If you search for schemas, you'll get catalogs like \`["uber", "production"]\`
|
|
1192
|
+
- To get actual schemas, extract from \`table.schema\` values
|
|
1193
|
+
3. **Full table path**: When you see \`table.schema = "uber.default"\` and \`table.name = "orders"\`:
|
|
1194
|
+
- Catalog = \`"uber"\` (from first part of schema field)
|
|
1195
|
+
- Schema = \`"default"\` (from second part of schema field)
|
|
1196
|
+
- Table = \`"orders"\`
|
|
1197
|
+
- Full path = \`uber.default.orders\`
|
|
1198
|
+
|
|
1199
|
+
**When you see Databricks metadata like:**
|
|
1200
|
+
- \`table.schema = "uber.default"\` and \`table.name = "orders"\` → Use: \`uber.default.orders\`
|
|
1201
|
+
- \`table.schema = "production.analytics"\` and \`table.name = "users"\` → Use: \`production.analytics.users\`
|
|
1243
1202
|
|
|
1244
1203
|
**❌ WRONG for Databricks:**
|
|
1245
1204
|
\`\`\`sql
|
|
1246
|
-
-- Metadata shows: uber.default.orders
|
|
1205
|
+
-- Metadata shows: table.schema = "uber.default", table.name = "orders"
|
|
1247
1206
|
SELECT * FROM uber.orders -- ❌ Missing schema part
|
|
1248
1207
|
SELECT * FROM orders -- ❌ Missing catalog and schema
|
|
1208
|
+
SELECT * FROM default.orders -- ❌ Missing catalog part
|
|
1249
1209
|
\`\`\`
|
|
1250
1210
|
|
|
1251
1211
|
**✅ CORRECT for Databricks:**
|
|
1252
1212
|
\`\`\`sql
|
|
1253
|
-
-- Always use the full three-part name
|
|
1254
|
-
|
|
1213
|
+
-- Always use the full three-part name: catalog.schema.table
|
|
1214
|
+
-- Parse table.schema field: split by "." to get catalog and schema
|
|
1215
|
+
SELECT * FROM uber.default.orders -- ✅ Full path from metadata
|
|
1255
1216
|
SELECT * FROM catalog.schema.table -- ✅ Pattern
|
|
1256
1217
|
\`\`\`
|
|
1257
1218
|
|
|
1258
|
-
**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.
|
|
1219
|
+
**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. When asked about "schemas", remember that \`schemas[]\` contains catalogs, and actual schemas come from parsing \`table.schema\` values.
|
|
1259
1220
|
|
|
1260
1221
|
### Snowflake Two-Part Naming
|
|
1261
1222
|
Snowflake uses **schema-qualified table names**: \`schema.table\`
|
|
@@ -1303,7 +1264,7 @@ When creating APIs, follow this mental checklist:
|
|
|
1303
1264
|
1. ✅ **CORRECT LANGUAGE FOR EACH INTEGRATION** - SQL for PostgreSQL/Redshift/Snowflake, JavaScript for JavaScript blocks, Python strings for Python blocks
|
|
1304
1265
|
2. ✅ **CORRECT CLASS FOR REST APIs** - Use \`OpenApi\` class with \`openapi.path\` when \`grepMetadata\` shows OpenAPI spec exists, otherwise use \`RestApi\`
|
|
1305
1266
|
3. ✅ All imports included
|
|
1306
|
-
4. ✅ Correct variable access patterns (.
|
|
1267
|
+
4. ✅ Correct variable access patterns (.output, and .output.data for GraphQL). All user inputs are passed as parameters to the API and accessed directly.
|
|
1307
1268
|
5. ✅ No fake or placeholder integration IDs
|
|
1308
1269
|
6. ✅ No placeholder logic
|
|
1309
1270
|
7. ✅ Descriptive block names
|
|
@@ -1312,7 +1273,7 @@ When creating APIs, follow this mental checklist:
|
|
|
1312
1273
|
10. ✅ 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.
|
|
1313
1274
|
11. ✅ Response interface describes ONLY what's available as \`apiName.response\` - no internal steps
|
|
1314
1275
|
|
|
1315
|
-
Remember: Superblocks APIs are reactive workflow builders that transform
|
|
1276
|
+
Remember: Superblocks APIs are reactive workflow builders that transform inputs into backend operations. Keep them declarative and focused.
|
|
1316
1277
|
|
|
1317
1278
|
<types>
|
|
1318
1279
|
// @superblocksteam/library
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/apis/system-prompt.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/apis/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwpDpB,CAAC;AAEF,oEAAoE;AACpE,oBAAoB;AACpB,mBAAmB;AACnB,gDAAgD;AAChD,iBAAiB;AACjB,oBAAoB;AACpB,gBAAgB;AAChB,oCAAoC;AACpC,qCAAqC;AACrC,yBAAyB;AACzB,SAAS;AACT,OAAO;AACP,IAAI;AAEJ,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/apis/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/apis/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-message-utils.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/tool-message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EACT,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC;AAGzD,KAAK,YAAY,GAAG;KACjB,CAAC,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,GACzD,UAAU,GACV,KAAK;CACV,CAAC;AAEF,KAAK,aAAa,CAAC,CAAC,SAAS,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-message-utils.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/tool-message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EACT,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC;AAGzD,KAAK,YAAY,GAAG;KACjB,CAAC,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,GACzD,UAAU,GACV,KAAK;CACV,CAAC;AAEF,KAAK,aAAa,CAAC,CAAC,SAAS,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAyGzD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EAC3D,QAAQ,EAAE,CAAC,EACX,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAChC,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC"}
|