@superblocksteam/vite-plugin-file-sync 2.0.34 → 2.0.35-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/apis.d.ts +45 -0
- package/dist/ai-service/agent/apis.d.ts.map +1 -0
- package/dist/ai-service/agent/apis.js +1255 -0
- package/dist/ai-service/agent/apis.js.map +1 -0
- package/dist/ai-service/agent/tool-message-utils.d.ts +30 -0
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -0
- package/dist/ai-service/agent/tool-message-utils.js +261 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -0
- package/dist/ai-service/agent/tools/build-add-event.d.ts +16 -0
- package/dist/ai-service/agent/tools/build-add-event.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-add-event.js +43 -0
- package/dist/ai-service/agent/tools/build-add-event.js.map +1 -0
- package/dist/ai-service/agent/tools/build-add-state-var.d.ts +18 -0
- package/dist/ai-service/agent/tools/build-add-state-var.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-add-state-var.js +61 -0
- package/dist/ai-service/agent/tools/build-add-state-var.js.map +1 -0
- package/dist/ai-service/agent/tools/build-add-timer.d.ts +18 -0
- package/dist/ai-service/agent/tools/build-add-timer.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-add-timer.js +45 -0
- package/dist/ai-service/agent/tools/build-add-timer.js.map +1 -0
- package/dist/ai-service/agent/tools/build-create-page.d.ts +11 -0
- package/dist/ai-service/agent/tools/build-create-page.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-create-page.js +56 -0
- package/dist/ai-service/agent/tools/build-create-page.js.map +1 -0
- package/dist/ai-service/agent/tools/build-debug.d.ts +4 -0
- package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-debug.js +41 -0
- package/dist/ai-service/agent/tools/build-debug.js.map +1 -0
- package/dist/ai-service/agent/tools/build-edit-file.d.ts +28 -0
- package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-edit-file.js +433 -0
- package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -0
- package/dist/ai-service/agent/tools/build-finalize.d.ts +37 -0
- package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-finalize.js +97 -0
- package/dist/ai-service/agent/tools/build-finalize.js.map +1 -0
- package/dist/ai-service/agent/tools/build-install-packages.d.ts +7 -0
- package/dist/ai-service/agent/tools/build-install-packages.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-install-packages.js +20 -0
- package/dist/ai-service/agent/tools/build-install-packages.js.map +1 -0
- package/dist/ai-service/agent/tools/build-list-available-components.d.ts +9 -0
- package/dist/ai-service/agent/tools/build-list-available-components.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-list-available-components.js +44 -0
- package/dist/ai-service/agent/tools/build-list-available-components.js.map +1 -0
- package/dist/ai-service/agent/tools/build-list-files.d.ts +5 -0
- package/dist/ai-service/agent/tools/build-list-files.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-list-files.js +24 -0
- package/dist/ai-service/agent/tools/build-list-files.js.map +1 -0
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +50 -0
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-manage-checklist.js +156 -0
- package/dist/ai-service/agent/tools/build-manage-checklist.js.map +1 -0
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts +18 -0
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-multi-edit-file.js +185 -0
- package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -0
- package/dist/ai-service/agent/tools/build-read-files.d.ts +9 -0
- package/dist/ai-service/agent/tools/build-read-files.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-read-files.js +49 -0
- package/dist/ai-service/agent/tools/build-read-files.js.map +1 -0
- package/dist/ai-service/agent/tools/build-register-component-name.d.ts +11 -0
- package/dist/ai-service/agent/tools/build-register-component-name.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-register-component-name.js +52 -0
- package/dist/ai-service/agent/tools/build-register-component-name.js.map +1 -0
- package/dist/ai-service/agent/tools/build-rename-page.d.ts +10 -0
- package/dist/ai-service/agent/tools/build-rename-page.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-rename-page.js +49 -0
- package/dist/ai-service/agent/tools/build-rename-page.js.map +1 -0
- package/dist/ai-service/agent/tools/build-update-state-var.d.ts +17 -0
- package/dist/ai-service/agent/tools/build-update-state-var.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-update-state-var.js +66 -0
- package/dist/ai-service/agent/tools/build-update-state-var.js.map +1 -0
- package/dist/ai-service/agent/tools/build-validate-icons.d.ts +24 -0
- package/dist/ai-service/agent/tools/build-validate-icons.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-validate-icons.js +96 -0
- package/dist/ai-service/agent/tools/build-validate-icons.js.map +1 -0
- package/dist/ai-service/agent/tools/build-write-file.d.ts +11 -0
- package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-write-file.js +59 -0
- package/dist/ai-service/agent/tools/build-write-file.js.map +1 -0
- package/dist/ai-service/agent/tools/debug-cache.d.ts +39 -0
- package/dist/ai-service/agent/tools/debug-cache.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/debug-cache.js +118 -0
- package/dist/ai-service/agent/tools/debug-cache.js.map +1 -0
- package/dist/ai-service/agent/tools/index.d.ts +20 -0
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/index.js +20 -0
- package/dist/ai-service/agent/tools/index.js.map +1 -0
- package/dist/ai-service/agent/tools/shared-helpers.d.ts +8 -0
- package/dist/ai-service/agent/tools/shared-helpers.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/shared-helpers.js +26 -0
- package/dist/ai-service/agent/tools/shared-helpers.js.map +1 -0
- package/dist/ai-service/agent/tools/study-current-app-state.d.ts +19 -0
- package/dist/ai-service/agent/tools/study-current-app-state.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/study-current-app-state.js +18 -0
- package/dist/ai-service/agent/tools/study-current-app-state.js.map +1 -0
- package/dist/ai-service/agent/tools.d.ts +262 -0
- package/dist/ai-service/agent/tools.d.ts.map +1 -0
- package/dist/ai-service/agent/tools.js +102 -0
- package/dist/ai-service/agent/tools.js.map +1 -0
- package/dist/ai-service/agent/utils.d.ts +34 -0
- package/dist/ai-service/agent/utils.d.ts.map +1 -0
- package/dist/ai-service/agent/utils.js +242 -0
- package/dist/ai-service/agent/utils.js.map +1 -0
- package/dist/ai-service/app-interface/{source-tracker.d.ts → file-system-interface.d.ts} +7 -2
- package/dist/ai-service/app-interface/file-system-interface.d.ts.map +1 -0
- package/dist/ai-service/app-interface/{source-tracker.js → file-system-interface.js} +18 -2
- package/dist/ai-service/app-interface/file-system-interface.js.map +1 -0
- package/dist/ai-service/app-interface/linter.d.ts.map +1 -1
- package/dist/ai-service/app-interface/linter.js +5 -1
- package/dist/ai-service/app-interface/linter.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts +16 -2
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +109 -18
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts +21 -1
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +149 -10
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/chat/extract-history.d.ts +10 -0
- package/dist/ai-service/chat/extract-history.d.ts.map +1 -1
- package/dist/ai-service/chat/extract-history.js +56 -13
- package/dist/ai-service/chat/extract-history.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-error-handler.d.ts +4 -46
- package/dist/ai-service/clark-provider/clark-error-handler.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-error-handler.js +1 -1
- package/dist/ai-service/clark-provider/clark-error-handler.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-language-model.d.ts +6 -5
- package/dist/ai-service/clark-provider/clark-language-model.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-language-model.js +163 -129
- package/dist/ai-service/clark-provider/clark-language-model.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-provider.d.ts +5 -5
- package/dist/ai-service/clark-provider/clark-provider.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-provider.js +4 -0
- package/dist/ai-service/clark-provider/clark-provider.js.map +1 -1
- package/dist/ai-service/const.d.ts +20 -4
- package/dist/ai-service/const.d.ts.map +1 -1
- package/dist/ai-service/const.js +12 -3
- package/dist/ai-service/const.js.map +1 -1
- package/dist/ai-service/context/app-context.d.ts +32 -2
- package/dist/ai-service/context/app-context.d.ts.map +1 -1
- package/dist/ai-service/context/app-context.js +75 -6
- package/dist/ai-service/context/app-context.js.map +1 -1
- package/dist/ai-service/evals/content-matchers/index.d.ts.map +1 -1
- package/dist/ai-service/evals/content-matchers/index.js +4 -1
- package/dist/ai-service/evals/content-matchers/index.js.map +1 -1
- package/dist/ai-service/evals/helpers/index.d.ts +1 -1
- package/dist/ai-service/evals/helpers/index.d.ts.map +1 -1
- package/dist/ai-service/evals/helpers/index.js +15 -3
- package/dist/ai-service/evals/helpers/index.js.map +1 -1
- package/dist/ai-service/evals/llm-provider.d.ts +1 -1
- package/dist/ai-service/evals/llm-provider.d.ts.map +1 -1
- package/dist/ai-service/evals/llm-provider.js +2 -2
- package/dist/ai-service/evals/llm-provider.js.map +1 -1
- package/dist/ai-service/index.d.ts +10 -5
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +143 -216
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/metadata/database.d.ts.map +1 -1
- package/dist/ai-service/integrations/metadata/database.js +7 -29
- package/dist/ai-service/integrations/metadata/database.js.map +1 -1
- package/dist/ai-service/integrations/metadata/graphql-based.d.ts.map +1 -1
- package/dist/ai-service/integrations/metadata/graphql-based.js +6 -29
- package/dist/ai-service/integrations/metadata/graphql-based.js.map +1 -1
- package/dist/ai-service/integrations/metadata/open-api.d.ts.map +1 -1
- package/dist/ai-service/integrations/metadata/open-api.js +7 -31
- package/dist/ai-service/integrations/metadata/open-api.js.map +1 -1
- package/dist/ai-service/llm/impl/anthropic.js +3 -3
- package/dist/ai-service/llm/impl/anthropic.js.map +1 -1
- package/dist/ai-service/llm/impl/clark.js +3 -3
- package/dist/ai-service/llm/impl/clark.js.map +1 -1
- package/dist/ai-service/llm/provider.d.ts +3 -2
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +6 -3
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/types.d.ts +4 -4
- package/dist/ai-service/llm/types.d.ts.map +1 -1
- package/dist/ai-service/llm/utils.d.ts +6 -5
- package/dist/ai-service/llm/utils.d.ts.map +1 -1
- package/dist/ai-service/llm/utils.js +2 -2
- package/dist/ai-service/llm/utils.js.map +1 -1
- package/dist/ai-service/profiler/clark-profiler.d.ts +86 -0
- package/dist/ai-service/profiler/clark-profiler.d.ts.map +1 -0
- package/dist/ai-service/profiler/clark-profiler.js +208 -0
- package/dist/ai-service/profiler/clark-profiler.js.map +1 -0
- package/dist/ai-service/profiler/index.d.ts +4 -0
- package/dist/ai-service/profiler/index.d.ts.map +1 -0
- package/dist/ai-service/profiler/index.js +4 -0
- package/dist/ai-service/profiler/index.js.map +1 -0
- package/dist/ai-service/profiler/perfetto-profiler.d.ts +116 -0
- package/dist/ai-service/profiler/perfetto-profiler.d.ts.map +1 -0
- package/dist/ai-service/profiler/perfetto-profiler.js +240 -0
- package/dist/ai-service/profiler/perfetto-profiler.js.map +1 -0
- package/dist/ai-service/profiler/tool-profiler.d.ts +33 -0
- package/dist/ai-service/profiler/tool-profiler.d.ts.map +1 -0
- package/dist/ai-service/profiler/tool-profiler.js +157 -0
- package/dist/ai-service/profiler/tool-profiler.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/builders/code-generation.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/builders/code-generation.js +37 -9
- package/dist/ai-service/prompt-builder-service/builders/code-generation.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts +13 -0
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js +71 -0
- package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/builders/specific-edits.js +4 -4
- package/dist/ai-service/prompt-builder-service/builders/specific-edits.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js +4 -2
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts +2 -1
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js +40 -31
- package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts +4 -3
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js +12 -8
- package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.d.ts +6 -0
- package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.js +52 -0
- package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.js.map +1 -0
- 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.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js.map +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.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js.map +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.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js.map +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.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js.map +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/library-typedefs/index.d.ts +0 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.js +0 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js.map +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.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js.map +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.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.d.ts +2 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.js +6 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.d.ts +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.js +2 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/types.d.ts +2 -0
- 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/prompt-builder-service/utils/chakra/extract-chakra-tokens.d.ts +18 -0
- package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.d.ts.map +1 -0
- package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.js +340 -0
- package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.js.map +1 -0
- package/dist/ai-service/prompt-builder-service/utils/integrations/to-sdk-prompt.js +2 -308
- package/dist/ai-service/prompt-builder-service/utils/integrations/to-sdk-prompt.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +31 -12
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +2 -0
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +75 -214
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.js +32 -11
- package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.d.ts +1 -1
- package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.js +5 -2
- package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +2 -2
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +333 -329
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/post-processing.js +20 -9
- package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/simple-prompt-builder.d.ts +2 -0
- package/dist/ai-service/state-machine/handlers/simple-prompt-builder.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/simple-prompt-builder.js +2269 -0
- package/dist/ai-service/state-machine/handlers/simple-prompt-builder.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/change-info.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/change-info.js +9 -0
- package/dist/ai-service/state-machine/helpers/change-info.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/classification.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/classification.js +2 -1
- package/dist/ai-service/state-machine/helpers/classification.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/file-read-tracker.d.ts +7 -0
- package/dist/ai-service/state-machine/helpers/file-read-tracker.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/file-read-tracker.js +17 -0
- package/dist/ai-service/state-machine/helpers/file-read-tracker.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/peer.d.ts +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +2 -6
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +11 -6
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/transform/api-builder/shared.d.ts +6 -0
- package/dist/ai-service/transform/api-builder/shared.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/shared.js +19 -8
- package/dist/ai-service/transform/api-builder/shared.js.map +1 -1
- package/dist/ai-service/types.d.ts +5 -3
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/types.js.map +1 -1
- package/dist/ai-service/util/ddog-llmobs.d.ts +20 -0
- package/dist/ai-service/util/ddog-llmobs.d.ts.map +1 -0
- package/dist/ai-service/util/ddog-llmobs.js +197 -0
- package/dist/ai-service/util/ddog-llmobs.js.map +1 -0
- package/dist/ai-service/util/llm-config-utils.d.ts +16 -0
- package/dist/ai-service/util/llm-config-utils.d.ts.map +1 -0
- package/dist/ai-service/util/llm-config-utils.js +45 -0
- package/dist/ai-service/util/llm-config-utils.js.map +1 -0
- package/dist/component-docs-service/index.d.ts +37 -0
- package/dist/component-docs-service/index.d.ts.map +1 -0
- package/dist/component-docs-service/index.js +120 -0
- package/dist/component-docs-service/index.js.map +1 -0
- package/dist/components-manager.d.ts +3 -1
- package/dist/components-manager.d.ts.map +1 -1
- package/dist/components-manager.js +24 -24
- package/dist/components-manager.js.map +1 -1
- package/dist/draft-interface.d.ts +5 -0
- package/dist/draft-interface.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +98 -46
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts +1 -0
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +3 -0
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/file-system-manager.d.ts +11 -2
- package/dist/file-system-manager.d.ts.map +1 -1
- package/dist/file-system-manager.js +98 -42
- package/dist/file-system-manager.js.map +1 -1
- package/dist/injected-index.d.ts +1 -0
- package/dist/injected-index.d.ts.map +1 -1
- package/dist/injected-index.js +8 -3
- package/dist/injected-index.js.map +1 -1
- package/dist/parsing/bindings.d.ts +1 -1
- package/dist/parsing/bindings.d.ts.map +1 -1
- package/dist/parsing/bindings.js +14 -5
- package/dist/parsing/bindings.js.map +1 -1
- package/dist/parsing/entity/to-code-entity.d.ts.map +1 -1
- package/dist/parsing/entity/to-code-entity.js +12 -0
- 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 +4 -1
- package/dist/parsing/entity/to-value-entity.js.map +1 -1
- package/dist/parsing/events/to-code-events.d.ts.map +1 -1
- package/dist/parsing/events/to-code-events.js +1 -11
- package/dist/parsing/events/to-code-events.js.map +1 -1
- package/dist/parsing/events/to-value-events.d.ts +1 -1
- package/dist/parsing/function/index.d.ts +4 -0
- package/dist/parsing/function/index.d.ts.map +1 -0
- package/dist/parsing/function/index.js +7 -0
- package/dist/parsing/function/index.js.map +1 -0
- package/dist/parsing/function/to-code-function.d.ts +2 -0
- package/dist/parsing/function/to-code-function.d.ts.map +1 -0
- package/dist/parsing/function/to-code-function.js +4 -0
- package/dist/parsing/function/to-code-function.js.map +1 -0
- package/dist/parsing/function/to-value-function.d.ts +4 -0
- package/dist/parsing/function/to-value-function.d.ts.map +1 -0
- package/dist/parsing/function/to-value-function.js +33 -0
- package/dist/parsing/function/to-value-function.js.map +1 -0
- package/dist/parsing/ids.js +2 -2
- package/dist/parsing/ids.js.map +1 -1
- package/dist/parsing/imports.d.ts +4 -0
- package/dist/parsing/imports.d.ts.map +1 -1
- package/dist/parsing/imports.js +26 -0
- package/dist/parsing/imports.js.map +1 -1
- package/dist/parsing/jsx-utils.d.ts +1 -0
- package/dist/parsing/jsx-utils.d.ts.map +1 -1
- package/dist/parsing/jsx-utils.js +3 -0
- package/dist/parsing/jsx-utils.js.map +1 -1
- package/dist/parsing/jsx.d.ts +4 -3
- package/dist/parsing/jsx.d.ts.map +1 -1
- package/dist/parsing/jsx.js +63 -23
- package/dist/parsing/jsx.js.map +1 -1
- package/dist/parsing/page.d.ts +2 -2
- package/dist/parsing/page.d.ts.map +1 -1
- package/dist/parsing/page.js +182 -98
- package/dist/parsing/page.js.map +1 -1
- package/dist/parsing/properties.d.ts +2 -1
- package/dist/parsing/properties.d.ts.map +1 -1
- package/dist/parsing/properties.js +41 -14
- package/dist/parsing/properties.js.map +1 -1
- package/dist/parsing/scope.d.ts.map +1 -1
- package/dist/parsing/scope.js +51 -5
- package/dist/parsing/scope.js.map +1 -1
- package/dist/parsing/type-parsing-registry.d.ts +1 -0
- package/dist/parsing/type-parsing-registry.d.ts.map +1 -1
- package/dist/parsing/type-parsing-registry.js +2 -0
- 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 -14
- package/dist/parsing/util.js.map +1 -1
- package/dist/plugin-options.d.ts +1 -0
- package/dist/plugin-options.d.ts.map +1 -1
- package/dist/plugin-options.js.map +1 -1
- package/dist/routing.d.ts.map +1 -1
- package/dist/routing.js +81 -34
- package/dist/routing.js.map +1 -1
- package/dist/sb-scope-manager.d.ts.map +1 -1
- package/dist/sb-scope-manager.js +37 -6
- package/dist/sb-scope-manager.js.map +1 -1
- package/dist/socket-manager.d.ts +3 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +16 -1
- package/dist/socket-manager.js.map +1 -1
- package/dist/source-tracker.d.ts +14 -0
- package/dist/source-tracker.d.ts.map +1 -1
- package/dist/source-tracker.js +34 -28
- package/dist/source-tracker.js.map +1 -1
- package/dist/sync-service/draft-helpers.d.ts +7 -0
- package/dist/sync-service/draft-helpers.d.ts.map +1 -1
- package/dist/sync-service/draft-helpers.js +81 -19
- package/dist/sync-service/draft-helpers.js.map +1 -1
- package/dist/sync-service/index.d.ts +8 -0
- package/dist/sync-service/index.d.ts.map +1 -1
- package/dist/sync-service/index.js +15 -1
- package/dist/sync-service/index.js.map +1 -1
- package/dist/sync-service/snapshot/upload-snapshot.d.ts.map +1 -1
- package/dist/sync-service/snapshot/upload-snapshot.js.map +1 -1
- package/dist/util/ignore-patterns.d.ts +9 -0
- package/dist/util/ignore-patterns.d.ts.map +1 -0
- package/dist/util/ignore-patterns.js +53 -0
- package/dist/util/ignore-patterns.js.map +1 -0
- package/package.json +16 -11
- package/dist/ai-service/app-interface/source-tracker.d.ts.map +0 -1
- package/dist/ai-service/app-interface/source-tracker.js.map +0 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.d.ts +0 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.d.ts.map +0 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.js +0 -6
- package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.js.map +0 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.d.ts +0 -2
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.d.ts.map +0 -1
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.js +0 -6
- package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.js.map +0 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { tool } from "ai";
|
|
4
|
+
import { createTwoFilesPatch } from "diff";
|
|
5
|
+
import z from "zod";
|
|
6
|
+
import { ROUTES_FILE } from "../../../file-system-helpers.js";
|
|
7
|
+
import { fileReadTracker } from "../../state-machine/helpers/file-read-tracker.js";
|
|
8
|
+
import { replace } from "./build-edit-file.js";
|
|
9
|
+
import { debugCache, createDebugFunction } from "./debug-cache.js";
|
|
10
|
+
function trimDiff(diff) {
|
|
11
|
+
const lines = diff.split("\n");
|
|
12
|
+
const contentLines = lines.filter((line) => (line.startsWith("+") || line.startsWith("-") || line.startsWith(" ")) &&
|
|
13
|
+
!line.startsWith("---") &&
|
|
14
|
+
!line.startsWith("+++"));
|
|
15
|
+
if (contentLines.length === 0)
|
|
16
|
+
return diff;
|
|
17
|
+
let min = Infinity;
|
|
18
|
+
for (const line of contentLines) {
|
|
19
|
+
const content = line.slice(1);
|
|
20
|
+
if (content.trim().length > 0) {
|
|
21
|
+
const match = content.match(/^(\s*)/);
|
|
22
|
+
if (match?.[1])
|
|
23
|
+
min = Math.min(min, match[1].length);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (min === Infinity || min === 0)
|
|
27
|
+
return diff;
|
|
28
|
+
const trimmedLines = lines.map((line) => {
|
|
29
|
+
if ((line.startsWith("+") || line.startsWith("-") || line.startsWith(" ")) &&
|
|
30
|
+
!line.startsWith("---") &&
|
|
31
|
+
!line.startsWith("+++")) {
|
|
32
|
+
const prefix = line[0] ?? "";
|
|
33
|
+
const content = line.slice(1);
|
|
34
|
+
return prefix + content.slice(min);
|
|
35
|
+
}
|
|
36
|
+
return line;
|
|
37
|
+
});
|
|
38
|
+
return trimmedLines.join("\n");
|
|
39
|
+
}
|
|
40
|
+
export default function createBuildMultiEditFileTool(clark, services) {
|
|
41
|
+
const { isReadRequired, markRead } = fileReadTracker(clark);
|
|
42
|
+
return tool({
|
|
43
|
+
description: `
|
|
44
|
+
A tool for making multiple edits to a single file in one operation. Built on top of the Edit tool, it allows efficient find-and-replace operations across a file.
|
|
45
|
+
|
|
46
|
+
Before using this tool:
|
|
47
|
+
1. Use the Read tool to understand the file's contents and context
|
|
48
|
+
2. Verify the directory path is correct
|
|
49
|
+
|
|
50
|
+
To make multiple file edits, provide the following:
|
|
51
|
+
1. filePath: The relative path to the file to modify (must be relative, not absolute)
|
|
52
|
+
2. edits: An array of edit operations to perform, where each edit contains:
|
|
53
|
+
- oldString: The text to replace (must match the file contents exactly, including all whitespace and indentation)
|
|
54
|
+
- newString: The edited text to replace the oldString
|
|
55
|
+
- replaceAll: Replace all occurrences of oldString. This parameter is optional and defaults to false.
|
|
56
|
+
|
|
57
|
+
IMPORTANT:
|
|
58
|
+
- All edits are applied in sequence, in the order they are provided
|
|
59
|
+
- Each edit operates on the result of the previous edit
|
|
60
|
+
- All edits must be valid for the operation to succeed - if any edit fails, none will be applied
|
|
61
|
+
- This tool is ideal when you need to make several changes to different parts of the same file
|
|
62
|
+
|
|
63
|
+
CRITICAL REQUIREMENTS:
|
|
64
|
+
1. All edits follow the same requirements as the single Edit tool
|
|
65
|
+
2. The edits are atomic - either all succeed or none are applied
|
|
66
|
+
3. Plan your edits carefully to avoid conflicts between sequential operations
|
|
67
|
+
|
|
68
|
+
WARNING:
|
|
69
|
+
- The tool will fail if edits.oldString doesn't match the file contents exactly (including whitespace)
|
|
70
|
+
- The tool will fail if edits.oldString and edits.new String are the same
|
|
71
|
+
- Since edits are applied in sequence, ensure that earlier edits don't affect the text that later edits are trying to find
|
|
72
|
+
|
|
73
|
+
When making edits:
|
|
74
|
+
- Ensure all edits result in idiomatic, correct code
|
|
75
|
+
- Do not leave the code in a broken state
|
|
76
|
+
- Always use relative file paths
|
|
77
|
+
- Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.
|
|
78
|
+
- Use replaceAll for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.
|
|
79
|
+
|
|
80
|
+
If you want to create a new file, use:
|
|
81
|
+
- A new file path, including dir name if needed
|
|
82
|
+
- First edit: empty oldString and the new file's contents as newString
|
|
83
|
+
- Subsequent edits: normal edit operations on the created content
|
|
84
|
+
|
|
85
|
+
DO NOT USE FOR scope.ts, routes.json, or API SOURCE CODE. Attempts to do this will result in an error.
|
|
86
|
+
`,
|
|
87
|
+
inputSchema: z.object({
|
|
88
|
+
filePath: z.string().describe("The relative path to the file to modify"),
|
|
89
|
+
edits: z
|
|
90
|
+
.array(z.object({
|
|
91
|
+
oldString: z.string().describe("The text to replace"),
|
|
92
|
+
newString: z.string().describe("The text to replace it with"),
|
|
93
|
+
replaceAll: z
|
|
94
|
+
.boolean()
|
|
95
|
+
.optional()
|
|
96
|
+
.describe("Replace all occurrences of oldString (default false)."),
|
|
97
|
+
}))
|
|
98
|
+
.min(1)
|
|
99
|
+
.describe("Array of edit operations to perform sequentially on the file"),
|
|
100
|
+
}),
|
|
101
|
+
execute: async ({ filePath, edits }) => {
|
|
102
|
+
if (!filePath) {
|
|
103
|
+
throw new Error("filePath is required");
|
|
104
|
+
}
|
|
105
|
+
if (!edits || edits.length === 0) {
|
|
106
|
+
throw new Error("At least one edit operation is required");
|
|
107
|
+
}
|
|
108
|
+
// Validate all edits first
|
|
109
|
+
for (const [index, edit] of edits.entries()) {
|
|
110
|
+
if (edit.oldString === edit.newString) {
|
|
111
|
+
throw new Error(`Edit ${index + 1}: oldString and newString must be different`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (isReadRequired(filePath)) {
|
|
115
|
+
throw new Error(`Cannot edit ${filePath} without reading it first. Please read the file before attempting to edit it.`);
|
|
116
|
+
}
|
|
117
|
+
// Validate file restrictions
|
|
118
|
+
const isScopeFile = filePath.endsWith("scope.ts");
|
|
119
|
+
if (isScopeFile) {
|
|
120
|
+
throw new Error("Directly editing scope files is not allowed. If you must make changes to the scope, use the appropriate tool.");
|
|
121
|
+
}
|
|
122
|
+
const isRoutesFile = filePath.endsWith(ROUTES_FILE);
|
|
123
|
+
if (isRoutesFile) {
|
|
124
|
+
throw new Error("Directly editing routes files is not allowed. If you must make changes to the routes, use the appropriate tool. The routes file is automatically updated when you create pages.");
|
|
125
|
+
}
|
|
126
|
+
let contentCurrent = "";
|
|
127
|
+
let contentOriginal = "";
|
|
128
|
+
// Handle file creation if first edit has empty oldString
|
|
129
|
+
const firstEdit = edits[0];
|
|
130
|
+
if (firstEdit.oldString === "") {
|
|
131
|
+
contentCurrent = firstEdit.newString;
|
|
132
|
+
contentOriginal = "";
|
|
133
|
+
// Apply remaining edits to the created content
|
|
134
|
+
for (let i = 1; i < edits.length; i++) {
|
|
135
|
+
const edit = edits[i];
|
|
136
|
+
try {
|
|
137
|
+
contentCurrent = replace(contentCurrent, edit.oldString, edit.newString, edit.replaceAll ?? false);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
throw new Error(`Edit ${i + 1} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Read existing file
|
|
146
|
+
const absoluteFilePath = path.join(services.appShell.appRootDirPath, filePath);
|
|
147
|
+
try {
|
|
148
|
+
contentCurrent = await fs.readFile(absoluteFilePath, "utf8");
|
|
149
|
+
contentOriginal = contentCurrent;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
throw new Error(`File ${filePath} not found`);
|
|
153
|
+
}
|
|
154
|
+
// Apply all edits sequentially
|
|
155
|
+
for (let i = 0; i < edits.length; i++) {
|
|
156
|
+
const edit = edits[i];
|
|
157
|
+
try {
|
|
158
|
+
contentCurrent = replace(contentCurrent, edit.oldString, edit.newString, edit.replaceAll ?? false);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
throw new Error(`Edit ${i + 1} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Generate diff between original and final content
|
|
166
|
+
const diff = trimDiff(createTwoFilesPatch(filePath, filePath, contentOriginal, contentCurrent));
|
|
167
|
+
// Write the updated content
|
|
168
|
+
await services.draftInterface.createDraftFile(filePath, contentCurrent);
|
|
169
|
+
// Trigger eager debug check after multi-edit
|
|
170
|
+
const debugFunction = createDebugFunction(clark, services);
|
|
171
|
+
debugCache.startEagerCheck(debugFunction);
|
|
172
|
+
markRead(filePath);
|
|
173
|
+
const result = {
|
|
174
|
+
filePath,
|
|
175
|
+
diff,
|
|
176
|
+
editsApplied: edits.length,
|
|
177
|
+
originalLength: contentOriginal.length,
|
|
178
|
+
finalLength: contentCurrent.length,
|
|
179
|
+
message: `Successfully applied ${edits.length} edit${edits.length === 1 ? "" : "s"} to ${filePath}`,
|
|
180
|
+
};
|
|
181
|
+
return result;
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=build-multi-edit-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-multi-edit-file.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-multi-edit-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAInE,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACvB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAC1B,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;gBAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,IACE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACvB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EACvB,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,KAAY,EACZ,QAAiC;IAEjC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE5D,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2CZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACxE,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAC7D,UAAU,EAAE,CAAC;qBACV,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CACP,uDAAuD,CACxD;aACJ,CAAC,CACH;iBACA,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,8DAA8D,CAC/D;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YAED,2BAA2B;YAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,GAAG,CAAC,6CAA6C,CAC/D,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CACb,eAAe,QAAQ,+EAA+E,CACvG,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,iLAAiL,CAClL,CAAC;YACJ,CAAC;YAED,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,eAAe,GAAG,EAAE,CAAC;YAEzB,yDAAyD;YACzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC5B,IAAI,SAAS,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;gBAC/B,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC;gBACrC,eAAe,GAAG,EAAE,CAAC;gBAErB,+CAA+C;gBAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;oBACvB,IAAI,CAAC;wBACH,cAAc,GAAG,OAAO,CACtB,cAAc,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,IAAI,KAAK,CACzB,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,IAAI,KAAK,CACb,QAAQ,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAChC,QAAQ,CACT,CAAC;gBAEF,IAAI,CAAC;oBACH,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBAC7D,eAAe,GAAG,cAAc,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,YAAY,CAAC,CAAC;gBAChD,CAAC;gBAED,+BAA+B;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;oBACvB,IAAI,CAAC;wBACH,cAAc,GAAG,OAAO,CACtB,cAAc,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,IAAI,KAAK,CACzB,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,IAAI,KAAK,CACb,QAAQ,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,MAAM,IAAI,GAAG,QAAQ,CACnB,mBAAmB,CACjB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,CACf,CACF,CAAC;YACF,4BAA4B;YAC5B,MAAM,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAExE,6CAA6C;YAC7C,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3D,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC1C,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEnB,MAAM,MAAM,GAAG;gBACb,QAAQ;gBACR,IAAI;gBACJ,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,cAAc,EAAE,eAAe,CAAC,MAAM;gBACtC,WAAW,EAAE,cAAc,CAAC,MAAM;gBAClC,OAAO,EAAE,wBAAwB,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE;aACpG,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolProfilingConfig } from "../../profiler/tool-profiler.js";
|
|
2
|
+
import type { ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
|
|
3
|
+
import type { Clark } from "../../state-machine/clark-fsm.js";
|
|
4
|
+
declare const multiFileToolConfig: ToolProfilingConfig;
|
|
5
|
+
export default function createBuildReadFilesTool(clark: Clark, services: ClarkStateHandlerParams): import("ai").Tool<{
|
|
6
|
+
filePaths: string[];
|
|
7
|
+
}, Record<string, string>>;
|
|
8
|
+
export { multiFileToolConfig };
|
|
9
|
+
//# sourceMappingURL=build-read-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-read-files.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-read-files.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAE9D,QAAA,MAAM,mBAAmB,EAAE,mBAe1B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,uBAAuB;;2BAqClC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { tool } from "ai";
|
|
4
|
+
import z from "zod";
|
|
5
|
+
import { fileReadTracker } from "../../state-machine/helpers/file-read-tracker.js";
|
|
6
|
+
const multiFileToolConfig = {
|
|
7
|
+
extractDisplayName: (parameters) => {
|
|
8
|
+
const params = parameters;
|
|
9
|
+
if (params.filePaths && Array.isArray(params.filePaths)) {
|
|
10
|
+
return `:${params.filePaths.length} files`;
|
|
11
|
+
}
|
|
12
|
+
return "";
|
|
13
|
+
},
|
|
14
|
+
extractMetadata: (parameters) => {
|
|
15
|
+
const params = parameters;
|
|
16
|
+
return {
|
|
17
|
+
fileCount: Array.isArray(params.filePaths) ? params.filePaths.length : 0,
|
|
18
|
+
filePaths: params.filePaths,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export default function createBuildReadFilesTool(clark, services) {
|
|
23
|
+
const { markRead } = fileReadTracker(clark);
|
|
24
|
+
return tool({
|
|
25
|
+
description: `
|
|
26
|
+
Read content from a file in the application.
|
|
27
|
+
- You have the capability to call multiple tools in a single response. It is always better to speculatively read multiple files as a batch that are potentially useful.
|
|
28
|
+
`,
|
|
29
|
+
inputSchema: z.object({
|
|
30
|
+
filePaths: z.array(z.string()).describe("Paths to the files to read"),
|
|
31
|
+
}),
|
|
32
|
+
execute: async ({ filePaths }) => {
|
|
33
|
+
return await services.fsOperationQueue.enqueue(async () => {
|
|
34
|
+
const files = await Promise.all(filePaths.map(async (filePath) => {
|
|
35
|
+
const absoluteFilePath = path.join(services.appShell.appRootDirPath, filePath);
|
|
36
|
+
const content = await fs.readFile(absoluteFilePath, "utf8");
|
|
37
|
+
return [filePath, content];
|
|
38
|
+
}));
|
|
39
|
+
filePaths.forEach(markRead);
|
|
40
|
+
return files.reduce((acc, [filePath, content]) => {
|
|
41
|
+
acc[filePath] = content;
|
|
42
|
+
return acc;
|
|
43
|
+
}, {});
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export { multiFileToolConfig };
|
|
49
|
+
//# sourceMappingURL=build-read-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-read-files.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-read-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AAKnF,MAAM,mBAAmB,GAAwB;IAC/C,kBAAkB,EAAE,CAAC,UAAmB,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAqC,CAAC;QACrD,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,eAAe,EAAE,CAAC,UAAmB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,UAAqC,CAAC;QACrD,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxE,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,KAAY,EACZ,QAAiC;IAEjC,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE5C,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;KAGZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SACtE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAC/B,OAAO,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;gBACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;oBAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAChC,QAAQ,CACT,CAAC;oBACF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBAC5D,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAqB,CAAC;gBACjD,CAAC,CAAC,CACH,CAAC;gBAEF,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAE5B,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;oBAC3B,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;oBACxB,OAAO,GAAG,CAAC;gBACb,CAAC,EACD,EAA4B,CAC7B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OperationQueue } from "../../../util/operation-queue.js";
|
|
2
|
+
import type { Clark, ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
|
|
3
|
+
export default function createBuildRegisterComponentNameTool(clark: Clark, services: ClarkStateHandlerParams, scopeUpdateQueue: OperationQueue): import("ai").Tool<{
|
|
4
|
+
pageName: string;
|
|
5
|
+
componentName: string;
|
|
6
|
+
}, {
|
|
7
|
+
pageName: string;
|
|
8
|
+
componentName: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=build-register-component-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-register-component-name.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-register-component-name.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAC1D,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,uBAAuB,EACjC,gBAAgB,EAAE,cAAc;;;;;;;GAwDjC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { tool } from "ai";
|
|
3
|
+
import z from "zod";
|
|
4
|
+
import { getPageFilePath } from "../../../file-system-helpers.js";
|
|
5
|
+
import { fileReadTracker } from "../../state-machine/helpers/file-read-tracker.js";
|
|
6
|
+
import { ensureScopeFileDraft } from "../utils.js";
|
|
7
|
+
export default function createBuildRegisterComponentNameTool(clark, services, scopeUpdateQueue) {
|
|
8
|
+
const { requireRead } = fileReadTracker(clark);
|
|
9
|
+
return tool({
|
|
10
|
+
description: `
|
|
11
|
+
Register a component name in the scope so that it can be used for bindings.
|
|
12
|
+
|
|
13
|
+
Use this when you need to reference a component instance for reading/writing its properties or handling events.
|
|
14
|
+
Each component can only be bound once per scope.
|
|
15
|
+
`,
|
|
16
|
+
inputSchema: z.object({
|
|
17
|
+
pageName: z
|
|
18
|
+
.string()
|
|
19
|
+
.describe("Name of the page scope to register the component on"),
|
|
20
|
+
componentName: z.string().describe("Name of the component to register"),
|
|
21
|
+
}),
|
|
22
|
+
execute: async ({ pageName, componentName }) => {
|
|
23
|
+
await scopeUpdateQueue.enqueue(async () => {
|
|
24
|
+
const { filePath, scopeDefinition } = services.fileSystemInterface
|
|
25
|
+
.getSourceTracker()
|
|
26
|
+
.getScopeDefinitionAndFilePathByNameOrId({
|
|
27
|
+
identifier: pageName,
|
|
28
|
+
type: "name",
|
|
29
|
+
});
|
|
30
|
+
if (scopeDefinition?.entityNames.includes(componentName)) {
|
|
31
|
+
throw new Error(`Component name "${componentName}" already exists in scope.ts`);
|
|
32
|
+
}
|
|
33
|
+
await ensureScopeFileDraft({ scopeFilePath: filePath }, services);
|
|
34
|
+
await services.fileSystemInterface
|
|
35
|
+
.getFileSystemManager()
|
|
36
|
+
.handleAddComponentNameToScope({
|
|
37
|
+
scopeName: pageName,
|
|
38
|
+
componentName,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
// invalidate reads for the respective page
|
|
42
|
+
const pageFilePath = path.relative(services.appRootDirPath, getPageFilePath(services.appRootDirPath, pageName));
|
|
43
|
+
requireRead(pageFilePath);
|
|
44
|
+
return {
|
|
45
|
+
pageName,
|
|
46
|
+
componentName,
|
|
47
|
+
message: `Successfully registered component "${componentName}" in scope.ts`,
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=build-register-component-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-register-component-name.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-register-component-name.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOnD,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAC1D,KAAY,EACZ,QAAiC,EACjC,gBAAgC;IAEhC,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE/C,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;;;KAKZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,CAAC,qDAAqD,CAAC;YAClE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACxE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE;YAC7C,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;gBACxC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,mBAAmB;qBAC/D,gBAAgB,EAAE;qBAClB,uCAAuC,CAAC;oBACvC,UAAU,EAAE,QAAQ;oBACpB,IAAI,EAAE,MAAM;iBACb,CAAC,CAAC;gBAEL,IAAI,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBACzD,MAAM,IAAI,KAAK,CACb,mBAAmB,aAAa,8BAA8B,CAC/D,CAAC;gBACJ,CAAC;gBAED,MAAM,oBAAoB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAElE,MAAM,QAAQ,CAAC,mBAAmB;qBAC/B,oBAAoB,EAAE;qBACtB,6BAA6B,CAAC;oBAC7B,SAAS,EAAE,QAAQ;oBACnB,aAAa;iBACd,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,2CAA2C;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAChC,QAAQ,CAAC,cAAc,EACvB,eAAe,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CACnD,CAAC;YACF,WAAW,CAAC,YAAY,CAAC,CAAC;YAE1B,OAAO;gBACL,QAAQ;gBACR,aAAa;gBACb,OAAO,EAAE,sCAAsC,aAAa,eAAe;aAC5E,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
|
|
2
|
+
export default function createBuildRenamePageTool(services: ClarkStateHandlerParams): import("ai").Tool<{
|
|
3
|
+
oldName: string;
|
|
4
|
+
newName: string;
|
|
5
|
+
}, {
|
|
6
|
+
oldName: string;
|
|
7
|
+
newName: string;
|
|
8
|
+
message: string;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=build-rename-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-rename-page.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-rename-page.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,QAAQ,EAAE,uBAAuB;;;;;;;GAwDlC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { tool } from "ai";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
export default function createBuildRenamePageTool(services) {
|
|
4
|
+
return tool({
|
|
5
|
+
description: `
|
|
6
|
+
Rename a page in the application with proper routing and file system management.
|
|
7
|
+
|
|
8
|
+
This tool properly handles:
|
|
9
|
+
- Route updates in routes.json
|
|
10
|
+
- File system renaming (renames entire page directory)
|
|
11
|
+
- Scope and component renaming
|
|
12
|
+
- Watcher cleanup and re-setup
|
|
13
|
+
- Safety checks (prevents conflicts with existing pages)
|
|
14
|
+
`,
|
|
15
|
+
inputSchema: z.object({
|
|
16
|
+
oldName: z
|
|
17
|
+
.string()
|
|
18
|
+
.describe("The current name of the page to rename (e.g., 'Page1', 'Dashboard')"),
|
|
19
|
+
newName: z
|
|
20
|
+
.string()
|
|
21
|
+
.describe("The new name for the page (e.g., 'HomePage', 'UserDashboard')"),
|
|
22
|
+
}),
|
|
23
|
+
execute: async ({ oldName, newName }) => {
|
|
24
|
+
const renamePageRequest = {
|
|
25
|
+
elementId: `SB-${oldName}`,
|
|
26
|
+
oldName,
|
|
27
|
+
newName,
|
|
28
|
+
kind: "page",
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
await services.fileSystemInterface
|
|
32
|
+
.getFileSystemManager()
|
|
33
|
+
.handleRenameElement(renamePageRequest);
|
|
34
|
+
return {
|
|
35
|
+
oldName,
|
|
36
|
+
newName,
|
|
37
|
+
message: `Successfully renamed page "${oldName}" to "${newName}" with all associated files and routes updated`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (error.message?.includes("already exists")) {
|
|
42
|
+
throw new Error(`Cannot rename "${oldName}" to "${newName}" because a page with that name already exists.`);
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`Failed to rename page "${oldName}" to "${newName}": ${error.message}`);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=build-rename-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-rename-page.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-rename-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AAGpB,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,QAAiC;IAEjC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;;;;;;;KASZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CACP,qEAAqE,CACtE;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CACP,+DAA+D,CAChE;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,MAAM,iBAAiB,GAAG;gBACxB,SAAS,EAAE,MAAM,OAAO,EAAW;gBACnC,OAAO;gBACP,OAAO;gBACP,IAAI,EAAE,MAAe;aACtB,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,mBAAmB;qBAC/B,oBAAoB,EAAE;qBACtB,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;gBAE1C,OAAO;oBACL,OAAO;oBACP,OAAO;oBACP,OAAO,EAAE,8BAA8B,OAAO,SAAS,OAAO,gDAAgD;iBAC/G,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,SAAS,OAAO,iDAAiD,CAC3F,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,SAAS,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
|
|
2
|
+
export default function createBuildUpdateStateVarTool(services: ClarkStateHandlerParams): import("ai").Tool<{
|
|
3
|
+
scopeId: string;
|
|
4
|
+
entityName: string;
|
|
5
|
+
changes: {
|
|
6
|
+
defaultValue?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
}, {
|
|
9
|
+
scopeId: string;
|
|
10
|
+
entityName: string;
|
|
11
|
+
entityType: string;
|
|
12
|
+
attributes: {
|
|
13
|
+
defaultValue?: string | undefined;
|
|
14
|
+
};
|
|
15
|
+
message: string;
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=build-update-state-var.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-update-state-var.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-update-state-var.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,MAAM,CAAC,OAAO,UAAU,6BAA6B,CACnD,QAAQ,EAAE,uBAAuB;;;;;;;;;;;;;;GA4ElC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Property } from "@superblocksteam/library-shared";
|
|
2
|
+
import { tool } from "ai";
|
|
3
|
+
import z from "zod";
|
|
4
|
+
import { ensureScopeFileDraft, normalizeToBlockStatement } from "../utils.js";
|
|
5
|
+
export default function createBuildUpdateStateVarTool(services) {
|
|
6
|
+
return tool({
|
|
7
|
+
description: `
|
|
8
|
+
Update an existing state variable in the scope.
|
|
9
|
+
Use this to modify StateVar properties like defaultValue.
|
|
10
|
+
|
|
11
|
+
Remember: StateVars should only be used for derived data, multi-source state, or snapshots -
|
|
12
|
+
not for mirroring component bindings or API responses.
|
|
13
|
+
`,
|
|
14
|
+
inputSchema: z.object({
|
|
15
|
+
scopeId: z
|
|
16
|
+
.string()
|
|
17
|
+
.describe("ID of the scope containing the state variable"),
|
|
18
|
+
entityName: z.string().describe("Name of the state variable"),
|
|
19
|
+
changes: z.object({
|
|
20
|
+
defaultValue: z
|
|
21
|
+
.string()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("A JS arrow function that returns the default value. You MUST return a value from the function."),
|
|
24
|
+
}),
|
|
25
|
+
}),
|
|
26
|
+
execute: async ({ scopeId, entityName, changes }) => {
|
|
27
|
+
const { filePath, scopeDefinition } = services.fileSystemInterface
|
|
28
|
+
.getSourceTracker()
|
|
29
|
+
.getScopeDefinitionAndFilePathByNameOrId({
|
|
30
|
+
identifier: scopeId,
|
|
31
|
+
type: "id",
|
|
32
|
+
});
|
|
33
|
+
if (!filePath) {
|
|
34
|
+
throw new Error(`Scope with ID "${scopeId}" not found`);
|
|
35
|
+
}
|
|
36
|
+
const entityId = scopeDefinition.scopeNameToEntityId[entityName];
|
|
37
|
+
if (!entityId) {
|
|
38
|
+
throw new Error(`Entity with name "${entityName}" not found in scope.ts`);
|
|
39
|
+
}
|
|
40
|
+
await ensureScopeFileDraft({ scopeFilePath: filePath }, services);
|
|
41
|
+
const updates = {};
|
|
42
|
+
if (changes.defaultValue) {
|
|
43
|
+
const parsedDefaultValue = normalizeToBlockStatement(changes.defaultValue);
|
|
44
|
+
updates.defaultValue = Property.Computed(parsedDefaultValue);
|
|
45
|
+
}
|
|
46
|
+
// TODO(ai): add this option to the input schema when we support other persistence settings
|
|
47
|
+
// if (changes.persistence) {
|
|
48
|
+
// updates.persistence = Property.Static(changes.persistence);
|
|
49
|
+
// }
|
|
50
|
+
await services.fileSystemInterface
|
|
51
|
+
.getFileSystemManager()
|
|
52
|
+
.handleUpdateEntity({
|
|
53
|
+
entityId,
|
|
54
|
+
updates,
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
scopeId,
|
|
58
|
+
entityName,
|
|
59
|
+
entityType: "StateVar",
|
|
60
|
+
attributes: changes,
|
|
61
|
+
message: `Successfully updated state variable "${entityName}" in scope.ts`,
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=build-update-state-var.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-update-state-var.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-update-state-var.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqB,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAG9E,MAAM,CAAC,OAAO,UAAU,6BAA6B,CACnD,QAAiC;IAEjC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;;;;KAMZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC7D,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChB,YAAY,EAAE,CAAC;qBACZ,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,gGAAgG,CACjG;aACJ,CAAC;SACH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;YAClD,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,mBAAmB;iBAC/D,gBAAgB,EAAE;iBAClB,uCAAuC,CAAC;gBACvC,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEL,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,aAAa,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAEjE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CACb,qBAAqB,UAAU,yBAAyB,CACzD,CAAC;YACJ,CAAC;YAED,MAAM,oBAAoB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;YAElE,MAAM,OAAO,GAAiC,EAAE,CAAC;YAEjD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,OAAO,CAAC,YAAY,CACrB,CAAC;gBAEF,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC/D,CAAC;YACD,2FAA2F;YAC3F,6BAA6B;YAC7B,gEAAgE;YAChE,IAAI;YAEJ,MAAM,QAAQ,CAAC,mBAAmB;iBAC/B,oBAAoB,EAAE;iBACtB,kBAAkB,CAAC;gBAClB,QAAQ;gBACR,OAAO;aACR,CAAC,CAAC;YAEL,OAAO;gBACL,OAAO;gBACP,UAAU;gBACV,UAAU,EAAE,UAAU;gBACtB,UAAU,EAAE,OAAO;gBACnB,OAAO,EAAE,wCAAwC,UAAU,eAAe;aAC3E,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
|
|
2
|
+
export default function createBuildValidateIconsTool(_services: ClarkStateHandlerParams): import("ai").Tool<{
|
|
3
|
+
iconNames: string[];
|
|
4
|
+
}, {
|
|
5
|
+
summary: {
|
|
6
|
+
totalChecked: number;
|
|
7
|
+
valid: number;
|
|
8
|
+
invalid: number;
|
|
9
|
+
totalAvailableIcons: number;
|
|
10
|
+
validationMethod: string;
|
|
11
|
+
};
|
|
12
|
+
results: {
|
|
13
|
+
requested: string;
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
suggestions: string[];
|
|
16
|
+
validationMethod: string;
|
|
17
|
+
importExample: string | null;
|
|
18
|
+
componentExample: string | null;
|
|
19
|
+
}[];
|
|
20
|
+
message: string;
|
|
21
|
+
commonPatterns: string[];
|
|
22
|
+
note: string;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=build-validate-icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-validate-icons.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-validate-icons.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAmChF,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,SAAS,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;GAgFnC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { tool } from "ai";
|
|
2
|
+
import iconNodes from "lucide-static/icon-nodes.json" with { type: "json" };
|
|
3
|
+
import z from "zod";
|
|
4
|
+
let availableIcons = null;
|
|
5
|
+
function getAvailableIcons() {
|
|
6
|
+
if (availableIcons !== null) {
|
|
7
|
+
return availableIcons;
|
|
8
|
+
}
|
|
9
|
+
// Convert PascalCase icon names to kebab-case
|
|
10
|
+
availableIcons = Object.keys(iconNodes).map((name) => name.replace(/([A-Z])/g, (_match, letter, index) => index === 0 ? letter.toLowerCase() : `-${letter.toLowerCase()}`));
|
|
11
|
+
return availableIcons;
|
|
12
|
+
}
|
|
13
|
+
function findSimilarIcons(searchTerm) {
|
|
14
|
+
const term = searchTerm.toLowerCase().replace(/[-_]/g, "");
|
|
15
|
+
const icons = getAvailableIcons();
|
|
16
|
+
if (icons.includes(searchTerm)) {
|
|
17
|
+
return [searchTerm];
|
|
18
|
+
}
|
|
19
|
+
const suggestions = icons.filter((icon) => {
|
|
20
|
+
const iconName = icon.toLowerCase().replace(/[-_]/g, "");
|
|
21
|
+
return iconName.includes(term) || term.includes(iconName);
|
|
22
|
+
});
|
|
23
|
+
return [...new Set(suggestions)].slice(0, 5);
|
|
24
|
+
}
|
|
25
|
+
export default function createBuildValidateIconsTool(_services) {
|
|
26
|
+
return tool({
|
|
27
|
+
description: `
|
|
28
|
+
Validate Lucide React icon names and get suggestions for correct icons.
|
|
29
|
+
|
|
30
|
+
This tool validates against the actual list of available icons from lucide-react,
|
|
31
|
+
providing 100% accurate validation against all available Lucide icons.
|
|
32
|
+
|
|
33
|
+
Use this tool when you're unsure about an icon name or when you encounter
|
|
34
|
+
build errors related to non-existent icons like "IconX" or "FlagX".
|
|
35
|
+
|
|
36
|
+
The tool will:
|
|
37
|
+
1. Validate against all actual Lucide icons
|
|
38
|
+
2. Detect common naming mistakes (Icon prefixes, X suffixes, etc.)
|
|
39
|
+
3. Provide similar/alternative icon suggestions
|
|
40
|
+
4. Give you the correct import syntax and usage examples
|
|
41
|
+
|
|
42
|
+
Always use this tool before using icon names you're not certain about.
|
|
43
|
+
`,
|
|
44
|
+
inputSchema: z.object({
|
|
45
|
+
iconNames: z
|
|
46
|
+
.array(z.string())
|
|
47
|
+
.describe("Array of icon names to validate (e.g., ['flag', 'user', 'invalid-icon'])"),
|
|
48
|
+
}),
|
|
49
|
+
execute: async ({ iconNames }) => {
|
|
50
|
+
const availableIcons = getAvailableIcons();
|
|
51
|
+
const results = iconNames.map((iconName) => {
|
|
52
|
+
const suggestions = findSimilarIcons(iconName);
|
|
53
|
+
const isValid = availableIcons.includes(iconName);
|
|
54
|
+
return {
|
|
55
|
+
requested: iconName,
|
|
56
|
+
isValid,
|
|
57
|
+
suggestions: suggestions.slice(0, 5),
|
|
58
|
+
validationMethod: "dynamic",
|
|
59
|
+
importExample: suggestions.length > 0 && suggestions[0]
|
|
60
|
+
? `import { ${suggestions[0]
|
|
61
|
+
.split("-")
|
|
62
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
63
|
+
.join("")} } from "lucide-react";`
|
|
64
|
+
: null,
|
|
65
|
+
componentExample: suggestions.length > 0 && suggestions[0]
|
|
66
|
+
? `<Icon icon="${suggestions[0]}" />`
|
|
67
|
+
: null,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
const invalidIcons = results.filter((r) => !r.isValid);
|
|
71
|
+
const validIcons = results.filter((r) => r.isValid);
|
|
72
|
+
return {
|
|
73
|
+
summary: {
|
|
74
|
+
totalChecked: iconNames.length,
|
|
75
|
+
valid: validIcons.length,
|
|
76
|
+
invalid: invalidIcons.length,
|
|
77
|
+
totalAvailableIcons: availableIcons.length,
|
|
78
|
+
validationMethod: "dynamic",
|
|
79
|
+
},
|
|
80
|
+
results,
|
|
81
|
+
message: invalidIcons.length > 0
|
|
82
|
+
? `Found ${invalidIcons.length} invalid icon names. Check the suggestions for alternatives.`
|
|
83
|
+
: "All icon names are valid!",
|
|
84
|
+
commonPatterns: [
|
|
85
|
+
"Use kebab-case (e.g., 'alert-circle', not 'AlertCircle')",
|
|
86
|
+
"Avoid prefixes like 'Icon' or 'Lucide' (e.g., 'user', not 'IconUser')",
|
|
87
|
+
"Avoid suffixes like 'X' for variations (e.g., 'flag', not 'FlagX')",
|
|
88
|
+
"Common icons: home, user, settings, search, menu, x, plus, trash, edit",
|
|
89
|
+
"For flags: use 'flag', not country-specific variants",
|
|
90
|
+
],
|
|
91
|
+
note: `Validation performed against ${availableIcons.length} actual Lucide icons from lucide-static.`,
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=build-validate-icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-validate-icons.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-validate-icons.ts"],"names":[],"mappings":"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"}
|