@superblocksteam/vite-plugin-file-sync 2.0.119-next.1 → 2.0.120-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/middleware.d.ts.map +1 -1
- package/dist/ai-service/agent/middleware.js +2 -5
- package/dist/ai-service/agent/middleware.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 +17 -11
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/prompts/build-security-scan-prompt.d.ts +17 -0
- package/dist/ai-service/agent/prompts/build-security-scan-prompt.d.ts.map +1 -0
- package/dist/ai-service/agent/prompts/build-security-scan-prompt.js +219 -0
- package/dist/ai-service/agent/prompts/build-security-scan-prompt.js.map +1 -0
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +64 -6
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-comparator.d.ts +36 -0
- package/dist/ai-service/agent/tools/apis/api-comparator.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-comparator.js +369 -0
- package/dist/ai-service/agent/tools/apis/api-comparator.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +4 -0
- 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 +16 -5
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts +1 -0
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js +17 -2
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.js +17 -15
- package/dist/ai-service/agent/tools/apis/build-api.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +1 -1
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js +18 -13
- package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +138 -2
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-copy-directory.d.ts +12 -0
- package/dist/ai-service/agent/tools/build-copy-directory.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-copy-directory.js +51 -0
- package/dist/ai-service/agent/tools/build-copy-directory.js.map +1 -0
- package/dist/ai-service/agent/tools/build-copy-file.d.ts +12 -0
- package/dist/ai-service/agent/tools/build-copy-file.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-copy-file.js +52 -0
- package/dist/ai-service/agent/tools/build-copy-file.js.map +1 -0
- package/dist/ai-service/agent/tools/build-copy-utils.d.ts +57 -0
- package/dist/ai-service/agent/tools/build-copy-utils.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-copy-utils.js +37 -0
- package/dist/ai-service/agent/tools/build-copy-utils.js.map +1 -0
- package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-debug.js +17 -5
- package/dist/ai-service/agent/tools/build-debug.js.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.js +42 -50
- package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +7 -5
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.js +54 -108
- package/dist/ai-service/agent/tools/build-manage-checklist.js.map +1 -1
- package/dist/ai-service/agent/tools/databases/dev-database.d.ts +103 -0
- package/dist/ai-service/agent/tools/databases/dev-database.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/databases/dev-database.js +117 -0
- package/dist/ai-service/agent/tools/databases/dev-database.js.map +1 -0
- package/dist/ai-service/agent/tools/get-logs.d.ts +1 -1
- package/dist/ai-service/agent/tools/index.d.ts +4 -0
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/index.js +4 -0
- package/dist/ai-service/agent/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/delete-integration.d.ts +18 -0
- package/dist/ai-service/agent/tools/integrations/delete-integration.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/integrations/delete-integration.js +99 -0
- package/dist/ai-service/agent/tools/integrations/delete-integration.js.map +1 -0
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
- package/dist/ai-service/agent/tools/integrations/index.d.ts +1 -0
- package/dist/ai-service/agent/tools/integrations/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/index.js +1 -0
- package/dist/ai-service/agent/tools/integrations/index.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/metadata.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/metadata.js +30 -4
- package/dist/ai-service/agent/tools/integrations/metadata.js.map +1 -1
- package/dist/ai-service/agent/tools/report-security-findings.d.ts +163 -0
- package/dist/ai-service/agent/tools/report-security-findings.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/report-security-findings.js +52 -0
- package/dist/ai-service/agent/tools/report-security-findings.js.map +1 -0
- package/dist/ai-service/agent/tools.d.ts +2 -0
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +74 -6
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/example.js +1 -1
- package/dist/ai-service/agent/tools2/example.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts +7 -0
- 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 +11 -1
- 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 +7 -0
- 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 +3 -1
- package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/download-attachments.js +4 -3
- package/dist/ai-service/agent/tools2/tools/download-attachments.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +9 -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 +15 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -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 +8 -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 +21 -4
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js +87 -11
- package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js.map +1 -1
- package/dist/ai-service/agent/tools2/types.d.ts +10 -2
- 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 +2 -0
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/filesystem/draft-manager.d.ts +1 -1
- package/dist/ai-service/app-interface/filesystem/draft-manager.d.ts.map +1 -1
- package/dist/ai-service/app-interface/filesystem/draft-manager.js.map +1 -1
- package/dist/ai-service/app-interface/npm-registry.d.ts +137 -0
- package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -0
- package/dist/ai-service/app-interface/npm-registry.js +415 -0
- package/dist/ai-service/app-interface/npm-registry.js.map +1 -0
- package/dist/ai-service/app-interface/shell.d.ts +38 -0
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +222 -1
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.d.ts +5 -0
- package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.js +31 -21
- package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -1
- package/dist/ai-service/checklist/persisted-checklist-store.d.ts +105 -0
- package/dist/ai-service/checklist/persisted-checklist-store.d.ts.map +1 -0
- package/dist/ai-service/checklist/persisted-checklist-store.js +498 -0
- package/dist/ai-service/checklist/persisted-checklist-store.js.map +1 -0
- package/dist/ai-service/context-download.d.ts +14 -1
- package/dist/ai-service/context-download.d.ts.map +1 -1
- package/dist/ai-service/context-download.js +80 -0
- package/dist/ai-service/context-download.js.map +1 -1
- package/dist/ai-service/dev-database-client.d.ts +90 -0
- package/dist/ai-service/dev-database-client.d.ts.map +1 -0
- package/dist/ai-service/dev-database-client.js +166 -0
- package/dist/ai-service/dev-database-client.js.map +1 -0
- package/dist/ai-service/features.d.ts +16 -0
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +10 -0
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/filter-disabled-tools-for-migration.d.ts +6 -0
- package/dist/ai-service/filter-disabled-tools-for-migration.d.ts.map +1 -0
- package/dist/ai-service/filter-disabled-tools-for-migration.js +35 -0
- package/dist/ai-service/filter-disabled-tools-for-migration.js.map +1 -0
- package/dist/ai-service/index.d.ts +11 -1
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +86 -37
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/store.d.ts +5 -0
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +19 -2
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/judge/tools/submit-feedback.d.ts +1 -1
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context.js +6 -2
- package/dist/ai-service/llm/context-v2/context.js.map +1 -1
- package/dist/ai-service/llm/context-v2/manager.d.ts +8 -1
- package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/manager.js +17 -1
- package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
- package/dist/ai-service/llm/context-v2/prompts/compaction.d.ts +1 -1
- package/dist/ai-service/llm/context-v2/prompts/compaction.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/prompts/compaction.js +3 -3
- package/dist/ai-service/llm/context-v2/types.d.ts +7 -0
- package/dist/ai-service/llm/context-v2/types.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/types.js +33 -0
- package/dist/ai-service/llm/context-v2/types.js.map +1 -1
- package/dist/ai-service/llm/impl/clark.d.ts.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.map +1 -1
- package/dist/ai-service/llm/provider.js +22 -7
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/types.d.ts +14 -1
- package/dist/ai-service/llm/types.d.ts.map +1 -1
- package/dist/ai-service/llmobs/context-registry.d.ts +62 -0
- package/dist/ai-service/llmobs/context-registry.d.ts.map +1 -0
- package/dist/ai-service/llmobs/context-registry.js +115 -0
- package/dist/ai-service/llmobs/context-registry.js.map +1 -0
- package/dist/ai-service/llmobs/otel-exporter.d.ts +23 -0
- package/dist/ai-service/llmobs/otel-exporter.d.ts.map +1 -1
- package/dist/ai-service/llmobs/otel-exporter.js +112 -10
- package/dist/ai-service/llmobs/otel-exporter.js.map +1 -1
- package/dist/ai-service/llmobs/tracer.d.ts +7 -0
- package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
- package/dist/ai-service/llmobs/tracer.js +38 -0
- package/dist/ai-service/llmobs/tracer.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 +2 -0
- package/dist/ai-service/skills/system/_registry.generated.js.map +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +2 -0
- package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.js +3 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.js.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.js +29 -0
- package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.js.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +139 -7
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -1
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts +2 -0
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts.map +1 -0
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js +107 -0
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js.map +1 -0
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +33 -3
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +21 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +79 -6
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +10 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +69 -41
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts +35 -7
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +81 -15
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- package/dist/ai-service/template-renderer.d.ts +14 -1
- package/dist/ai-service/template-renderer.d.ts.map +1 -1
- package/dist/ai-service/template-renderer.js +144 -41
- package/dist/ai-service/template-renderer.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +2 -2
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +2 -2
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -1
- package/dist/draft-interface.d.ts +1 -1
- 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 +34 -27
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts +4 -0
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +13 -0
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/inject-index-vite-plugin.d.ts.map +1 -1
- package/dist/inject-index-vite-plugin.js +15 -1
- package/dist/inject-index-vite-plugin.js.map +1 -1
- package/dist/injected-index.d.ts.map +1 -1
- package/dist/injected-index.js +15 -1
- package/dist/injected-index.js.map +1 -1
- package/dist/lock-service/index.d.ts.map +1 -1
- package/dist/lock-service/index.js +8 -10
- package/dist/lock-service/index.js.map +1 -1
- package/dist/migration/migration-checklist.d.ts +51 -2
- package/dist/migration/migration-checklist.d.ts.map +1 -1
- package/dist/migration/migration-checklist.js +79 -151
- package/dist/migration/migration-checklist.js.map +1 -1
- package/dist/migration/migration-routes.d.ts.map +1 -1
- package/dist/migration/migration-routes.js +290 -30
- package/dist/migration/migration-routes.js.map +1 -1
- package/dist/migration/migration-verification.d.ts +206 -0
- package/dist/migration/migration-verification.d.ts.map +1 -0
- package/dist/migration/migration-verification.js +1006 -0
- package/dist/migration/migration-verification.js.map +1 -0
- package/dist/migration/recommended-user-deps.d.ts +39 -0
- package/dist/migration/recommended-user-deps.d.ts.map +1 -0
- package/dist/migration/recommended-user-deps.js +209 -0
- package/dist/migration/recommended-user-deps.js.map +1 -0
- package/dist/migration/restructure.d.ts +29 -2
- package/dist/migration/restructure.d.ts.map +1 -1
- package/dist/migration/restructure.js +145 -6
- package/dist/migration/restructure.js.map +1 -1
- package/dist/migration/scan-imports.d.ts +7 -0
- package/dist/migration/scan-imports.d.ts.map +1 -0
- package/dist/migration/scan-imports.js +178 -0
- package/dist/migration/scan-imports.js.map +1 -0
- package/dist/migration/translation-prompt.d.ts.map +1 -1
- package/dist/migration/translation-prompt.js +2 -0
- package/dist/migration/translation-prompt.js.map +1 -1
- package/dist/migration/unsupported-integrations.d.ts.map +1 -1
- package/dist/migration/unsupported-integrations.js +9 -0
- package/dist/migration/unsupported-integrations.js.map +1 -1
- package/dist/migration/yaml-walk.d.ts +18 -0
- package/dist/migration/yaml-walk.d.ts.map +1 -0
- package/dist/migration/yaml-walk.js +45 -0
- package/dist/migration/yaml-walk.js.map +1 -0
- package/dist/migration-templates/app-fullstack/client/components/hooks/use-mobile.ts +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/accordion.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/avatar.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/breadcrumb.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/button.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/calendar.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/chart.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/file-dropzone.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/file-input.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/hover-card.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/image.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/input.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/label.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/navigation-menu.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/pagination.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/popover.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/progress.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/select.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/sheet.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/sidebar.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/slider.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/switch.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/table.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/tabs.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/toggle-group.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/toggle.tsx +1 -1
- package/dist/migration-templates/app-fullstack/client/components/ui/tooltip.tsx +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +8 -0
- package/dist/socket-manager.js.map +1 -1
- package/dist/sync-service/hash-dir-tree.d.ts +1 -1
- package/dist/sync-service/hash-dir-tree.d.ts.map +1 -1
- package/dist/sync-service/hash-dir-tree.js +3 -3
- package/dist/sync-service/hash-dir-tree.js.map +1 -1
- package/dist/sync-service/index.d.ts +0 -14
- package/dist/sync-service/index.d.ts.map +1 -1
- package/dist/sync-service/index.js +1 -44
- package/dist/sync-service/index.js.map +1 -1
- package/dist/sync-service/list-dir.d.ts +1 -1
- package/dist/sync-service/list-dir.d.ts.map +1 -1
- package/dist/sync-service/list-dir.js +36 -3
- package/dist/sync-service/list-dir.js.map +1 -1
- package/dist/sync-service/snapshot/take-snapshot.d.ts +1 -1
- package/dist/sync-service/snapshot/take-snapshot.d.ts.map +1 -1
- package/dist/sync-service/snapshot/take-snapshot.js +4 -8
- package/dist/sync-service/snapshot/take-snapshot.js.map +1 -1
- package/dist/util/log-sanitizer.d.ts +6 -5
- package/dist/util/log-sanitizer.d.ts.map +1 -1
- package/dist/util/log-sanitizer.js +21 -6
- package/dist/util/log-sanitizer.js.map +1 -1
- package/package.json +9 -8
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import { chmod, mkdir, readFile, rename, stat, unlink, writeFile, } from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { getLogger } from "../../util/logger.js";
|
|
4
|
+
/**
|
|
5
|
+
* Scopes whose existing `<scope>:registry=` lines in a project / pod `.npmrc`
|
|
6
|
+
* must survive `writeNpmrc` calls. Shared between AppShell, TemplateRenderer,
|
|
7
|
+
* and any other call site so a new scope only needs to be added in one place.
|
|
8
|
+
*
|
|
9
|
+
* `setup-template.sh` bakes
|
|
10
|
+
* `@superblocksteam:registry=https://npm.pkg.github.com/` into the template
|
|
11
|
+
* `.npmrc` for ephemeral environments; we must not clobber it.
|
|
12
|
+
*/
|
|
13
|
+
export const PRESERVE_NPMRC_SCOPES = ["@superblocksteam"];
|
|
14
|
+
/**
|
|
15
|
+
* Returns true iff the value contains an embedded CR or LF, which would inject
|
|
16
|
+
* additional directives into the rendered `.npmrc`.
|
|
17
|
+
*/
|
|
18
|
+
function hasEmbeddedNewline(value) {
|
|
19
|
+
return /[\r\n]/.test(value);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns a log-safe rendering of a registry URL. Strips userinfo so an
|
|
23
|
+
* operator who accidentally inlined credentials in `SUPERBLOCKS_NPM_REGISTRY`
|
|
24
|
+
* (`https://user:pass@host/...`) doesn't have those credentials surfaced to
|
|
25
|
+
* centralized logging when validation rejects the value. Best-effort: if the
|
|
26
|
+
* input is unparseable we still return a placeholder rather than the raw
|
|
27
|
+
* value.
|
|
28
|
+
*/
|
|
29
|
+
function redactRegistryForLog(value) {
|
|
30
|
+
try {
|
|
31
|
+
const u = new URL(value);
|
|
32
|
+
if (u.username || u.password) {
|
|
33
|
+
u.username = "";
|
|
34
|
+
u.password = "";
|
|
35
|
+
return `${u.toString()} (userinfo redacted)`;
|
|
36
|
+
}
|
|
37
|
+
return u.toString();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return "<unparseable URL — value redacted>";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parses the `SUPERBLOCKS_REQUIRE_PRIVATE_REGISTRY` truthy-flag value.
|
|
45
|
+
*/
|
|
46
|
+
function parseRequireFlag(env) {
|
|
47
|
+
const raw = env.SUPERBLOCKS_REQUIRE_PRIVATE_REGISTRY?.trim().toLowerCase();
|
|
48
|
+
return raw === "true" || raw === "1" || raw === "yes" || raw === "on";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reads the npm registry env contract and returns a typed config, or undefined
|
|
52
|
+
* when `SUPERBLOCKS_NPM_REGISTRY` is unset or invalid (preserves SaaS / local
|
|
53
|
+
* behavior). Invalid values are logged as warnings and treated as unset rather
|
|
54
|
+
* than half-broken (avoids landing a `.npmrc` with a malformed `registry=`
|
|
55
|
+
* line and no `_authToken=`).
|
|
56
|
+
*
|
|
57
|
+
* Env contract:
|
|
58
|
+
* - SUPERBLOCKS_NPM_REGISTRY: full registry URL
|
|
59
|
+
* - SUPERBLOCKS_NPM_REGISTRY_TOKEN: optional auth token
|
|
60
|
+
* - SUPERBLOCKS_NPM_REGISTRY_SCOPES_JSON: optional JSON map of scope -> URL
|
|
61
|
+
* - SUPERBLOCKS_REQUIRE_PRIVATE_REGISTRY: opt-in strict mode (default off)
|
|
62
|
+
*/
|
|
63
|
+
export function getNpmRegistryConfig(env = process.env) {
|
|
64
|
+
const url = env.SUPERBLOCKS_NPM_REGISTRY?.trim();
|
|
65
|
+
if (!url) {
|
|
66
|
+
// The public name `SUPERBLOCKS_REQUIRE_PRIVATE_REGISTRY` promises strict
|
|
67
|
+
// mode; until the enforcement branch (#17) lands, surface a warning when
|
|
68
|
+
// an operator opts in but forgot to also set the registry URL — otherwise
|
|
69
|
+
// they silently fall back to public npm and assume they're protected.
|
|
70
|
+
if (parseRequireFlag(env)) {
|
|
71
|
+
getLogger().warn("[npm-registry] SUPERBLOCKS_REQUIRE_PRIVATE_REGISTRY is set but " +
|
|
72
|
+
"SUPERBLOCKS_NPM_REGISTRY is unset; falling back to default " +
|
|
73
|
+
"registry-resolution. Strict-mode enforcement is deferred to a " +
|
|
74
|
+
"follow-up; set SUPERBLOCKS_NPM_REGISTRY to take effect today.");
|
|
75
|
+
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (hasEmbeddedNewline(url)) {
|
|
79
|
+
getLogger().warn("[npm-registry] SUPERBLOCKS_NPM_REGISTRY contains a newline; ignoring");
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Validate the URL upfront so we never emit a half-broken .npmrc (e.g.
|
|
83
|
+
// `registry=` line with no matching `_authToken=`). Also rejects userinfo
|
|
84
|
+
// (`user:pass@host`) — tokens belong on a `_authToken=` line, never in the
|
|
85
|
+
// URL itself; URL-embedded credentials end up in HTTP request logs.
|
|
86
|
+
if (!toNpmAuthOrigin(url)) {
|
|
87
|
+
getLogger().warn("[npm-registry] SUPERBLOCKS_NPM_REGISTRY is not a valid registry URL " +
|
|
88
|
+
"(must be parseable and must not contain user:pass@ userinfo); ignoring", { url: redactRegistryForLog(url) });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let token = env.SUPERBLOCKS_NPM_REGISTRY_TOKEN?.trim() || undefined;
|
|
92
|
+
if (token && hasEmbeddedNewline(token)) {
|
|
93
|
+
getLogger().warn("[npm-registry] SUPERBLOCKS_NPM_REGISTRY_TOKEN contains a newline; ignoring token");
|
|
94
|
+
token = undefined;
|
|
95
|
+
}
|
|
96
|
+
const require = parseRequireFlag(env);
|
|
97
|
+
let scopes;
|
|
98
|
+
const scopesJson = env.SUPERBLOCKS_NPM_REGISTRY_SCOPES_JSON?.trim();
|
|
99
|
+
if (scopesJson) {
|
|
100
|
+
try {
|
|
101
|
+
const parsed = JSON.parse(scopesJson);
|
|
102
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
103
|
+
scopes = {};
|
|
104
|
+
for (const [scope, scopeUrl] of Object.entries(parsed)) {
|
|
105
|
+
if (typeof scopeUrl !== "string") {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// Validate both the scope key and the scope URL value for embedded
|
|
109
|
+
// newlines — a key containing `\n` (valid in JSON strings) would
|
|
110
|
+
// inject an extra line into the rendered `.npmrc` (e.g.
|
|
111
|
+
// `"@x\n_authToken=stolen"`). Mirror the existing URL-value check.
|
|
112
|
+
if (hasEmbeddedNewline(scope)) {
|
|
113
|
+
getLogger().warn("[npm-registry] SUPERBLOCKS_NPM_REGISTRY_SCOPES_JSON scope key contains a newline; ignoring entry");
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const trimmed = scopeUrl.trim();
|
|
117
|
+
if (trimmed === "" || hasEmbeddedNewline(trimmed)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
scopes[scope] = trimmed;
|
|
121
|
+
}
|
|
122
|
+
if (Object.keys(scopes).length === 0) {
|
|
123
|
+
scopes = undefined;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
getLogger().warn("[npm-registry] Failed to parse SUPERBLOCKS_NPM_REGISTRY_SCOPES_JSON; ignoring", { error: error instanceof Error ? error.message : String(error) });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return { url, token, scopes, require };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Extracts the host portion of a registry URL for use in npm auth lines, e.g.
|
|
135
|
+
* `https://artifactory.example.com/api/npm/npm-virtual/` ->
|
|
136
|
+
* `//artifactory.example.com/api/npm/npm-virtual/`.
|
|
137
|
+
*
|
|
138
|
+
* npm matches `_authToken` lines by URL prefix (sans scheme), so we keep the
|
|
139
|
+
* full path. Trailing slash is normalized. Returns undefined for unparseable
|
|
140
|
+
* URLs OR URLs that carry userinfo (`user:pass@host`) — userinfo would make
|
|
141
|
+
* the `registry=` and `_authToken=` lines disagree under npm's URL-prefix
|
|
142
|
+
* matching rule and would also leak credentials into process logs.
|
|
143
|
+
*/
|
|
144
|
+
function toNpmAuthOrigin(registryUrl) {
|
|
145
|
+
try {
|
|
146
|
+
const u = new URL(registryUrl);
|
|
147
|
+
if (u.username || u.password) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const pathname = u.pathname.endsWith("/") ? u.pathname : `${u.pathname}/`;
|
|
151
|
+
return `//${u.host}${pathname}`;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Normalizes a registry URL to end in exactly one trailing slash so the
|
|
159
|
+
* `registry=` line and the `_authToken=` host prefix line match exactly under
|
|
160
|
+
* npm's URL-prefix matching rule. Mirrors the shell script behavior.
|
|
161
|
+
*/
|
|
162
|
+
function normalizeRegistryUrl(registryUrl) {
|
|
163
|
+
return registryUrl.endsWith("/") ? registryUrl : `${registryUrl}/`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Renders the npm registry config to an `.npmrc` file at `targetPath`.
|
|
167
|
+
*
|
|
168
|
+
* When `preserveScopeLines` is provided, any existing `<scope>:registry=`
|
|
169
|
+
* lines for those scopes are preserved verbatim (so EE-baked
|
|
170
|
+
* `@superblocksteam:registry=https://npm.pkg.github.com/` survives) UNLESS
|
|
171
|
+
* the same scope is explicitly overridden in `config.scopes`.
|
|
172
|
+
*
|
|
173
|
+
* Idempotent: rewrites the file in full each call. Writes are atomic (tmp +
|
|
174
|
+
* rename) and the file mode is restricted to 0600 because the file may carry
|
|
175
|
+
* an auth token.
|
|
176
|
+
*/
|
|
177
|
+
export async function writeNpmrc(targetPath, config, options = {}) {
|
|
178
|
+
const preserveScopes = options.preserveScopeLines ?? [];
|
|
179
|
+
// Map of scope -> verbatim line, so we both dedup correctly and preserve the
|
|
180
|
+
// exact bytes (whitespace, trailing comments) the operator wrote.
|
|
181
|
+
const preservedScopeLines = new Map();
|
|
182
|
+
if (preserveScopes.length > 0) {
|
|
183
|
+
let existing = "";
|
|
184
|
+
try {
|
|
185
|
+
existing = await readFile(targetPath, "utf-8");
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
// ENOENT is the expected case (no pre-existing .npmrc). EACCES / EIO /
|
|
189
|
+
// EBUSY are not — surface them so we don't silently drop a load-bearing
|
|
190
|
+
// `@superblocksteam:registry=` line (the exact failure class APPS-2053
|
|
191
|
+
// was meant to prevent).
|
|
192
|
+
const code = error?.code;
|
|
193
|
+
if (code !== "ENOENT") {
|
|
194
|
+
getLogger().warn("[npm-registry] failed to read existing .npmrc for scope preservation; proceeding without preserve", {
|
|
195
|
+
path: targetPath,
|
|
196
|
+
code,
|
|
197
|
+
error: error instanceof Error ? error.message : String(error),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (existing) {
|
|
202
|
+
const lines = existing.split(/\r?\n/);
|
|
203
|
+
for (const scope of preserveScopes) {
|
|
204
|
+
// Skip preservation if config explicitly overrides this scope.
|
|
205
|
+
if (config.scopes && config.scopes[scope]) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const prefix = `${scope}:registry=`;
|
|
209
|
+
for (const line of lines) {
|
|
210
|
+
const trimmed = line.trim();
|
|
211
|
+
if (trimmed.startsWith(prefix)) {
|
|
212
|
+
preservedScopeLines.set(scope, trimmed);
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const normalizedUrl = normalizeRegistryUrl(config.url);
|
|
220
|
+
const lines = [];
|
|
221
|
+
lines.push(`registry=${normalizedUrl}`);
|
|
222
|
+
const authOrigin = toNpmAuthOrigin(normalizedUrl);
|
|
223
|
+
if (config.token && authOrigin) {
|
|
224
|
+
lines.push(`${authOrigin}:_authToken=${config.token}`);
|
|
225
|
+
}
|
|
226
|
+
if (config.scopes) {
|
|
227
|
+
for (const [scope, scopeUrl] of Object.entries(config.scopes)) {
|
|
228
|
+
lines.push(`${scope}:registry=${scopeUrl}`);
|
|
229
|
+
// Explicit scope override wins; drop the preserved line for the same
|
|
230
|
+
// scope so we don't emit two `<scope>:registry=` lines.
|
|
231
|
+
preservedScopeLines.delete(scope);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
for (const line of preservedScopeLines.values()) {
|
|
235
|
+
lines.push(line);
|
|
236
|
+
}
|
|
237
|
+
const content = lines.join("\n") + "\n";
|
|
238
|
+
await mkdir(path.dirname(targetPath), { recursive: true });
|
|
239
|
+
// Atomic write: render to a sibling tmp file with restrictive perms, then
|
|
240
|
+
// rename. Avoids leaving a partial/empty .npmrc on crash mid-write, and
|
|
241
|
+
// narrows the window where the token might be readable at the default umask.
|
|
242
|
+
const tmpPath = `${targetPath}.tmp-${process.pid}-${Date.now()}`;
|
|
243
|
+
await writeFile(tmpPath, content, { encoding: "utf-8", mode: 0o600 });
|
|
244
|
+
// `mode` only applies on creation; explicit chmod handles the case where the
|
|
245
|
+
// tmp path was preexisting (e.g. crash recovery).
|
|
246
|
+
await chmod(tmpPath, 0o600);
|
|
247
|
+
await rename(tmpPath, targetPath);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Convenience: invoke `writeNpmrc` against `<dir>/.npmrc` if registry config is
|
|
251
|
+
* present in the env. No-op when unset (preserves today's behavior for SaaS /
|
|
252
|
+
* local dev).
|
|
253
|
+
*
|
|
254
|
+
* Returns the loaded config when an `.npmrc` was written, otherwise `undefined`.
|
|
255
|
+
*/
|
|
256
|
+
export async function maybeWriteNpmrcForDir(dir, options = {}, env = process.env) {
|
|
257
|
+
const config = getNpmRegistryConfig(env);
|
|
258
|
+
if (!config) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
await writeNpmrc(path.join(dir, ".npmrc"), config, options);
|
|
262
|
+
return config;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Materializes the private-registry `.npmrc` (when the env contract is set)
|
|
266
|
+
* AND unconditionally strips `resolved` URLs from any lockfile present in
|
|
267
|
+
* `dir`, so a subsequent `npm install` is guaranteed to re-resolve through
|
|
268
|
+
* the active registry.
|
|
269
|
+
*
|
|
270
|
+
* Why the strip is unconditional (decoupled from the `.npmrc` write):
|
|
271
|
+
* - SaaS dev-server pods (staging/prod) run without `SUPERBLOCKS_NPM_REGISTRY`
|
|
272
|
+
* set, but their lockfiles can still be poisoned with cross-registry
|
|
273
|
+
* `resolved` URLs via DBFS state (APPS-4300). Gating the strip on the
|
|
274
|
+
* env meant the only safety net never fired in the exact environment
|
|
275
|
+
* where it mattered. Always stripping closes that read path.
|
|
276
|
+
* - The mutation is transient: `npm install` rewrites `resolved` with
|
|
277
|
+
* URLs from the active `.npmrc` registry on the very next line, so a
|
|
278
|
+
* local dev whose lockfile pointed at npmjs.org sees the same URLs
|
|
279
|
+
* restored after install.
|
|
280
|
+
* - `integrity` is preserved (see `stripResolvedFromLockfile`), so any
|
|
281
|
+
* cross-registry tarball drift surfaces as a clean `EINTEGRITY` failure
|
|
282
|
+
* rather than silent corruption.
|
|
283
|
+
*
|
|
284
|
+
* The strip is per-boot, not persisted: a stripped lockfile only reaches DBFS
|
|
285
|
+
* if the surrounding flow runs an upload. Pods that boot, strip, and exit
|
|
286
|
+
* without uploading still find the same poisoned lockfile in DBFS on the
|
|
287
|
+
* next boot. The CI fix in `build-db-migrations.yaml` and `build-dev-server.yaml`
|
|
288
|
+
* (only configure GHPR scope for ephemeral builds) is the actual durable
|
|
289
|
+
* fix; this strip is the runtime safety net for already-poisoned DBFS state.
|
|
290
|
+
*
|
|
291
|
+
* Returns the loaded config when an `.npmrc` was written, otherwise
|
|
292
|
+
* `undefined`. The lockfile strip happens in both cases.
|
|
293
|
+
*/
|
|
294
|
+
export async function prepareForPrivateRegistry(dir, options = {}, env = process.env) {
|
|
295
|
+
const config = await maybeWriteNpmrcForDir(dir, options, env);
|
|
296
|
+
await stripResolvedFromLockfile(dir);
|
|
297
|
+
return config;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Removes the `resolved` field from every entry in `.packages` of an npm v2+
|
|
301
|
+
* lockfile. TS-side counterpart to `scripts/strip-lockfile-resolved.sh`.
|
|
302
|
+
*
|
|
303
|
+
* Same goal: npm honors `resolved` URLs verbatim, so a lockfile whose entries
|
|
304
|
+
* point at registry.npmjs.org keeps fetching from npmjs even after we've
|
|
305
|
+
* written a private `registry=` line to `.npmrc`. Stripping forces npm to
|
|
306
|
+
* re-resolve through the active registry.
|
|
307
|
+
*
|
|
308
|
+
* Use at runtime for *brownfield* apps — apps imported into Superblocks with
|
|
309
|
+
* a lockfile baked at customer-side npm install time (typically against
|
|
310
|
+
* npmjs.org). Greenfield template lockfiles are stripped at image-build time
|
|
311
|
+
* by the bash script; this function handles the rest.
|
|
312
|
+
*
|
|
313
|
+
* Behavior:
|
|
314
|
+
* - Strips both `<dir>/package-lock.json` and the hidden
|
|
315
|
+
* `<dir>/node_modules/.package-lock.json` if present.
|
|
316
|
+
* - No-op when neither file exists (brownfield apps may not have a
|
|
317
|
+
* lockfile yet).
|
|
318
|
+
* - Idempotent: a second call against an already-stripped file is a no-op.
|
|
319
|
+
* - Malformed JSON or wrong shape -> logged warning, file left untouched.
|
|
320
|
+
* We don't throw because the consuming `npm install` will surface a
|
|
321
|
+
* clearer error on the same lockfile, and an unrelated parse bug here
|
|
322
|
+
* should not block the user's install.
|
|
323
|
+
* - Atomic: writes via tmp + rename to avoid leaving a partial lockfile on
|
|
324
|
+
* crash mid-write.
|
|
325
|
+
*/
|
|
326
|
+
export async function stripResolvedFromLockfile(dir) {
|
|
327
|
+
await Promise.all([
|
|
328
|
+
stripResolvedFromLockfilePath(path.join(dir, "package-lock.json")),
|
|
329
|
+
stripResolvedFromLockfilePath(path.join(dir, "node_modules", ".package-lock.json")),
|
|
330
|
+
]);
|
|
331
|
+
}
|
|
332
|
+
async function stripResolvedFromLockfilePath(lockfilePath) {
|
|
333
|
+
let raw;
|
|
334
|
+
try {
|
|
335
|
+
raw = await readFile(lockfilePath, "utf-8");
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
const code = error?.code;
|
|
339
|
+
if (code === "ENOENT") {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
getLogger().warn("[npm-registry] failed to read lockfile for resolved-strip; skipping", {
|
|
343
|
+
path: lockfilePath,
|
|
344
|
+
code,
|
|
345
|
+
error: error instanceof Error ? error.message : String(error),
|
|
346
|
+
});
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
let parsed;
|
|
350
|
+
try {
|
|
351
|
+
parsed = JSON.parse(raw);
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
getLogger().warn("[npm-registry] lockfile is not valid JSON; skipping resolved-strip", {
|
|
355
|
+
path: lockfilePath,
|
|
356
|
+
error: error instanceof Error ? error.message : String(error),
|
|
357
|
+
});
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
361
|
+
getLogger().warn("[npm-registry] lockfile root is not a JSON object; skipping resolved-strip", { path: lockfilePath });
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const lockfile = parsed;
|
|
365
|
+
const packages = lockfile.packages;
|
|
366
|
+
// npm v1 lockfiles have no .packages object; nothing to strip. Some custom
|
|
367
|
+
// shapes may also omit it (e.g. fixture lockfiles). Skip silently.
|
|
368
|
+
if (packages === undefined) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
if (!packages || typeof packages !== "object" || Array.isArray(packages)) {
|
|
372
|
+
getLogger().warn("[npm-registry] lockfile .packages is not an object; skipping resolved-strip", { path: lockfilePath });
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
let mutated = false;
|
|
376
|
+
for (const entry of Object.values(packages)) {
|
|
377
|
+
if (entry &&
|
|
378
|
+
typeof entry === "object" &&
|
|
379
|
+
!Array.isArray(entry) &&
|
|
380
|
+
"resolved" in entry) {
|
|
381
|
+
delete entry.resolved;
|
|
382
|
+
mutated = true;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (!mutated) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
// Preserve a trailing newline if the original had one (npm writes its
|
|
389
|
+
// lockfiles with a trailing newline; matching it minimizes spurious diffs
|
|
390
|
+
// when the file is later committed back from a customer-side workflow).
|
|
391
|
+
const trailingNewline = raw.endsWith("\n") ? "\n" : "";
|
|
392
|
+
const next = JSON.stringify(lockfile, null, 2) + trailingNewline;
|
|
393
|
+
// Atomic write: tmp + rename. Inherit the original mode where possible so
|
|
394
|
+
// we don't widen perms on a customer-owned lockfile (npm typically writes
|
|
395
|
+
// 0644, but we don't assume). If `writeFile` succeeds but `chmod` or
|
|
396
|
+
// `rename` fails (ENOSPC, EROFS, EXDEV, EACCES), the tmp file gets cleaned
|
|
397
|
+
// up so successive boots don't accumulate orphans.
|
|
398
|
+
const tmpPath = `${lockfilePath}.tmp-${process.pid}-${Date.now()}`;
|
|
399
|
+
try {
|
|
400
|
+
await writeFile(tmpPath, next, "utf-8");
|
|
401
|
+
try {
|
|
402
|
+
const original = await stat(lockfilePath);
|
|
403
|
+
await chmod(tmpPath, original.mode & 0o777);
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
// Best-effort mode parity only; the rewrite itself is what matters.
|
|
407
|
+
}
|
|
408
|
+
await rename(tmpPath, lockfilePath);
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
await unlink(tmpPath).catch(() => { });
|
|
412
|
+
throw error;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=npm-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../../../src/ai-service/app-interface/npm-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,33 @@ export interface ListFilesOptions extends GlobOptionsWithFileTypesUnset {
|
|
|
14
14
|
/** Include directories in listing. Default: false (files only) */
|
|
15
15
|
includeDirs?: boolean;
|
|
16
16
|
}
|
|
17
|
+
export type CopyConflictStrategy = "fail" | "skip" | "replace";
|
|
18
|
+
export type CopyToolResult = {
|
|
19
|
+
copiedCount: number;
|
|
20
|
+
skippedCount: number;
|
|
21
|
+
rejectedCount: number;
|
|
22
|
+
copied?: string[];
|
|
23
|
+
skipped?: Array<{
|
|
24
|
+
path: string;
|
|
25
|
+
reason: "destination_exists" | "default_excluded";
|
|
26
|
+
}>;
|
|
27
|
+
rejected?: Array<{
|
|
28
|
+
path: string;
|
|
29
|
+
reason: string;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
export type CopyFileOptions = {
|
|
33
|
+
sourcePath: string;
|
|
34
|
+
destinationPath: string;
|
|
35
|
+
conflictStrategy?: CopyConflictStrategy;
|
|
36
|
+
verbose?: boolean;
|
|
37
|
+
};
|
|
38
|
+
export type CopyDirectoryOptions = {
|
|
39
|
+
sourceDir: string;
|
|
40
|
+
destinationDir: string;
|
|
41
|
+
conflictStrategy?: CopyConflictStrategy;
|
|
42
|
+
verbose?: boolean;
|
|
43
|
+
};
|
|
17
44
|
/**
|
|
18
45
|
* AppShell provides the primary interface for the AI agent to interact
|
|
19
46
|
* with the application environment.
|
|
@@ -140,6 +167,17 @@ export declare class AppShell {
|
|
|
140
167
|
* Called directly by writeFile (no queue wrapper needed since draftInterface queues).
|
|
141
168
|
*/
|
|
142
169
|
private writeFileInternal;
|
|
170
|
+
private resolveAppRelativePath;
|
|
171
|
+
private createEmptyCopyResult;
|
|
172
|
+
private recordCopied;
|
|
173
|
+
private recordSkipped;
|
|
174
|
+
private recordRejected;
|
|
175
|
+
private finalizeCopyResult;
|
|
176
|
+
private copyFileInternal;
|
|
177
|
+
private preflightCopyFile;
|
|
178
|
+
copyFile(options: CopyFileOptions): Promise<CopyToolResult>;
|
|
179
|
+
private collectDirectoryCopyEntries;
|
|
180
|
+
copyDirectory(options: CopyDirectoryOptions): Promise<CopyToolResult>;
|
|
143
181
|
/**
|
|
144
182
|
* Deletes a file or directory as a draft operation.
|
|
145
183
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/ai-service/app-interface/shell.ts"],"names":[],"mappings":"AAaA,OAAO,EAAQ,KAAK,6BAA6B,EAAE,MAAM,MAAM,CAAC;AAKhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAOjE,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/ai-service/app-interface/shell.ts"],"names":[],"mappings":"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"}
|