@superblocksteam/vite-plugin-file-sync 2.0.115-next.0 → 2.0.115-next.2
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/middleware.d.ts.map +1 -1
- package/dist/ai-service/agent/middleware.js +19 -0
- package/dist/ai-service/agent/middleware.js.map +1 -1
- package/dist/ai-service/agent/prompts/api-prompts.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/api-prompts.js +13 -17
- package/dist/ai-service/agent/prompts/api-prompts.js.map +1 -1
- 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 +22 -3
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/subagents/coding/prompt-builder.d.ts +16 -0
- package/dist/ai-service/agent/subagents/coding/prompt-builder.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/coding/prompt-builder.js +30 -0
- package/dist/ai-service/agent/subagents/coding/prompt-builder.js.map +1 -0
- package/dist/ai-service/agent/subagents/coding/run-coding-subagent.d.ts +29 -0
- package/dist/ai-service/agent/subagents/coding/run-coding-subagent.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/coding/run-coding-subagent.js +108 -0
- package/dist/ai-service/agent/subagents/coding/run-coding-subagent.js.map +1 -0
- package/dist/ai-service/agent/subagents/types.d.ts +9 -1
- package/dist/ai-service/agent/subagents/types.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/types.js +8 -0
- package/dist/ai-service/agent/subagents/types.js.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 +5 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +2 -1
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts +6 -0
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js +138 -0
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js.map +1 -0
- package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.js +39 -15
- package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +6 -3
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.js +116 -49
- package/dist/ai-service/agent/tools/build-manage-checklist.js.map +1 -1
- package/dist/ai-service/agent/tools/index.d.ts +2 -0
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/index.js +2 -0
- package/dist/ai-service/agent/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +3 -0
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.js +330 -204
- package/dist/ai-service/agent/tools/integrations/execute-request.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +40 -2
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.js +15 -4
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/registry.d.ts +3 -0
- package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/registry.js +50 -8
- package/dist/ai-service/agent/tools2/registry.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +3 -2
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.js +2 -1
- package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/deploy-service.d.ts +16 -0
- package/dist/ai-service/agent/tools2/tools/deploy-service.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/deploy-service.js +135 -0
- package/dist/ai-service/agent/tools2/tools/deploy-service.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts +33 -0
- package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/download-attachments.js +308 -0
- package/dist/ai-service/agent/tools2/tools/download-attachments.js.map +1 -0
- 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 +8 -4
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/git.d.ts +57 -1
- package/dist/ai-service/agent/tools2/tools/git.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/git.js +275 -8
- package/dist/ai-service/agent/tools2/tools/git.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.d.ts +2 -1
- package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.js +2 -1
- package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts +4 -1
- package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/list-attachments.js +20 -4
- package/dist/ai-service/agent/tools2/tools/list-attachments.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts +28 -0
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js +152 -0
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js.map +1 -0
- package/dist/ai-service/agent/tools2/types.d.ts +1 -18
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +22 -5
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/file-system-interface.d.ts +0 -4
- package/dist/ai-service/app-interface/file-system-interface.d.ts.map +1 -1
- package/dist/ai-service/app-interface/file-system-interface.js +0 -21
- package/dist/ai-service/app-interface/file-system-interface.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts +11 -1
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts.map +1 -1
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.js +29 -7
- package/dist/ai-service/app-interface/filesystem/virtual-file-system.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts +6 -0
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +8 -0
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
- package/dist/ai-service/app-skills/helpers.js +4 -2
- package/dist/ai-service/app-skills/helpers.js.map +1 -1
- package/dist/ai-service/attachments/store.d.ts +18 -2
- package/dist/ai-service/attachments/store.d.ts.map +1 -1
- package/dist/ai-service/attachments/store.js +102 -9
- package/dist/ai-service/attachments/store.js.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.d.ts +5 -2
- package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.js +32 -0
- package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts +2 -2
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +45 -243
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/chat/utils.d.ts +6 -0
- package/dist/ai-service/chat/utils.d.ts.map +1 -1
- package/dist/ai-service/chat/utils.js +47 -0
- package/dist/ai-service/chat/utils.js.map +1 -1
- package/dist/ai-service/features.d.ts +4 -0
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +4 -0
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/index.d.ts +36 -11
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +228 -68
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/judge/tools/playwright-action.d.ts +1 -1
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +4 -2
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/retry-notification.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/retry-notification.js +4 -2
- package/dist/ai-service/llm/stream/observers/retry-notification.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 +1 -16
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -1
- package/dist/ai-service/prompt-builder-service/types.d.ts +2 -13
- 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/skills/system/_registry.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/_registry.generated.js +6 -0
- package/dist/ai-service/skills/system/_registry.generated.js.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.d.ts +2 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.d.ts.map +1 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.js +58 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.js.map +1 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.d.ts +2 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.d.ts.map +1 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.js +107 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.js.map +1 -0
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +2 -0
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -0
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +137 -0
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts +26 -13
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +12 -7
- 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 +76 -27
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +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 +15 -6
- package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.js +4 -2
- package/dist/ai-service/state-machine/handlers/idle.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 +48 -15
- 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 +23 -151
- package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +16 -8
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/change-info.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/change-info.js +2 -15
- package/dist/ai-service/state-machine/helpers/change-info.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts +3 -3
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +9 -23
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +52 -0
- package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/stable-peer.js +141 -0
- package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -0
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +0 -17
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/types.d.ts +2 -21
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/types.js.map +1 -1
- package/dist/ai-service/util/archive-extractors.d.ts +52 -0
- package/dist/ai-service/util/archive-extractors.d.ts.map +1 -0
- package/dist/ai-service/util/archive-extractors.js +278 -0
- package/dist/ai-service/util/archive-extractors.js.map +1 -0
- package/dist/codegen.d.ts +1 -22
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +1 -117
- package/dist/codegen.js.map +1 -1
- package/dist/components-manager.d.ts +0 -6
- package/dist/components-manager.d.ts.map +1 -1
- package/dist/components-manager.js +0 -27
- package/dist/components-manager.js.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +47 -94
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-manager.d.ts +2 -15
- package/dist/file-system-manager.d.ts.map +1 -1
- package/dist/file-system-manager.js +16 -128
- package/dist/file-system-manager.js.map +1 -1
- package/dist/git-service/live-branch.d.ts.map +1 -1
- package/dist/git-service/live-branch.js +15 -1
- package/dist/git-service/live-branch.js.map +1 -1
- package/dist/lock-service/index.d.ts.map +1 -1
- package/dist/lock-service/index.js +8 -5
- package/dist/lock-service/index.js.map +1 -1
- package/dist/migration/get-fullstack-template-dir.d.ts +37 -0
- package/dist/migration/get-fullstack-template-dir.d.ts.map +1 -0
- package/dist/migration/get-fullstack-template-dir.js +99 -0
- package/dist/migration/get-fullstack-template-dir.js.map +1 -0
- package/dist/migration/migration-checklist.d.ts +60 -0
- package/dist/migration/migration-checklist.d.ts.map +1 -0
- package/dist/migration/migration-checklist.js +230 -0
- package/dist/migration/migration-checklist.js.map +1 -0
- package/dist/migration/migration-routes.d.ts +23 -0
- package/dist/migration/migration-routes.d.ts.map +1 -0
- package/dist/migration/migration-routes.js +533 -0
- package/dist/migration/migration-routes.js.map +1 -0
- package/dist/migration/restructure.d.ts +76 -0
- package/dist/migration/restructure.d.ts.map +1 -0
- package/dist/migration/restructure.js +446 -0
- package/dist/migration/restructure.js.map +1 -0
- package/dist/migration/translation-prompt.d.ts +22 -0
- package/dist/migration/translation-prompt.d.ts.map +1 -0
- package/dist/migration/translation-prompt.js +27 -0
- package/dist/migration/translation-prompt.js.map +1 -0
- package/dist/migration-templates/app-fullstack/client/App.tsx +17 -0
- package/dist/migration-templates/app-fullstack/client/components/common/sonner.tsx +20 -0
- package/dist/migration-templates/app-fullstack/client/components/hooks/use-active-page.ts +73 -0
- package/dist/migration-templates/app-fullstack/client/components/hooks/use-mobile.ts +21 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/accordion.tsx +197 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/area-chart.tsx +432 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/aspect-ratio.tsx +45 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/avatar.tsx +117 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/badge.tsx +143 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/bar-chart.tsx +390 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/breadcrumb.tsx +259 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/button.tsx +182 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/calendar.tsx +300 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/card.tsx +129 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/chart.tsx +403 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/chat.tsx +2303 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/checkbox.tsx +97 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/code-block-content.tsx +66 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/date-range-picker.tsx +396 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/dialog.tsx +223 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/dropdown-menu.tsx +284 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/file-dropzone.tsx +395 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/file-input.tsx +166 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/hover-card.tsx +162 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/icon.tsx +133 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/image.tsx +68 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/input.tsx +219 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/label.tsx +55 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/line-chart.tsx +380 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/link.tsx +139 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/navigation-menu.tsx +345 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/pagination.tsx +192 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/pie-chart.tsx +295 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/popover.tsx +162 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/progress.tsx +69 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/radar-chart.tsx +386 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/radial-chart.tsx +402 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/scroll-area.tsx +86 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/select.tsx +229 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/separator.tsx +62 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/sheet.tsx +234 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/sidebar.tsx +974 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/skeleton.tsx +13 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/slider.tsx +198 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/switch.tsx +95 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/table.tsx +145 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/tabs.tsx +87 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/textarea.tsx +148 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/toggle-group.tsx +225 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/toggle.tsx +150 -0
- package/dist/migration-templates/app-fullstack/client/components/ui/tooltip.tsx +175 -0
- package/dist/migration-templates/app-fullstack/client/hooks/useApi.ts +25 -0
- package/dist/migration-templates/app-fullstack/client/hooks/useApiData.ts +10 -0
- package/dist/migration-templates/app-fullstack/client/index.css +131 -0
- package/dist/migration-templates/app-fullstack/client/lib/executeApi.ts +9 -0
- package/dist/migration-templates/app-fullstack/client/lib/utils.ts +6 -0
- package/dist/migration-templates/app-fullstack/client/pages/Page1/index.tsx +3 -0
- package/dist/migration-templates/app-fullstack/client/root.tsx +17 -0
- package/dist/migration-templates/app-fullstack/client/router.tsx +48 -0
- package/dist/migration-templates/app-fullstack/client/types/node.d.ts +9 -0
- package/dist/migration-templates/app-fullstack/components.json +21 -0
- package/dist/migration-templates/app-fullstack/eslint.config.js +108 -0
- package/dist/migration-templates/app-fullstack/package.json +89 -0
- package/dist/migration-templates/app-fullstack/server/.gitkeep +0 -0
- package/dist/migration-templates/app-fullstack/server/apis/index.ts +22 -0
- package/dist/migration-templates/app-fullstack/server/index.ts +2 -0
- package/dist/migration-templates/app-fullstack/tsconfig.client.json +27 -0
- package/dist/migration-templates/app-fullstack/tsconfig.eslint.json +8 -0
- package/dist/migration-templates/app-fullstack/tsconfig.json +25 -0
- package/dist/migration-templates/app-fullstack/tsconfig.server.json +13 -0
- package/dist/migration-templates/app-fullstack/vite.config.ts +17 -0
- package/dist/parsing/imports.d.ts +0 -16
- package/dist/parsing/imports.d.ts.map +1 -1
- package/dist/parsing/imports.js +0 -68
- package/dist/parsing/imports.js.map +1 -1
- package/dist/parsing/jsx.d.ts +0 -2
- package/dist/parsing/jsx.d.ts.map +1 -1
- package/dist/parsing/jsx.js +0 -62
- package/dist/parsing/jsx.js.map +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +109 -32
- package/dist/socket-manager.js.map +1 -1
- package/dist/source-tracker.d.ts +7 -85
- package/dist/source-tracker.d.ts.map +1 -1
- package/dist/source-tracker.js +19 -695
- package/dist/source-tracker.js.map +1 -1
- package/dist/sync-service/index.d.ts +79 -2
- package/dist/sync-service/index.d.ts.map +1 -1
- package/dist/sync-service/index.js +139 -10
- package/dist/sync-service/index.js.map +1 -1
- package/package.json +11 -9
- package/dist/ai-service/artifacts/bolt.d.ts +0 -8
- package/dist/ai-service/artifacts/bolt.d.ts.map +0 -1
- package/dist/ai-service/artifacts/bolt.js +0 -92
- package/dist/ai-service/artifacts/bolt.js.map +0 -1
- package/dist/ai-service/result-buffer/bolt.d.ts +0 -18
- package/dist/ai-service/result-buffer/bolt.d.ts.map +0 -1
- package/dist/ai-service/result-buffer/bolt.js +0 -100
- package/dist/ai-service/result-buffer/bolt.js.map +0 -1
- package/dist/ai-service/result-buffer/shared.d.ts +0 -17
- package/dist/ai-service/result-buffer/shared.d.ts.map +0 -1
- package/dist/ai-service/result-buffer/shared.js +0 -7
- package/dist/ai-service/result-buffer/shared.js.map +0 -1
- package/dist/inject-no-select.d.ts +0 -15
- package/dist/inject-no-select.d.ts.map +0 -1
- package/dist/inject-no-select.js +0 -175
- package/dist/inject-no-select.js.map +0 -1
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile, readdir, rename, stat, writeFile, mkdir, cp, } from "node:fs/promises";
|
|
3
|
+
import { dirname, join, relative } from "node:path";
|
|
4
|
+
import { parse as parseYaml } from "yaml";
|
|
5
|
+
import { getMigrationChecklistPath, MIGRATION_CHECKLIST_FILE, seedMigrationChecklist, } from "./migration-checklist.js";
|
|
6
|
+
/** Top-level directories we never move into the backup (they would bloat
|
|
7
|
+
* it, or -- in the case of `scratch` itself -- recurse infinitely). */
|
|
8
|
+
const GUARDED_TOP_LEVEL = new Set([
|
|
9
|
+
".cache",
|
|
10
|
+
".git",
|
|
11
|
+
".superblocks",
|
|
12
|
+
".turbo",
|
|
13
|
+
"build",
|
|
14
|
+
"coverage",
|
|
15
|
+
"dist",
|
|
16
|
+
"node_modules",
|
|
17
|
+
"scratch",
|
|
18
|
+
]);
|
|
19
|
+
/** Top-level entries that, if present in backup, map onto fullstack client/. */
|
|
20
|
+
const BACKUP_TO_CLIENT_MAPPINGS = [
|
|
21
|
+
// Pages are overwhelmingly user-authored; always overwrite the template
|
|
22
|
+
// stub (which is a blank <div>).
|
|
23
|
+
{
|
|
24
|
+
backupSubpath: "pages",
|
|
25
|
+
clientSubpath: "pages",
|
|
26
|
+
diffAgainstTemplate: false,
|
|
27
|
+
},
|
|
28
|
+
// Components may be stock shadcn files that match the fullstack template
|
|
29
|
+
// byte-for-byte. Skip those to avoid a giant no-op diff.
|
|
30
|
+
{
|
|
31
|
+
backupSubpath: "components",
|
|
32
|
+
clientSubpath: "components",
|
|
33
|
+
diffAgainstTemplate: true,
|
|
34
|
+
},
|
|
35
|
+
// These are one-file directories in both templates; diff to avoid
|
|
36
|
+
// overwriting template improvements when the user never touched them.
|
|
37
|
+
{ backupSubpath: "lib", clientSubpath: "lib", diffAgainstTemplate: true },
|
|
38
|
+
];
|
|
39
|
+
/** Single-file diff targets at the backup root. Each one: if the v2 app
|
|
40
|
+
* shipped a version that differs from the fullstack template's baseline,
|
|
41
|
+
* port it over; otherwise leave the template copy in place.
|
|
42
|
+
*
|
|
43
|
+
* `router.tsx` / `App.tsx` / `root.tsx` are critical here: the shadcn-demo-app
|
|
44
|
+
* legacy template registers real user routes via `router.tsx`, and the
|
|
45
|
+
* fullstack template's default router only wires up a blank `Page1` stub.
|
|
46
|
+
* Without porting the user's router, the migrated `client/pages/*` files
|
|
47
|
+
* exist on disk but are unrouted, so the live-edit tree looks like a
|
|
48
|
+
* default/empty app and the editor falls through to the v2 UI.
|
|
49
|
+
*/
|
|
50
|
+
const BACKUP_SINGLE_FILE_DIFFS = [
|
|
51
|
+
{ backupPath: "index.css", clientPath: "client/index.css" },
|
|
52
|
+
{ backupPath: "router.tsx", clientPath: "client/router.tsx" },
|
|
53
|
+
{ backupPath: "App.tsx", clientPath: "client/App.tsx" },
|
|
54
|
+
{ backupPath: "root.tsx", clientPath: "client/root.tsx" },
|
|
55
|
+
];
|
|
56
|
+
export const SCRATCH_DIR_NAME = "scratch";
|
|
57
|
+
export const BACKUP_SUBDIR_NAME = "v2-backup";
|
|
58
|
+
export const MIGRATION_STATE_FILE = "migration-state.json";
|
|
59
|
+
export { MIGRATION_CHECKLIST_FILE };
|
|
60
|
+
export const MIGRATION_STATE_VERSION = 1;
|
|
61
|
+
export async function migrateToFullstack(args) {
|
|
62
|
+
const { appRootDirPath, templateSourceDirPath, logger } = args;
|
|
63
|
+
logger.info("[migrate] Starting v2->v3 restructure", {
|
|
64
|
+
appRootDirPath,
|
|
65
|
+
templateSourceDirPath,
|
|
66
|
+
});
|
|
67
|
+
await assertDirectoryExists(appRootDirPath, "app root");
|
|
68
|
+
await assertDirectoryExists(templateSourceDirPath, "template source");
|
|
69
|
+
const scratchDirPath = join(appRootDirPath, SCRATCH_DIR_NAME);
|
|
70
|
+
const backupDirPath = join(scratchDirPath, BACKUP_SUBDIR_NAME);
|
|
71
|
+
await assertBackupSlotIsEmpty(backupDirPath);
|
|
72
|
+
await moveAllTopLevelIntoBackup({ appRootDirPath, backupDirPath, logger });
|
|
73
|
+
await copyTemplateIntoAppRoot({
|
|
74
|
+
appRootDirPath,
|
|
75
|
+
templateSourceDirPath,
|
|
76
|
+
logger,
|
|
77
|
+
});
|
|
78
|
+
let restructuredFiles = 0;
|
|
79
|
+
restructuredFiles += await remapBackupDirsIntoClient({
|
|
80
|
+
backupDirPath,
|
|
81
|
+
appRootDirPath,
|
|
82
|
+
templateSourceDirPath,
|
|
83
|
+
logger,
|
|
84
|
+
});
|
|
85
|
+
restructuredFiles += await remapBackupSingleFiles({
|
|
86
|
+
backupDirPath,
|
|
87
|
+
appRootDirPath,
|
|
88
|
+
templateSourceDirPath,
|
|
89
|
+
logger,
|
|
90
|
+
});
|
|
91
|
+
const apiStubResult = await stubV2Apis({
|
|
92
|
+
backupDirPath,
|
|
93
|
+
appRootDirPath,
|
|
94
|
+
logger,
|
|
95
|
+
});
|
|
96
|
+
restructuredFiles += apiStubResult.apiStubs.length;
|
|
97
|
+
const state = {
|
|
98
|
+
version: MIGRATION_STATE_VERSION,
|
|
99
|
+
startedAt: new Date().toISOString(),
|
|
100
|
+
targetTemplateName: "app-fullstack",
|
|
101
|
+
sourceTemplateName: process.env.SUPERBLOCKS_APP_TEMPLATE_NAME ?? "shadcn-demo-app",
|
|
102
|
+
backupDirPath: relative(appRootDirPath, backupDirPath),
|
|
103
|
+
apiChecklist: apiStubResult.checklist,
|
|
104
|
+
};
|
|
105
|
+
const stateFilePath = join(scratchDirPath, MIGRATION_STATE_FILE);
|
|
106
|
+
await writeFile(stateFilePath, JSON.stringify(state, null, 2) + "\n", "utf-8");
|
|
107
|
+
logger.info("[migrate] Wrote migration-state.json", { stateFilePath });
|
|
108
|
+
const migrationChecklist = await seedMigrationChecklist({
|
|
109
|
+
appRootDirPath,
|
|
110
|
+
apiChecklist: apiStubResult.checklist.map((entry) => ({
|
|
111
|
+
name: entry.name,
|
|
112
|
+
stubPath: entry.stubPath,
|
|
113
|
+
})),
|
|
114
|
+
});
|
|
115
|
+
const migrationChecklistFilePath = getMigrationChecklistPath(appRootDirPath);
|
|
116
|
+
logger.info("[migrate] Wrote migration-checklist.json", {
|
|
117
|
+
migrationChecklistFilePath,
|
|
118
|
+
itemCount: migrationChecklist.items.length,
|
|
119
|
+
});
|
|
120
|
+
// Update the local template marker read by the csb-mock-server so the
|
|
121
|
+
// restarted dev-server process launches with `app-fullstack` env vars
|
|
122
|
+
// (entryPoint `client/root.tsx`, etc.). Production SABS gets the new
|
|
123
|
+
// template from the server-side row at pod start; the mock has no such
|
|
124
|
+
// signal and would otherwise cache the pre-migration template forever.
|
|
125
|
+
// Harmless in non-mock environments — the file is mock-specific.
|
|
126
|
+
const sbTemplatePath = join(appRootDirPath, ".sb_template");
|
|
127
|
+
await writeFile(sbTemplatePath, "app-fullstack", "utf-8");
|
|
128
|
+
logger.info("[migrate] Wrote .sb_template", { sbTemplatePath });
|
|
129
|
+
return {
|
|
130
|
+
scratchDirPath,
|
|
131
|
+
backupDirPath,
|
|
132
|
+
restructuredFiles,
|
|
133
|
+
apiStubs: apiStubResult.apiStubs,
|
|
134
|
+
stateFilePath,
|
|
135
|
+
migrationChecklistFilePath,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// --------------- Step 1: move current tree into scratch/v2-backup ---------------
|
|
139
|
+
async function assertBackupSlotIsEmpty(backupDirPath) {
|
|
140
|
+
if (existsSync(backupDirPath)) {
|
|
141
|
+
// If the backup already exists we would silently overwrite the user's
|
|
142
|
+
// existing rollback point, which is the worst possible failure mode.
|
|
143
|
+
throw new Error(`Refusing to overwrite existing backup at ${backupDirPath}. A prior migration is either in progress or left behind state; resolve it manually before retrying.`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function moveAllTopLevelIntoBackup(opts) {
|
|
147
|
+
const { appRootDirPath, backupDirPath, logger } = opts;
|
|
148
|
+
await mkdir(backupDirPath, { recursive: true });
|
|
149
|
+
const entries = await readdir(appRootDirPath, { withFileTypes: true });
|
|
150
|
+
for (const entry of entries) {
|
|
151
|
+
if (GUARDED_TOP_LEVEL.has(entry.name))
|
|
152
|
+
continue;
|
|
153
|
+
// The scratch dir was just created one level up from the backup; skip it
|
|
154
|
+
// even if the GUARDED list changes later -- moving scratch/ into itself
|
|
155
|
+
// would recurse forever.
|
|
156
|
+
if (entry.name === SCRATCH_DIR_NAME)
|
|
157
|
+
continue;
|
|
158
|
+
const from = join(appRootDirPath, entry.name);
|
|
159
|
+
const to = join(backupDirPath, entry.name);
|
|
160
|
+
await rename(from, to);
|
|
161
|
+
logger.debug("[migrate] Moved to backup", { entry: entry.name });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// --------------- Step 2: overlay fullstack template onto app root ---------------
|
|
165
|
+
async function copyTemplateIntoAppRoot(opts) {
|
|
166
|
+
const { appRootDirPath, templateSourceDirPath, logger } = opts;
|
|
167
|
+
const entries = await readdir(templateSourceDirPath, { withFileTypes: true });
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
// Match the same guarded set so we never copy in build output / installs
|
|
170
|
+
// from the bundled template (the copy script already filters these, but
|
|
171
|
+
// defense in depth guards against the monorepo fallback path).
|
|
172
|
+
if (GUARDED_TOP_LEVEL.has(entry.name))
|
|
173
|
+
continue;
|
|
174
|
+
const from = join(templateSourceDirPath, entry.name);
|
|
175
|
+
const to = join(appRootDirPath, entry.name);
|
|
176
|
+
await cp(from, to, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
logger.debug("[migrate] Template overlaid onto app root");
|
|
179
|
+
}
|
|
180
|
+
// --------------- Step 3: remap backup content onto the new layout ---------------
|
|
181
|
+
async function remapBackupDirsIntoClient(opts) {
|
|
182
|
+
const { backupDirPath, appRootDirPath, templateSourceDirPath, logger } = opts;
|
|
183
|
+
let copied = 0;
|
|
184
|
+
for (const mapping of BACKUP_TO_CLIENT_MAPPINGS) {
|
|
185
|
+
const src = join(backupDirPath, mapping.backupSubpath);
|
|
186
|
+
if (!existsSync(src))
|
|
187
|
+
continue;
|
|
188
|
+
const dst = join(appRootDirPath, "client", mapping.clientSubpath);
|
|
189
|
+
const templateEquivalent = join(templateSourceDirPath, "client", mapping.clientSubpath);
|
|
190
|
+
copied += await copyTreeWithDiff({
|
|
191
|
+
src,
|
|
192
|
+
dst,
|
|
193
|
+
templateBaseline: mapping.diffAgainstTemplate ? templateEquivalent : null,
|
|
194
|
+
// pages/<Page>/apis/ is where v2 YAML APIs live; they are handled by
|
|
195
|
+
// the API stub pass separately, so keep them out of the client/ tree.
|
|
196
|
+
skipSubpath: mapping.backupSubpath === "pages" ? "apis" : null,
|
|
197
|
+
logger,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return copied;
|
|
201
|
+
}
|
|
202
|
+
async function remapBackupSingleFiles(opts) {
|
|
203
|
+
const { backupDirPath, appRootDirPath, templateSourceDirPath, logger } = opts;
|
|
204
|
+
let copied = 0;
|
|
205
|
+
for (const mapping of BACKUP_SINGLE_FILE_DIFFS) {
|
|
206
|
+
const backupFile = join(backupDirPath, mapping.backupPath);
|
|
207
|
+
if (!existsSync(backupFile))
|
|
208
|
+
continue;
|
|
209
|
+
const destFile = join(appRootDirPath, mapping.clientPath);
|
|
210
|
+
const templateFile = join(templateSourceDirPath, mapping.clientPath);
|
|
211
|
+
if (existsSync(templateFile) &&
|
|
212
|
+
(await filesEqual(backupFile, templateFile))) {
|
|
213
|
+
logger.debug("[migrate] Skipping unmodified single file", {
|
|
214
|
+
file: mapping.backupPath,
|
|
215
|
+
});
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
await mkdir(dirname(destFile), { recursive: true });
|
|
219
|
+
await cp(backupFile, destFile);
|
|
220
|
+
copied += 1;
|
|
221
|
+
}
|
|
222
|
+
return copied;
|
|
223
|
+
}
|
|
224
|
+
async function copyTreeWithDiff(opts) {
|
|
225
|
+
const { src, dst, templateBaseline, skipSubpath, logger } = opts;
|
|
226
|
+
let copied = 0;
|
|
227
|
+
const stack = [src];
|
|
228
|
+
while (stack.length > 0) {
|
|
229
|
+
const current = stack.pop();
|
|
230
|
+
const entries = await readdir(current, { withFileTypes: true });
|
|
231
|
+
for (const entry of entries) {
|
|
232
|
+
const absEntry = join(current, entry.name);
|
|
233
|
+
const relFromSrc = relative(src, absEntry);
|
|
234
|
+
// Drop top-level `apis/` under pages/<Page>/ (handled by stubV2Apis).
|
|
235
|
+
if (skipSubpath && relFromSrc.split("/").includes(skipSubpath)) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (entry.isDirectory()) {
|
|
239
|
+
stack.push(absEntry);
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (!entry.isFile())
|
|
243
|
+
continue;
|
|
244
|
+
if (templateBaseline) {
|
|
245
|
+
const baselineFile = join(templateBaseline, relFromSrc);
|
|
246
|
+
if (existsSync(baselineFile) &&
|
|
247
|
+
(await filesEqual(absEntry, baselineFile))) {
|
|
248
|
+
logger.debug("[migrate] Skipping unmodified file", {
|
|
249
|
+
path: relFromSrc,
|
|
250
|
+
});
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
const destFile = join(dst, relFromSrc);
|
|
255
|
+
await mkdir(dirname(destFile), { recursive: true });
|
|
256
|
+
await cp(absEntry, destFile);
|
|
257
|
+
copied += 1;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return copied;
|
|
261
|
+
}
|
|
262
|
+
// --------------- Step 4: stub v2 APIs --------------------------------------------
|
|
263
|
+
async function stubV2Apis(opts) {
|
|
264
|
+
const { backupDirPath, appRootDirPath, logger } = opts;
|
|
265
|
+
const yamls = await findApiYamls(backupDirPath);
|
|
266
|
+
const apiStubs = [];
|
|
267
|
+
const checklist = [];
|
|
268
|
+
const seenNames = new Set();
|
|
269
|
+
for (const yamlPath of yamls) {
|
|
270
|
+
const rawName = await extractApiName(yamlPath).catch(() => null);
|
|
271
|
+
const fallback = dirname(yamlPath).split("/").pop() ?? "Api";
|
|
272
|
+
const baseName = toValidApiName(rawName ?? fallback);
|
|
273
|
+
const uniqueName = ensureUniqueName(baseName, seenNames);
|
|
274
|
+
seenNames.add(uniqueName);
|
|
275
|
+
const stubRelPath = join("server", "apis", uniqueName, "api.ts");
|
|
276
|
+
const stubAbsPath = join(appRootDirPath, stubRelPath);
|
|
277
|
+
await mkdir(dirname(stubAbsPath), { recursive: true });
|
|
278
|
+
await writeFile(stubAbsPath, renderApiStub(uniqueName, yamlPath, backupDirPath), "utf-8");
|
|
279
|
+
apiStubs.push(stubRelPath);
|
|
280
|
+
checklist.push({
|
|
281
|
+
name: uniqueName,
|
|
282
|
+
yamlPathInBackup: relative(backupDirPath, yamlPath),
|
|
283
|
+
stubPath: stubRelPath,
|
|
284
|
+
status: "stub",
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
await writeApiRegistry({ appRootDirPath, stubs: checklist, logger });
|
|
288
|
+
logger.info("[migrate] Stubbed v2 APIs", { count: apiStubs.length });
|
|
289
|
+
return { apiStubs, checklist };
|
|
290
|
+
}
|
|
291
|
+
async function findApiYamls(rootDir) {
|
|
292
|
+
const results = [];
|
|
293
|
+
const stack = [rootDir];
|
|
294
|
+
while (stack.length > 0) {
|
|
295
|
+
const dir = stack.pop();
|
|
296
|
+
let entries;
|
|
297
|
+
try {
|
|
298
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
for (const entry of entries) {
|
|
304
|
+
const abs = join(dir, entry.name);
|
|
305
|
+
if (entry.isDirectory()) {
|
|
306
|
+
stack.push(abs);
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
if (!entry.isFile())
|
|
310
|
+
continue;
|
|
311
|
+
if (entry.name !== "api.yaml" && entry.name !== "api.yml")
|
|
312
|
+
continue;
|
|
313
|
+
// Only treat files inside an `apis/` directory as v2 API definitions
|
|
314
|
+
// so we do not pick up unrelated YAML that happens to be named api.yaml.
|
|
315
|
+
const parts = relative(rootDir, abs).split("/");
|
|
316
|
+
if (!parts.includes("apis"))
|
|
317
|
+
continue;
|
|
318
|
+
results.push(abs);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return results.sort();
|
|
322
|
+
}
|
|
323
|
+
async function extractApiName(yamlPath) {
|
|
324
|
+
const raw = await readFile(yamlPath, "utf-8");
|
|
325
|
+
const parsed = parseYaml(raw);
|
|
326
|
+
if (parsed &&
|
|
327
|
+
typeof parsed === "object" &&
|
|
328
|
+
"metadata" in parsed &&
|
|
329
|
+
typeof parsed.metadata === "object" &&
|
|
330
|
+
parsed.metadata &&
|
|
331
|
+
typeof parsed.metadata.name ===
|
|
332
|
+
"string") {
|
|
333
|
+
return parsed.metadata.name;
|
|
334
|
+
}
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
/** Produce a JS-identifier-safe PascalCase-ish name. Not perfect, but
|
|
338
|
+
* deterministic, and mirrors the server's v2 API slug requirements enough
|
|
339
|
+
* for the stubs to compile. */
|
|
340
|
+
function toValidApiName(name) {
|
|
341
|
+
const cleaned = name.replace(/[^A-Za-z0-9_]/g, "_");
|
|
342
|
+
if (cleaned.length === 0)
|
|
343
|
+
return "Api";
|
|
344
|
+
if (/^[0-9]/.test(cleaned))
|
|
345
|
+
return "_" + cleaned;
|
|
346
|
+
return cleaned;
|
|
347
|
+
}
|
|
348
|
+
function ensureUniqueName(name, seen) {
|
|
349
|
+
if (!seen.has(name))
|
|
350
|
+
return name;
|
|
351
|
+
let i = 2;
|
|
352
|
+
while (seen.has(`${name}_${i}`))
|
|
353
|
+
i += 1;
|
|
354
|
+
return `${name}_${i}`;
|
|
355
|
+
}
|
|
356
|
+
function renderApiStub(name, yamlPath, backupDirPath) {
|
|
357
|
+
const originalRel = relative(backupDirPath, yamlPath);
|
|
358
|
+
// scratch/v2-backup/ lives under the app root; spell the full project-
|
|
359
|
+
// relative path in the TODO so users can jump straight to the source.
|
|
360
|
+
const scratchRel = join(SCRATCH_DIR_NAME, BACKUP_SUBDIR_NAME, originalRel);
|
|
361
|
+
return `import { api, z } from "@superblocksteam/sdk-api";
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Auto-generated v2->v3 migration stub.
|
|
365
|
+
*
|
|
366
|
+
* Original v2 definition lives at:
|
|
367
|
+
* ${scratchRel}
|
|
368
|
+
*
|
|
369
|
+
* The v2 YAML has been preserved in scratch/v2-backup/ so you can port the
|
|
370
|
+
* block logic (and any custom integrations) into the run() below. Input/
|
|
371
|
+
* output schemas are intentionally empty until you wire them up -- leaving
|
|
372
|
+
* them unchanged will fail at runtime, which is the desired forcing
|
|
373
|
+
* function.
|
|
374
|
+
*/
|
|
375
|
+
export default api({
|
|
376
|
+
name: "${name}",
|
|
377
|
+
input: z.object({}),
|
|
378
|
+
output: z.object({}).optional(),
|
|
379
|
+
async run() {
|
|
380
|
+
return "TODO";
|
|
381
|
+
},
|
|
382
|
+
});
|
|
383
|
+
`;
|
|
384
|
+
}
|
|
385
|
+
async function writeApiRegistry(opts) {
|
|
386
|
+
const { appRootDirPath, stubs, logger } = opts;
|
|
387
|
+
const registryPath = join(appRootDirPath, "server", "apis", "index.ts");
|
|
388
|
+
// Sort by API name so the registry is stable regardless of the order in
|
|
389
|
+
// which we walked the backup directory. Users eyeballing this file
|
|
390
|
+
// expect alphabetical order, and diffs on subsequent manual edits are
|
|
391
|
+
// easier to read.
|
|
392
|
+
const orderedStubs = [...stubs].sort((a, b) => a.name.localeCompare(b.name));
|
|
393
|
+
const imports = orderedStubs
|
|
394
|
+
.map((s) => `import ${s.name} from "./${s.name}/api.js";`)
|
|
395
|
+
.join("\n");
|
|
396
|
+
const entries = orderedStubs.map((s) => ` ${s.name},`).join("\n");
|
|
397
|
+
const contents = `/**
|
|
398
|
+
* API Registry - Central export for all APIs.
|
|
399
|
+
*
|
|
400
|
+
* Regenerated by the v2->v3 migration. Each entry here corresponds to a
|
|
401
|
+
* pre-migration YAML API preserved under scratch/v2-backup/. Feel free to
|
|
402
|
+
* add / remove entries by hand as you port the logic; the restructure
|
|
403
|
+
* script is idempotent against manual edits (it will not run again unless
|
|
404
|
+
* the user re-initiates migration).
|
|
405
|
+
*/
|
|
406
|
+
|
|
407
|
+
${imports}
|
|
408
|
+
|
|
409
|
+
const apis = {
|
|
410
|
+
${entries}
|
|
411
|
+
} as const;
|
|
412
|
+
|
|
413
|
+
export default apis;
|
|
414
|
+
|
|
415
|
+
/** Type for useApi inference - exported for client type-only imports */
|
|
416
|
+
export type ApiRegistry = typeof apis;
|
|
417
|
+
`;
|
|
418
|
+
await mkdir(dirname(registryPath), { recursive: true });
|
|
419
|
+
await writeFile(registryPath, contents, "utf-8");
|
|
420
|
+
logger.debug("[migrate] Rewrote server/apis/index.ts", {
|
|
421
|
+
registryPath,
|
|
422
|
+
count: stubs.length,
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
// --------------- Helpers ---------------------------------------------------------
|
|
426
|
+
async function assertDirectoryExists(path, label) {
|
|
427
|
+
try {
|
|
428
|
+
const s = await stat(path);
|
|
429
|
+
if (!s.isDirectory()) {
|
|
430
|
+
throw new Error(`${label} path exists but is not a directory: ${path}`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
catch (err) {
|
|
434
|
+
if (err.code === "ENOENT") {
|
|
435
|
+
throw new Error(`${label} directory does not exist: ${path}`);
|
|
436
|
+
}
|
|
437
|
+
throw err;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
async function filesEqual(a, b) {
|
|
441
|
+
const [aBuf, bBuf] = await Promise.all([readFile(a), readFile(b)]);
|
|
442
|
+
if (aBuf.length !== bBuf.length)
|
|
443
|
+
return false;
|
|
444
|
+
return aBuf.equals(bBuf);
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=restructure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restructure.js","sourceRoot":"","sources":["../../src/migration/restructure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canned prompt that drives the post-flip v2 → v3 API translation turn.
|
|
3
|
+
*
|
|
4
|
+
* The prompt is injected as an internal USER_SENT_PROMPT the first time the
|
|
5
|
+
* ai-service boots with a pending `seed_api` checklist. The prompt itself is
|
|
6
|
+
* deliberately thin — all translation rules, parallelization policy, and
|
|
7
|
+
* per-API procedure live in the `superblocks-migration` system skill. This
|
|
8
|
+
* keeps the turn-level message small and makes the spec editable without a
|
|
9
|
+
* code change.
|
|
10
|
+
*/
|
|
11
|
+
export interface TranslationPromptArgs {
|
|
12
|
+
/**
|
|
13
|
+
* When true, the prompt activates the focused-debug retry path: the agent
|
|
14
|
+
* is told to also load `references/focused-debug.md` before acting. Used by
|
|
15
|
+
* the user-initiated "Fix with Clark" action after the auto-retry budget is
|
|
16
|
+
* spent. The prior-failure list itself is pulled from the checklist at turn
|
|
17
|
+
* time — it is not interpolated into the prompt.
|
|
18
|
+
*/
|
|
19
|
+
focusedDebug?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function buildTranslationPrompt(args: TranslationPromptArgs): string;
|
|
22
|
+
//# sourceMappingURL=translation-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-prompt.d.ts","sourceRoot":"","sources":["../../src/migration/translation-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAiB1E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canned prompt that drives the post-flip v2 → v3 API translation turn.
|
|
3
|
+
*
|
|
4
|
+
* The prompt is injected as an internal USER_SENT_PROMPT the first time the
|
|
5
|
+
* ai-service boots with a pending `seed_api` checklist. The prompt itself is
|
|
6
|
+
* deliberately thin — all translation rules, parallelization policy, and
|
|
7
|
+
* per-API procedure live in the `superblocks-migration` system skill. This
|
|
8
|
+
* keeps the turn-level message small and makes the spec editable without a
|
|
9
|
+
* code change.
|
|
10
|
+
*/
|
|
11
|
+
export function buildTranslationPrompt(args) {
|
|
12
|
+
const { focusedDebug } = args;
|
|
13
|
+
if (focusedDebug) {
|
|
14
|
+
return `You are in a focused-retry v2 → v3 migration turn.
|
|
15
|
+
|
|
16
|
+
Before writing any code, read these skill files in order and follow them:
|
|
17
|
+
|
|
18
|
+
1. \`skills/system/superblocks-migration/references/focused-debug.md\` — the retry playbook. Read this FIRST; it tells you how to pull prior-failure context from the checklist and when to ask the user via \`askMultiChoice\` instead of marking items \`failed\`.
|
|
19
|
+
2. \`skills/system/superblocks-migration/SKILL.md\` — the full translation specification.
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
return `You are in a v2 → v3 migration turn.
|
|
23
|
+
|
|
24
|
+
Before writing any code, read \`skills/system/superblocks-migration/SKILL.md\` and follow it. That file is the authoritative translation specification for this turn — it tells you how to discover the API list, whether to parallelize, the per-API procedure, and every rule the translation must obey.
|
|
25
|
+
`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=translation-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-prompt.js","sourceRoot":"","sources":["../../src/migration/translation-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,MAAM,UAAU,sBAAsB,CAAC,IAA2B;IAChE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;;;;;;CAMV,CAAC;IACA,CAAC;IAED,OAAO;;;CAGR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Outlet } from "react-router";
|
|
2
|
+
|
|
3
|
+
import { App as AppProvider } from "@superblocksteam/library";
|
|
4
|
+
|
|
5
|
+
import { Toaster } from "./components/common/sonner";
|
|
6
|
+
|
|
7
|
+
export default function AppComponent() {
|
|
8
|
+
return (
|
|
9
|
+
<>
|
|
10
|
+
{/* Do not remove the AppProvider */}
|
|
11
|
+
<AppProvider className="h-full w-full">
|
|
12
|
+
<Outlet />
|
|
13
|
+
</AppProvider>
|
|
14
|
+
<Toaster />
|
|
15
|
+
</>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ToasterProps } from "sonner";
|
|
2
|
+
import { Toaster as Sonner } from "sonner";
|
|
3
|
+
|
|
4
|
+
const Toaster = ({ ...props }: ToasterProps) => {
|
|
5
|
+
return (
|
|
6
|
+
<Sonner
|
|
7
|
+
className="toaster group"
|
|
8
|
+
style={
|
|
9
|
+
{
|
|
10
|
+
"--normal-bg": "var(--popover)",
|
|
11
|
+
"--normal-text": "var(--popover-foreground)",
|
|
12
|
+
"--normal-border": "var(--border)",
|
|
13
|
+
} as React.CSSProperties
|
|
14
|
+
}
|
|
15
|
+
{...props}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { Toaster };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
// Custom hook to track current pathname and determine active menu items
|
|
4
|
+
export const useActivePage = () => {
|
|
5
|
+
// Track current pathname
|
|
6
|
+
const [currentPath, setCurrentPath] = React.useState(
|
|
7
|
+
window.location.pathname,
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
// Update current path when location changes
|
|
11
|
+
React.useEffect(() => {
|
|
12
|
+
const handleLocationChange = () => {
|
|
13
|
+
setCurrentPath(window.location.pathname);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// Listen for navigation events
|
|
17
|
+
window.addEventListener("popstate", handleLocationChange);
|
|
18
|
+
|
|
19
|
+
// Custom event listener for programmatic navigation
|
|
20
|
+
const handleNavigationEvent = () => {
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
setCurrentPath(window.location.pathname);
|
|
23
|
+
}, 0);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Listen for hash changes too
|
|
27
|
+
window.addEventListener("hashchange", handleLocationChange);
|
|
28
|
+
|
|
29
|
+
// Add custom navigation listener
|
|
30
|
+
window.addEventListener("navigation", handleNavigationEvent);
|
|
31
|
+
|
|
32
|
+
return () => {
|
|
33
|
+
window.removeEventListener("popstate", handleLocationChange);
|
|
34
|
+
window.removeEventListener("hashchange", handleLocationChange);
|
|
35
|
+
window.removeEventListener("navigation", handleNavigationEvent);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
// Function to determine if a menu item is active
|
|
40
|
+
const isPageActive = React.useCallback(
|
|
41
|
+
(pageUrl: string) => {
|
|
42
|
+
if (!pageUrl) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Handle different URL formats
|
|
47
|
+
if (pageUrl.startsWith("http") || pageUrl.startsWith("//")) {
|
|
48
|
+
// External URLs - not active
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Remove leading slash if present for comparison
|
|
53
|
+
const cleanUrl = pageUrl.startsWith("/") ? pageUrl : `/${pageUrl}`;
|
|
54
|
+
const cleanCurrentPath = currentPath || "/";
|
|
55
|
+
|
|
56
|
+
// Exact match
|
|
57
|
+
if (cleanUrl === cleanCurrentPath) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// For root page, only match exact
|
|
62
|
+
if (cleanUrl === "/" || cleanCurrentPath === "/") {
|
|
63
|
+
return cleanUrl === cleanCurrentPath;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check if current path starts with the menu item URL (for nested routes)
|
|
67
|
+
return cleanCurrentPath.startsWith(cleanUrl);
|
|
68
|
+
},
|
|
69
|
+
[currentPath],
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
return { isPageActive };
|
|
73
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
const MOBILE_BREAKPOINT = 768;
|
|
4
|
+
|
|
5
|
+
export function useIsMobile() {
|
|
6
|
+
const [isMobile, setIsMobile] = React.useState<boolean | undefined>(
|
|
7
|
+
undefined,
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
React.useEffect(() => {
|
|
11
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
12
|
+
const onChange = () => {
|
|
13
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
14
|
+
};
|
|
15
|
+
mql.addEventListener("change", onChange);
|
|
16
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
17
|
+
return () => mql.removeEventListener("change", onChange);
|
|
18
|
+
}, []);
|
|
19
|
+
|
|
20
|
+
return !!isMobile;
|
|
21
|
+
}
|