nastechai-desktop 18.1.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/.prettierrc +11 -0
- package/DESIGN.md +167 -0
- package/README.md +141 -0
- package/assets/icon.icns +0 -0
- package/assets/icon.ico +0 -0
- package/assets/icon.png +0 -0
- package/components.json +21 -0
- package/electron/backend-env.cjs +112 -0
- package/electron/backend-env.test.cjs +111 -0
- package/electron/backend-probes.cjs +106 -0
- package/electron/backend-probes.test.cjs +82 -0
- package/electron/backend-ready.cjs +66 -0
- package/electron/bootstrap-platform.cjs +91 -0
- package/electron/bootstrap-platform.test.cjs +111 -0
- package/electron/bootstrap-runner.cjs +720 -0
- package/electron/bootstrap-runner.test.cjs +138 -0
- package/electron/connection-config.cjs +254 -0
- package/electron/connection-config.test.cjs +329 -0
- package/electron/dashboard-token.cjs +99 -0
- package/electron/dashboard-token.test.cjs +142 -0
- package/electron/desktop-uninstall.cjs +232 -0
- package/electron/desktop-uninstall.test.cjs +246 -0
- package/electron/entitlements.mac.inherit.plist +14 -0
- package/electron/entitlements.mac.plist +14 -0
- package/electron/fs-read-dir.cjs +109 -0
- package/electron/fs-read-dir.test.cjs +364 -0
- package/electron/gateway-ws-probe.cjs +188 -0
- package/electron/gateway-ws-probe.test.cjs +122 -0
- package/electron/git-root.cjs +54 -0
- package/electron/git-root.test.cjs +40 -0
- package/electron/git-worktrees.cjs +174 -0
- package/electron/hardening.cjs +184 -0
- package/electron/hardening.test.cjs +116 -0
- package/electron/main.cjs +5762 -0
- package/electron/oauth-net-request.cjs +20 -0
- package/electron/oauth-net-request.test.cjs +34 -0
- package/electron/preload.cjs +135 -0
- package/electron/session-windows.cjs +99 -0
- package/electron/session-windows.test.cjs +177 -0
- package/electron/update-remote.cjs +56 -0
- package/electron/update-remote.test.cjs +78 -0
- package/electron/vscode-marketplace.cjs +331 -0
- package/electron/vscode-marketplace.test.cjs +113 -0
- package/electron/windows-child-process.test.cjs +57 -0
- package/electron/windows-user-env.cjs +76 -0
- package/electron/windows-user-env.test.cjs +90 -0
- package/electron/workspace-cwd.cjs +38 -0
- package/electron/workspace-cwd.test.cjs +45 -0
- package/eslint.config.mjs +122 -0
- package/index.html +17 -0
- package/package.json +254 -0
- package/pr-assets/session-source-folders.png +0 -0
- package/preview-demo.html +65 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/ds-assets/filler-bg0.jpg +0 -0
- package/public/nastech-frames/nastech-frame-0.png +0 -0
- package/public/nastech-frames/nastech-frame-1.png +0 -0
- package/public/nastech-frames/nastech-frame-2.png +0 -0
- package/public/nastech-frames/nastech-frame-3.png +0 -0
- package/public/nastech-frames/nastech-frame-4.png +0 -0
- package/public/nastech-frames/nastech-frame-5.png +0 -0
- package/public/nastech-frames/nastech-frame-6.png +0 -0
- package/public/nastech-frames/nastech-frame-7.png +0 -0
- package/public/nastech-girl.jpg +0 -0
- package/public/nastech-sprite.png +0 -0
- package/public/nastech.png +0 -0
- package/scripts/after-pack.cjs +41 -0
- package/scripts/assert-dist-built.cjs +70 -0
- package/scripts/assert-dist-built.test.cjs +84 -0
- package/scripts/assert-root-install.cjs +13 -0
- package/scripts/before-build.cjs +11 -0
- package/scripts/before-pack.cjs +78 -0
- package/scripts/before-pack.test.cjs +53 -0
- package/scripts/click-session.mjs +51 -0
- package/scripts/dev-no-hmr.mjs +22 -0
- package/scripts/diag-jump.mjs +115 -0
- package/scripts/diag-scroll-reset.mjs +229 -0
- package/scripts/eval.mjs +21 -0
- package/scripts/leak-typing.mjs +222 -0
- package/scripts/measure-jump.mjs +108 -0
- package/scripts/measure-latency.mjs +184 -0
- package/scripts/measure-real-stream.mjs +252 -0
- package/scripts/measure-submit.mjs +179 -0
- package/scripts/measure-synthetic-stream.mjs +322 -0
- package/scripts/notarize-artifact.cjs +77 -0
- package/scripts/notarize.cjs +100 -0
- package/scripts/patch-electron-builder-mac-binary.cjs +59 -0
- package/scripts/probe-renderer.mjs +38 -0
- package/scripts/probe-thread.mjs +40 -0
- package/scripts/profile-long-stream.mjs +191 -0
- package/scripts/profile-real-stream.mjs +137 -0
- package/scripts/profile-synth-stream.mjs +103 -0
- package/scripts/profile-typing-lag.md +381 -0
- package/scripts/profile-typing.mjs +260 -0
- package/scripts/reload-renderer.mjs +25 -0
- package/scripts/reload.mjs +36 -0
- package/scripts/set-exe-identity.cjs +94 -0
- package/scripts/stage-native-deps.cjs +159 -0
- package/scripts/test-desktop.mjs +425 -0
- package/scripts/write-build-stamp.cjs +126 -0
- package/src/app/agents/index.tsx +398 -0
- package/src/app/artifacts/index.test.ts +62 -0
- package/src/app/artifacts/index.tsx +906 -0
- package/src/app/chat/chat-drop-overlay.tsx +48 -0
- package/src/app/chat/chat-swap-overlay.tsx +47 -0
- package/src/app/chat/composer/attachments.tsx +114 -0
- package/src/app/chat/composer/completion-drawer.tsx +63 -0
- package/src/app/chat/composer/context-menu.tsx +172 -0
- package/src/app/chat/composer/controls.tsx +289 -0
- package/src/app/chat/composer/drop-affordance.ts +2 -0
- package/src/app/chat/composer/enter-submit-dom-race.test.tsx +218 -0
- package/src/app/chat/composer/focus.ts +134 -0
- package/src/app/chat/composer/help-hint.tsx +59 -0
- package/src/app/chat/composer/hooks/use-at-completions.ts +141 -0
- package/src/app/chat/composer/hooks/use-live-completion-adapter.ts +119 -0
- package/src/app/chat/composer/hooks/use-mic-recorder.ts +291 -0
- package/src/app/chat/composer/hooks/use-slash-completions.ts +114 -0
- package/src/app/chat/composer/hooks/use-voice-conversation.ts +390 -0
- package/src/app/chat/composer/hooks/use-voice-recorder.ts +116 -0
- package/src/app/chat/composer/ime-composition-dom-repro.test.tsx +108 -0
- package/src/app/chat/composer/index.tsx +1611 -0
- package/src/app/chat/composer/inline-refs.ts +138 -0
- package/src/app/chat/composer/model-pill.tsx +86 -0
- package/src/app/chat/composer/queue-panel.tsx +130 -0
- package/src/app/chat/composer/rich-editor.test.ts +18 -0
- package/src/app/chat/composer/rich-editor.ts +165 -0
- package/src/app/chat/composer/skin-slash-popover.tsx +61 -0
- package/src/app/chat/composer/slash-nav-dom-repro.test.tsx +186 -0
- package/src/app/chat/composer/status-stack/index.tsx +202 -0
- package/src/app/chat/composer/status-stack/status-row.tsx +155 -0
- package/src/app/chat/composer/text-utils.test.ts +77 -0
- package/src/app/chat/composer/text-utils.ts +107 -0
- package/src/app/chat/composer/trigger-popover.test.tsx +42 -0
- package/src/app/chat/composer/trigger-popover.tsx +116 -0
- package/src/app/chat/composer/types.ts +64 -0
- package/src/app/chat/composer/url-dialog.tsx +82 -0
- package/src/app/chat/composer/voice-activity.tsx +252 -0
- package/src/app/chat/hooks/use-composer-actions.test.ts +57 -0
- package/src/app/chat/hooks/use-composer-actions.ts +525 -0
- package/src/app/chat/hooks/use-file-drop-zone.ts +118 -0
- package/src/app/chat/index.tsx +390 -0
- package/src/app/chat/perf-probe.tsx +269 -0
- package/src/app/chat/right-rail/index.ts +1 -0
- package/src/app/chat/right-rail/preview-console-state.ts +82 -0
- package/src/app/chat/right-rail/preview-console.tsx +290 -0
- package/src/app/chat/right-rail/preview-file.tsx +559 -0
- package/src/app/chat/right-rail/preview-pane.test.tsx +43 -0
- package/src/app/chat/right-rail/preview-pane.tsx +657 -0
- package/src/app/chat/right-rail/preview.tsx +171 -0
- package/src/app/chat/scroll-to-bottom-button.test.tsx +67 -0
- package/src/app/chat/scroll-to-bottom-button.tsx +74 -0
- package/src/app/chat/sidebar/cron-jobs-section.tsx +325 -0
- package/src/app/chat/sidebar/index.tsx +1219 -0
- package/src/app/chat/sidebar/load-more-row.tsx +30 -0
- package/src/app/chat/sidebar/order.test.ts +21 -0
- package/src/app/chat/sidebar/order.ts +17 -0
- package/src/app/chat/sidebar/profile-switcher.tsx +516 -0
- package/src/app/chat/sidebar/session-actions-menu.tsx +264 -0
- package/src/app/chat/sidebar/session-row.tsx +257 -0
- package/src/app/chat/sidebar/virtual-session-list.tsx +154 -0
- package/src/app/chat/sidebar/workspace-groups.test.ts +149 -0
- package/src/app/chat/sidebar/workspace-groups.ts +326 -0
- package/src/app/chat/thread-loading.test.ts +34 -0
- package/src/app/chat/thread-loading.ts +26 -0
- package/src/app/command-center/index.tsx +654 -0
- package/src/app/command-palette/index.tsx +513 -0
- package/src/app/command-palette/marketplace-theme-page.tsx +157 -0
- package/src/app/cron/index.tsx +942 -0
- package/src/app/cron/job-state.ts +29 -0
- package/src/app/desktop-controller.tsx +938 -0
- package/src/app/floating-hud.ts +22 -0
- package/src/app/gateway/hooks/use-gateway-boot.test.tsx +265 -0
- package/src/app/gateway/hooks/use-gateway-boot.ts +387 -0
- package/src/app/gateway/hooks/use-gateway-request.ts +138 -0
- package/src/app/hooks/use-keybinds.ts +186 -0
- package/src/app/hooks/use-refresh-hotkey.ts +45 -0
- package/src/app/hooks/use-route-enum-param.ts +38 -0
- package/src/app/index.tsx +1 -0
- package/src/app/layout-constants.ts +13 -0
- package/src/app/messaging/index.tsx +648 -0
- package/src/app/messaging/platform-icon.tsx +93 -0
- package/src/app/model-picker-overlay.tsx +42 -0
- package/src/app/model-visibility-overlay.tsx +31 -0
- package/src/app/overlays/overlay-chrome.tsx +66 -0
- package/src/app/overlays/overlay-search-input.tsx +33 -0
- package/src/app/overlays/overlay-split-layout.tsx +130 -0
- package/src/app/overlays/overlay-view.tsx +91 -0
- package/src/app/page-search-shell.tsx +75 -0
- package/src/app/profiles/create-profile-dialog.tsx +154 -0
- package/src/app/profiles/delete-profile-dialog.tsx +65 -0
- package/src/app/profiles/index.tsx +671 -0
- package/src/app/profiles/rename-profile-dialog.tsx +125 -0
- package/src/app/right-sidebar/files/dnd-manager.ts +27 -0
- package/src/app/right-sidebar/files/ipc.test.ts +100 -0
- package/src/app/right-sidebar/files/ipc.ts +161 -0
- package/src/app/right-sidebar/files/remote-picker.tsx +177 -0
- package/src/app/right-sidebar/files/tree.tsx +224 -0
- package/src/app/right-sidebar/files/use-project-tree.test.ts +190 -0
- package/src/app/right-sidebar/files/use-project-tree.ts +268 -0
- package/src/app/right-sidebar/index.test.tsx +75 -0
- package/src/app/right-sidebar/index.tsx +395 -0
- package/src/app/right-sidebar/store.ts +15 -0
- package/src/app/right-sidebar/terminal/buffer.ts +65 -0
- package/src/app/right-sidebar/terminal/index.tsx +98 -0
- package/src/app/right-sidebar/terminal/persistent.tsx +122 -0
- package/src/app/right-sidebar/terminal/selection.ts +75 -0
- package/src/app/right-sidebar/terminal/use-terminal-session.ts +504 -0
- package/src/app/routes.ts +88 -0
- package/src/app/session/hooks/use-context-suggestions.ts +58 -0
- package/src/app/session/hooks/use-cwd-actions.ts +109 -0
- package/src/app/session/hooks/use-message-stream.ts +957 -0
- package/src/app/session/hooks/use-model-controls.test.tsx +198 -0
- package/src/app/session/hooks/use-model-controls.ts +106 -0
- package/src/app/session/hooks/use-nastech-config.ts +74 -0
- package/src/app/session/hooks/use-preview-routing.test.tsx +168 -0
- package/src/app/session/hooks/use-preview-routing.ts +223 -0
- package/src/app/session/hooks/use-prompt-actions.test.tsx +316 -0
- package/src/app/session/hooks/use-prompt-actions.ts +1030 -0
- package/src/app/session/hooks/use-route-resume.test.tsx +136 -0
- package/src/app/session/hooks/use-route-resume.ts +115 -0
- package/src/app/session/hooks/use-session-actions.test.tsx +119 -0
- package/src/app/session/hooks/use-session-actions.ts +885 -0
- package/src/app/session/hooks/use-session-state-cache.test.tsx +118 -0
- package/src/app/session/hooks/use-session-state-cache.ts +191 -0
- package/src/app/session-picker-overlay.tsx +32 -0
- package/src/app/session-switcher.tsx +107 -0
- package/src/app/settings/about-settings.tsx +173 -0
- package/src/app/settings/appearance-settings.tsx +162 -0
- package/src/app/settings/config-settings.tsx +384 -0
- package/src/app/settings/constants.ts +545 -0
- package/src/app/settings/credential-key-ui.tsx +373 -0
- package/src/app/settings/env-credentials.tsx +198 -0
- package/src/app/settings/env-var-actions-menu.tsx +136 -0
- package/src/app/settings/field-copy.ts +56 -0
- package/src/app/settings/gateway-settings.tsx +620 -0
- package/src/app/settings/helpers.test.ts +138 -0
- package/src/app/settings/helpers.ts +151 -0
- package/src/app/settings/index.tsx +237 -0
- package/src/app/settings/keys-settings.tsx +96 -0
- package/src/app/settings/mcp-settings.tsx +271 -0
- package/src/app/settings/model-settings.test.tsx +157 -0
- package/src/app/settings/model-settings.tsx +559 -0
- package/src/app/settings/notifications-settings.tsx +150 -0
- package/src/app/settings/primitives.tsx +115 -0
- package/src/app/settings/providers-settings.test.tsx +100 -0
- package/src/app/settings/providers-settings.tsx +258 -0
- package/src/app/settings/sessions-settings.tsx +276 -0
- package/src/app/settings/toolset-config-panel.test.tsx +289 -0
- package/src/app/settings/toolset-config-panel.tsx +449 -0
- package/src/app/settings/types.ts +42 -0
- package/src/app/settings/uninstall-section.tsx +185 -0
- package/src/app/settings/use-deep-link-highlight.ts +60 -0
- package/src/app/shell/app-shell.tsx +167 -0
- package/src/app/shell/gateway-menu-panel.tsx +150 -0
- package/src/app/shell/hooks/use-overlay-routing.ts +71 -0
- package/src/app/shell/hooks/use-status-snapshot.ts +57 -0
- package/src/app/shell/hooks/use-statusbar-items.tsx +403 -0
- package/src/app/shell/keybind-panel.tsx +220 -0
- package/src/app/shell/model-edit-submenu.test.tsx +84 -0
- package/src/app/shell/model-edit-submenu.tsx +245 -0
- package/src/app/shell/model-menu-panel.tsx +295 -0
- package/src/app/shell/sidebar-label.tsx +22 -0
- package/src/app/shell/statusbar-controls.tsx +185 -0
- package/src/app/shell/titlebar-controls.tsx +244 -0
- package/src/app/shell/titlebar.test.ts +26 -0
- package/src/app/shell/titlebar.ts +45 -0
- package/src/app/shell/use-group-registry.ts +39 -0
- package/src/app/skills/index.test.tsx +103 -0
- package/src/app/skills/index.tsx +371 -0
- package/src/app/types.ts +99 -0
- package/src/app/updates-overlay.tsx +369 -0
- package/src/components/Backdrop.tsx +114 -0
- package/src/components/assistant-ui/ansi-text.tsx +34 -0
- package/src/components/assistant-ui/clarify-tool.tsx +281 -0
- package/src/components/assistant-ui/directive-text.test.ts +39 -0
- package/src/components/assistant-ui/directive-text.tsx +389 -0
- package/src/components/assistant-ui/markdown-text.test.ts +204 -0
- package/src/components/assistant-ui/markdown-text.tsx +497 -0
- package/src/components/assistant-ui/message-render-boundary.test.tsx +80 -0
- package/src/components/assistant-ui/message-render-boundary.tsx +48 -0
- package/src/components/assistant-ui/streaming.test.tsx +739 -0
- package/src/components/assistant-ui/thread-list.tsx +307 -0
- package/src/components/assistant-ui/thread-virtualizer.tsx +512 -0
- package/src/components/assistant-ui/thread.tsx +1474 -0
- package/src/components/assistant-ui/todo-tool.tsx +109 -0
- package/src/components/assistant-ui/tool-approval-group.test.tsx +158 -0
- package/src/components/assistant-ui/tool-approval.test.tsx +81 -0
- package/src/components/assistant-ui/tool-approval.tsx +209 -0
- package/src/components/assistant-ui/tool-fallback-model.test.ts +66 -0
- package/src/components/assistant-ui/tool-fallback-model.ts +1368 -0
- package/src/components/assistant-ui/tool-fallback.tsx +466 -0
- package/src/components/assistant-ui/tooltip-icon-button.tsx +33 -0
- package/src/components/assistant-ui/user-message-edit.test.tsx +141 -0
- package/src/components/assistant-ui/user-message-text.tsx +150 -0
- package/src/components/boot-failure-overlay.tsx +246 -0
- package/src/components/boot-failure-reauth.test.ts +100 -0
- package/src/components/boot-failure-reauth.ts +81 -0
- package/src/components/brand-mark.tsx +19 -0
- package/src/components/chat/activity-timer-text.tsx +24 -0
- package/src/components/chat/activity-timer.test.tsx +43 -0
- package/src/components/chat/activity-timer.ts +64 -0
- package/src/components/chat/code-card.tsx +78 -0
- package/src/components/chat/compact-markdown.tsx +113 -0
- package/src/components/chat/composer-dock.ts +31 -0
- package/src/components/chat/diff-lines.tsx +54 -0
- package/src/components/chat/disclosure-row.tsx +63 -0
- package/src/components/chat/generated-image-context.tsx +19 -0
- package/src/components/chat/generated-image-result.tsx +174 -0
- package/src/components/chat/image-generation-placeholder.tsx +279 -0
- package/src/components/chat/intro-copy.jsonl +75 -0
- package/src/components/chat/intro.tsx +182 -0
- package/src/components/chat/preview-attachment.tsx +125 -0
- package/src/components/chat/shiki-highlighter.tsx +107 -0
- package/src/components/chat/status-row.tsx +70 -0
- package/src/components/chat/status-section.tsx +42 -0
- package/src/components/chat/terminal-output.tsx +50 -0
- package/src/components/chat/zoomable-image.tsx +177 -0
- package/src/components/desktop-install-overlay.tsx +595 -0
- package/src/components/desktop-onboarding-overlay.test.tsx +100 -0
- package/src/components/desktop-onboarding-overlay.tsx +1286 -0
- package/src/components/error-boundary.tsx +77 -0
- package/src/components/gateway-connecting-overlay.test.tsx +143 -0
- package/src/components/gateway-connecting-overlay.tsx +183 -0
- package/src/components/haptics-provider.tsx +19 -0
- package/src/components/language-switcher.test.tsx +53 -0
- package/src/components/language-switcher.tsx +175 -0
- package/src/components/model-picker.tsx +340 -0
- package/src/components/model-visibility-dialog.tsx +155 -0
- package/src/components/notifications.tsx +196 -0
- package/src/components/page-loader.tsx +34 -0
- package/src/components/pane-shell/context.ts +14 -0
- package/src/components/pane-shell/index.ts +4 -0
- package/src/components/pane-shell/pane-shell.test.tsx +333 -0
- package/src/components/pane-shell/pane-shell.tsx +330 -0
- package/src/components/prompt-overlays.tsx +234 -0
- package/src/components/session-picker.tsx +108 -0
- package/src/components/status-dot.tsx +26 -0
- package/src/components/ui/action-status.tsx +25 -0
- package/src/components/ui/alert.tsx +53 -0
- package/src/components/ui/badge.tsx +35 -0
- package/src/components/ui/braille-spinner.tsx +61 -0
- package/src/components/ui/button.tsx +81 -0
- package/src/components/ui/checkbox.tsx +27 -0
- package/src/components/ui/codicon.tsx +20 -0
- package/src/components/ui/command.tsx +111 -0
- package/src/components/ui/confirm-dialog.tsx +109 -0
- package/src/components/ui/context-menu.tsx +141 -0
- package/src/components/ui/control.ts +25 -0
- package/src/components/ui/copy-button.test.tsx +36 -0
- package/src/components/ui/copy-button.tsx +229 -0
- package/src/components/ui/dialog.tsx +152 -0
- package/src/components/ui/disclosure-caret.tsx +20 -0
- package/src/components/ui/dropdown-menu.tsx +291 -0
- package/src/components/ui/error-state.tsx +50 -0
- package/src/components/ui/fade-text.tsx +110 -0
- package/src/components/ui/glyph-spinner.tsx +63 -0
- package/src/components/ui/input.tsx +22 -0
- package/src/components/ui/kbd.tsx +37 -0
- package/src/components/ui/loader.tsx +558 -0
- package/src/components/ui/log-view.tsx +17 -0
- package/src/components/ui/pagination.tsx +114 -0
- package/src/components/ui/popover.tsx +44 -0
- package/src/components/ui/scroll-area.tsx +43 -0
- package/src/components/ui/search-field.tsx +80 -0
- package/src/components/ui/segmented-control.tsx +51 -0
- package/src/components/ui/select.tsx +92 -0
- package/src/components/ui/separator.tsx +26 -0
- package/src/components/ui/sheet.tsx +116 -0
- package/src/components/ui/sidebar.tsx +674 -0
- package/src/components/ui/skeleton.tsx +7 -0
- package/src/components/ui/switch.tsx +49 -0
- package/src/components/ui/tabs.tsx +36 -0
- package/src/components/ui/text-tab.tsx +43 -0
- package/src/components/ui/textarea.tsx +11 -0
- package/src/components/ui/tool-icon.tsx +65 -0
- package/src/components/ui/tooltip.tsx +69 -0
- package/src/fonts/JetBrainsMono-Bold.woff2 +0 -0
- package/src/fonts/JetBrainsMono-Italic.woff2 +0 -0
- package/src/fonts/JetBrainsMono-Regular.woff2 +0 -0
- package/src/global.d.ts +457 -0
- package/src/hooks/use-image-download.ts +85 -0
- package/src/hooks/use-media-query.ts +24 -0
- package/src/hooks/use-mobile.ts +3 -0
- package/src/hooks/use-resize-observer.ts +38 -0
- package/src/hooks/use-worktree-info.ts +68 -0
- package/src/i18n/catalog.ts +12 -0
- package/src/i18n/context.test.tsx +232 -0
- package/src/i18n/context.tsx +183 -0
- package/src/i18n/define-locale.ts +41 -0
- package/src/i18n/en.ts +1779 -0
- package/src/i18n/index.ts +20 -0
- package/src/i18n/ja.ts +1890 -0
- package/src/i18n/languages.test.ts +43 -0
- package/src/i18n/languages.ts +86 -0
- package/src/i18n/runtime.test.ts +75 -0
- package/src/i18n/runtime.ts +53 -0
- package/src/i18n/types.ts +1452 -0
- package/src/i18n/zh-hant.ts +1849 -0
- package/src/i18n/zh.ts +1923 -0
- package/src/lib/ansi.test.ts +123 -0
- package/src/lib/ansi.ts +175 -0
- package/src/lib/chat-messages.test.ts +708 -0
- package/src/lib/chat-messages.ts +885 -0
- package/src/lib/chat-runtime.test.ts +18 -0
- package/src/lib/chat-runtime.ts +335 -0
- package/src/lib/clipboard.ts +28 -0
- package/src/lib/commit-changelog.test.ts +114 -0
- package/src/lib/commit-changelog.ts +177 -0
- package/src/lib/completion-sound.ts +519 -0
- package/src/lib/desktop-fs.test.ts +116 -0
- package/src/lib/desktop-fs.ts +113 -0
- package/src/lib/desktop-slash-commands.test.ts +126 -0
- package/src/lib/desktop-slash-commands.ts +286 -0
- package/src/lib/embedded-images.test.ts +35 -0
- package/src/lib/embedded-images.ts +60 -0
- package/src/lib/external-link.test.tsx +168 -0
- package/src/lib/external-link.tsx +303 -0
- package/src/lib/gateway-events.test.ts +27 -0
- package/src/lib/gateway-events.ts +49 -0
- package/src/lib/gateway-ws-url.test.ts +78 -0
- package/src/lib/gateway-ws-url.ts +91 -0
- package/src/lib/generated-images.test.ts +97 -0
- package/src/lib/generated-images.ts +116 -0
- package/src/lib/haptics.ts +129 -0
- package/src/lib/icons.ts +203 -0
- package/src/lib/incremental-external-store-runtime.ts +188 -0
- package/src/lib/katex-memo.ts +260 -0
- package/src/lib/keybinds/actions.ts +125 -0
- package/src/lib/keybinds/combo.test.ts +86 -0
- package/src/lib/keybinds/combo.ts +169 -0
- package/src/lib/local-preview.ts +126 -0
- package/src/lib/markdown-code.test.ts +23 -0
- package/src/lib/markdown-code.ts +195 -0
- package/src/lib/markdown-preprocess.ts +386 -0
- package/src/lib/media.remote.test.ts +58 -0
- package/src/lib/media.ts +111 -0
- package/src/lib/model-status-label.test.ts +31 -0
- package/src/lib/model-status-label.ts +103 -0
- package/src/lib/mutable-ref.ts +6 -0
- package/src/lib/preview-targets.test.ts +27 -0
- package/src/lib/preview-targets.ts +63 -0
- package/src/lib/profile-color.ts +58 -0
- package/src/lib/provider-setup-errors.test.ts +26 -0
- package/src/lib/provider-setup-errors.ts +12 -0
- package/src/lib/query-client.ts +13 -0
- package/src/lib/remend-tail.test.ts +105 -0
- package/src/lib/remend-tail.ts +108 -0
- package/src/lib/runtime-readiness.test.ts +65 -0
- package/src/lib/runtime-readiness.ts +147 -0
- package/src/lib/session-export.ts +57 -0
- package/src/lib/session-search.test.ts +58 -0
- package/src/lib/session-search.ts +19 -0
- package/src/lib/session-source.ts +62 -0
- package/src/lib/speech-text.ts +35 -0
- package/src/lib/statusbar.ts +91 -0
- package/src/lib/storage.test.ts +25 -0
- package/src/lib/storage.ts +107 -0
- package/src/lib/todos.test.ts +35 -0
- package/src/lib/todos.ts +51 -0
- package/src/lib/tool-result-summary.test.ts +106 -0
- package/src/lib/tool-result-summary.ts +467 -0
- package/src/lib/update-copy.test.ts +38 -0
- package/src/lib/update-copy.ts +44 -0
- package/src/lib/use-enter-animation.ts +100 -0
- package/src/lib/utils.ts +6 -0
- package/src/lib/voice-playback.ts +128 -0
- package/src/lib/yolo-session.ts +26 -0
- package/src/main.tsx +43 -0
- package/src/nastech.test.ts +49 -0
- package/src/nastech.ts +718 -0
- package/src/store/activity.ts +100 -0
- package/src/store/boot.ts +91 -0
- package/src/store/clarify.test.ts +81 -0
- package/src/store/clarify.ts +69 -0
- package/src/store/command-palette.ts +20 -0
- package/src/store/compaction.test.ts +53 -0
- package/src/store/compaction.ts +38 -0
- package/src/store/completion-sound.ts +32 -0
- package/src/store/composer-input-history.test.ts +147 -0
- package/src/store/composer-input-history.ts +158 -0
- package/src/store/composer-queue.test.ts +148 -0
- package/src/store/composer-queue.ts +239 -0
- package/src/store/composer-status.test.ts +99 -0
- package/src/store/composer-status.ts +277 -0
- package/src/store/composer.test.ts +106 -0
- package/src/store/composer.ts +184 -0
- package/src/store/cron.ts +19 -0
- package/src/store/gateway.ts +290 -0
- package/src/store/haptics.ts +17 -0
- package/src/store/keybinds.ts +139 -0
- package/src/store/layout.ts +176 -0
- package/src/store/model-presets.test.ts +51 -0
- package/src/store/model-presets.ts +86 -0
- package/src/store/model-visibility.test.ts +37 -0
- package/src/store/model-visibility.ts +108 -0
- package/src/store/native-notifications.test.ts +192 -0
- package/src/store/native-notifications.ts +203 -0
- package/src/store/notifications.ts +165 -0
- package/src/store/onboarding.test.ts +372 -0
- package/src/store/onboarding.ts +866 -0
- package/src/store/panes.test.ts +146 -0
- package/src/store/panes.ts +145 -0
- package/src/store/preview.test.ts +135 -0
- package/src/store/preview.ts +466 -0
- package/src/store/profile.test.ts +89 -0
- package/src/store/profile.ts +365 -0
- package/src/store/prompts.test.ts +121 -0
- package/src/store/prompts.ts +115 -0
- package/src/store/session-switcher.test.ts +115 -0
- package/src/store/session-switcher.ts +128 -0
- package/src/store/session-sync.ts +25 -0
- package/src/store/session.test.ts +131 -0
- package/src/store/session.ts +255 -0
- package/src/store/subagents.test.ts +111 -0
- package/src/store/subagents.ts +260 -0
- package/src/store/thread-scroll.ts +46 -0
- package/src/store/todos.test.ts +47 -0
- package/src/store/todos.ts +64 -0
- package/src/store/tool-diffs.ts +23 -0
- package/src/store/tool-dismiss.ts +45 -0
- package/src/store/tool-view.ts +91 -0
- package/src/store/translucency.ts +38 -0
- package/src/store/updates.test.ts +77 -0
- package/src/store/updates.ts +315 -0
- package/src/store/voice-playback.ts +24 -0
- package/src/store/windows.test.ts +143 -0
- package/src/store/windows.ts +77 -0
- package/src/styles.css +1235 -0
- package/src/themes/color.ts +142 -0
- package/src/themes/context.tsx +339 -0
- package/src/themes/index.ts +3 -0
- package/src/themes/install.test.ts +119 -0
- package/src/themes/install.ts +95 -0
- package/src/themes/presets.test.ts +33 -0
- package/src/themes/presets.ts +293 -0
- package/src/themes/profile-theme.test.ts +41 -0
- package/src/themes/types.ts +66 -0
- package/src/themes/use-skin-command.ts +60 -0
- package/src/themes/user-themes.test.ts +63 -0
- package/src/themes/user-themes.ts +122 -0
- package/src/themes/vscode.test.ts +171 -0
- package/src/themes/vscode.ts +343 -0
- package/src/types/nastech.ts +646 -0
- package/src/vite-env.d.ts +1 -0
- package/tsconfig.json +25 -0
- package/vite.config.ts +56 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Hard reload the Electron renderer over CDP. Vite-no-HMR mode means edits
|
|
2
|
+
// don't auto-apply — call this after editing source.
|
|
3
|
+
const targets = await (await fetch('http://127.0.0.1:9222/json')).json()
|
|
4
|
+
const t = targets.find((t) => t.url.includes('5174'))
|
|
5
|
+
if (!t) {
|
|
6
|
+
console.error('renderer not found')
|
|
7
|
+
process.exit(1)
|
|
8
|
+
}
|
|
9
|
+
const ws = new WebSocket(t.webSocketDebuggerUrl)
|
|
10
|
+
let id = 0
|
|
11
|
+
const pending = new Map()
|
|
12
|
+
ws.addEventListener('message', (ev) => {
|
|
13
|
+
const m = JSON.parse(ev.data)
|
|
14
|
+
if (pending.has(m.id)) {
|
|
15
|
+
pending.get(m.id)(m)
|
|
16
|
+
pending.delete(m.id)
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
await new Promise((r) => ws.addEventListener('open', r))
|
|
20
|
+
const send = (method, params = {}) =>
|
|
21
|
+
new Promise((res) => {
|
|
22
|
+
const i = ++id
|
|
23
|
+
pending.set(i, res)
|
|
24
|
+
ws.send(JSON.stringify({ id: i, method, params }))
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
await send('Page.reload', { ignoreCache: true })
|
|
28
|
+
console.log('reload sent')
|
|
29
|
+
// Wait for new doc.
|
|
30
|
+
await new Promise((r) => setTimeout(r, 2500))
|
|
31
|
+
const r = await send('Runtime.evaluate', {
|
|
32
|
+
expression: 'JSON.stringify({ hasProbe: !!window.__PERF_PROBE__, composer: !!document.querySelector("[contenteditable=true]"), url: location.hash })',
|
|
33
|
+
returnByValue: true,
|
|
34
|
+
})
|
|
35
|
+
console.log(r.result.result.value)
|
|
36
|
+
ws.close()
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// set-exe-identity.cjs — stamp the NasTech icon + version metadata onto the
|
|
3
|
+
// built NasTech.exe using rcedit, completely decoupled from electron-builder's
|
|
4
|
+
// signing path.
|
|
5
|
+
//
|
|
6
|
+
// WHY THIS EXISTS
|
|
7
|
+
// ---------------
|
|
8
|
+
// apps/desktop/package.json sets build.win.signAndEditExecutable=false. That
|
|
9
|
+
// flag is load-bearing: turning electron-builder's own exe-editing ON also
|
|
10
|
+
// re-enables its signtool step, which fetches winCodeSign-2.6.0.7z, whose
|
|
11
|
+
// macOS symlinks crash 7-Zip on non-admin Windows (no Developer Mode = no
|
|
12
|
+
// SeCreateSymbolicLinkPrivilege). That is an unfixable dead end — we do NOT
|
|
13
|
+
// try to extract winCodeSign.
|
|
14
|
+
//
|
|
15
|
+
// The cost of disabling signAndEditExecutable is that electron-builder also
|
|
16
|
+
// skips rcedit, so the unpacked NasTech.exe keeps the stock Electron icon and
|
|
17
|
+
// "Electron" taskbar name. This script restores the icon + identity by calling
|
|
18
|
+
// rcedit DIRECTLY. rcedit is a pure PE resource editor: no signing, no certs,
|
|
19
|
+
// no winCodeSign, no symlinks.
|
|
20
|
+
//
|
|
21
|
+
// HOW IT RUNS
|
|
22
|
+
// -----------
|
|
23
|
+
// Primarily as an electron-builder `afterPack` hook (scripts/after-pack.cjs),
|
|
24
|
+
// so EVERY packed build — first install, `nastech desktop`, the installer's
|
|
25
|
+
// --update rebuild, or a dev's manual `npm run pack` — gets a branded exe from
|
|
26
|
+
// one place. Previously this stamp lived only in install.ps1, so the update
|
|
27
|
+
// path (which rebuilds via `nastech desktop --build-only`, never install.ps1)
|
|
28
|
+
// shipped a stock "Electron" exe. Keeping it in afterPack closes that gap.
|
|
29
|
+
//
|
|
30
|
+
// Also runnable standalone for ad-hoc re-stamping:
|
|
31
|
+
// node scripts/set-exe-identity.cjs <path-to-NasTech.exe>
|
|
32
|
+
//
|
|
33
|
+
// Exits 0 on success, non-zero on failure when run as a CLI. As a hook,
|
|
34
|
+
// stampExeIdentity() resolves on success and rejects on failure; the caller
|
|
35
|
+
// (after-pack.cjs) swallows the rejection so a stamp failure never fails an
|
|
36
|
+
// otherwise-good build (worst case: stock icon, not a broken app).
|
|
37
|
+
|
|
38
|
+
const path = require('node:path')
|
|
39
|
+
const fs = require('node:fs')
|
|
40
|
+
|
|
41
|
+
// Stamp the NasTech icon + identity onto `exe`. Resolves on success, throws on
|
|
42
|
+
// failure. `desktopRoot` defaults to this script's package root so the icon and
|
|
43
|
+
// the rcedit dependency resolve regardless of cwd.
|
|
44
|
+
async function stampExeIdentity(exe, desktopRoot = path.resolve(__dirname, '..')) {
|
|
45
|
+
if (!exe || !fs.existsSync(exe)) {
|
|
46
|
+
throw new Error(`target exe not found: ${exe}`)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Icon lives at apps/desktop/assets/icon.ico
|
|
50
|
+
const icon = path.join(desktopRoot, 'assets', 'icon.ico')
|
|
51
|
+
if (!fs.existsSync(icon)) {
|
|
52
|
+
throw new Error(`icon not found: ${icon}`)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// rcedit is a direct devDependency of apps/desktop, so it resolves whether
|
|
56
|
+
// we're run from the desktop dir or the repo root (workspace hoist).
|
|
57
|
+
// rcedit@5 exports a NAMED `rcedit` function (CommonJS: { rcedit }), not a
|
|
58
|
+
// default export.
|
|
59
|
+
const mod = require('rcedit')
|
|
60
|
+
const rcedit = typeof mod === 'function' ? mod : mod.rcedit
|
|
61
|
+
if (typeof rcedit !== 'function') {
|
|
62
|
+
throw new Error(`unexpected rcedit export shape: ${typeof mod} keys=${Object.keys(mod)}`)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
console.log(`[set-exe-identity] stamping ${exe}`)
|
|
66
|
+
console.log(`[set-exe-identity] icon: ${icon}`)
|
|
67
|
+
|
|
68
|
+
await rcedit(exe, {
|
|
69
|
+
icon,
|
|
70
|
+
'version-string': {
|
|
71
|
+
ProductName: 'NasTech',
|
|
72
|
+
FileDescription: 'NasTech',
|
|
73
|
+
CompanyName: 'NasTech',
|
|
74
|
+
LegalCopyright: 'Copyright (c) 2026 NasTech'
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
console.log('[set-exe-identity] done — NasTech icon + identity stamped')
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
module.exports = { stampExeIdentity }
|
|
82
|
+
|
|
83
|
+
// CLI entry point: `node scripts/set-exe-identity.cjs <exe>`.
|
|
84
|
+
if (require.main === module) {
|
|
85
|
+
const exe = process.argv[2]
|
|
86
|
+
if (!exe) {
|
|
87
|
+
console.error('[set-exe-identity] usage: set-exe-identity.cjs <path-to-exe>')
|
|
88
|
+
process.exit(2)
|
|
89
|
+
}
|
|
90
|
+
stampExeIdentity(exe).catch(err => {
|
|
91
|
+
console.error(`[set-exe-identity] ${err.message}`)
|
|
92
|
+
process.exit(1)
|
|
93
|
+
})
|
|
94
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Stage native node-modules dependencies for electron-builder packaging.
|
|
5
|
+
*
|
|
6
|
+
* Workspace dedup hoists `node-pty` into the root `node_modules/`, which
|
|
7
|
+
* electron-builder's default file collector (when `files:` is explicitly set
|
|
8
|
+
* in package.json) cannot reach. The result: packaged builds ship with no
|
|
9
|
+
* .node binaries and PTY initialization fails at runtime ("PTY support is
|
|
10
|
+
* unavailable").
|
|
11
|
+
*
|
|
12
|
+
* Rather than restructure the workspace dedup (would require nohoist /
|
|
13
|
+
* package.json shenanigans and risk breaking dev) or balloon the package
|
|
14
|
+
* with the whole node_modules tree, we copy ONLY the runtime-essential
|
|
15
|
+
* files of the native dep into apps/desktop/build/native-deps/ and ship
|
|
16
|
+
* THAT subtree via extraResources. main.cjs falls back to require()-ing
|
|
17
|
+
* from process.resourcesPath when the hoisted-root require fails.
|
|
18
|
+
*
|
|
19
|
+
* Runs as part of `npm run build`. Idempotent -- always re-stages on each
|
|
20
|
+
* build to pick up native binary updates.
|
|
21
|
+
*
|
|
22
|
+
* Layout note: upstream node-pty (microsoft/node-pty 1.x) is N-API based
|
|
23
|
+
* and ships its prebuilts under `prebuilds/<platform>-<arch>/` instead of
|
|
24
|
+
* `build/Release/`. Its runtime resolver (lib/utils.js) checks
|
|
25
|
+
* build/Release first and falls through to the per-arch prebuilds dir, so
|
|
26
|
+
* shipping only the latter is sufficient for packaged runs. Per-arch
|
|
27
|
+
* staging keeps the resource bundle lean -- we only need the target
|
|
28
|
+
* arch's prebuilt, not all of them.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
const fs = require('node:fs')
|
|
32
|
+
const path = require('node:path')
|
|
33
|
+
|
|
34
|
+
const APP_ROOT = path.resolve(__dirname, '..')
|
|
35
|
+
const REPO_ROOT = path.resolve(APP_ROOT, '..', '..')
|
|
36
|
+
const STAGE_ROOT = path.join(APP_ROOT, 'build', 'native-deps')
|
|
37
|
+
|
|
38
|
+
// The target arch may be overridden by electron-builder via npm_config_arch
|
|
39
|
+
// (e.g. `npm run dist -- --arm64`); fall back to the build host's arch.
|
|
40
|
+
const TARGET_ARCH = process.env.npm_config_arch || process.arch
|
|
41
|
+
const TARGET_PLATFORM = process.platform
|
|
42
|
+
|
|
43
|
+
// Modules to stage. The "from" path is the hoisted location in the workspace
|
|
44
|
+
// root; "to" is the layout we want inside build/native-deps/. The "include"
|
|
45
|
+
// globs (relative to "from") select the runtime-essential files. Anything
|
|
46
|
+
// outside the include list is left behind (source, deps/, scripts/, etc.).
|
|
47
|
+
const NATIVE_DEPS = [
|
|
48
|
+
{
|
|
49
|
+
from: path.join(REPO_ROOT, 'node_modules', 'node-pty'),
|
|
50
|
+
to: path.join(STAGE_ROOT, 'node-pty'),
|
|
51
|
+
include: [
|
|
52
|
+
'package.json',
|
|
53
|
+
'lib/*.js',
|
|
54
|
+
'lib/**/*.js',
|
|
55
|
+
'build/Release/*.node',
|
|
56
|
+
// Per-arch runtime payload. Explicit file types so we don't ship the
|
|
57
|
+
// ~25 MB of .pdb debug symbols that prebuild-install bundles for
|
|
58
|
+
// Windows crash analysis -- not used at runtime, would just bloat
|
|
59
|
+
// the installer.
|
|
60
|
+
`prebuilds/${TARGET_PLATFORM}-${TARGET_ARCH}/*.node`,
|
|
61
|
+
`prebuilds/${TARGET_PLATFORM}-${TARGET_ARCH}/*.dll`,
|
|
62
|
+
`prebuilds/${TARGET_PLATFORM}-${TARGET_ARCH}/*.exe`,
|
|
63
|
+
`prebuilds/${TARGET_PLATFORM}-${TARGET_ARCH}/spawn-helper`,
|
|
64
|
+
`prebuilds/${TARGET_PLATFORM}-${TARGET_ARCH}/conpty/*`
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
function rmrf(target) {
|
|
70
|
+
fs.rmSync(target, { recursive: true, force: true })
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function ensureDir(target) {
|
|
74
|
+
fs.mkdirSync(target, { recursive: true })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function walk(root) {
|
|
78
|
+
const results = []
|
|
79
|
+
const stack = [root]
|
|
80
|
+
while (stack.length) {
|
|
81
|
+
const current = stack.pop()
|
|
82
|
+
let entries
|
|
83
|
+
try {
|
|
84
|
+
entries = fs.readdirSync(current, { withFileTypes: true })
|
|
85
|
+
} catch {
|
|
86
|
+
continue
|
|
87
|
+
}
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
const full = path.join(current, entry.name)
|
|
90
|
+
if (entry.isDirectory()) {
|
|
91
|
+
stack.push(full)
|
|
92
|
+
} else if (entry.isFile()) {
|
|
93
|
+
results.push(full)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return results
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Match a relative path against simple ** and * glob patterns. Implementation
|
|
101
|
+
// is intentionally tiny -- the include lists are small and don't need full
|
|
102
|
+
// minimatch support.
|
|
103
|
+
function matchGlob(rel, pattern) {
|
|
104
|
+
const r = rel.replace(/\\/g, '/')
|
|
105
|
+
const re = new RegExp(
|
|
106
|
+
'^' +
|
|
107
|
+
pattern
|
|
108
|
+
.replace(/\\/g, '/')
|
|
109
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
110
|
+
.replace(/\*\*/g, '__DOUBLE_STAR__')
|
|
111
|
+
.replace(/\*/g, '[^/]*')
|
|
112
|
+
.replace(/__DOUBLE_STAR__/g, '.*') +
|
|
113
|
+
'$'
|
|
114
|
+
)
|
|
115
|
+
return re.test(r)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function stageOne(spec) {
|
|
119
|
+
if (!fs.existsSync(spec.from)) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
`stage-native-deps: source missing at ${spec.from}. Run \`npm install\` ` +
|
|
122
|
+
`at the workspace root first.`
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
rmrf(spec.to)
|
|
126
|
+
ensureDir(spec.to)
|
|
127
|
+
|
|
128
|
+
const files = walk(spec.from)
|
|
129
|
+
let copied = 0
|
|
130
|
+
for (const abs of files) {
|
|
131
|
+
const rel = path.relative(spec.from, abs)
|
|
132
|
+
const included = spec.include.some(g => matchGlob(rel, g))
|
|
133
|
+
if (!included) continue
|
|
134
|
+
const dest = path.join(spec.to, rel)
|
|
135
|
+
ensureDir(path.dirname(dest))
|
|
136
|
+
fs.copyFileSync(abs, dest)
|
|
137
|
+
// node-pty's darwin spawn-helper and the Windows helper binaries
|
|
138
|
+
// (OpenConsole.exe, winpty-agent.exe) are invoked via posix_spawn /
|
|
139
|
+
// CreateProcess at runtime, so they must remain executable in the
|
|
140
|
+
// staged tree. fs.copyFileSync preserves source mode on POSIX, but we
|
|
141
|
+
// re-assert +x defensively for the darwin spawn-helper (no extension
|
|
142
|
+
// means a stripped mode would be silently broken at runtime).
|
|
143
|
+
if (path.basename(rel) === 'spawn-helper' && process.platform !== 'win32') {
|
|
144
|
+
try { fs.chmodSync(dest, 0o755) } catch { /* best-effort */ }
|
|
145
|
+
}
|
|
146
|
+
copied += 1
|
|
147
|
+
}
|
|
148
|
+
console.log(`[stage-native-deps] ${path.relative(APP_ROOT, spec.to)}: ${copied} files`)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function main() {
|
|
152
|
+
rmrf(STAGE_ROOT)
|
|
153
|
+
ensureDir(STAGE_ROOT)
|
|
154
|
+
for (const spec of NATIVE_DEPS) {
|
|
155
|
+
stageOne(spec)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
main()
|